sinkcup/

laravel-locale-setter

检测 Accept-Language,设置Locale,然后你可以使用 Laravel 国际化

1.0.0 2019-03-04 13:56 UTC

This package is auto-updated.

Last update: 2024-09-05 02:39:20 UTC


README

本包检测 HTTP 头中的 Accept-Language,设置Locale,然后你可以使用 Laravel 国际化 进行多语言支持。

CircleCI

安装

通过 Composer 安装此包

composer require sinkcup/laravel-locale-setter

接下来,将包的服务提供者添加到你的 config/app.php

// config/app.php

'providers' => [
    sinkcup\LaravelLocaleSetter\LocaleServiceProvider::class
]

然后你需要发布包的配置

php artisan vendor:publish --provider="sinkcup\LaravelLocaleSetter\LocaleServiceProvider"

这将创建 config/locale.php 文件。

用法

全局中间件

通常,它应该在每次 HTTP 请求期间运行,只需将中间件类添加到你的 app/Http/Kernel.php 类的 $middleware 属性中。例如

// app/Http/Kernel.php

protected $middleware = [
    \sinkcup\LaravelLocaleSetter\Http\Middleware\DetectLocale::class,
];

将中间件分配给路由

如果你想将中间件分配给特定的路由,你应该将中间件类添加到你的 app/Http/Kernel.php 类的 $routeMiddleware 属性中。例如

// app/Http/Kernel.php

protected $routeMiddleware = [
    'locale' => \sinkcup\LaravelLocaleSetter\Http\Middleware\DetectLocale::class,
]

一旦在 HTTP 内核中定义了中间件,你可以使用中间件方法将中间件分配给路由

Route::group(['middleware' => ['auth:api', 'locale']], function () {
    Route::resource('/users', 'UserController');
    Route::resource('/photos', 'PhotoController');
});

配置

Linux 区域设置和 HTML 4 语言代码遵循 1995 年 3 月发布的 RFC1766,这已经过时。

由于历史原因,Linux 区域设置和浏览器目前仍在使用旧标准。

iOS 希望改变它,使用 zh-Hans 和 zh-Hans-CN,但这同样是错误的。

如果你想正确地做这件事,遵循现代标准 - HTML5 使用的 BCP47,并将旧语言代码映射到新代码。

你应该使用 cmn-Hans、cmn-Hans-CN、cmn-Hant 和 cmn-Hant-TW,而不是 zh-CN、zh-TW、zh-Hans 和 zh-Hant。

创建目录

    resources/lang/cmn_Hans
    resources/lang/cmn_Hant

然后使用

// config/locale.php

'locale_map' => [
    'cmn_hans' => 'cmn_Hans',
    'zh_cn' => 'cmn_Hans',
    'zh_hans' => 'cmn_Hans',
    'cmn_hant' => 'cmn_Hant',
    'zh_hant' => 'cmn_Hant',
    'zh_hk' => 'cmn_Hant',
    'zh_tw' => 'cmn_Hant',
],

如果你关注地区差异,创建目录

    resources/lang/cmn_Hans_CN
    resources/lang/cmn_Hans_HK
    resources/lang/cmn_Hant_HK
    resources/lang/cmn_Hant_TW

然后使用

// config/locale.php

'locale_map' => [
    'cmn_hans_cn' => 'cmn_Hans_CN',
    'zh_cn' => 'cmn_Hans_CN',
    'cmn_hans_hk' => 'cmn_Hans_HK',
    'cmn_hant_hk' => 'cmn_Hant_HK',
    'zh_hk' => 'cmn_Hant_HK',
    'cmn_hant_tw' => 'cmn_Hant_TW',
    'zh_tw' => 'cmn_Hant_TW',
],