getsupercode / localizater
Laravel 包,用于在多个区域前缀中包装路由
Requires
- php: ^7.3
- illuminate/support: ~5|~6|~7|~8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mockery/mockery: ^1.1
- orchestra/testbench: ~3|~4|~5|~6
- phpunit/phpunit: ^8.0|^9.0
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2023-01-11 12:16:04 UTC
README
Laravel 包,用于在多个区域前缀中包装路由。
安装
通过 Composer
composer require getsupercode/localizater
为了自动检测和更改应用程序的区域设置,您可以将此中间件添加到您的 app/Http/Kernel
protected $middlewareGroups = [ 'web' => [ \Getsupercode\Localizater\LocalizaterMiddleware::class, // ... ] ];
配置
默认情况下,应用程序的区域设置为仅 en,默认区域不添加前缀。如果您想为默认区域添加前缀,请运行以下命令以发布配置文件
php artisan vendor:publish --provider="Getsupercode\Localizater\LocalizaterServiceProvider" --tag="config"
安装此包后,添加中间件和发布配置文件。您需要编辑配置文件 config/localizater.php 以添加更多区域设置。
注意
默认区域设置位于 config/app.php 文件中的 app.locale。
配置:localizater.locales
添加受支持的区域设置。建议使用其本地语言编写区域值。
'locales' => [ 'en' => 'English', 'fr' => 'Français', 'ar' => 'العربية', ]
配置:localizater.rtl_locales
添加 RTL 方向区域设置。
'rtl_locales' => ['ar']
配置:localizater.prefix_default
如果此选项设置为 true,则默认区域 URL 将添加前缀。
true: www.example.com/en www.example.com/fr false: www.example.com www.example.com/fr
配置:localizater.prefix_default_name
如果此选项设置为 true,则默认区域路由名称将添加前缀。
true
| 方法 | URI | URI | 名称 |
|---|---|---|---|
| GET | HEAD | /page | en.page |
| GET | HEAD | /fr/page | fr.page |
false
| 方法 | URI | URI | 名称 |
|---|---|---|---|
| GET | HEAD | /page | page |
| GET | HEAD | /fr/page | fr.page |
用法
此包不会覆盖您已知的路由功能。它只是一个包装函数,将为您创建多个区域路由。
// routes/web.php <?php use Getsupercode\Localizater\Facades\Localizater; use Illuminate\Support\Facades\Route; Localizater::group(function () { Route::view('/', 'welcome')->name('welcome'); Route::get('/user', 'UserController@index'); }); // Put other (Non read) route actions outside the `Localizater::group` as you don't need to have multiple locales for those actions. Route::post('/user', 'UserController@store');
上面的示例将给我们以下结果
| 方法 | URI | 名称 |
|---|---|---|
| GET|HEAD | / | welcome |
| GET|HEAD | /fr | fr.welcome |
| GET|HEAD | /user | |
| GET|HEAD | /fr/user | fr. |
| POST | /user |
路由命名
如果您为路由添加了名称,则它将以区域键 locale.name 预先附加。 例如:(fr.welcome)
所有没有名称的区域都将具有相同的名称前缀,如 fr.。这是正常的,因为您不需要其名称。
Localizater 属性
您可以将属性添加到本地化器分组函数,就像您使用路由分组函数一样。
Localizater::group(['middleware' => 'auth'], function () { Route::view('/home', 'home')->name('home'); });
或者
Localizater::group(function () { Route::group(['middleware' => 'auth'], function () { Route::view('/home', 'home')->name('home'); }); });
在指定区域获取路由 URL
您可以在不同的地区键中获取当前路由URL
// Current route URL: example.com locale_route(null, 'fr'); // Output: example.com/fr
或者一个命名的路由
// Route URL: example.com/fr/home locale_route('home', 'en'); // Output: example.com/home
您可以在地区参数之后传递与 route() 函数相同的参数。
// locale_route($route, $locale, $parameters, $absolute); // Current route locale_route(null, 'fr', ['status' => 'active'], true); // Named route locale_route('home', 'fr', ['status' => 'active'], true);
获取地区语言名称
您可以在 localizater.locales 配置中获取当前地区或指定地区的地区键的值
locale_name(); // Output: English locale_name('fr'); // Output: Français locale_name('ar'); // Output: العربية
根据当前地区获取HTML dir 属性
您可以根据当前地区获取HTML dir 属性。该包将在 localizater.rtl_locales 配置中搜索RTL地区。如果当前地区被列出,则输出将是 rtl 或 ltr,如果没有列出。
// Current locale is: ar locale_dir(); // Output: rtl // Current locale is: en locale_dir(); // Output: ltr
<html dir="{{ locale_dir() }}"></html>
您也可以获取指定地区的 dir 属性
locale_dir('ar'); // Output: rtl
变更日志
请查看变更日志以获取最近更改的更多信息。
测试
composer test
贡献
请查看 contributing.md 以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 elkebir.med@gmail.com 联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT。请查看 许可证文件 以获取更多信息。