Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.

Локализация

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.x. Почему это важно?

Введение

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

Языковые файлы

Языковые строки хранятся в папке app/lang Внутри неё должны располагаться подпапки – языки, поддерживаемые приложением:

/app
	/lang
		/en
			messages.php
		/es
			messages.php

Пример языкового файла

Языковые файлы (скрипты) просто возвращают массив пар ключ/значение.

<?php

return array(
	'welcome' => 'Добро пожаловать на мой сайт!'
);

Изменение языка по умолчанию "на лету"

Язык по умолчанию указан в файле настроек app/config/app.php. Вы можете изменить текущий язык во время работы вашего приложения методом App::setLocale:

App::setLocale('es');

Резервный язык локализации

Вы также можете установить резервный язык локализации – в случае, если для основного языка нет вариантов перевода, будет браться строка из резервного файла локализации. Обычно это английский язык, но вы можете это поменять. Настройка находится в файле app/config/app.php:

'fallback_locale' => 'en',

Основы использования

Получение строк из языкового файла

echo Lang::get('messages.welcome');

Первый компонент, передаваемый методу get – имя языкового файла, а затем указывается имя строки, которую нужно получить.

Примечание: если строка не найдена, то метод get вернёт её путь (ключ).

Вы также можете использовать функцию trans – короткий способ вызова метода Lang::get:

echo trans('messages.welcome');

Замена параметров внутри строк

Сперва определите параметр в языковой строке:

'welcome' => 'Welcome, :name',

Затем передайте массив вторым аргументом методу Lang::get:

echo Lang::get('messages.welcome', array('name' => 'Dayle'));

Проверка существования языковой строки

if (Lang::has('messages.welcome'))
{
	//
}

Формы множественного числа

Формы множественного числа – проблема для многих языков, так как все они имеют разные сложные правила для их получения. Однако вы можете легко справиться с ней в ваших языковых файлах используя символ “|” для разделения форм единственного и мнжественного чисел.

'apples' => 'There is one apple|There are many apples',

Для получения такой строки используется метод Lang::choice:

echo Lang::choice('messages.apples', 10);

Вы можете указать не два, а несколько вариантов выражения множественного числа:

echo Lang::choice('товар|товара|товаров', $count, array(), 'ru');

Благодаря тому, что Laravel использует компонент Symfony Translation cвы можете легко создать более точные правила для проверки числа:

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

Сообщения валидации

О том, как использовать файлы локализации для сообщений валидации, смотрите соответствующий раздел документации.

Перекрытие файлов локализации из пакетов

Многие пакеты идут со своими файлами локализации. Вы можете “перекрыть” их, располагая файлы в папках app/lang/packages/{locale}/{package}. Например, если вам надо перекрыть файл messages.php пакета skyrim/hearthfire, путь до вашего файла локализации должен выглядеть так: app/lang/packages/en/hearthfire/messages.php. Нет нужды дублировать файл целиком, можно указать только те ключи, которые должны быть перекрыты.