getsupercode/localizater

此包已被弃用,不再维护。没有建议的替代包。

Laravel 包,用于在多个区域前缀中包装路由

2.0.0 2020-09-28 11:29 UTC

This package is auto-updated.

Last update: 2023-01-11 12:16:04 UTC


README

Latest Version on Packagist Total Downloads Test StyleCI

Laravel 包,用于在多个区域前缀中包装路由。

安装

通过 Composer

composer require getsupercode/localizater

为了自动检测和更改应用程序的区域设置,您可以将此中间件添加到您的 app/Http/Kernel

protected $middlewareGroups = [
    'web' => [
        \Getsupercode\Localizater\LocalizaterMiddleware::class,
        // ...
    ]
];

配置

默认情况下,应用程序的区域设置为仅 en,默认区域不添加前缀。如果您想为默认区域添加前缀,请运行以下命令以发布配置文件

php artisan vendor:publish --provider="Getsupercode\Localizater\LocalizaterServiceProvider" --tag="config"

安装此包后,添加中间件和发布配置文件。您需要编辑配置文件 config/localizater.php 以添加更多区域设置。

注意

默认区域设置位于 config/app.php 文件中的 app.locale

配置:localizater.locales

添加受支持的区域设置。建议使用其本地语言编写区域值。

'locales' => [
    'en' => 'English',
    'fr' => 'Français',
    'ar' => 'العربية',
]

配置:localizater.rtl_locales

添加 RTL 方向区域设置。

'rtl_locales' => ['ar']

配置:localizater.prefix_default

如果此选项设置为 true,则默认区域 URL 将添加前缀。

true:
  www.example.com/en
  www.example.com/fr

false:
  www.example.com
  www.example.com/fr

配置:localizater.prefix_default_name

如果此选项设置为 true,则默认区域路由名称将添加前缀。

true

方法 URI URI 名称
GET HEAD /page en.page
GET HEAD /fr/page fr.page

false

方法 URI URI 名称
GET HEAD /page page
GET HEAD /fr/page fr.page

用法

此包不会覆盖您已知的路由功能。它只是一个包装函数,将为您创建多个区域路由。

// routes/web.php

<?php

use Getsupercode\Localizater\Facades\Localizater;
use Illuminate\Support\Facades\Route;

Localizater::group(function () {
    Route::view('/', 'welcome')->name('welcome');

    Route::get('/user', 'UserController@index');
});

// Put other (Non read) route actions outside the `Localizater::group` as you don't need to have multiple locales for those actions.

Route::post('/user', 'UserController@store');

上面的示例将给我们以下结果

方法 URI 名称
GET|HEAD / welcome
GET|HEAD /fr fr.welcome
GET|HEAD /user
GET|HEAD /fr/user fr.
POST /user

路由命名

如果您为路由添加了名称,则它将以区域键 locale.name 预先附加。 例如:(fr.welcome

所有没有名称的区域都将具有相同的名称前缀,如 fr.。这是正常的,因为您不需要其名称。

Localizater 属性

您可以将属性添加到本地化器分组函数,就像您使用路由分组函数一样。

Localizater::group(['middleware' => 'auth'], function () {
    Route::view('/home', 'home')->name('home');
});

或者

Localizater::group(function () {
    Route::group(['middleware' => 'auth'], function () {
        Route::view('/home', 'home')->name('home');
    });
});

在指定区域获取路由 URL

您可以在不同的地区键中获取当前路由URL

// Current route URL: example.com

locale_route(null, 'fr');

// Output: example.com/fr

或者一个命名的路由

// Route URL: example.com/fr/home

locale_route('home', 'en');

// Output: example.com/home

您可以在地区参数之后传递与 route() 函数相同的参数。

// locale_route($route, $locale, $parameters, $absolute);

// Current route
locale_route(null, 'fr', ['status' => 'active'], true);

// Named route
locale_route('home', 'fr', ['status' => 'active'], true);

获取地区语言名称

您可以在 localizater.locales 配置中获取当前地区或指定地区的地区键的值

locale_name();
// Output: English

locale_name('fr');
// Output: Français

locale_name('ar');
// Output: العربية

根据当前地区获取HTML dir 属性

您可以根据当前地区获取HTML dir 属性。该包将在 localizater.rtl_locales 配置中搜索RTL地区。如果当前地区被列出,则输出将是 rtlltr,如果没有列出。

// Current locale is: ar
locale_dir();
// Output: rtl

// Current locale is: en
locale_dir();
// Output: ltr
<html dir="{{ locale_dir() }}"></html>

您也可以获取指定地区的 dir 属性

locale_dir('ar');
// Output: rtl

变更日志

请查看变更日志以获取最近更改的更多信息。

测试

composer test

贡献

请查看 contributing.md 以获取详细信息。

安全

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

鸣谢

许可证

MIT。请查看 许可证文件 以获取更多信息。