Делаем сайт на Laravel на нескольких языках

 Сделаем на примере русского (ru) и английского (en) языка. (прим. переводчика — в оригинале был французский). Laravel, по дефолту, использует английский, но не все им владеют.





Существует множество сторонних пакетов для создания сайтов на Laravel имеет встроенную поддержку локализации.


Сообщения хранятся в файлах директории resources/lang. В ней должны быть подкаталоги для каждого языка, поддерживаемого сайтом.


ЧТО МЫ БУДЕМ ДЕЛАТЬ В УРОКЕ:

Создадим папки для разных языков в resources/lang: ru/en.

Сделаем посредника (middleware) для внедрения информации о локали в каждый запрос.

Установим выбранный пользователем язык в сессию laravel.

Отобразим сообщение на выбранном языке в шаблоне Blade.

Для примера создадим новое приложение laravel:


laravel new laravel_localization_example

Входим в папку laravel_localization_example. По умолчанию локаль установлена на английский язык (en). Вы можете найти эту настройку в файле config/app.php:


'locale' => 'en',

Вы можете изменить это значение на нужный вам язык. Установим на ‘ru’.


СОЗДАЕМ ПАПКИ ДЛЯ ЯЗЫКОВ

В папке resources/lang уже есть подкаталог en. В нем лежат несколько файлов: auth.php, auth.php, passwords.php, validation.php.


Все файлы возвращают данные в формате key:value.


Добавим поддержку русского языка (ru). Создадим папку ru в директории resources/lang. И создадим файл constant.php и в каталоге en/ и в каталоге ru/. Убедитесь, что ключи одинаковы для всех языков. Мы просто будем менять значения.


$locale ='ru';

App::setLocale($locale);

Получаем значение локали:


App::getLocale($locale);

Помещаем информацию о локали в сессию с помощью метода контроллера:


public function setLang($locale)

{

    App::setLocale($locale);

    session()->put('locale', $locale);

    return redirect()->back();

}

СОЗДАДИМ ПОСРЕДНИКА (MIDDLEWARE) ДЛЯ УСТАНОВКИ ЛОКАЛИ В ЗАПРОСЕ

Создаем нового посредника:


php artisan make:middleware Localization

Вышеприведенная команда создает файл Localization.php папке app/Http/Middleware.


Сделаем новый метод в файле app/Http/Middleware/Localization.php для установки языка.

Проверим, установлен ли язык в сессии, если установлен — назначаем.

<?php

 

// Localization.php

 

namespace App\Http\Middleware;

 

use Closure;

use App;

 

class Localization

{

    /**

     * Handle an incoming request.

     *

     * @param  \Illuminate\Http\Request  $request

     * @param  \Closure  $next

     * @return mixed

     */

    public function handle($request, Closure $next)

    {

        if (session()->has('locale')) {

            App::setLocale(session()->get('locale'));

        }

        return $next($request);

    }

}

 


РЕГИСТРИРУЕМ ПОСРЕДНИКА

При разработке сайта на laravel после создания посредника, его нужно зарегистрировать в файле app/Http/Kernel.php, добавив одну строку:


/**

     * The application's route middleware groups.

     *

     * @var array

     */

    protected $middlewareGroups = [

        'web' => [

            \App\Http\Middleware\EncryptCookies::class,

            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

            \Illuminate\Session\Middleware\StartSession::class,

    .....

    ....

            \App\Http\Middleware\Localization::class,

 

        ],

 


ПОКАЗЫВАЕМ СООБЩЕНИЯ

Создаем для проверки сообщений на разных языках новый шаблон /resources/views/hello.blade.php:


{{ trans('constant.welcome')}}

Здесь я использую функцию trans(), принимающая в качестве аргумента комбинацию имени файла и имени ключа — filename.array_key_name.


Готово! Теперь шаблоны выводят сообщения в зависимости от локали, установленной у пользователя.

#LARAVEL #LARAVELРАЗРАБОТКА #РАЗРАБОТКА_САЙТОВ_НА_LARAVEL #LARAVEL_РАЗРАБОТЧИКИ

Комментарии

Популярные сообщения из этого блога

Английские деревянные окна со стеклопакетом

диван из ротанга

Садовый диван: Эстетика и Комфорт на Открытом Воздухе