Laravel 通过 URL/Route 更改语言

问题描述 投票:0回答:2

对 Laravel 来说相当新,我正在尝试添加一项功能,允许用户通过单击 header.blade.php 文件中的按钮在两种语言之间切换。到目前为止,我已经得到了它,因此在相应的 lang 目录中有一个带有测试字符串的 test.php 文件,并且已经成功地让

<p>{{__('test.test')}}</p>
在手动设置时显示正确的语言。目前我不确定这是否真的调用了更新语言的路由,或者我更新它的逻辑是否错误,因为我没有收到错误,并且我正在使用 barryvdh/laravel-debugbar 进行调试。

我的按钮逻辑:

<button href="{{ url('language', config('app.locale') == 'en' ? 'fr' : 'en') }}">{{ config('app.locale') }}</button>

在routes/web.php中:

Route::get('/language', 'LanguageController@show');
Route::post('/language/{lang}', 'LanguageController@update');

LanguageController.php,通过 php artisan make:controller --api 创建

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class LanguageController extends Controller
{
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        return App::getLocale();
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //Tried the following
        config(['app.locale' => $id]);
        App::setlocale($id);
    }
}

问题:

  1. 这是在运行时更新语言的正确方法吗?
  2. 如何判断我的 api 调用是否正在进行?
  3. 如何在模板 .vue 文件中实现此目的?
  4. 为该语言创建一个控制器是多余的吗?
  5. 如果区域设置更改,按钮的内部 HTML 会更改吗?
  6. 在运行时影响配置文件是不好的做法吗?

--编辑-- 我还应该提到,我为此创建一个控制器的唯一原因是因为我在 web.php 中使用了一个函数来调用路由,但是,他们表示它们正在运行 Closure

php artisan route:list
,并且经过研究,我发现我无法告诉我这是否正确

php laravel-blade laravel-5.8
2个回答
3
投票

你的方法是对的,但还缺少一些东西。

您无法使用配置在运行时编辑语言。

在用户会话中保存本地语言,并创建一个新的中间件以在每个请求上设置会话中保存的语言。

我发现这篇文章可以帮助你,localization-laravel


0
投票

如果您想在源代码中使用@lang,您可以在.env文件中更改(APP_LOCALE={your-language-character} APP_FALLBACK_LOCALE={your-language-character}APP_FAKER_LOCALE={your-language-character})。例如,我使用 .env 文件将网站语言从英语更改为波斯语。

© www.soinside.com 2019 - 2024. All rights reserved.