1. Accueil
  2. Articles
4 min de lecture
312 vues

Internationalisation et Traduction dans Laravel : Partie 01 - Les Bases sans Package

Image d'illustration pour Internationalisation et Traduction dans Laravel : Partie 01 - Les Bases sans Package

Dans cette partie 01, nous allons explorer comment implémenter l'internationalisation et la traduction dans une application Laravel en utilisant uniquement les fonctionnalités natives du framework, sans recourir à des packages externes. Cette approche est idéale pour comprendre les fondamentaux et pour les projets où une gestion simple des traductions suffit. Nous verrons comment configurer les fichiers de langue, traduire des chaînes de caractères, gérer les pluriels, et changer de langue dynamiquement, le tout accompagné d'extraits de code explicites. Dans la partie 02, nous passerons à l'étape suivante en utilisant un package pour simplifier et optimiser cette tâche.

1. Configuration de Base

1.1. Fichier de Configuration

Laravel utilise un fichier de configuration config/app.php pour définir la langue par défaut de l'application. Par défaut, la langue est définie sur en (anglais). Vous pouvez la modifier en fonction de vos besoins.

1'locale' => 'fr', // Définir la langue par défaut sur le français
1'locale' => 'fr', // Définir la langue par défaut sur le français

1.2. Langues Disponibles

Vous pouvez également définir les langues disponibles dans votre application en modifiant le fichier config/app.php :

1'available_locales' => [
2 'en' => 'English',
3 'fr' => 'Français',
4 'es' => 'Español',
5],
1'available_locales' => [
2 'en' => 'English',
3 'fr' => 'Français',
4 'es' => 'Español',
5],

2. Structure des Fichiers de Langue

Laravel stocke les fichiers de langue dans le répertoire resources/lang. Chaque langue a son propre sous-répertoire, par exemple resources/lang/fr pour le français.

1// resources/lang/fr/messages.php
2return [
3 'welcome' => 'Bienvenue sur notre application!',
4 'greeting' => 'Bonjour, :name!',
5];
1// resources/lang/fr/messages.php
2return [
3 'welcome' => 'Bienvenue sur notre application!',
4 'greeting' => 'Bonjour, :name!',
5];

2.2. Utilisation des Traductions

Pour utiliser ces traductions dans vos vues ou contrôleurs, utilisez la fonction __() ou l'assistance trans() :

