hoyvoy / laravel-subdomain-localization
Laravel的子域名本地化支持
Requires
- php: >=7.1.3
- illuminate/container: ^5.6
- illuminate/events: ^5.6
- illuminate/support: ^5.6
Requires (Dev)
- orchestra/testbench: 3.6.*
- orchestra/testbench-browser-kit: 3.6.*
- phpunit/phpunit: ~7.0
README
Laravel-Subdomain-Localization
Laravel的子域名本地化支持
目录
安装
使用composer安装
composer require hoyvoy/laravel-subdomain-localization
从Laravel 5.5开始,可以自动发现服务提供者。对于5.5之前的Laravel版本,您必须在config/app.php中注册服务提供者
Hoyvoy\Localization\LocalizationServiceProvider::class,
Laravel-Subdomain-Localization包含2个外观:Localize
和Router
。
如果您想使用它们,打开config/app.php
并将以下行添加到aliases
数组中
... 'Localize' => Hoyvoy\Localization\Facades\Localize::class, 'Router' => Hoyvoy\Localization\Facades\Router::class, ...
Laravel自带一个中间件,可用于强制使用语言子域名。
如果您想使用它,打开app/Http/kernel.php
并将此路由中间件添加到routeMiddleware
数组中
... 'localize' => \Hoyvoy\Localization\Middleware\Localization::class, ...
用法
区域检测
打开app/Providers/RouteServiceProvider.php
并在boot方法中添加对detectLocale()的调用。例如,使用外观
... use Hoyvoy\Localization\Facades\Localize; ... public function boot(Router $router) { // This will guess a locale from the current HTTP request // and set the application locale Localize::detectLocale(); parent::boot($router); } ...
完成此操作后,您就没有什么必须做的了。Laravel应用的区域设置已设置,您可以像平时一样使用其他区域依赖的Laravel组件(例如翻译)。
中间件
如果您想强制某些路由使用语言子域名,只需简单地分配提供的中间件即可,例如在app/Http/routes.php
中如下所示
// Without the localize middleware, this route can be reached with or without language subdomain Route::get('logout', 'AuthController@logout'); // With the localize middleware, this route cannot be reached without language subdomain Route::group([ 'middleware' => [ 'localize' ]], function() { Route::get('welcome', 'WelcomeController@index'); });
有关中间件的更多信息,请参阅Laravel文档。
路由翻译
如果您想使用翻译路由(en.yourdomain.com/welcome, fr.yourdomain.com/bienvenue),请按以下步骤操作
首先,为支持的语言创建语言文件
resources/lang/en/routes.php
:
return [ // route name => route translation 'welcome' => 'welcome', 'user_profile' => 'user/{username}', ];
resources/lang/fr/routes.php
:
return [ // route name => route translation 'welcome' => 'bienvenue', 'user_profile' => 'utilisateur/{username}', ];
然后,以下是您在app/Http/routes.php
中定义翻译路由的方式
Route::group([ 'middleware' => [ 'localize' ]], function() { Route::get(Router::resolve('routes.welcome'), 'WelcomeController@index'); });
您当然可以按自己的意愿命名语言文件,并将适当的前缀(例如示例中的routes.)传递给resolve()方法。
配置
配置文件
要编辑默认包配置,您可以运行以下Artisan命令
php artisan vendor:publish --provider="Hoyvoy\Localization\LocalizationServiceProvider" --tag="config"
完成此操作后,您将在config/localization.php
中找到配置文件。
配置值
available_locales
(默认:['en', 'de']
)
由路由系统接受的区域数组。
cookie_localization
(默认:true
)
使用此选项启用或禁用在区域检测过程中使用cookie。
browser_localization
(默认:true
)
使用此选项启用或禁用在区域检测过程中使用浏览器设置。
cookie_name
(默认:'locale'
)
在这里,您可以更改用于保存区域的cookie的名称。此选项仅在启用cookie区域化时使用。
domain
(默认:env('DOMAIN')
)
在这里,您可以更改应用程序中使用的域的名称。默认情况下,域从.env文件中读取。
aliases
(默认为空数组)
您可以指定别名以使用自定义子域名而不是区域代码。
示例:['german' => 'de']
表示german.mydomain.dev
将区域设置为de
,如果区域设置为de
,则路由将使用前缀german.
而不是de.
有用函数
该包提供了您可以在视图中使用的有用函数,例如
翻译当前URL
<a href="{{ Router::current('fr') }}">See the french version</a>
使用 Router::current(string $locale)
生成当前路由的备用版本。这将返回带有正确子域的URL,并在必要时翻译URI。
获取当前URL的备用版本
@foreach (Router::getCurrentVersions() as $locale => $url) <a href="{{ $url }}">{{ $locale }}</a> @endforeach
使用 Router::getCurrentVersions(bool $excludeCurrentLocale = true)
获取当前路由的所有本地化版本。这将返回一个数组,包含 $locale => $url 元素,您可以使用这些元素生成指向备用版本的链接。
将 false
作为 $excludeCurrentLocale
的参数传递,让函数同时返回当前本地化的项目。
获取给定路由的本地化版本
<a href="{{ Router::url('user_profile', [ 'username' => 'JohnDoe' ], 'fr') }}">See JohnDoe's profile</a>
使用 Router::url($routeName, $routeAttributes = null, $locale = null)
生成给定路由的备用版本。这将返回带有正确子域的URL,并在必要时翻译URI。
如有必要,可以传递路由参数。如果没有指定特定本地化,则将使用当前本地化。
变更日志
要查看最近版本中的更改,请参阅 变更日志。
许可证
此软件包受 MIT 许可证 许可。