industryarena / laravel-subdomain-localization
Laravel的子域名本地化支持
Requires
- php: >=7.2.5
- laravel/framework: ^5.6|^5.8|^6.0|^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^3.8|^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.5|^9.0
This package is auto-updated.
Last update: 2024-06-26 10:48:03 UTC
README
Laravel-Subdomain-Localization
Laravel的子域名本地化支持。仅适用于 Laravel 5.4 版本(Fork LaurentEsc/Laravel-Subdomain-Localization)
目录
安装
Composer
将Laravel-Subdomain-Localization添加到您的composer.json
文件中。
"industryarena/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 许可证 许可。