Internationalisation PHP (i18n) : Guide pratique pour développeurs

Yee
Aug 03, 2024

Faites passer votre site PHP à l’international : une solution d’internationalisation plus efficace
Si, comme moi, vous maintenez des projets PHP « vanilla » qui ne reposent pas sur de gros frameworks (comme Laravel ou Symfony), alors le support multilingue (i18n) a sûrement toujours été un petit casse-tête.
La solution traditionnelle, gettext
, bien que puissante, est assez lourde à configurer. Surtout pour les petits projets, on a l’impression d’« utiliser un marteau-piqueur pour casser une noisette ». Ce qu’il nous faut vraiment, c’est une méthode qu’on peut mettre en place rapidement, sans ajouter trop de complexité.
Après de nombreux essais et erreurs sur plusieurs projets, nous avons mis au point une solution d’internationalisation légère basée sur des fichiers de tableaux PHP et des outils de traduction en ligne. Cette approche est non seulement simple à déployer, mais elle a aussi des coûts de maintenance extrêmement faibles. Aujourd’hui, je partage toute cette solution avec vous, sans aucune contrepartie.
Guide pratique : comment j’ai réussi le support multilingue PHP avec O.Translator
Notre idée de base est très simple : chaque langue correspond à un fichier PHP, qui contient une instruction return
renvoyant un tableau associatif. Cette méthode est simple, intuitive et n’a quasiment aucun impact sur les performances.
Étape 1 : Planifiez la structure de vos répertoires
Une structure de répertoires claire, c’est déjà la moitié du boulot. Pour garder tout bien organisé, on va placer tous les fichiers de langue dans le même dossier et les nommer avec des codes de langue, comme ceci :
project_root/
├── index.php // Your main logic file
├── i18n/ // Folder for all language files
│ ├── lang.cn.php // Chinese language pack
│ ├── lang.en.php // English language pack
│ └── lang.fr.php // French language pack
Étape 2 : Créez votre « arsenal de langues »
Ensuite, on crée le fichier de langue de base. Prenons le chinois comme exemple et créons un fichier lang.cn.php
. Le contenu du fichier est un simple tableau PHP, où les clés sont des identifiants uniques et les valeurs sont les chaînes de texte correspondantes.
Exemple de lang.cn.php : les clés restent identiques, seules les valeurs changent selon la langue
Étape 3 : Passez à l’assistant de traduction, O.Translator
Traduire manuellement des dizaines ou des centaines d’entrées ? C’est exactement le genre de boulot répétitif que les développeurs détestent. C’est là que notre arme secrète, O.Translator, entre en scène.
C’est une plateforme professionnelle de traduction de documents en ligne qui gère parfaitement les fichiers PHP, ce qui lui permet de lire directement votre tableau et de le traduire dans plus de 70 langues.
Le processus est d’une simplicité déconcertante :
- Rendez-vous sur la page d’accueil d’O.Translator et importez votre fichier de langue de base (par exemple,
lang.cn.php
). - Sélectionnez vos langues cibles, comme l’anglais et le français.
- Cliquez sur Traduire, patientez un instant, et vos fichiers traduits
lang.en.php
etlang.fr.php
seront prêts.
Ce qui m’a le plus impressionné, c’est qu’O.Translator vous permet de prévisualiser une partie de la traduction gratuitement. Si le résultat vous convient, vous pouvez alors décider de payer pour la traduction complète. Pour reprendre leurs mots : « Ne payez jamais pour un produit dont vous n’êtes pas satisfait. »
Étape 4 : Donnez vie au code
Tout est prêt ; il ne reste plus qu’à ajouter la touche finale. Maintenant, modifions le fichier principal index.php
pour qu’il puisse charger dynamiquement le pack de langue approprié selon la sélection de l’utilisateur.
<?php
// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
Dans votre template HTML, vous pouvez ensuite facilement appeler les chaînes de texte comme ceci :
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
<meta charset="UTF-8">
<title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
<header>
<h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
<nav>
<ul>
<li><?php echo htmlspecialchars($_['heading_about']); ?></li>
<li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
</ul>
</nav>
</header>
</body>
</html>
Et voilà—un site multilingue tout simple est né!
Considérations et réflexion avancée
Même si cette solution est légère, il y a quelques points à prendre en compte avant de la déployer en production :
- Comment détecter la langue de l'utilisateur ? L'exemple utilise un paramètre GET comme
?lang=en
. Dans une application réelle, vous pouvez aussi utiliser$_SESSION
,$_COOKIE
, ou analyser l'en-tête de requêteAccept-Language
du navigateur pour une détection automatique. - Considérations de performance : Pour les sites de petite à moyenne taille, la surcharge de
require_once
d'un fichier PHP à chaque requête est négligeable. Si votre site a beaucoup de trafic, pensez à utiliser des technologies de cache de bytecode comme APC ou OPcache pour optimiser encore plus. - Scalabilité : Quand le nombre de langues ou de chaînes de texte augmente, gérer les fichiers à la main peut devenir compliqué. À ce stade, il peut être intéressant d'explorer des solutions i18n plus professionnelles, comme l'extension gettext de PHP ou les composants de localisation proposés par les frameworks.
- Cohérence des traductions : Pour garantir la cohérence des noms de marque et de la terminologie sur toutes les versions linguistiques, il est vivement recommandé d’utiliser la fonction Glossaire d’O.Translator.
- Stratégie globale : Cet article se concentre sur la mise en œuvre technique. Si vous souhaitez en savoir plus sur la stratégie globale d’internationalisation de sites web, vous pouvez consulter notre autre article détaillé.