加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel 5多语言支持

发布时间:2021-08-28 03:44:27 所属栏目:大数据 来源: https://www.jb51.cc
导读:我是laravel的新手,我正试图用多语言来支持我的应用程序. 我已经下载了laravel 5的默认登录系统,并从下面的链接中集成了多支持语言教程 https://laracasts.com/discuss/channels/tips/example-on-how-to-use-multiple-locales-in-your-laravel-5-website 但

我是laravel的新手,我正试图用多语言来支持我的应用程序.
我已经下载了laravel 5的默认登录系统,并从下面的链接中集成了多支持语言教程

https://laracasts.com/discuss/channels/tips/example-on-how-to-use-multiple-locales-in-your-laravel-5-website

但它给我登录页面url localhost / en / login多语言支持教程但是当我使用登录系统而没有集成多语言支持时,它给了我登录页面laravel / auth / login的URL.

这是我的kernel.PHP

class Kernel extends HttpKernel {

    /**
     * The application's global HTTP middleware stack.
     *
     * @var array
     */
    protected $middleware = [
        'AppHttpMiddlewareLanguage',
        'IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode',
        'IlluminateCookieMiddlewareEncryptCookies',
        'IlluminateCookieMiddlewareAddQueuedCookiesToResponse',
        'IlluminateSessionMiddlewareStartSession',
        'IlluminateViewMiddlewareShareErrorsFromSession',
        'AppHttpMiddlewareVerifyCsrfToken',
    ];

    /**
     * The application's route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'test'=> 'AppHttpMiddlewareTest',
        'auth' => 'AppHttpMiddlewareAuthenticate',
        'auth.basic' => 'IlluminateAuthMiddlewareAuthenticateWithBasicAuth',
        'guest' => 'AppHttpMiddlewareRedirectIfAuthenticated',
    ];

}

这是我的RouteServiceProvider.PHP

<?PHP namespace AppProviders;

use IlluminateRoutingRouter;
use IlluminateHttpRequest;
use IlluminateFoundationSupportProvidersRouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider {

    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'AppHttpControllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  IlluminateRoutingRouter  $router
     * @return void
     */
    public function boot(Router $router)
    {
        parent::boot($router);

        //
    }

    /**
     * Define the routes for the application.
     *
     * @param  IlluminateRoutingRouter  $router
     * @return void
     */
    public function map(Router $router, Request $request)
    {
        $locale = $request->segment(1);
        $this->app->setLocale($locale);

        $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
        require app_path('Http/routes.PHP'); });
    }    
}

我不知道如何将此教程集成到此默认登录系统中.

提前致谢.

解决方法:

前段时间我在给定的教程中像你一样苦苦挣扎.经过研究/搜索,我最终得到了这样的结果.请注意我仍在努力.

第1步:添加您的区域设置
在config / app.PHP中,在locales下面添加skip_locals行

‘locales’=> [‘en’=> ‘英语’,’sv’=> ‘瑞典’],
‘skip_locales’=> [ ‘管理员’, ‘AUTH’, ‘等’],

第2步:为您的路线添加前缀
将map方法更改为以下内容

public function map(Router $router, Request $request)
{
    $locale = $request->segment(1);
    $this->app->setLocale($locale);
    $skipLocales = $this->app->config->get('app.skip_locales');  

    // If the locale is added to skip_locales array continue without locale
    if (in_array($locale, $skipLocales)) {
        $router->group(['namespace' => $this->namespace], function($router)
        {
            require app_path('Http/routes.PHP');
        });
    }
    else {
        $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.PHP');
        });
    }
}

第3步:创建语言中间件
用这个更改内容

<?PHP namespace AppHttpMiddleware;

use Closure;
use IlluminateRoutingRedirector;
use IlluminateHttpRequest;
use IlluminateFoundationApplication;
use IlluminateContractsRoutingMiddleware;

class Language implements Middleware
{

    public function __construct(Application $app, Redirector $redirector, Request $request)
    {
        $this->app = $app;
        $this->redirector = $redirector;
        $this->request = $request;
    }

    /**
     * Handle an incoming request.
     *
     * @param IlluminateHttpRequest $request            
     * @param Closure $next            
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Make sure the current local exists
        $locale = $request->segment(1);

        // If the locale is added to to skip_locales array continue without locale
        if (in_array($locale, $this->app->config->get('app.skip_locales'))) {
            return $next($request);
        } else {
            // If the locale does not exist in the locales array continue with the fallback_locale
            if (! array_key_exists($locale, $this->app->config->get('app.locales'))) {
                $segments = $request->segments();
                array_unshift($segments, $this->app->config->get('app.fallback_locale'));
                // $segments[0] = $this->app->config->get('app.fallback_locale');
                return $this->redirector->to(implode('/', $segments));
            }
        }
        $this->app->setLocale($locale);

        return $next($request);
    }

}

希望这会有所帮助!

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读