Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐘
Intermediaire 20 min Laravel

Internationalisation (i18n) avec Laravel

Internationalisation (i18n) avec Laravel

Pourquoi Internationalisation (i18n) avec Laravel ?

L'Internationalisation (ou i18n en anglais) est un processus essentiel pour les développeurs qui travaillent sur des applications multilingues. En fait, dans un monde où la diversité culturelle et linguistique est omniprésente, le support d'une seule langue peut être une limitation majeure pour votre application.

Un cas d'usage concret serait l'e-commerce. Imaginez que vous runiez un site e-commerce à succès en France mais qui vise maintenant les États-Unis et le Royaume-Uni. Votre produit est populaire, mais vos clients dans ces pays ne comprennent pas la langue française. Ainsi, une application multilingue serait nécessaire pour offrir une expérience utilisateur fluide et compréhensible.

Prerequis

Pour suivre ce tutoriel, vous devrez avoir les éléments suivants :

  • Connaissance de base de Laravel
  • Un environnement de développement local (XAMPP, MAMP ou Docker)
  • PHP 7.4 ou plus tard
  • Composer installé sur votre système

Installation des outils :

composer require laravel/laravel

Concepts fondamentaux

1. Langues et locales dans Laravel

Laravel utilise les termes "locale" et "langue" pour désigner un ensemble de traductions.

  • Locale (locale): C'est le terme utilisé par Laravel pour décrire une langue spécifique, comme fr pour le français ou en pour l'anglais.
  • Langue (language): Il s'agit du nom complet d'une langue, comme "French" pour le français.

2. Structure de traduction

Laravel utilise des fichiers de traduction situés dans le répertoire resources/lang. Chaque locale a son propre dossier. Par exemple :

resources/
└── lang/
    ├── en/
    │   └── messages.php
    └── fr/
        └── messages.php

3. Définition des traductions

Les fichiers de traduction contiennent des tableaux associatifs avec les clés et les valeurs traduites.

// resources/lang/fr/messages.php
return [
    'welcome' => 'Bienvenue',
];

4. Affichage des traductions

Vous pouvez afficher une traduction en utilisant la fonction __ :

<p>__('messages.welcome')</p>

5. Langue par défaut et locale actuelle

Laravel détermine automatiquement la langue de l'utilisateur à partir de son navigateur. Vous pouvez également le définir manuellement dans le fichier .env.

APP_LOCALE=fr

Mise en pratique : projet fil rouge

1. Création du projet

Créeons un petit gestionnaire de tâches multilingue.

composer create-project --prefer-dist laravel/laravel task-manager
cd task-manager
php artisan serve

2. Configuration des locales

Ajoutez les langues supportées dans config/app.php :

'locales' => ['en', 'fr'],

Et définissez la langue par défaut.

'default_locale' => 'fr',

3. Création des fichiers de traduction

Créez les fichiers de traduction pour chaque locale :

touch resources/lang/en/tasks.php
touch resources/lang/fr/tasks.php

Ajoutez quelques traductions :

resources/lang/en/tasks.php

return [
    'create' => 'Create Task',
    'edit' => 'Edit Task',
];

resources/lang/fr/tasks.php

return [
    'create' => 'Créer une tâche',
    'edit' => 'Modifier la tâche',
];

4. Création des routes

Ajoutez les routes pour afficher et modifier les tâches :

routes/web.php

Route::get('/', function () {
    return view('tasks.index');
});

Route::resource('tasks', TaskController::class);

5. Création du contrôleur

Créez le contrôleur TaskController :

php artisan make:controller TaskController

app/Http/Controllers/TaskController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Task;

class TaskController extends Controller
{
    public function index()
    {
        $tasks = Task::all();
        return view('tasks.index', compact('tasks'));
    }

    public function create()
    {
        return view('tasks.create');
    }

    public function store(Request $request)
    {
        Task::create($request->all());
        return redirect()->route('tasks.index')->with('success', __('messages.task_created'));
    }

    public function edit(Task $task)
    {
        return view('tasks.edit', compact('task'));
    }

    public function update(Request $request, Task $task)
    {
        $task->update($request->all());
        return redirect()->route('tasks.index')->with('success', __('messages.task_updated'));
    }
}

6. Création des vues

Créez les vues pour afficher et modifier les tâches.

resources/views/tasks/index.blade.php

@extends('layouts.app')

@section('content')
<h1>__('messages.tasks')</h1>
<a href="route('tasks.create')">__('messages.create_task')</a>

<ul>
    @foreach ($tasks as $task)
        <li>$task->name - $task->description</li>
    @endforeach
</ul>
@endsection

resources/views/tasks/create.blade.php

