laurentesc/laravel-subdomain-localization

Laravel 的子域名本地化支持

1.0.0 2015-08-17 15:44 UTC

This package is not auto-updated.

Last update: 2024-09-27 15:07:59 UTC


README

重要通知:此包不再维护。

Laravel-Subdomain-Localization

Latest Stable Version Total Downloads Build Status

Laravel 的子域名本地化支持。

目录

安装

Composer

将 Laravel-Subdomain-Localization 添加到您的 composer.json 文件中。

"laurentesc/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 个外观: LocalizeRouter

如果您想使用它们,请打开 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许可证