feat(i18n): Complete localization of marketing frontend with react-i18next, prefixed URLs, JSON migrations, and automation
This commit is contained in:
@@ -4,23 +4,52 @@ use Illuminate\Support\Facades\Route;
|
||||
use Inertia\Inertia;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
// Marketing-Seite mit Locale-Prefix
|
||||
Route::get('/lang/{locale}/{namespace}', function ($locale, $namespace) {
|
||||
Log::info('Lang route hit', ['locale' => $locale, 'namespace' => $namespace]);
|
||||
$path = public_path("lang/{$locale}/{$namespace}.json");
|
||||
Log::info('Path checked', ['path' => $path, 'exists' => file_exists($path)]);
|
||||
if (!file_exists($path)) {
|
||||
abort(404);
|
||||
}
|
||||
$content = json_decode(file_get_contents($path), true);
|
||||
Log::info('JSON loaded', ['keys' => array_keys($content ?? [])]);
|
||||
return response()->json($content);
|
||||
})->where(['locale' => 'de|en', 'namespace' => 'marketing|auth']);
|
||||
|
||||
Route::prefix('{locale?}')->where(['locale' => 'de|en'])->middleware('locale')->group(function () {
|
||||
Route::get('/', [\App\Http\Controllers\MarketingController::class, 'index'])->name('marketing');
|
||||
Route::get('/packages', [\App\Http\Controllers\MarketingController::class, 'packagesIndex'])->name('packages');
|
||||
Route::get('/register/{package_id?}', [\App\Http\Controllers\Auth\MarketingRegisterController::class, 'create'])->name('marketing.register');
|
||||
Route::post('/register', [\App\Http\Controllers\Auth\MarketingRegisterController::class, 'store'])->name('marketing.register.store');
|
||||
Route::get('/login', [\App\Http\Controllers\Auth\AuthenticatedSessionController::class, 'create'])->name('login');
|
||||
Route::post('/login', [\App\Http\Controllers\Auth\AuthenticatedSessionController::class, 'store'])->name('login.store');
|
||||
Route::get('/register/{package_id?}', [\App\Http\Controllers\Auth\MarketingRegisterController::class, 'create'])->name('register');
|
||||
Route::post('/register', [\App\Http\Controllers\Auth\MarketingRegisterController::class, 'store'])->name('register.store');
|
||||
Route::post('/logout', [\App\Http\Controllers\Auth\AuthenticatedSessionController::class, 'destroy'])->name('logout');
|
||||
});
|
||||
|
||||
// Fallback for /login (redirect to default locale)
|
||||
Route::get('/login', function () {
|
||||
return redirect('/de/login');
|
||||
})->name('login.fallback');
|
||||
|
||||
// Fallback for /register (redirect to default locale)
|
||||
Route::get('/register', function () {
|
||||
return redirect('/de/register');
|
||||
})->name('register.fallback');
|
||||
|
||||
// Fallback for /logout (redirect to default locale)
|
||||
Route::post('/logout', function () {
|
||||
return redirect('/de/logout');
|
||||
})->name('logout.fallback');
|
||||
|
||||
// Fallback for /packages (redirect to default locale)
|
||||
Route::get('/packages', function () {
|
||||
return redirect('/de/packages');
|
||||
})->name('packages.fallback');
|
||||
|
||||
// Fallback for /blog (redirect to default locale)
|
||||
Route::get('/blog', function () {
|
||||
return redirect('/de/blog');
|
||||
})->name('blog.fallback');
|
||||
// Fallback for /blog (redirect to default locale)
|
||||
Route::get('/blog', function () {
|
||||
return redirect('/de/blog');
|
||||
})->name('blog.fallback');
|
||||
|
||||
// Blog Routes (inside locale group for i18n support)
|
||||
Route::prefix('{locale?}')->where(['locale' => 'de|en'])->middleware('locale')->group(function () {
|
||||
@@ -58,6 +87,7 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
});
|
||||
|
||||
require __DIR__.'/settings.php';
|
||||
// Auth-Routes sind nun in web.php integriert, auth.php nur für andere Auth-Funktionen
|
||||
require __DIR__.'/auth.php';
|
||||
|
||||
// Guest PWA shell for /event and sub-routes
|
||||
@@ -76,6 +106,7 @@ Route::prefix('api/v1')->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken
|
||||
// PayPal IPN webhook
|
||||
Route::post('/webhooks/paypal', [\App\Http\Controllers\PayPalWebhookController::class, 'handle']);
|
||||
|
||||
|
||||
// CSV templates for Super Admin imports
|
||||
Route::get('/super-admin/templates/emotions.csv', function () {
|
||||
$headers = [
|
||||
@@ -110,15 +141,18 @@ Route::get('/super-admin/templates/tasks.csv', function () {
|
||||
|
||||
Route::get('/buy-packages/{package_id}', [\App\Http\Controllers\MarketingController::class, 'buyPackages'])->name('buy.packages');
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/profile', [\App\Http\Controllers\ProfileController::class, 'edit'])->name('user.profile.edit');
|
||||
Route::patch('/profile', [\App\Http\Controllers\ProfileController::class, 'update'])->name('user.profile.update');
|
||||
Route::get('/profile', [\App\Http\Controllers\ProfileController::class, 'index'])->name('profile');
|
||||
Route::get('/profile/account', [\App\Http\Controllers\ProfileController::class, 'account'])->name('profile.account');
|
||||
Route::patch('/profile/account', [\App\Http\Controllers\ProfileController::class, 'account'])->name('profile.account.update');
|
||||
Route::get('/profile/orders', [\App\Http\Controllers\ProfileController::class, 'orders'])->name('profile.orders');
|
||||
});
|
||||
|
||||
Route::get('/marketing/success/{package_id?}', [\App\Http\Controllers\MarketingController::class, 'success'])->name('marketing.success');
|
||||
|
||||
Route::get('{locale}/occasions/{type}', [\App\Http\Controllers\MarketingController::class, 'occasionsType'])
|
||||
->where([
|
||||
'locale' => 'de|en',
|
||||
'type' => 'weddings|birthdays|corporate-events|family-celebrations'
|
||||
])
|
||||
->name('occasions.type');
|
||||
Route::prefix('{locale?}')->where(['locale' => 'de|en'])->middleware('locale')->group(function () {
|
||||
Route::get('/anlaesse/{type}', [\App\Http\Controllers\MarketingController::class, 'occasionsType'])
|
||||
->where([
|
||||
'type' => 'hochzeit|geburtstag|firmenevent'
|
||||
])
|
||||
->name('anlaesse.type');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user