PHP code example of mikemenard / laravel-localization

1. Go to this page and download the library: Download mikemenard/laravel-localization library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

mikemenard / laravel-localization example snippets


use Mikemenard\Localization\Middleware\Localize;

return Application::configure(basePath: dirname(__DIR__))
    ->withMiddleware(function (Middleware $middleware): void {
        $middleware->web(prepend: [
            Localize::class,
        ]);
    })
    // ...

return [
    'supported_locales' => [
        'en' => ['label' => 'English', 'language' => 'en'],
        'fr-ca' => ['label' => 'Français', 'language' => 'fr'],
        'es' => ['label' => 'Español', 'language' => 'es'],
    ],

    'route_parameter' => 'locale',

    'locale_class' => \Mikemenard\Localization\Locale::class,
];

use Illuminate\Support\Facades\Route;

// Root redirect to localized homepage
Route::get('/', fn() => redirect('/'.Localization::resolveLocale()));

// Localized routes
Route::localized(function () {
    Route::get('/', fn() => view('welcome'));
    Route::get('/about', fn() => view('about'));
    Route::get('/contact', fn() => view('contact'));
});

'supported_locales' => [
    'en' => [
        'label' => 'English',
        'language' => 'en',
    ],
    'fr-ca' => [
        'label' => 'Français',
        'language' => 'fr',
    ],
    'es' => [
        'label' => 'Español',
        'language' => 'es',
    ],
],

'en' => [
    'label' => 'English',
    'language' => 'en',
    'flag' => 'πŸ‡¬πŸ‡§',
    'direction' => 'ltr',
    'currency' => 'USD',
],

'route_parameter' => 'locale', // Default

// Or use a different name:
'route_parameter' => 'lang',

'locale_class' => \App\Localization\CustomLocale::class,

namespace App\Localization;

use Mikemenard\Localization\Locale;

class CustomLocale extends Locale
{
    public function displayName(): string
    {
        return strtoupper($this->label);
    }

    public function flagEmoji(): string
    {
        return $this->flag ?? '🏳️';
    }
}

Route::localized(function () {
    Route::get('/', HomeController::class);
    Route::get('/products', ProductController::class);
});

Route::localized(function () {
    Route::get('/', fn() => view('home'));
    Route::get('/about', fn() => view('about'));
});

Route::prefix('{locale}')
    ->middleware(\Mikemenard\Localization\Middleware\EnforceLocale::class)
    ->group(function () {
        Route::get('/', fn() => view('home'));
        Route::get('/about', fn() => view('about'));
    });

Route::localized()
    ->middleware('auth')
    ->group(function () {
        Route::get('/dashboard', DashboardController::class);
        Route::get('/profile', ProfileController::class);
    });

Route::localized()
    ->middleware(['auth', 'verified'])
    ->group(function () {
        Route::resource('posts', PostController::class);
    });

Route::localized()
    ->name('admin.')
    ->prefix('admin')
    ->middleware('auth')
    ->group(function () {
        Route::get('/dashboard', DashboardController::class)->name('dashboard');
        // Route name: admin.dashboard
        // URL: /en/admin/dashboard
    });

Route::prefix('{locale}')
    ->middleware(\Mikemenard\Localization\Middleware\EnforceLocale::class)
    ->group(function () {
        // Your routes
    });

'supported_locales' => [
    'en' => [
        'label' => 'English',
        'language' => 'en',
        'flag' => 'πŸ‡¬πŸ‡§',
        'direction' => 'ltr',
        'currency' => 'USD',
        'date_format' => 'Y-m-d',
    ],
    'fr' => [
        'label' => 'Français',
        'language' => 'fr',
        'flag' => 'πŸ‡«πŸ‡·',
        'direction' => 'ltr',
        'currency' => 'EUR',
        'date_format' => 'd/m/Y',
    ],
    'ar' => [
        'label' => 'Ψ§Ω„ΨΉΨ±Ψ¨ΩŠΨ©',
        'language' => 'ar',
        'flag' => 'πŸ‡ΈπŸ‡¦',
        'direction' => 'rtl',
        'currency' => 'SAR',
        'date_format' => 'd/m/Y',
    ],
],

namespace App\Localization;

use Mikemenard\Localization\Locale as BaseLocale;

class CustomLocale extends BaseLocale
{
    public function uppercaseLabel(): string
    {
        return strtoupper($this->label);
    }

