Laravel — это мощный инструмент, позволяющий разработчикам создавать многоязычные веб-сайты. Внедрение веб-локализации в ваши Laravel позволяет обеспечить персонализированный пользовательский опыт для посетителей с разным языковым опытом, что в конечном итоге расширяет охват аудитории и повышает вовлеченность пользователей.
Мы шаг за шагом расскажем вам о внедрении локализации в ваше Laravel приложение и познакомим вас с инструментом, который может упростить и улучшить ваши усилия по локализации!
Почему следует локализовать веб-сайт Laravel ?

Вот несколько важных причин, почему вам следует локализовать свой веб-сайт Laravel .
- Охватите глобальную аудиторию: локализация вашего Laravel позволит расширить охват вашего приложения для международной аудитории. Это даст возможность пользователям из разных стран и с разным языковым опытом понимать ваш контент и взаимодействовать с ним.
- Улучшает пользовательский опыт: локализация позволяет пользователям взаимодействовать с приложением на своем родном языке, что значительно улучшает пользовательский опыт. Это может повысить вовлеченность пользователей, снизить показатель отказов и увеличить конверсию.
- Конкурентное преимущество: на конкурентном глобальном рынке предложение приложений на нескольких языках может дать значительное преимущество перед конкурентами. Это демонстрирует вашу приверженность международным рынкам и может помочь вам более эффективно выходить на новые рынки.
- Улучшает SEO: Хорошо локализованные веб-сайты, как правило, занимают более высокие позиции в поисковых системах по запросам на определенном языке. Это может увеличить посещаемость вашего блога и онлайн-видимость на различных рынках благодаря многоязычному переводу.
Требования к многоязычной локализации Laravel

При реализации многоязычной локализации в Laravelнеобходимо учитывать несколько требований и шагов.
- Чтобы получить доступ к новейшим функциям локализации, убедитесь, что вы используете последнюю версию Laravel (например, версию 10.x).
- Базовое понимание PHP и фреймворка Laravel будет полезно в процессе внедрения.
- Настройте локальную среду разработки или сервер, поддерживающий Laravel, включая веб-сервер и базу данных.
- С самого начала определите, какие языки будет поддерживать ваше приложение.
Простые переводы Laravel

После ознакомления с требованиями, которые необходимо выполнить перед переводом приложения или веб-сайта Laravel , мы предложим несколько простых шагов для перевода Laravel .
Для этого откройте файл представления, который вы хотите локализовать, например, resources/views/welcome.blade.php. Затем замените тег <body> следующим кодом.
Welcome to Linguise website!
Как видите, приведенный выше текст в настоящее время написан непосредственно в коде. Это менее эффективно и затрудняет перевод веб-сайтов на разные языки (интернационализацию).
Мы собираемся сделать приведенный выше текст более гибким, чтобы его можно было легко адаптировать к разным языкам. Laravel предоставляет для этого очень полезную функцию — систему локализации. В качестве первого шага замените существующий текст следующим кодом.
{{ __('Welcome to Linguise website!') }}
Laravel по умолчанию отобразит приведенный выше текст и выполнит поиск перевода, если пользователь выберет язык, отличный от английского. В этом случае английский будет использоваться в качестве языка приложения по умолчанию.
Настройка языковых настроек в многоязычном веб-приложении Laravel

Но как Laravel определяет текущий язык или узнает, какие языки доступны в приложении? Он проверяет настройки локали в файле config/app.php. Откройте этот файл и найдите следующие два ключа.
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
Приведенное выше пояснение к ключам должно быть понятным. Вкратце, ключ locale содержит локаль по умолчанию для вашего приложения (если в коде не указана другая локаль). Параметр fallback_locale активируется, если в вашем приложении запрашивается несуществующая локаль.
Теперь добавим в этот файл новый ключ, который будет содержать список всех поддерживаемых языковых версий.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
На данный момент мы протестировали веб-версию Laravel с поддержкой трех языков: английского, итальянского и французского.
Обзор файлов перевода Laravel

