Laravel 多语化

一、安装Laravel-Localization

1. 执行composer命令

composer require mcamara/laravel-localization

2. 发布资源

php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"

3. 修改app/Http/Kernel.php增加中间件

class Kernel extends HttpKernel {
    /**
    * The application's route middleware.
    *
    * @var array
    */
    protected $middlewareAliases = [
        /**** OTHER MIDDLEWARE ****/
        'localize'                => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
        'localizationRedirect'    => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
        'localeSessionRedirect'   => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
        'localeCookieRedirect'    => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class,
        'localeViewPath'          => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class
    ];
}

4. Web路由使用中间件

Route::group(
[
	'prefix' => LaravelLocalization::setLocale(),
	'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
], function(){ //...
});

二、多语化配置中简和中繁(zh-CN,zh-TW)

1. 准备语言文件

resources/
└── lang/
    ├── zh-CN/
    │   └── messages.php
    └── zh-TW/
        └── messages.php

// resources/lang/zh-CN/messages.php
return [
    'register' => '注册',
    'login' => '登录',
];

// resources/lang/zh-TW/messages.php
return [
    'register' => '註冊',
    'login' => '登入',
];

2. 使用翻译方法

Laravel 提供两个主要函数:

__():最常用的,用于输出语言文本

@lang():Blade 模板中使用(功能和 __() 一样)

echo __('messages.login');

<h1>{{ __('messages.login') }}</h1>

3. 设置当前语言

默认语言在 config/app.php 中设置:

'locale' => 'zh-CN',

在 config/laravellocalization.php 中配置多语化支持的语言

'supportedLocales' => [
    'zh-CN' => ['name' => 'Chinese (Simplified)',   'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh-CN'],
    'zh-TW' => ['name' => 'Chinese (Traditional)',  'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh-TW'],
],

三、重要修改

1. 重定向中间件,避免seo重复内容

以下重定向中间件取决于config/laravellocalization.php中的设置hideDefaultLocaleInURL 和useAcceptLanguageHeader

LocaleSessionRedirect
LocaleCookieRedirect

只要 URL 中存在语言环境,该中间件就会将其存储在会话(cookie/session)中。
如果 URL 中不存在语言环境,则此中间件将检查以下内容
如果会话中未保存任何语言环境且useAcceptLanguageHeader设置为 true,则从浏览器计算语言环境并重定向到具有语言环境的url。
如果会话中保存了语言环境,则重定向到具有语言环境的 url,除非它是默认语言环境并hideDefaultLocaleInURL设置为true。

例如,如果用户导航到http://url-to-laravel/test 并且en是当前语言环境,它将自动将他重定向到http://url-to-laravel/en/test。

LaravelLocalizationRedirectFilter

当 url 中存在默认语言环境且hideDefaultLocaleInURL设置为 true 时,中间件会重定向到不带语言环境的url。

例如,如果es是默认语言环境,则http://url-to-laravel/es/test将被重定向到http://url-to-laravel/test并且App::getLocale()将被设置为es。

如果新项目建议 http://domain.com/lang/about 这样的结构 便于seo 
http://domain.com 跳转默认语言 http://domain.com/zh-CN

如果旧项目新增多语化 建议开启hideDefaultLocaleInURL 避免重复内容被收录影响seo
http://domain.com/zh-CN 跳转到 http://domain.com

2. 本地化 URL,避免多次重定向

旧的写法
<a href="{{ route('login') }}">
改为
<a href="{{ LaravelLocalization::localizeUrl(route('login')) }}">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值