1echo __('messages.welcome'); // Affiche "Bienvenue sur notre application!"
2echo trans('messages.greeting', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"
1echo __('messages.welcome'); // Affiche "Bienvenue sur notre application!"
2echo trans('messages.greeting', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"

3. Traduction des Chaînes de Caractères

3.1. Traduction Simple

Pour traduire une chaîne de caractères simple, utilisez la clé définie dans le fichier de langue :

1// resources/lang/fr/messages.php
2return [
3 'welcome' => 'Bienvenue sur notre application!',
4];
5 
6// Dans une vue
7echo __('messages.welcome'); // Affiche "Bienvenue sur notre application!"
1// resources/lang/fr/messages.php
2return [
3 'welcome' => 'Bienvenue sur notre application!',
4];
5 
6// Dans une vue
7echo __('messages.welcome'); // Affiche "Bienvenue sur notre application!"

3.2. Traduction avec Paramètres

Vous pouvez également passer des paramètres dynamiques dans vos traductions :

1// resources/lang/fr/messages.php
2return [
3 'greeting' => 'Bonjour, :name!',
4];
5 
6// Dans une vue
7echo trans('messages.greeting', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"
1// resources/lang/fr/messages.php
2return [
3 'greeting' => 'Bonjour, :name!',
4];
5 
6// Dans une vue
7echo trans('messages.greeting', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"

4. Gestion des Pluriels

Laravel prend en charge la gestion des pluriels dans les traductions. Pour cela, utilisez la fonction trans_choice() :

1// resources/lang/fr/messages.php
2return [
3 'apples' => '{0} Il n\'y a pas de pommes|{1} Il y a une pomme|[2,*] Il y a :count pommes',
4];
5 
6// Dans une vue
7echo trans_choice('messages.apples', 0); // Affiche "Il n'y a pas de pommes"
8echo trans_choice('messages.apples', 1); // Affiche "Il y a une pomme"
9echo trans_choice('messages.apples', 5, ['count' => 5]); // Affiche "Il y a 5 pommes"
1// resources/lang/fr/messages.php
2return [
3 'apples' => '{0} Il n\'y a pas de pommes|{1} Il y a une pomme|[2,*] Il y a :count pommes',
4];
5 
6// Dans une vue
7echo trans_choice('messages.apples', 0); // Affiche "Il n'y a pas de pommes"
8echo trans_choice('messages.apples', 1); // Affiche "Il y a une pomme"
9echo trans_choice('messages.apples', 5, ['count' => 5]); // Affiche "Il y a 5 pommes"

5. Changement de Langue Dynamique

5.1. Middleware pour Changer la Langue

Vous pouvez créer un middleware pour changer la langue de l'application en fonction de la préférence de l'utilisateur :

1php artisan make:middleware SetLocale
1php artisan make:middleware SetLocale

Ensuite, modifiez le middleware pour définir la langue :

1namespace App\Http\Middleware;
2 
3use Closure;
4use Illuminate\Support\Facades\App;
5 
6class SetLocale
7{
8 public function handle($request, Closure $next)
9 {
10 if (session()->has('locale')) {
11 App::setLocale(session('locale'));
12 }
13 
14 return $next($request);
15 }
16}
1namespace App\Http\Middleware;
2 
3use Closure;
4use Illuminate\Support\Facades\App;
5 
6class SetLocale
7{
8 public function handle($request, Closure $next)
9 {
10 if (session()->has('locale')) {
11 App::setLocale(session('locale'));
12 }
13 
14 return $next($request);
15 }
16}

Enregistrez le middleware dans app/Http/Kernel.php :

1protected $middlewareGroups = [
2 'web' => [
3 // ...
4 \App\Http\Middleware\SetLocale::class,
5 ],
6];
1protected $middlewareGroups = [
2 'web' => [
3 // ...
4 \App\Http\Middleware\SetLocale::class,
5 ],
6];

5.2. Changer la Langue via une Route

1Route::get('locale/{locale}', function ($locale) {
2 if (in_array($locale, config('app.available_locales'))) {
3 session(['locale' => $locale]);
4 }
5 
6 return redirect()->back();
7});
1Route::get('locale/{locale}', function ($locale) {
2 if (in_array($locale, config('app.available_locales'))) {
3 session(['locale' => $locale]);
4 }
5 
6 return redirect()->back();
7});

6. Utilisation des Fichiers JSON pour les Traductions

Laravel permet également d'utiliser des fichiers JSON pour les traductions, ce qui est particulièrement utile pour les applications à grande échelle.

6.1. Création d'un Fichier JSON

Créez un fichier JSON dans resources/lang/fr.json :

1{
2 "Welcome to our application!": "Bienvenue sur notre application!",
3 "Hello, :name!": "Bonjour, :name!"
4}
1{
2 "Welcome to our application!": "Bienvenue sur notre application!",
3 "Hello, :name!": "Bonjour, :name!"
4}

6.2. Utilisation des Traductions JSON

Pour utiliser ces traductions, utilisez la fonction __() avec la clé correspondante :

1echo __('Welcome to our application!'); // Affiche "Bienvenue sur notre application!"
2echo __('Hello, :name!', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"
1echo __('Welcome to our application!'); // Affiche "Bienvenue sur notre application!"
2echo __('Hello, :name!', ['name' => 'Jean']); // Affiche "Bonjour, Jean!"

7. Conclusion

Laravel offre une prise en charge robuste de l'internationalisation et de la traduction, ce qui facilite la création d'applications multilingues. En suivant les étapes décrites dans cet article, vous pouvez facilement implémenter des fonctionnalités de traduction dans votre application Laravel. Que vous ayez besoin de traductions simples, de gestion des pluriels, ou de changements de langue dynamiques, Laravel a les outils nécessaires pour répondre à vos besoins.

N'oubliez pas de consulter la documentation officielle de Laravel pour plus d'informations et d'exemples détaillés.