2016-01-11 2 views
1

Я разрабатываю приложение laravel (5.0) и сталкиваюсь с новым требованием реализовать поддержку другого языка. Одна хорошая вещь, которую я сделал, это реализовать Локализацию с самого начала, так что теперь у меня есть две папки под/resources/lang/'en' для английского и es для испанского.Лучший способ реализовать интерфейсы нескольких языков в Laravel 5 (несколько доменов)

Я использую функцию trans помощника для отображения строки, на мой взгляд, как так:

{!! trans('front.views.index.empty_list') !!} 

В моем /config/app.config файле, я определил локаль как по умолчанию «эн». Для этого приложения я теперь использую два домена (.com - для английского и .es для испанского). Домен .com - это тот, который в настоящее время используется приложением, домен .es настроен как псевдоним.

Так что, в конечном итоге, мой вопрос заключается в том, как я могу реализовать какую-то проверку в Laravel, которая определяет, какой домен в настоящее время используется. Что-то, что я изучил, это групповые маршруты, но я не уверен, как я буду использовать это. Я хотел бы, чтобы домен .com отображал английский (который он сейчас делает) и при использовании .es Он должен переключиться на испанский.

+1

Это то, что вы ищете https://laravel.com/docs/5.2/localization – RiggsFolly

+0

@RiggsFolly Я ищу способ для перевода Laravel в зависимости от домена. Если это .com, он должен отображаться на английском языке. Если это .es, он должен отображаться на испанском языке. В документации я не видел способа, которым я мог бы выполнить проверку. – aqq

+0

'preg_match ('/ yourdomain (. *) /', Request :: root(), $ tld)' даст вам TLD –

ответ

3

Я думаю, что хороший способ сделать это - использовать промежуточное программное обеспечение. Сначала нужно создать один:

php artisan make:middleware SetLanguage 

Включите его в Http \ Kernel.php:

protected $routeMiddleware = [ 
    'language' => \App\Http\Middleware\SetLanguage::class, 
]; 

Наконец, реализовать ручку() метод в классе SetLanguage:

public function handle($request, Closure $next) 
{ 
    $domain = parse_url($request->url(), PHP_URL_HOST); 

    switch($domain) { 
     case 'www.spanish.es': 
      $language = 'es'; 
      break; 

     default: 
      $language = 'en'; 
    } 

    View::share('language', $language); // Could be useful in views? 
    App::setLocale($language); 

    return $next($request); 
} 

Включить это промежуточное программное обеспечение для любой контроллер и локаль будут установлены автоматически. Обычно у меня есть файл конфигурации где-то в configs/папке со всеми поддерживаемыми языками и соответствующими именами доменов.

+0

Спасибо за ваш ответ. Пара вещей. 1. У нас должен быть другой случай для домена без «www». которые я добавил в свой код. 2. Ваш код для включения в ядре неверен. Это должно быть так: ''language' => 'App \ Http \ Middleware \ SetLanguage',' – aqq

+0

@aqq нет никакой разницы. :: синтаксис класса возвращает строку, результат будет таким же –

Смежные вопросы