Делаем сайт на 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.
Готово! Теперь шаблоны выводят сообщения в зависимости от локали, установленной у пользователя.

Комментарии
Отправить комментарий