chinleung/laravel-multilingual-routes

一个用于注册多语言路由的包。

v4.1.1 2024-03-27 15:37 UTC

README

Latest Version on Packagist Build Status Quality Score Total Downloads

为您的应用程序注册多语言路由的包。

版本控制

安装

您可以通过 composer 安装此包

composer require chinleung/laravel-multilingual-routes

要自动检测并更改应用程序的本地化,您可以将中间件添加到您的 app/Http/Kernel。它必须是 web 中间件组中的第一个项目。

protected $middlewareGroups = [
    'web' => [
        \ChinLeung\MultilingualRoutes\DetectRequestLocale::class,
        // ...
    ]
];

配置

默认情况下,应用程序的本地化只包括 en,默认本地化没有前缀。如果您想为默认本地化添加前缀,请运行以下命令以发布配置文件

php artisan vendor:publish --provider="ChinLeung\MultilingualRoutes\MultilingualRoutesServiceProvider" --tag="config"

如果您的应用程序支持不同的本地化,您可以选择设置 app.locales 配置或遵循来自 chinleung/laravel-locales 的配置说明。

示例

而不是这样做

Route::get('/', 'ShowHomeController')->name('en.home');
Route::get('/fr', 'ShowHomeController')->name('fr.home');

您可以使用以下方法达到相同的结果

Route::multilingual('/', 'ShowHomeController')->name('home');

已设置一个 演示仓库,以展示该包的基本用法。

使用方法

快速使用

一旦您已配置了本地化,您就可以开始在您的 routes/web.php 中添加如下示例中的路由

Route::multilingual('test', 'TestController');

这将生成以下内容

注意 URI 列是从位于 resources/lang/{locale}/routes.php 的翻译文件中生成的,其中包含类似以下的路由键

<?php

// resources/lang/fr/routes.php

return [
  'test' => 'teste'
];

要获取路由,您可以使用 localized_route(string $name, array $parameters, string $locale = null, bool $absolute = true) 而不是使用 route 辅助函数

localized_route('test'); // Returns the url of the current application locale
localized_route('test', [], 'fr'); // Returns https://app.test/fr/teste
localized_route('test', [], 'en'); // Returns https://app.test/test

要获取其他本地化的当前路由,您可以使用 current_route(string $locale = null) 辅助函数

current_route(); // Returns the current request's route
current_route('fr'); // Returns the current request's route in French version
current_route('fr', route('fallback')); // Returns the fallback route if the current route is not registered in French

重命名路由

Route::multilingual('test', 'TestController')->name('foo');

根据本地化重命名路由

Route::multilingual('test', 'TestController')->names([
  'en' => 'foo',
  'fr' => 'bar',
]);

跳过本地化

Route::multilingual('test', 'TestController')->except(['fr']);

限制为本地化列表

Route::multilingual('test', 'TestController')->only(['fr']);

更改请求方法

Route::multilingual('test', 'TestController')->method('post');

注册视图路由

// Loads test.blade.php
Route::multilingual('test');

使用不同键注册视图路由和路由

// Loads welcome.blade.php instead of test.blade.php
Route::multilingual('test')->view('welcome');

传递数据到视图

Route::multilingual('test')->data(['name' => 'Taylor']);
Route::multilingual('test')->view('welcome', ['name' => 'Taylor']);

重定向本地化路由

Route::multilingual('support');
Route::multilingual('contact')->redirect('support');

检查本地化路由

Request::localizedRouteIs('home');

签名本地化路由

URL::signedLocalizedRoute('unsubscribe', ['user' => 1]);
URL::temporarySignedLocalizedRoute('unsubscribe', now()->addMinutes(30), ['user' => 1]);

从 1.x 升级到 2.x

要从 1.x 升级到 2.x,您只需将应用程序中的 LaravelMultilingualRoutes 命名空间更改重命名为 MultilingualRoutes 即可。最常见的情况是将 DetectRequestLocale 中间件中的命名空间更改。

测试

composer test

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请通过电子邮件 hello@chinleung.com 而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件

Laravel 包模板

此包是使用 Laravel 包模板 生成的。