Может войдёшь?
Черновики Написать статью Профиль

Локализация

перевод документация 5.х

  1. 1. Введение
    1. 1.1. Настройка языка
  2. 2. Получение языковых строк
    1. 2.1. Замена частей в строках
  3. 3. Множественное число
  4. 4. Перекрытие языковых файлов пакета
Этот перевод актуален для англоязычной документации на (ветка 5.3) , (ветка 5.2) , (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Возможности для локализации в Laravel предоставляют удобный способ получения языковых строк, позволяя вашему приложению поддерживать несколько языков интерфейса. Языковые строки хранятся в папке resources/lang. Внутри неё должны располагаться подпапки для всех языков, поддерживаемых приложением:

/resources
  /lang
    /en
      messages.php
    /es
      messages.php

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

PHP
<?php

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

Настройка языка

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

PHP
Route::get('welcome/{locale}', function ($locale) {
  
App::setLocale($locale);

  
//
});

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

PHP
'fallback_locale' => 'en',
+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

Определение текущего языка

Вы можете использовать методы PHPgetLocale() и PHPisLocale() фасада App для определения текущего языка и для проверки на совпадение текущего языка с переданным значением:

PHP
$locale App::getLocale();

if (
App::isLocale('en')) {
  
//
}

Получение языковых строк

Вы можете получить строки из языкового файла с помощью функции PHPtrans(). Метод PHPtrans() принимает файл и ключ языковой строки первым аргументом. Например, давайте получим языковую строку welcome из файла resources/lang/messages.php:

PHP
echo trans('messages.welcome');

Конечно, если вы используете шаблонизатор Blade, то для получения языковой строки можете использовать синтаксис {{ }} или директиву PHP@lang (для версии 5.2 и выше):

PHP
{{ trans('messages.welcome') }}

@
lang('messages.welcome')

Если строка не найдена, то метод PHPtrans() вернёт её имя (ключ). В нашем примере это будет messages.welcome.

+ 5.0

добавлено в 5.0 ()

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

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

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

Если строка не найдена, то метод PHPget() вернёт её имя (ключ).

Замена частей в строках

Если хотите, задайте место для замены в языковой строке. Все места для замены начинаются с двоеточия (:). Например, вы можете задать сообщение приветствия с использованием замены для имени:

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

Для подстановки значения при получении языковой строки передайте массив замен вторым аргументом метода PHPtrans():

PHP
echo trans('messages.welcome', ['name' => 'dayle']);
+ 5.2

добавлено в 5.2 ()

Подставляемое значение будет преобразовано в соответствии с тем, как задано место для замены (все символы заглавные или только первый):

PHP
'welcome' => 'Welcome, :NAME'// Welcome, DAYLE
'goodbye' => 'Goodbye, :Name'// Goodbye, Dayle
+ 5.0

добавлено в 5.0 ()

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

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

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

Множественное число

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

PHP
'apples' => 'Это одно яблоко|Это много яблок',

После определения языковой строки с вариантами для разных чисел, вы можете использовать функцию PHPtrans_choice() для получения строки в нужном числе. В данном примере возвратится вариант во множественном числе, так как указано число большее 1:

PHP
echo trans_choice('messages.apples'10);
+ 5.0

добавлено в 5.0 ()

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

Вы также можете передать аргумент локали, чтобы указать язык. Например, если вы хотите использовать русский (ru) язык:

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

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

PHP
'apples' => '{0} Это нисколько|[1,19] Это несколько|[20,Inf] Это много',

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

Многие пакеты поставляются с собственными языковыми файлами. Вместо того, чтобы вскрывать файлы внутри пакета, чтобы настроить строки в них, вы можете перекрыть их, разместив файлы в каталоге resources/lang/vendor/{package}/{locale} (для версии Laravel 5.0 — resources/lang/packages/{locale}/{package}).

Например, если вам необходимо изменить строки английского языка в messages.php для пакета skyrim/hearthfire, вам надо поместить языковой файл в resources/lang/vendor/hearthfire/en/messages.php. В этом файле вам надо задать только те строки, которые вы хотите перекрыть. Все остальные строки, которые вам не надо перекрывать, будут загружаться из языковых файлов самого пакета.

Комментарии (7)

biga

Есть ли готовые русские файлы для validation.php? Понимаю, что это можно сделать самому, но зачем делать то, что возможно уже есть

eduard

Конечно есть: https://github.com/caouecs/Laravel-lang

Sawa4

И не слово про переключения языков и выборки контента из БД ((((((((((

reed

для переключения необходимо в config/app.php изменить 'locale' => 'ru' и 'fallback_locale' => 'ru' на необходимый язык, скачать с https://github.com/caouecs/Laravel-lang языки и закинуть папку с нужным языком в resurses/lang/

denkai
Arni

Вот хороший пакет для локализации: https://github.com/klisl/laravel-locale
а вот статья: http://klisl.com/multilanguage_laravel.html

Lex

Для вывода сообщения «NN яблок», c изменением окончания слова в зависимости от количества, можно использовать конструкцию
trans_choice(«main.apples_number», $number)
где $number — число, а строка 'main.apples_number' определена в файле локализации main.php как
'apples_number' ⇒ ':count яблоко|:count яблока|:count яблок'

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.