Фронтенд и бэкенд Laravel с разными языками

В Laravel в то же время мне нужен другой язык/локаль в интерфейсе сайта и бэкэнде (администрирование). Для внешнего интерфейса требуется 4 языка (en, de, fr, it), для внутреннего интерфейса требуется 3 языка (en, lt, es).
Пример: в браузере у меня есть две открытые вкладки - 1 вкладка внешнего интерфейса (язык: de), 2 вкладки. бэкенд (язык: en). Как это сделать ? с setLocale? или мне нужен другой массив, например, бэкэнд?


person Mantoze    schedule 31.01.2015    source источник


Ответы (2)


Один из способов легко справиться с этим — создать два класса BaseController для внешнего и внутреннего контроллеров.

Затем вы можете установить разные языки для вашего внешнего интерфейса и внутреннего интерфейса из правильного конструктора BaseController, используя метод App::setLocale.

Пример:

<?php

class FrontendBaseController extends Controller
{
    public function __construct()
    {
        App::setLocale(Session::get('frontend-locale'));
    }
}


class BackendBaseController extends Controller
{
    public function __construct()
    {
        App::setLocale(Session::get('backend-locale'));
    }
}

class HomeController extends FrontendBaseController
{
    public function __construct()
    {

    }
}

class BackendDashboardController extends BackendBaseController
{
    public function __construct()
    {

    }
}

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

Пример структуры папок:

/app
    /lang
        /en
            backend/
                dashboard.php

            frontend/
                home.php

        /de
            backend/
                dashboard.php

            frontend/
                home.php

Пример содержимого app/lang/en/backend/dashboard.php:

<?php
return array(
    'welcome' => 'Welcome to Backend!'
);

Вы можете вывести значение ключа welcome, например, с помощью echo Lang::get('backend/dashboard.welcome');.

Надеюсь, вы уловили идею. Для получения дополнительных сведений ознакомьтесь с официальной документацией.

person jithujose    schedule 31.01.2015
comment
Ok. Но где и как настроить фронтенд и бэкэнд массивы с языками? - person Mantoze; 01.02.2015
comment
@Mantoze Я добавил в свой ответ еще несколько деталей. - person jithujose; 01.02.2015

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

person henrik    schedule 31.01.2015