netstudio / loki
Laravel本地化做得正确。
Requires
- php: >=7.2
- illuminate/http: ^5.7|^6.0|^7.0|^8.0
- illuminate/routing: ^5.7|^6.0|^7.0|^8.0
- illuminate/support: ^5.7|^6.0|^7.0|^8.0
README
Laravel本地化做得正确。
概述
如果你正在构建一个多语言网站并且需要URL管理,那么这个包就是为你准备的。它集成了现有的Laravel功能,以支持翻译后的URL和自定义地区。
它默认支持路由缓存。
以前,我使用mcamara/laravel-localization 来处理这个问题,但我非常需要路由缓存工作。因此,我创建了此包,简化了整个设置和集成过程。
无论
特性
- 简单安装
- 轻松配置
- 自定义地区
- 隐藏默认地区
- 翻译后的路由
- 语言选择器
- 路由缓存
- 本地Laravel辅助函数(
route和url) - 支持非本地化路由
- 别名翻译
安装
从命令行
composer require netstudio/loki
然后,将Loki特性添加到您的RouteServiceProvider类中
use Laravelista\Loki\Loki;
class RouteServiceProvider extends ServiceProvider
{
use Loki;
}
如果您不打算使用翻译后的URL(默认设置为false),则使用以下命令发布路由文件。否则,请确保发布配置文件,将
useTranslatedUrls设置为true,并创建适当的路由文件{locale}.web.php。
将本地化路由文件loki.web.php发布到您的/routes目录
php artisan vendor:publish --provider="Laravelista\Loki\ServiceProvider" --tag=route
现在,将$this->mapLocalizedWebRoutes();添加到RouteServiceProvider中的map方法。
安装完成!
将您的本地化路由放在/routes/loki.web.php文件中。如果您使用翻译后的URL,则为每个地区创建一个路由文件{locale}.web.php(例如:en.web.php)。您的非本地化路由可以保留在/routes/web.php文件中。要访问非本地化路由,请使用URL::getNonLocalizedRoute或URL::getNonLocalizedUrl。在下方的辅助函数章节中了解更多。
就是这样!查看下方的配置章节以配置您的偏好。
配置
使用以下命令发布配置文件
php artisan vendor:publish --provider="Laravelista\Loki\ServiceProvider" --tag=config
您可以在config/loki.php下找到它。
supportedLocales [数组]
地区名称(代码)可以是您想要的任何内容。
示例。 en-GB, hr-HR, en-US, english, croatian, german, de, fr, ...
'supportedLocales' => ['hr', 'en'],
defaultLocale [字符串]
默认应用程序地区必须来自supportedLocales中定义的地区之一。
'defaultLocale' => 'en',
hideDefaultLocale [布尔值]
如果您想隐藏URL中的默认地区,请将其设置为true。(默认为true。)
示例。 如果您的默认地区设置为en,则请求以/en开头的URL将被重定向到/。
'hideDefaultLocale' => true,
useTranslatedUrls [布尔值]
这使您能够使用本地化路由。(默认为false。)
如果您为每个地区使用翻译后的URL,则将其设置为true。
示例。 在en地区上的/en/about-us将变为在hr地区上的/hr/o-nama。
'useTranslatedUrls' => true,
一旦此选项设置为true,您就必须为每个地区创建一个具有地区前缀的路由文件。
routes/en.web.php:
<?php
Route::get('/', 'SampleController@home')->name('home');
Route::get('contact', 'SampleController@contact')->name('contact');
Route::get('about', 'SampleController@about')->name('about');
routes/hr.web.php:
<?php
Route::get('/', 'SampleController@home')->name('home');
Route::get('kontakt', 'SampleController@contact')->name('contact');
Route::get('o-nama', 'SampleController@about')->name('about');
如果您已启用此功能,请确保使用路由名称,否则它将无法正常工作。
资源路由
如果您使用Route::resource并且已将useTranslatedUrls设置为true,则必须手动设置资源的名称,或者停止使用resource映射器并手动映射资源路由。
show 方法的语法,但你可以将其应用于其他方法。
en.web.php
Route::resource('news', 'NewsController')->only(['show']);
hr.web.php
Route::resource('novosti', 'NewsController')->only(['show'])->names([
'show' => 'news.show'
]);
辅助函数
Laravel 默认的辅助函数 route 和 url 已更改为支持 URL 本地化。因此,你可以像平时一样使用它们。 这使你能够轻松地将 mcamara/laravel-localization 包替换为这个包。此外,你可以安装此包,配置你支持的区域设置以及路由和 URL 链接,而无需进行任何更改。
以下辅助方法用于处理边缘情况,其中你可能需要获取特定区域的 URL 或只是获取特定区域的当前 URL。
URL::getNonLocalizedRoute($name, $parameters = [], $absolute = true)
它将返回给定路由名称指向 /routes/web.php 文件中路由的 URL。
不要在 web.php 和 loki.web.php 中的路由使用相同的路由名称。
URL::getNonLocalizedUrl($path, $extra = [], $secure = null)
它将返回给定路径的 URL。
URL::getLocalizedRoute($locale, $name = null, $parameters = [], $absolute = true)
使用此方法有两种方式
- 仅指定
$locale- 它将返回指定区域的当前路由 - 指定
$locale和路由$name- 它将返回给定路由名称的给定区域的 URL
如果你使用翻译的路由,确保在需要时使用此方法。
URL::getLocalizedUrl($locale, $path = null, $extra = [], $secure = null)
使用此方法有两种方式
- 仅指定
$locale- 它将返回指定区域的当前 URL - 指定
$locale和$path- 它将返回给定路径的给定区域的 URL
URL::overrideParameters($locale, array|string $parameters)
此方法将设置给定区域的参数,因此当调用 getLocalizedRoute 方法时,它将使用这些参数而不是现有的参数。
这对于翻译缩略语很有用。请记住,包括所有参数。
语言切换器
使用此 Blade 模板片段以使用户能够更改语言
<ul>
@foreach(config('loki.supportedLocales') as $locale)
<li>
<a rel="alternate" hreflang="{{ $locale }}" href="{{ URL::getLocalizedRoute($locale) }}">
{{ $locale }}
</a>
</li>
@endforeach
</ul>
你可以按需修改模板。
翻译 URL 缩略语/参数
将此代码添加到你的视图文件中的 @php {你的代码这里} @endphp 块内或添加到控制器方法中,你想要翻译缩略语的地方
foreach (config('loki.supportedLocales') as $locale) {
URL::overrideParameters($locale, $model->{'slug_'.$locale});
}
将 $model->{'slug_'.$locale} 替换为你用于从数据库中获取模型的翻译缩略语的任何逻辑。
此方法将覆盖给定区域的路由参数,因此语言切换器将返回具有翻译缩略语的正确 URL。
赞助商和资助者
我想对我的以下赞助商和资助者表示感谢,他们资助了我的开源之旅。如果您有兴趣成为赞助商或资助者,请访问 资助者页面。
贡献
感谢您考虑为 Loki 贡献!贡献指南可以在 这里 找到。
行为准则
为了确保开源社区对所有人均持开放态度,请查阅并遵守 行为准则。
许可证
Loki 是在 MIT 许可证 下授权的开源软件。