Réponse Rapide
Pour localiser une application PHP, utilisez des fichiers de traduction basés sur des tableaux. Stockez les traductions dans des tableaux PHP (/lang/fr/messages.php), créez une fonction helper de traduction et utilisez-la dans toute votre app. Pour les frameworks : Laravel a le helper intégré __('clé'), Symfony utilise le composant Translation, WordPress utilise __('texte', 'domaine'). Cette approche est simple, rapide et fonctionne avec n'importe quelle version PHP.
Configuration de Base : PHP Simple
Créer des Fichiers de Traduction
Structure des répertoires :
/lang
/fr
messages.php
validation.php
/en
messages.php
validation.php
lang/fr/messages.php :
PHP1<?php 2 3return [ 4 'welcome' => 'Bienvenue dans notre application', 5 'goodbye' => 'Au revoir, :name !', 6 'items_count' => '{0} Aucun article|{1} Un article|[2,*] :count articles', 7 8 'auth' => [ 9 'login' => 'Se connecter', 10 'logout' => 'Se déconnecter', 11 'register' => 'S'inscrire', 12 ], 13 14 'nav' => [ 15 'home' => 'Accueil', 16 'about' => 'À Propos', 17 'contact' => 'Contact', 18 ], 19];
Localisation Laravel
Laravel a une localisation intégrée basée sur des tableaux.
Configuration
1. Créer des fichiers de traduction :
/lang
/fr
messages.php
/en
messages.php
2. Configurer la locale par défaut :
PHP1// config/app.php 2 3'locale' => 'fr', 4'fallback_locale' => 'en', 5'available_locales' => ['fr', 'en', 'es', 'de'],
3. Utiliser dans les vues :
PHP1<!-- Template Blade --> 2<h1>{{ __('messages.welcome') }}</h1> 3<p>{{ __('messages.goodbye', ['name' => $user->name]) }}</p> 4 5<!-- Pluralisation --> 6<p>{{ trans_choice('messages.items_count', $count) }}</p>
4. Changer la locale dynamiquement :
PHP1<?php 2 3App::setLocale('fr'); 4$locale = App::getLocale();
Composant de Traduction Symfony
Installation (Autonome)
Terminalcomposer require symfony/translation
Configuration
PHP1<?php 2 3use SymfonyComponentTranslationTranslator; 4use SymfonyComponentTranslationLoaderPhpFileLoader; 5 6$translator = new Translator('fr'); 7$translator->addLoader('php', new PhpFileLoader()); 8$translator->addResource('php', __DIR__ . '/lang/fr/messages.php', 'fr', 'messages'); 9 10echo $translator->trans('welcome', [], 'messages');
Localisation WordPress
Méthode Traditionnelle (Gettext)
PHP1<?php 2 3echo __('Bienvenue sur notre site', 'mon-theme'); 4printf(__('Bonjour, %s !', 'mon-theme'), $nom); 5echo _n('%s article', '%s articles', $count, 'mon-theme');
Formatage des Dates et Nombres
Extension PHP Intl
PHP1<?php 2 3$locale = 'fr_FR'; 4 5// Formatage de date 6$formatter = new IntlDateFormatter( 7 $locale, 8 IntlDateFormatter::LONG, 9 IntlDateFormatter::NONE 10); 11echo $formatter->format(new DateTime()); // "7 février 2026" 12 13// Formatage de nombre 14$numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); 15echo $numberFormatter->format(1234.56); // "1 234,56" 16 17// Formatage de devise 18$currencyFormatter = new NumberFormatter($locale, NumberFormatter::CURRENCY); 19echo $currencyFormatter->formatCurrency(1234.56, 'EUR'); // "1 234,56 €"
Meilleures Pratiques
1. Organiser les Fichiers de Traduction
/lang
/fr
messages.php # Chaînes UI générales
validation.php # Messages de validation
auth.php # Messages d'authentification
2. Utiliser des Tableaux Imbriqués
PHP1<?php 2 3return [ 4 'auth' => [ 5 'login' => 'Se connecter', 6 'logout' => 'Se déconnecter', 7 ], 8]; 9 10// Usage : __('messages.auth.login')
3. Ne Jamais Concaténer les Traductions
PHP1<?php 2 3// ❌ Mauvais 4echo __('messages.welcome') . ' ' . $nom . ' !'; 5 6// ✅ Bon 7echo __('messages.welcome_user', ['name' => $nom]);
Intégration avec IntlPull
Flux de Travail Automatisé
Terminal1# Extraire les chaînes du code 2php artisan intlpull:extract 3 4# Télécharger vers IntlPull 5php artisan intlpull:upload 6 7# Traduire avec IA 8php artisan intlpull:translate 9 10# Télécharger les traductions 11php artisan intlpull:download
Questions Fréquemment Posées
Dois-je utiliser gettext ou des tableaux PHP ?
Utilisez des tableaux PHP pour la plupart des projets. Ils sont plus simples, plus rapides et ne nécessitent pas d'extensions PHP. Utilisez gettext uniquement si vous avez besoin de compatibilité avec des outils existants.
Comment gérer la pluralisation en PHP ?
Utilisez trans_choice() de Laravel ou trans() de Symfony avec le format de message ICU. Pour PHP simple, implémentez un analyseur simple qui gère la syntaxe {0}, {1}, et [2,*].
Conclusion
La localisation PHP est simple avec des traductions basées sur des tableaux.
Récapitulatif rapide :
- Créer des fichiers
/lang/{locale}/messages.php - Retourner des tableaux avec des clés de traduction
- Utiliser la fonction helper
__('clé') - Gérer la pluralisation avec trans_choice()
- Formater les dates/nombres avec l'extension Intl