    public function isRtl(): bool
    {
        return $this->direction === 'rtl';
    }

    public function flagEmoji(): string
    {
        return $this->flag ?? '🏳️';
    }

    public function formattedDate(\DateTime $date): string
    {
        return $date->format($this->date_format);
    }
}

'locale_class' => \App\Localization\CustomLocale::class,

use Mikemenard\Localization\Facades\Localization;

Localization::supported(); // ['en', 'fr', 'es']

Localization::getLocales()->each(function ($locale) {
    echo $locale->code . ': ' . $locale->label;
});

$current = Localization::currentLocale();
echo $current->label; // 'English'

Localization::setLocale('fr'); // Returns 'fr'
Localization::setLocale($localeObject); // Also accepts Locale objects

Localization::isSupported('fr'); // true
Localization::isSupported('de'); // false
Localization::isSupported(null); // false

Localization::isCurrentLocale('en'); // true if current locale is 'en'

// Current URL: /en/products?sort=price
Localization::localizeCurrentUrl('fr'); // '/fr/products?sort=price'

$locale = Localization::resolveLocale(); // 'fr' (from session or browser)

Localization::getRouteParameter(); // 'locale'

Localization::isCanonical('en'); // true
Localization::isCanonical('en_US'); // false (should be 'en-us')

// URL: /fr/about
Localization::getLocaleFromUrl(); // 'fr'

Localization::isLocale('en'); // true
Localization::isLocale('en-us'); // true
Localization::isLocale('invalid'); // false

$locale->code;      // string - Locale code (e.g., 'en', 'fr-ca')
$locale->label;     // string - Display label (e.g., 'English')
$locale->language;  // string - Language code (e.g., 'en')

// Plus any custom properties from config via __get():
$locale->flag;         // Custom property
$locale->direction;    // Custom property
$locale->currency;     // Custom property

use Mikemenard\Localization\Facades\Localization;

class LocaleController
{
    public function switch(string $locale)
    {
        try {
            Localization::setLocale($locale);
            return redirect()->back();
        } catch (\Mikemenard\Localization\Exceptions\UnsupportedLocaleException $e) {
            abort(404, $e->getMessage());
        }
    }
}

// Current locale: 'fr'
route('about'); // '/fr/about'
url('/contact'); // '/fr/contact'
action([ProductController::class, 'index']); // '/fr/products'

route('about', ['locale' => 'en']); // '/en/about'

session('localization:locale'); // 'fr'
session(['localization:locale' => 'en']); // Manually set

// Config: ['en', 'fr-ca']
Localization::isSupported('fr-ca'); // true (exact)
Localization::isSupported('fr'); // true (matches 'fr-ca' via prefix)
Localization::isSupported('en-us'); // true (matches 'en' via language code)

use Mikemenard\Localization\Facades\Localization;

test('homepage shows French content', function () {
    Localization::setLocale('fr');

    $response = $this->get(route('home', ['locale' => 'fr']));

    $response->assertSee('Bienvenue');
});

try {
    Localization::setLocale('de'); // Not in config
} catch (\Mikemenard\Localization\Exceptions\UnsupportedLocaleException $e) {
    // "Locale 'de' is not supported. Supported locales: en, fr."
}

// config/localization.php
'route_parameter' => 'locale/invalid', // Invalid!

// Throws: "The route parameter 'locale/invalid' is invalid.
// It must be a single word without slashes, optionals (?), or special characters."

// config/localization.php
'locale_class' => \App\Models\User::class, // Doesn't extend Locale!

// Throws: "The locale class 'App\Models\User' must extend \Mikemenard\Localization\Locale."

Route::get('/health', fn() => 'OK'); // No locale prefix
Route::get('/api/users', [UserController::class, 'index']); // No locale prefix

Route::localized(function () {
    Route::get('/', fn() => view('home')); // Requires locale prefix
});

use Mikemenard\Localization\Facades\Localization;

Route::get('/', function () {
    return redirect('/' . Localization::resolveLocale());
});
bash
php artisan vendor:publish --tag=localization-config
blade
@foreach(Localization::getLocales() as $locale)
    <div class="{{ $locale->isRtl() ? 'text-right' : 'text-left' }}">
        {{ $locale->flagEmoji() }} {{ $locale->uppercaseLabel() }}
    </div>
@endforeach