Функция __
Функция __ является основным инструментом локализации в Laravel. Она извлекает строку перевода из файлов локализации, расположенных в директории resources/lang. В качестве первого параметра передаётся ключ строки в формате 'file.key' или сама строка для перевода. Вторым параметром можно передать массив замен для подстановки значений.
Синтаксис
<?php
__($key, $replace = [], $locale = null);
?>
Параметры функции:
-
$key- ключ перевода (строка в формате 'file.key') или сама строка для перевода -
$replace- массив замен для подстановки (по умолчанию пустой массив) -
$locale- код языка для перевода (по умолчанию текущий язык)
Пример с ключом перевода
Создадим файл перевода для английского языка:
<?php
return [
'welcome' => 'Welcome to our website',
'goodbye' => 'Goodbye',
];
?>
Теперь создадим файл перевода для русского языка:
<?php
return [
'welcome' => 'Добро пожаловать на наш сайт',
'goodbye' => 'До свидания',
];
?>
Используем функцию __ в контроллере:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class PageController extends Controller
{
public function index()
{
$welcome = __('messages.welcome');
$goodbye = __('messages.goodbye');
echo $welcome;
echo "n";
echo $goodbye;
}
}
?>
Результат выполнения кода при установленном русском языке:
"Добро пожаловать на наш сайт"
"До свидания"
Результат выполнения кода при установленном английском языке:
"Welcome to our website"
"Goodbye"
Пример с заменой значений
Создадим файл перевода с плейсхолдерами:
<?php
return [
'greeting' => 'Привет, :name!',
'age_message' => 'Тебе :age лет.',
];
?>
Используем функцию __ с массивом замен:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function show($id)
{
$user = ['name' => 'John', 'age' => 25];
$greeting = __('messages.greeting', ['name' => $user['name']]);
$ageMessage = __('messages.age_message', ['age' => $user['age']]);
echo $greeting;
echo "n";
echo $ageMessage;
}
}
?>
Результат выполнения кода:
"Привет, John!"
"Тебе 25 лет."
Пример использования в Blade-шаблонах
Функция __ может использоваться непосредственно в Blade-шаблонах:
<h1>{{ __('messages.welcome') }}</h1>
<p>{{ __('messages.greeting', ['name' => Auth::user()->name]) }}</p>
<p>{{ __('messages.age_message', ['age' => $userAge]) }}</p>
Результат рендеринга шаблона при русском языке:
<h1>Добро пожаловать на наш сайт</h1>
<p>Привет, John!</p>
<p>Тебе 25 лет.</p>
Пример с заданием конкретного языка
Можно указать конкретный язык для перевода, передав третий параметр:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class LocaleController extends Controller
{
public function test()
{
$en = __('messages.welcome', [], 'en');
$ru = __('messages.welcome', [], 'ru');
echo "English: " . $en;
echo "n";
echo "Russian: " . $ru;
}
}
?>
Результат выполнения кода:
"English: Welcome to our website"
"Russian: Добро пожаловать на наш сайт"
Пример с указанием локали в файле конфигурации
Установим локали в конфигурационном файле:
<?php
return [
'locale' => 'ru',
'fallback_locale' => 'en',
];
?>
При такой настройке функция __ будет автоматически использовать русский язык:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class TestController extends Controller
{
public function index()
{
$res = __('messages.welcome');
echo $res;
}
}
?>
Результат выполнения кода:
"Добро пожаловать на наш сайт"
Смотрите также
-
функция
trans,
которая является альтернативой функции __ -
функция
trans_choice,
которая переводит строки с учетом склонений -
класс
Lang,
который предоставляет дополнительные методы для работы с локализацией -
метод
get,
который извлекает строку перевода из хранилища