tyler36 / localization
本地化中间件
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.12
- squizlabs/php_codesniffer: ^3.3
README
此包旨在简化多语言应用程序。只需添加所需的中间件并更新配置即可。
安装
- 安装包
composer require tyler36/localization
- 发布配置 运行以下命令以发布配置文件
php artisan vendor:publish --provider=tyler36/localization
-
添加支持的语言 默认情况下,只有当前应用程序的区域设置被认为是有效的。您可以将其他语言添加到配置文件(config/localization.php)中。看不到文件?也许您忘记发布它了;请参阅上述步骤。有关国际公认的语言代码列表,请参阅https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes。
-
应用中间件 将所需的中间件添加到位于
app/Http/Kernel.php文件中的所需位置。有关更多详细信息,请参阅Laravel文档(https://laravel.net.cn/docs/master/middleware#registering-middleware)
中间件
选项1:请求头
此中间件使用请求头设置语言环境。默认情况下,查询字符串设置为 X-localization,但可以通过配置文件进行更改。它非常适合通过javascript进行请求。
-
注册
\Tyler36\Localization\Middleware\HeaderLocale::class -
使用纯javascript或首选javascript框架设置头信息。例如,您可以使用以下方法将头信息应用于所有
Axios请求
// Set language to German ('de')
window.axios = axios;
window.axios.defaults.headers.common['X-localization'] = 'de';
现在,当您向端点发送请求时,Laravel将更新语言环境以匹配设置,前提是它已配置为“有效”。
选项2:查询字符串
此中间件旨在使用查询字符串。
-
注册
\Tyler36\Localization\Middleware\QueryStringLocale::class -
将查询字符串添加到URL中。默认情况下,查询字符串设置为
lang,但可以通过配置文件进行更改。
// This will return the site with default locale
https://cool-site.dev
// This will return the site with locale to to German (de)
https://cool-site.dev?lang=de
选项3:会员偏好
此中间件使用用户模型上的属性来设置语言环境。当会员登录时,它会检查保存的语言环境并将其应用。
-
注册
\Tyler36\Localization\Middleware\MemberLocale::class -
在用户模型上创建属性 默认情况下,查询字符串设置为
locale,但可以通过配置文件进行更改。
$table->string('locale', 2)->default(app()->getLocale());
选项4:会话
此中间件在Laravel会话中查找值。
-
注册
\Tyler36\Localization\Middleware\SessionLocale::class -
创建一个保存
session_key => locale到会话的路由 默认情况下,session_key设置为locale,但可以通过配置文件进行更改。
$key = config('localization.session_key', 'locale');
session([$key => request()->get($key)]);
或者您可以使用包含的控制器来更新您的路由文件
// routes/web.php
Route::get('/locale/{locale}', [
'as' => 'localization.session',
'uses' => '\Tyler36\Localization\Controller\LocaleController@session'
]);
// blade - create links
route('localization.session', [config('localization.session_key') => $locale]