Laravel本地化实现正确。

3.5.0 2020-03-12 09:48 UTC

This package is auto-updated.

Last update: 2024-09-05 23:37:59 UTC


README

Laravel本地化实现正确。

Become a Patron

概述

如果你正在构建一个多语言网站并且需要URL管理,那么这个包就是为你准备的。它集成了现有的Laravel功能,以支持翻译后的URL和自定义区域设置。

它支持开箱即用的路由缓存。

以前,我使用mcamara/laravel-localization来处理这个问题,但我真的很需要路由缓存工作。所以,我创建了这个包,并简化了整个设置和集成过程。

mcamara/laravel-localization包能做的,Loki也能做,但更好。

特性

  • 简单安装
  • 易于配置
  • 自定义区域设置
  • 隐藏默认区域设置
  • 翻译后的路由
  • 语言选择器
  • 路由缓存
  • 本地Laravel辅助函数(routeurl
  • 支持非本地化路由
  • 别名翻译

安装

从命令行

composer require laravelista/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::getNonLocalizedRouteURL::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 的默认辅助函数 routeurl 已更改为支持 URL 本地化。因此,您可以像平时一样使用它们。 这使您能够轻松地将 mcamara/laravel-localization 包替换为这个包。此外,您还可以安装此包,配置您支持的语言环境以及路由和 URL 链接,而无需进行任何更改。

以下辅助方法用于处理特殊情况,其中您需要获取特定语言环境的 URL 或仅获取特定语言环境中的当前 URL。

URL::getNonLocalizedRoute($name, $parameters = [], $absolute = true)

它将返回给定路由名称指向位于 /routes/web.php 文件的路由的 URL。

请勿在 web.phploki.web.php 中的路由使用相同的路由名称。

URL::getNonLocalizedUrl($path, $extra = [], $secure = null)

它将返回给定路径的 URL。

URL::getLocalizedRoute($locale, $name = null, $parameters = [], $absolute = true)

使用此方法有两种方式

  1. 仅指定 $locale - 它将返回指定语言环境中的当前路由
  2. 指定 $locale 和路由 $name - 它将返回给定语言环境中给定路由名称的 URL

如果您正在使用已翻译的路由,请确保在需要时使用此方法。

URL::getLocalizedUrl($locale, $path = null, $extra = [], $secure = null)

使用此方法有两种方式

  1. 仅指定 $locale - 它将返回指定语言环境中的当前 URL
  2. 指定 $locale$path - 它将返回给定语言环境中给定路径的 URL

URL::overrideParameters($locale, array|string $parameters)

此方法将设置给定语言环境的参数,因此当调用 getLocalizedRoute 方法时,将使用这些参数而不是已存在的参数。

对翻译 slug 很有用。请记住包括所有参数。

语言切换器

使用此 blade 模板片段以允许用户更改语言

<ul>
    @foreach(config('loki.supportedLocales') as $locale)
        <li>
            <a rel="alternate" hreflang="{{ $locale }}" href="{{ URL::getLocalizedRoute($locale) }}">
                {{ $locale }}
            </a>
        </li>
    @endforeach
</ul>

您可以根据需要修改模板。

翻译 URL slugs/parameters

将此代码添加到您的视图文件中的 @php {your code here} @endphp 块或控制器方法中,您想翻译 slugs 的地方

foreach (config('loki.supportedLocales') as  $locale) {
    URL::overrideParameters($locale, $model->{'slug_'.$locale});
}

$model->{'slug_'.$locale} 替换为从数据库中获取模型的翻译 slug 的逻辑。

此方法将覆盖给定语言环境的路由参数,因此语言切换器将返回包含翻译 slugs 的正确 URL。

赞助商 & 支持者

我想向以下赞助商 & 支持者表示感谢,感谢他们为我的开源之旅提供资金。如果您有兴趣成为赞助商或支持者,请访问 支持者页面

贡献

感谢您考虑为 Loki 做出贡献!贡献指南可在 此处 找到。

行为准则

为了确保开源社区对所有人都友好,请查看并遵守 行为准则

许可

Loki 是在 MIT 许可证 下许可的开源软件。