В Laravel, как и во многих других фреймворках, переводы для разных языков хранятся в отдельных файлах. Для организации этих файлов переводов используются два метода.
Более старый метод хранит файлы в следующей структуре: resources/lang/{en,fr,it}/{myfile.php}. Более новый метод использует JSON-файлы, например, resources/lang/{fr.json, it.json}. В этой статье основное внимание будет уделено более новому методу, хотя принципы работы схожи и со старым, за исключением различий в именовании и доступе к ключам перевода.
Для языков с региональными различиями следует называть языковые каталоги или файлы в соответствии со стандартом ISO 15897. Например, британский английский следует называть en_GB вместо en-gb.
Общая информация
В Laravel, как и во многих фреймворках, переводы для разных языков хранятся в отдельных файлах. Существует два основных метода организации файлов переводов Laravel .
- Традиционный подход предполагает хранение файлов по следующему пути: resources/lang/{en,fr,it}/{myfile.php}.
- Современный подход использует файлы resources/lang/{fr.json, it.json}.
В этой статье основное внимание будет уделено второму методу, хотя принципы применимы к обоим (с различиями в именовании и доступе к ключам перевода).
Для языков, различающихся в зависимости от региона, рекомендуется называть языковые каталоги/файлы в соответствии со стандартами ISO 15897. Например, британский английский будет обозначаться как en_GB, а не en-gb.
Создание файлов перевода Laravel
Настроив языковые параметры для нашего приложения, мы можем приступить к переводу нашего стандартного приветственного сообщения.
Начнём с создания новых файлов локализации в формате JSON в каталоге resources/lang. Сначала создадим файл resources/lang/it.json и заполним его соответствующими переводами.
{
"Welcome to Linguise website!": "Benvenuti nel sito web di Linguise!"
}
Далее добавьте файл resources/lang/fr.json.
{
"Welcome to Linguise website!": "Bienvenue sur le site de Linguise"
}
Как вы можете заметить, мы постоянно ссылаемся на сообщение по умолчанию из файла welcome.blade.php ({{ __('Добро пожаловать на сайт Linguise !') }}). Нет необходимости создавать файл en.json, поскольку Laravel автоматически распознает, что сообщения по умолчанию на английском языке.
Настройка переключения языка в многоязычном приложении Laravel

Кроме того, Laravel пока не настроен на переопределение локального языка, поэтому на данный момент мы будем обрабатывать перевод непосредственно в маршруте. Измените маршрут приветствия по умолчанию в файле routes/web.php следующим образом.
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
В данном случае мы получаем необязательный GET-параметр локали и устанавливаем текущую локаль на его основе (если запрошенная локаль поддерживается).
Теперь вы можете посетить свой веб-сайт и добавить любой из поддерживаемых языков в качестве первого сегмента URL. Например, при переходе по адресу localhost/it или localhost/fr отобразится локализованный контент. Если вы не укажете язык или выберете неподдерживаемый, Laravel по умолчанию будет использовать английский (en).
Промежуточное ПО для локализации Laravel
Включение языкового параметра в каждый URL-адрес может быть неоптимальным решением и нарушить визуальную привлекательность сайта. Для решения этой проблемы мы настроим переключатель языков и будем использовать пользовательскую сессию для отображения переведенного контента. Вы можете создать новое промежуточное ПО в файле app/Http/Middleware/Localization.php или сгенерировать его, выполнив команду artisan make:middleware Localization.
Затем добавьте следующий код внутрь.
Это промежуточное ПО укажет 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,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class, // <--- add this
],
Изменение маршрутов
Далее, в файле routes/web.php определите маршрут для изменения локали. Здесь мы используем маршрут через замыкание, но при желании вы можете разместить тот же код внутри контроллера.
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Кроме того, удалите переключение локали, которое ранее было добавлено к маршруту приветствия по умолчанию. Теперь ваш корневой маршрут должен выглядеть так.
Route::get('/', function () {
return view('welcome');
});
После этого пользователь сможет переключить активный язык, только перейдя по адресу localhost/language/{locale}. Выбранный язык будет сохранен в сессии, и пользователи будут перенаправлены обратно на предыдущую страницу (это обрабатывается промежуточным ПО локализации).
Для проверки перейдите по адресу localhost/language/it (при условии, что в вашем браузере активен сессионный cookie), и вы должны увидеть переведенный контент. Вы можете перемещаться по сайту или обновлять страницу, и выбранный язык останется в силе.
Реализация переключения языка
Теперь нам нужно предоставить пользователю возможность переключать язык в веб-интерфейсе Laravel , вместо того, чтобы заставлять его вручную вводить коды локали в URL-адрес. Для этого создайте простой переключатель языка. Добавьте новый файл по адресу resources/views/partials/language_switcher.blade.php и вставьте следующий код.
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
{{ $locale_name }}
@else
{{ $locale_name }}
@endif
@endforeach
Чтобы добавить недавно созданный переключатель языков в окно «Добро пожаловать», просто добавьте следующую строку в файл welcome.blade.php в том месте, где вы хотите, чтобы переключатель отображался.
@include('partials/language_switcher')
{{ __('Welcome to our website!') }}
Откройте файл app/Providers/AppServiceProvider.php и добавьте следующий код в метод boot(), чтобы при использовании переключателя языка текущая локаль отображалась во всех представлениях
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->composer('partials.language_switcher', function ($view) {
$view->with('current_locale', app()->getLocale());
$view->with('available_locales', config('app.available_locales'));
});
}
Расширенные возможности перевода в Laravel PHP

