sinkcup / laravel-locale-setter
检测 Accept-Language,设置Locale,然后你可以使用 Laravel 国际化
Requires
- laravel/framework: >=5.1
Requires (Dev)
- phpunit/phpunit: ~5.7
This package is auto-updated.
Last update: 2024-09-05 02:39:20 UTC
README
本包检测 HTTP 头中的 Accept-Language,设置Locale,然后你可以使用 Laravel 国际化 进行多语言支持。
安装
通过 Composer 安装此包
composer require sinkcup/laravel-locale-setter
接下来,将包的服务提供者添加到你的 config/app.php
// config/app.php
'providers' => [
sinkcup\LaravelLocaleSetter\LocaleServiceProvider::class
]
然后你需要发布包的配置
php artisan vendor:publish --provider="sinkcup\LaravelLocaleSetter\LocaleServiceProvider"
这将创建 config/locale.php
文件。
用法
全局中间件
通常,它应该在每次 HTTP 请求期间运行,只需将中间件类添加到你的 app/Http/Kernel.php
类的 $middleware 属性中。例如
// app/Http/Kernel.php
protected $middleware = [
\sinkcup\LaravelLocaleSetter\Http\Middleware\DetectLocale::class,
];
将中间件分配给路由
如果你想将中间件分配给特定的路由,你应该将中间件类添加到你的 app/Http/Kernel.php
类的 $routeMiddleware 属性中。例如
// app/Http/Kernel.php
protected $routeMiddleware = [
'locale' => \sinkcup\LaravelLocaleSetter\Http\Middleware\DetectLocale::class,
]
一旦在 HTTP 内核中定义了中间件,你可以使用中间件方法将中间件分配给路由
Route::group(['middleware' => ['auth:api', 'locale']], function () {
Route::resource('/users', 'UserController');
Route::resource('/photos', 'PhotoController');
});
配置
Linux 区域设置和 HTML 4 语言代码遵循 1995 年 3 月发布的 RFC1766,这已经过时。
由于历史原因,Linux 区域设置和浏览器目前仍在使用旧标准。
iOS 希望改变它,使用 zh-Hans 和 zh-Hans-CN,但这同样是错误的。
如果你想正确地做这件事,遵循现代标准 - HTML5 使用的 BCP47,并将旧语言代码映射到新代码。
你应该使用 cmn-Hans、cmn-Hans-CN、cmn-Hant 和 cmn-Hant-TW,而不是 zh-CN、zh-TW、zh-Hans 和 zh-Hant。
创建目录
resources/lang/cmn_Hans
resources/lang/cmn_Hant
然后使用
// config/locale.php
'locale_map' => [
'cmn_hans' => 'cmn_Hans',
'zh_cn' => 'cmn_Hans',
'zh_hans' => 'cmn_Hans',
'cmn_hant' => 'cmn_Hant',
'zh_hant' => 'cmn_Hant',
'zh_hk' => 'cmn_Hant',
'zh_tw' => 'cmn_Hant',
],
如果你关注地区差异,创建目录
resources/lang/cmn_Hans_CN
resources/lang/cmn_Hans_HK
resources/lang/cmn_Hant_HK
resources/lang/cmn_Hant_TW
然后使用
// config/locale.php
'locale_map' => [
'cmn_hans_cn' => 'cmn_Hans_CN',
'zh_cn' => 'cmn_Hans_CN',
'cmn_hans_hk' => 'cmn_Hans_HK',
'cmn_hant_hk' => 'cmn_Hant_HK',
'zh_hk' => 'cmn_Hant_HK',
'cmn_hant_tw' => 'cmn_Hant_TW',
'zh_tw' => 'cmn_Hant_TW',
],