laurentesc / laravel-subdomain-localization
Laravel 的子域名本地化支持
Requires
- php: >=5.4.0
- laravel/framework: ~5.0
Requires (Dev)
- orchestra/testbench: 3.0.*
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-27 15:07:59 UTC
README
重要通知:此包不再维护。
Laravel-Subdomain-Localization
Laravel 的子域名本地化支持。
目录
安装
Composer
将 Laravel-Subdomain-Localization 添加到您的 composer.json 文件中。
"laurentesc/laravel-subdomain-localization": "dev-master"
运行 composer install 以获取包的最新版本。
手动
建议您使用 Composer,但您也可以从该存储库下载并安装。
Laravel
Laravel-Subdomain-Localization 包含一个 Laravel 服务提供者。
要在 Laravel 应用程序中注册服务提供者,请打开 config/app.php 并将以下行添加到 providers 数组中
... LaurentEsc\Localization\LocalizationServiceProvider::class ...
Laravel-Subdomain-Localization 包含 2 个外观: Localize 和 Router。
如果您想使用它们,请打开 config/app.php 并将以下行添加到 aliases 数组中
... 'Localize' => LaurentEsc\Localization\Facades\Localize::class, 'Router' => LaurentEsc\Localization\Facades\Router::class, ...
Laravel 包含一个中间件,可以用来强制使用语言子域名。
如果您想使用它,请打开 app/Http/kernel.php 并将此路由中间件添加到 routeMiddleware 数组中
... 'localize' => \LaurentEsc\Localization\Middleware\Localization::class, ...
用法
区域检测
打开 app/Providers/RouteServiceProvider.php 并在 boot 方法中添加对 detectLocale() 的调用。例如,使用外观
... use LaurentEsc\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="LaurentEsc\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文件中读取的。
有用的函数
此软件包提供了您可以使用的一些有用功能 - 例如 - 在您的视图中
翻译当前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许可证。