hoyvoy/laravel-subdomain-localization

Laravel的子域名本地化支持

5.6.6 2018-04-20 18:40 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:24:36 UTC


README

Build Status Codacy Badge StyleCI

Laravel-Subdomain-Localization

Laravel的子域名本地化支持

目录

安装

使用composer安装

composer require hoyvoy/laravel-subdomain-localization

从Laravel 5.5开始,可以自动发现服务提供者。对于5.5之前的Laravel版本,您必须在config/app.php中注册服务提供者

Hoyvoy\Localization\LocalizationServiceProvider::class,

Laravel-Subdomain-Localization包含2个外观:LocalizeRouter

如果您想使用它们,打开config/app.php并将以下行添加到aliases数组中

	...
    'Localize'  => Hoyvoy\Localization\Facades\Localize::class,
    'Router'    => Hoyvoy\Localization\Facades\Router::class,
	...

Laravel自带一个中间件,可用于强制使用语言子域名。

如果您想使用它,打开app/Http/kernel.php并将此路由中间件添加到routeMiddleware数组中

	...
    'localize' => \Hoyvoy\Localization\Middleware\Localization::class,
	...

用法

区域检测

打开app/Providers/RouteServiceProvider.php并在boot方法中添加对detectLocale()的调用。例如,使用外观

	...
	use Hoyvoy\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="Hoyvoy\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文件中读取。

  • aliases(默认为空数组)

您可以指定别名以使用自定义子域名而不是区域代码。

示例:['german' => 'de']表示german.mydomain.dev将区域设置为de,如果区域设置为de,则路由将使用前缀german.而不是de.

有用函数

该包提供了您可以在视图中使用的有用函数,例如

翻译当前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 许可证 许可。