Help me een lokalisatiesysteem implementeren in mijn Laravel-toepassing om meerdere talen te beheren.
description
Het implementeren van een lokalisatiesysteem stelt je toepassing in staat een breder publiek te bereiken door meerdere talen te ondersteunen, wat de gebruikerservaring en betrokkenheid verbetert.
prompt
try_prompt
Ik wil een lokalisatiesysteem instellen in mijn Laravel-toepassing om meerdere talen te ondersteunen. Leg uit hoe je taalbestanden configureert, vertalingen beheert voor specifi ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je een lokalisatiesysteem in Laravel opzet voor meertaligheid:
**1. Taalbestanden configureren**
- **Taalmappen maken:**
Plaats je taalbestanden in `resources/lang/`. Laravel ondersteunt per taal een map, bijvoorbeeld:
```
resources/lang/en/
resources/lang/fr/
```
- **Vertalingen toevoegen:**
In elke map maak je PHP-bestanden met associatieve arrays, bijvoorbeeld `messages.php`:
`resources/lang/en/messages.php`
```php
<?php
return [
'welcome' => 'Welcome',
'goodbye' => 'Goodbye',
];
```
`resources/lang/fr/messages.php`
```php
<?php
return [
'welcome' => 'Bienvenue',
'goodbye' => 'Au revoir',
];
```
**2. Vertalingen beheren**
Gebruik de `__('key')` of `@lang('key')` in je views:
```blade
<h1>{{ __('messages.welcome') }}</h1>
```
**3. Taal schakelen op basis van gebruikersvoorkeuren**
- **Taal instellen in middleware of controller:**
Je kunt de taal dynamisch instellen door `App::setLocale()` te gebruiken, bijvoorbeeld op basis van gebruikersvoorkeur:
```php
public function __construct()
{
$preferredLocale = auth()->user()->preferred_language ?? 'en';
App::setLocale($preferredLocale);
}
```
- **Taal in URL's gebruiken:**
Je kunt je routes aanpassen om taalparameter te gebruiken:
```php
Route::get('/{lang}/home', function ($lang) {
App::setLocale($lang);
return view('home');
});
```
**4. Voorbeeld implementatie in routes en views**
- **In routes:**
```php
Route::group(['prefix' => '{lang}'], function () {
Route::get('/home', function ($lang) {
App::setLocale($lang);
return view('home');
});
});
```
- **In Blade-views:**
```blade
<p>{{ __('messages.welcome') }}</p>
```
**Samenvatting:**
- Maak taalmappen met vertalingen.
- Gebruik `__()` of `@lang()` in je views.
- Stel de taal in dynamisch via `App::setLocale()` op basis van URL, gebruikersvoorkeuren of sessies.
- Pas routes aan om taal te ondersteunen en te wisselen.
Wil je nog een voorbeeld van taalkeuzeknop of automatische detectie?
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide uitleg over het implementeren van lokalisatie in Laravel:
## 1. Configuratie van taalbestanden
### Basisstructuur
Maak eerst de mappenstructuur voor taalbestanden aan:
```
resources/lang/
├── en/
│ ├── messages.php
│ └── validation.php
└── fr/
├── messages.php
└── validation.php
```
### Configuratie in config/app.php
```php
'locale' => 'en',
'fallback_locale' => 'en',
'available_locales' => ['en', 'fr'],
```
## 2. Taalbestanden aanmaken
### Engels (resources/lang/en/messages.php)
```php
<?php
return [
'welcome' => 'Welcome to our application',
'greeting' => 'Hello, :name!',
'products' => [
'title' => 'Our Products',
'description' => 'Discover our amazing products'
],
'cart' => [
'empty' => 'Your cart is empty',
'items' => '{0} No items|{1} 1 item|[2,*] :count items'
]
];
```
### Frans (resources/lang/fr/messages.php)
```php
<?php
return [
'welcome' => 'Bienvenue dans notre application',
'greeting' => 'Bonjour, :name !',
'products' => [
'title' => 'Nos Produits',
'description' => 'Découvrez nos produits exceptionnels'
],
'cart' => [
'empty' => 'Votre panier est vide',
'items' => '{0} Aucun article|{1} 1 article|[2,*] :count articles'
]
];
```
## 3. Vertalingen gebruiken
### In Views (Blade templates)
```blade
{{-- Basis vertaling --}}
<h1>@lang('messages.welcome')</h1>
{{-- Met parameters --}}
<p>{{ __('messages.greeting', ['name' => $user->name]) }}</p>
{{-- Geneste keys --}}
<h2>@lang('messages.products.title')</h2>
{{-- Meervoudsvormen --}}
<p>{{ trans_choice('messages.cart.items', $itemCount) }}</p>
{{-- Met fallback --}}
<p>{{ __('messages.non_existent_key', [], 'en') }}</p>
```
### In PHP Code
```php
// Basis vertaling
$welcome = __('messages.welcome');
// Met parameters
$greeting = trans('messages.greeting', ['name' => 'John']);
// Meervoudsvorm
$itemCount = 5;
$cartText = trans_choice('messages.cart.items', $itemCount);
```
## 4. Taalschakelaar implementeren
### Middleware aanmaken
```php
// app/Http/Middleware/LocalizationMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class LocalizationMiddleware
{
public function handle(Request $request, Closure $next)
{
// 1. Check URL parameter
if ($request->has('lang')) {
$locale = $request->get('lang');
Session::put('locale', $locale);
}
// 2. Check session
elseif (Session::has('locale')) {
$locale = Session::get('locale');
}
// 3. Check browser language
else {
$locale = $request->getPreferredLanguage(['en', 'fr']);
}
// Valideer en stel locale in
if (in_array($locale, ['en', 'fr'])) {
App::setLocale($locale);
}
return $next($request);
}
}
```
### Middleware registreren
```php
// app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
// ... andere middleware
\App\Http\Middleware\LocalizationMiddleware::class,
],
];
```
### Taalschakelaar in view
```blade
{{-- Taalkeuze dropdown --}}
<div class="language-switcher">
<form method="GET" action="{{ route('change-locale') }}">
<select name="lang" onchange="this.form.submit()">
<option value="en" {{ app()->getLocale() == 'en' ? 'selected' : '' }}>English</option>
<option value="fr" {{ app()->getLocale() == 'fr' ? 'selected' : '' }}>Français</option>
</select>
</form>
</div>
{{-- Of met links --}}
<div>
<a href="{{ route('locale', 'en') }}" class="{{ app()->getLocale() == 'en' ? 'active' : '' }}">EN</a>
<a href="{{ route('locale', 'fr') }}" class="{{ app()->getLocale() == 'fr' ? 'active' : '' }}">FR</a>
</div>
```
## 5. Gelokaliseerde routes
### Route definitions
```php
// routes/web.php
Route::group(['prefix' => '{locale}', 'where' => ['locale' => 'en|fr']], function () {
Route::get('/', function ($locale) {
App::setLocale($locale);
return view('welcome');
})->name('home');
Route::get('/about', function ($locale) {
App::setLocale($locale);
return view('about');
})->name('about');
Route::get('/products', [ProductController::class, 'index'])->name('products');
});
// Taalwissel route
Route::get('/change-locale/{locale}', function ($locale) {
if (!in_array($locale, ['en', 'fr'])) {
abort(400);
}
session(['locale' => $locale]);
return redirect()->back();
})->name('change-locale');
```
### Route helpers in views
```blade
{{-- Genereer gelokaliseerde URLs --}}
<a href="{{ route('home', ['locale' => app()->getLocale()]) }}">Home</a>
<a href="{{ route('about', ['locale' => 'en']) }}">About (EN)</a>
<a href="{{ route('about', ['locale' => 'fr']) }}">About (FR)</a>
{{-- Dynamische links behouden huidige taal --}}
<a href="{{ route('products', ['locale' => app()->getLocale()]) }}">
@lang('messages.products.title')
</a>
```
## 6. Geavanceerde voorbeelden
### Database vertalingen (optioneel)
```php
// Voor als je vertalingen in de database wilt opslaan
class Translation extends Model
{
public static function get($key, $locale = null)
{
$locale = $locale ?: app()->getLocale();
return static::where('key', $key)
->where('locale', $locale)
->value('value') ?? $key;
}
}
```
### JSON vertalingen voor JavaScript
```php
// resources/lang/en.json
{
"Welcome": "Welcome",
"Loading": "Loading..."
}
// resources/lang/fr.json
{
"Welcome": "Bienvenue",
"Loading": "Chargement..."
}
```
Dit systeem biedt een complete lokalisatie-oplossing voor je Laravel applicatie met ondersteuning voor meerdere talen, dynamische taalwisseling en geoptimaliseerde route-structuur.

