проблема с изменением языка по умолчанию (локализации) в laravel 7

я пытаюсь сделать многоязычное представление в laravel, я все настроил, но когда я меняю локализацию в config/app.php с en на ar... она остается en, и я тестировал функцию App::getLocal

мои файлы перевода messages.php для ru

'''

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */
"offer name required" => "the name field is required",
"offer name max" => "the name cannot exceed 100 characters",
"offer name unique" => "offer name is already used",
"offer photo required" => "photo field is required also"
];

''' для ар

'''

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */
"offer name required" => "يجب ادخال اسم العرض",
"offer name max" => "يجب أن لا يتعدى الاسم 100 عنصرا",
"offer name unique" => "هذا الاسم غير متوفر",
"offer photo required" => "يجب ادخال رابط الصورة"
];

''' когда я печатаю сообщение для теста, используя этот код: '''

<?php

namespace App\Http\Controllers;
use App;
use Illuminate\Http\Request;

class locale extends Controller
{
    function getlocal(){
 
     echo __('messages.offer name required');
     echo(' <br> ');
   
}}

'''

он всегда печатает на английском языке, хотя я поместил его locale = ar в app.php

я надеюсь, что вы можете помочь мне решить эту проблему .. и если вам нужна дополнительная информация, скажите мне .. спасибо за ваше время


person mehdi    schedule 24.09.2020    source источник
comment
Какая у вас fallback_locale? Я до сих пор не знаю, в чем проблема, но было бы интересно узнать. И какой URL стоит за этой функцией?   -  person Flo Espen    schedule 24.09.2020
comment
мой fallback_locale находится в URL-адресе функции /local .. это простой маршрут, который вызывает контроллер только для тестирования   -  person mehdi    schedule 24.09.2020


Ответы (2)


Я бы предложил сохранить язык в сеансе и использовать промежуточное программное обеспечение для setLocale.

Рабочий пример

ПО промежуточного слоя SetLocale.php

 public function handle($request, Closure $next)
{
    if (Session::has('language'))
    {
        App::setLocale(strtolower(Session::get('language')));
    }
    return $next($request);
}

Функция контроллера для установки языка

 public function setLanguage(string $language)
{
    if (Session::has('language'))
    {
        Session::forget('language');
    }
    Session::put('language', $language);

    return redirect()->back();
}

Итак, теперь во всем, что происходит на веб-сайте, промежуточное программное обеспечение будет проверять язык и устанавливать его в соответствии с тем, что происходит в сеансе.

Также не забудьте указать промежуточное ПО в $middlewareGroups в app\Http\Kernel.php

Вы можете создать форму в любом месте на веб-сайте, чтобы пользователь мог выбрать предпочтительный язык с маршрутом к функции контроллера.

person Andrei Munteanu    schedule 24.09.2020

  1. Вы можете попробовать очистить кеш с помощью команды php artisan config:clear.

  2. Возможно проблема с пробелами. Попробуйте изменить

    // "offer name required" => "يجب ادخال اسم العرض",
    'offer_name_required' => 'يجب ادخال اسم العرض',
    
    // echo __('messages.offer name required');
    echo __('messages.offer_name_required');
    
person aleksejjj    schedule 24.09.2020
comment
и я удалил пробелы и получил ту же проблему - person mehdi; 24.09.2020