В дальнейшем мы рассмотрим другие компоненты локализации, а именно дату, число и валюту. Вот шаги, которые необходимо выполнить.
Локализованные даты в Laravel
Работа с датами и временем имеет решающее значение в процессе локализации. Laravel использует Carbon для управления датами и временем. Вот как можно использовать Carbon для отображения локализованной даты.
settings(
[
'locale' => app()->getLocale(),
]
);
// LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
$dateMessage = $today->isoFormat('dddd, LL');
return view('welcome', [
'date_message' => $dateMessage
]);
});
Этот код устанавливает локаль Carbon на основе текущей локали приложения и соответствующим образом форматирует дату.
Чтобы отобразить локализованную дату в представлении:
{{ __('Welcome to our website, :Name', ['name' => ‘Johb’]) }}
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
{{ $date_message }}
Форматирование чисел и валют
В разных странах существуют различные способы форматирования чисел. Например….
- Франция → 123 123,12
- Германия → 123.123,12
- Япония → 123,123
Для учета этих различий в вашем приложении Laravel вы можете использовать NumberFormatter.
Также можно писать цифры на определённом языке.
Вот список валют. Для французской локали (`fr`) валюта будет отображаться в евро (€), а для американской локали (`en_US`) — в долларах США ($).
Альтернативное решение: локализация Laravel с помощью Linguise

После ознакомления с этапами локализации Laravel , описанными в статье, следует отметить, что этот процесс включает в себя множество шагов, требующих от пользователей глубокого понимания программного кода Laravel .
Это, безусловно, может создать трудности для начинающих пользователей, желающих локализовать свои приложения. Поэтому необходимо более инновационное решение, способное к быстрому переводу, поддерживающее локализацию и требующее всего нескольких простых шагов для внедрения.
Одним из перспективных решений является Linguise. Linguise предлагает более простой и эффективный подход к локализации Laravel , не требующий глубоких знаний в программировании. Ключевые особенности Linguise включают в себя:.
- Простая интеграция с Laravel
- Настройте переключатель языков без программирования
- Перевод изображений
- Редактор в реальном времени для настройки переводов под местный контекст
- Динамический перевод для динамически генерируемого контента
- SEO-оптимизация для многоязычных версий
Установка Linguise на веб-сайты Linguise Laravel довольно проста. Вот краткое объяснение.
- Создайте учетную запись Linguise (воспользуйтесь 30-дневной бесплатной пробной версией)
- Зарегистрируйте свой веб-домен Laravel и введите некоторую информацию. Вы получите ключ API.
- Загрузите и подключите скрипт перевода Linguise к полученной папке Laravel .
- Укажите языковые URL-адреса в файле .htaccess.
- Вставьте скрипт переключения языка в раздел <head> вашего HTML-кода.
- Настройте переключатель языков по своему усмотрению
- В веб-интерфейсе Laravel появится переключатель языка, и контент будет переведен автоматически.
Как это работает? С Linguiseвам нужно всего лишь зарегистрироваться и активировать приложение, и появится переключатель языков. После этого вы сможете локализовать контент, например, с помощью редактора в реальном времени, переводить медиафайлы, изображения и т. д.
Вывод
Локализация Laravel — это мощная функция, позволяющая разработчикам создавать многоязычные веб-сайты и приложения. Как мы уже видели, встроенный процесс локализации Laravel включает в себя несколько этапов и требует хорошего понимания фреймворка. Это может быть непросто для новичков или тех, кто ищет более быстрое решение.
Такие инструменты, как Linguise предлагают инновационную альтернативу для тех, кто ищет более оптимизированный подход. Эти решения обеспечивают быструю передачу данных, простую интеграцию и удобные функции, такие как настраиваемые переключатели языков и перевод изображений. Создайте свою учетную запись Linguise и воспользуйтесь нашей функцией локализации вашего Laravel !



