alkhatibdev / language-switcher
Laravel 动态语言切换器,用于 web 和 API 路由
v0.0.2
2024-03-07 18:34 UTC
Requires (Dev)
- orchestra/testbench: 7.x-dev
- phpunit/phpunit: 9.5.x-dev
README
Laravel 动态语言切换器
介绍
为 web 和 API 路由提供各种支持的 Laravel 动态语言切换器。
功能
- 自动切换用户区域并提醒下次请求中选择的新的语言。
- 支持通过
请求体/查询键
、请求头键
和路由参数名称
切换语言。 - 支持 API 路由(通过头信息切换语言以实现无状态请求)。
- 支持所有 HTTP 方法(GET、POST、PUT 等)。
- 支持根据路由参数进行语言切换的 SEO 友好路由。
- 所有内容都可以通过丰富的、有良好文档的 配置文件 进行配置。
安装
通过 composer 安装
composer require alkhatibdev/language-switcher
发布配置
php artisan vendor:publish --tag=language-switcher-config
一个 language-switcher.php
配置文件将被发布到您的 configs
目录。您可以自由地阅读并覆盖所有可配置部分,或者坚持使用 默认配置
使用
基本使用
所有设置都是开箱即用的,开始使用这些支持的选项调用您的路由
通过请求查询/体键
// 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"}'
通过请求头键
curl --header "Accept-Language: en" http://example.com/api/users
通过路由参数
对于给定的路由:Route::get('/{locale}/home', [HomeController, 'home']);
http://example.com/en/home
注意
- 所有以前的示例都会要求该软件包将区域设置为'en'
。
- 下一个请求仍然会记住这个新设置的区域。
自定义软件包范围
默认情况下,该软件包的中间件被分配到全局所有路由。但是,您可以从软件包配置文件中禁用 assign_globally
,并手动将中间件 别名
分配给所有路由和路由组。
禁用全局分配
// config/language-switcher.php 'assign_globally' => false,
分配给路由或路由组
// routes/web.php // Assign to individual route Route::get('/{locale}/home', [HomeController, 'home'])->middleware(['switchlocale']); // Assign to route group Route::->middleware(['switchlocale'])->group(function () { // });
分配给中间件组
// app/Http/kernel.php protected $middlewareGroups = [ 'web' => [ // ... 'switchlocale', ], 'api' => [ // ... 'switchlocale', ], ];
禁用保存
默认情况下,该软件包使用会话来存储由用户切换的当前区域,以便在下一个请求中不需要传递区域即可保持新选择的语言活跃。但是,如果您想停止这种行为,将 enable_session
设置为 false
。
// config/language-switcher.php 'enable_session' => false,
许可证
语言切换器是开源软件,根据 MIT 许可证 许可。