В Laravel в то же время мне нужен другой язык/локаль в интерфейсе сайта и бэкэнде (администрирование). Для внешнего интерфейса требуется 4 языка (en, de, fr, it), для внутреннего интерфейса требуется 3 языка (en, lt, es).
Пример: в браузере у меня есть две открытые вкладки - 1 вкладка внешнего интерфейса (язык: de), 2 вкладки. бэкенд (язык: en). Как это сделать ? с setLocale? или мне нужен другой массив, например, бэкэнд?
Фронтенд и бэкенд Laravel с разными языками
Ответы (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');
.
Надеюсь, вы уловили идею. Для получения дополнительных сведений ознакомьтесь с официальной документацией.
Вместо того, чтобы открывать две разные вкладки в одном и том же браузере, возможно, вам следует рассмотреть возможность открытия двух разных сеансов браузера, чтобы избежать перезаписи внутренних и внешних сеансов с разными языковыми настройками.