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: 9 months 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 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-07T18:46:26.000Z (almost 2 years ago)
- Last Synced: 2025-04-23T21:49:37.128Z (9 months 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.php
protected $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).