@extends('layouts.app')

@section('content')
<h1>__('messages.create_task')</h1>

<form action="route('tasks.store')" method="POST">
    @csrf
    <input type="text" name="name" placeholder="__('messages.name')">
    <textarea name="description">__('messages.description')</textarea>
    <button type="submit">__('messages.create')</button>
</form>
@endsection

resources/views/tasks/edit.blade.php

@extends('layouts.app')

@section('content')
<h1>__('messages.edit_task')</h1>

<form action="route('tasks.update', $task->id)" method="POST">
    @csrf
    @method('PUT')
    <input type="text" name="name" value="$task->name">
    <textarea name="description">$task->description</textarea>
    <button type="submit">__('messages.update')</button>
</form>
@endsection

Erreurs frequentes et debugging

1. Erreur : Traduction non trouvée

Message d'erreur :

translation.key_not_found

Code incorrect :

echo __('tasks.non_existent_key');

Code correct :

echo __('tasks.create', [], 'en'); // Spécifiez une locale par défaut

2. Erreur : Traduction mal formée

Message d'erreur :

syntax error, unexpected token

Code incorrect :

return [
    'welcome' => Bienvenue,
];

Code correct :

return [
    'welcome' => 'Bienvenue',
];

3. Erreur : Traduction non mise à jour

Message d'erreur :

translation.missing

Code incorrect :

echo __('messages.welcome');
// messages.php n'est pas mis à jour avec la nouvelle traduction

Code correct :

echo __('messages.welcome', [], 'fr'); // Utilisez une locale spécifique

Pour aller plus loin

1. Gestion des paramètres de langue dans le navigateur

Vous pouvez permettre à l'utilisateur de choisir sa propre langue en utilisant un middleware.

app/Http/Middleware/SetLocale.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class SetLocale
{
    public function handle($request, Closure $next)
    {
        if ($lang = $request->cookie('locale')) {
            App::setLocale($lang);
        }
        return $next($request);
    }
}

Ajoutez ce middleware dans le fichier app/Http/Kernel.php :

protected $middlewareGroups = [
    'web' => [
        // ...
        \App\Http\Middleware\SetLocale::class,
    ],
];

2. Utilisation de packages de traduction tierces

Laravel a des intégrations avec des packages tiers comme laravel-lang.

Installation :

composer require laravel-lang/lang

Ajoutez les locales dans config/app.php :

'locales' => ['en', 'fr'],

3. Gestion de la traduction dynamique

Vous pouvez utiliser des callbacks pour générer des traductions dynamiques.

resources/lang/fr/messages.php

return [
    'greeting' => function ($name) {
        return "Bonjour, $name!";
    },
];

Utilisez-la dans votre vue :

<p>__('messages.greeting', ['name' => Auth::user()->name])</p>

Défi pratique

Créez une application de blog multilingue avec Laravel. Ajoutez des articles, des commentaires et la possibilité de changer de langue via un menu déroulant.

Points à considérer :

  • Utilisation du système de traduction de Laravel
  • Gestion de l'état utilisateur pour sauvegarder sa préférence de langue
  • Création d'articles et de commentaires

Ce tutoriel vous a montré comment mettre en œuvre la internationalisation (i18n) dans un projet Laravel. En suivant les étapes ci-dessus, vous pouvez créer une application multilingue qui répond aux besoins des utilisateurs à travers le monde. N'oubliez pas de tester votre application en changeant régulièrement de langue pour vous assurer que tout fonctionne correctement.

Besoin d'aide sur Laravel ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que l'internationalisation (i18n) dans Laravel?
L'internationalisation (i18n) dans Laravel est un processus qui permet d'adapter une application web pour qu'elle puisse être utilisée par des utilisateurs de différentes langues et régions. Cela inclut la traduction du contenu et le formatage approprié de dates, numéros et autres éléments.
Comment ajouter une nouvelle langue dans un projet Laravel?
Pour ajouter une nouvelle langue dans un projet Laravel, vous devez créer un nouveau dossier de langues dans le répertoire `resources/lang`. Par exemple, pour ajouter le français (`fr`), vous créez un dossier `fr` et y ajoutez les fichiers de traduction nécessaires. Ensuite, vous pouvez configurer la langue par défaut dans le fichier `.env` en définissant `APP_LOCALE=fr`.
Comment utiliser des traductions dans une vue Laravel?
Pour utiliser des traductions dans une vue Laravel, vous utilisez la fonction helper `__()` ou la méthode `@lang` Blade. Par exemple, pour afficher un texte traduit, vous pouvez écrire `{{ __('messages.welcome') }}` dans votre template Blade.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.