{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Введение == Возможности для локализации в Laravel предоставляют удобный способ получения языковых строк, позволяя вашему приложению поддерживать несколько языков интерфейса. Языковые строки хранятся в папке %%(t)resources/lang%%. Внутри неё должны располагаться подпапки для всех языков, поддерживаемых приложением: %%(t) /resources /lang /en messages.php /es messages.php %% Все языковые файлы (скрипты) просто возвращают массив пар //ключ/значение//. Например: %% 'Добро пожаловать на мой сайт!' ]; %% === Настройка языка === Язык по умолчанию указан в файле настроек %%(t)config/app.php%%. Само собой, вы можете изменить это значение для вашего приложения при необходимости. Вы также можете изменить текущий язык во время работы вашего приложения методом %%setLocale()%% фасада %%(t)App%%: %% Route::get('welcome/{locale}', function ($locale) { App::setLocale($locale); // }); %% Вы можете настроить "запасной язык", который будет использоваться, когда в файле текущего языка нет соответствующей строки. Как и язык по умолчанию, запасной язык также настраивается в файле %%(t)config/app.php%%: %% 'fallback_locale' => 'en', %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) **Определение текущего языка** Вы можете использовать методы %%getLocale()%% и %%isLocale()%% ((/docs/v5/facades фасада)) %%(t)App%% для определения текущего языка и для проверки на совпадение текущего языка с переданным значением: ~%% $locale = App::getLocale(); if (App::isLocale('en')) { // } ~%% %% == Получение языковых строк == Вы можете получить строки из языкового файла с помощью ((docs/v5/helpers функции)) %%trans()%%. Метод %%trans()%% принимает файл и ключ языковой строки первым аргументом. Например, давайте получим языковую строку %%(t)welcome%% из файла %%(t)resources/lang/messages.php%%: %% echo trans('messages.welcome'); %% Конечно, если вы используете ((/docs/v5/blade шаблонизатор Blade)), то для получения языковой строки можете использовать синтаксис %%(t){{ }}%% или директиву %%@lang%% (для версии 5.2 и выше): %% {{ trans('messages.welcome') }} @lang('messages.welcome') %% Если строка не найдена, то метод %%trans()%% вернёт её имя (ключ). В нашем примере это будет %%(t)messages.welcome%%. %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) **Получение строк из языкового файла** ~%% echo Lang::get('messages.welcome'); ~%% Первый аргумент метода %%get()%% - имя языкового файла, а затем указывается имя строки, которую нужно получить. .(alert) Если строка не найдена, то метод %%get()%% вернёт её имя (ключ). %% === Замена частей в строках === Если хотите, задайте место для замены в языковой строке. Все места для замены начинаются с двоеточия %%(t)(:)%%. Например, вы можете задать сообщение приветствия с использованием замены для имени: %% 'welcome' => 'Welcome, :name', %% Для подстановки значения при получении языковой строки передайте массив замен вторым аргументом метода %%trans()%%: %% echo trans('messages.welcome', ['name' => 'dayle']); %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) Подставляемое значение будет преобразовано в соответствии с тем, как задано место для замены (все символы заглавные или только первый): ~%% 'welcome' => 'Welcome, :NAME', // Welcome, DAYLE 'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% echo Lang::get('messages.welcome', ['name' => 'Dayle']); ~%% **Проверка существования языковой строки** ~%% if (Lang::has('messages.welcome')) { // } ~%% %% == Множественное число == Формы множественного числа - проблема для многих языков, так как все они имеют разные сложные правила формирования множественного числа. Однако вы можете легко справиться с ней в ваших языковых файлах используя символ %%(t)|%% для разделения форм единственного и множественного числа: %% 'apples' => 'Это одно яблоко|Это много яблок', %% После определения языковой строки с вариантами для разных чисел, вы можете использовать функцию %%trans_choice()%% для получения строки в нужном числе. В данном примере возвратится вариант во множественном числе, так как указано число большее 1: %% echo trans_choice('messages.apples', 10); %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% echo Lang::choice('messages.apples', 10); ~%% Вы также можете передать аргумент локали, чтобы указать язык. Например, если вы хотите использовать **русский (ru)** язык: ~%% echo Lang::choice('товар|товара|товаров', $count, [], 'ru'); ~%% %% Благодаря тому, что Laravel использует компонент //Symfony Translation// вы можете легко создать более точные правила, которые будут указывать языковые строки для нескольких числовых промежутков: %% 'apples' => '{0} Это нисколько|[1,19] Это несколько|[20,Inf] Это много', %% == Перекрытие языковых файлов пакета == Многие пакеты поставляются с собственными языковыми файлами. Вместо того, чтобы вскрывать файлы внутри пакета, чтобы настроить строки в них, вы можете перекрыть их, разместив файлы в каталоге %%(t)resources/lang/vendor/{package}/{locale}%% (для версии Laravel 5.0 - %%(t)resources/lang/packages/{locale}/{package}%%). Например, если вам необходимо изменить строки английского языка в %%(t)messages.php%% для пакета %%(t)skyrim/hearthfire%%, вам надо поместить языковой файл в %%(t)resources/lang/vendor/hearthfire/en/messages.php%%. В этом файле вам надо задать только те строки, которые вы хотите перекрыть. Все остальные строки, которые вам не надо перекрывать, будут загружаться из языковых файлов самого пакета.