https://github.com/alkhatibdev/language-switcher
Laravel dynamic language switcher for both web and API routes with various supported options.
https://github.com/alkhatibdev/language-switcher
languages laravel laravel-framework localization php
Last synced: 11 days ago
JSON representation
Laravel dynamic language switcher for both web and API routes with various supported options.
- Host: GitHub
- URL: https://github.com/alkhatibdev/language-switcher
- Owner: alkhatibdev
- License: mit
- Created: 2022-08-14T17:13:20.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-07T18:46:26.000Z (about 1 year ago)
- Last Synced: 2025-04-23T21:49:37.128Z (11 days ago)
- Topics: languages, laravel, laravel-framework, localization, php
- Language: PHP
- Homepage: https://alkhatibdev.github.io/language-switcher/
- Size: 375 KB
- Stars: 12
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel dynamic language switcher
[](https://github.com/alkhatibdev/language-switcher/releases)

[](LICENSE)# Introduction
Laravel dynamic language switcher for both web and API routes with various supported options.## Features
- Switch user locale automatically and remind newly selected language for all next requests.
- Support language switching via `request body/query keys`, `request headers keys`, and `route parameters names`.
- Support API routes (Switch language via headers for stateless requests).
- Support all HTTP methods (GET, POST, PUT and ..etc).
- SEO-friendly routes by supporting language switching depending on route parameters.
- Everything is configurable with a rich and well-documented [configuration file](https://github.com/alkhatibdev/language-switcher/blob/main/config/language-switcher.php).# Installation
## install via composer
```bash
composer require alkhatibdev/language-switcher
```## Publish Configs
```bash
php artisan vendor:publish --tag=language-switcher-config
```
A `language-switcher.php` config file will be published on your `configs` directory. Feel free to read and override all these configurable parts, or stick with the [defaults configs](https://github.com/alkhatibdev/language-switcher/blob/main/config/language-switcher.php)
# Usage
## Basic Usage
Everything is set out of the box, start calling your routes with these supported options:### Via Request query/body keys
```bash
// Request query key/value
http://example.com/?lang=en// Request magic keys
http://example.com/?en// Also you can use the same above parameters with the body of POST or PUT
curl -X POST http://example.com/api/users
-d '{"lang": "en"}'
```### Via request headers keys
```bash
curl --header "Accept-Language: en" http://example.com/api/users
```### Via route parameters
For given route: `Route::get('/{locale}/home', [HomeController, 'home']);````
http://example.com/en/home
```
> **Note**
>
- All previous examples will ask the package to switch locale to `'en'`.
>
- Upcoming requests still remind this newly set locale.
## Customize Package Scope
By default, the package middleware is assigned globally to all your routes. However, you can disable `assign_globally` from the package config file, and assign middleware `alias` to all routes and route groups manually.
### Disable global assignment
```php
// config/language-switcher.php'assign_globally' => false,
```### Assign to route or route groups
```php
// routes/web.php// Assign to individual route
Route::get('/{locale}/home', [HomeController, 'home'])->middleware(['switchlocale']);// Assign to route group
Route::->middleware(['switchlocale'])->group(function () {
//
});
```### Assign to middleware groups
```php
// app/Http/kernel.phpprotected $middlewareGroups = [
'web' => [
// ...
'switchlocale',
],'api' => [
// ...
'switchlocale',
],
];
```### Disable Saving
By default, the package uses sessions to store the current locale, switched by a user, to keep the newly selected locale active for the next requests without a need to pass the locale in every request. However, if you want to stop this behavior, set `enable_session` to `false`.
```php
// config/language-switcher.php'enable_session' => false,
```
# License
Language Switcher is open-sourced software licensed under the [MIT license](LICENSE).