блог-форум о программировании

Вы не вошли.

#1 2018-05-01 13:40:46

Majestio
Администратор
Здесь с 2017-11-17
Сообщений: 80
Windows 10Firefox 59.0

5. Многоязыковая поддержки сайта - ч.1 (установка)


Многоязыковая поддержки сайта - ч.1 (установка)


Используем решение из https://github.com/mcamara/laravel-localization

Запускаем:

composer require mcamara/laravel-localization

Прописываем в файл config/app.php:

// config/app.php
 
        'providers' => [
		// [...]
                Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider::class,
        ],
...
        'aliases' => [
		// [...]
                'LaravelLocalization' => Mcamara\LaravelLocalization\Facades\LaravelLocalization::class,
        ],

Локализованные маршруты оборачиваем в блок

// routes/web.php
 
Route::group(['prefix' => LaravelLocalization::setLocale()], function() {
  /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
  Route::get('/', function() {
    return View::make('welcome');
  });
});
/** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/

Включаем нужные языки редактируя vendor/mcamara/laravel-localization/src/config/config.php

Регистрируем middleware в app/Http/Kernel.php для отображения нелокализованных маршрутов в локализованные

<?php namespace App\Http;
 
use Illuminate\Foundation\Http\Kernel as HttpKernel;
 
class Kernel extends HttpKernel {
	/**
	 * The application's route middleware.
	 *
	 * @var array
	 */
	protected $routeMiddleware = [
		/**** OTHER MIDDLEWARE ****/
		'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
		'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
		'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
                'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class
		// REDIRECTION MIDDLEWARE
	];
}

Тогда меняем routes/web.php на:

// app/Http/routes.php
 
Route::group(
  [
    'prefix' => LaravelLocalization::setLocale(),
    'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
  ],
  function() {
    /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
    Route::get('/', function() {
      return View::make('welcome');
    });
});
 
/** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/

Выведем название текущей выбранной локали и список подключенных локалей, для этого вставим в resources/views/welcome.blade.php:

<!-- выводим текущую локаль -->
<p>Текущая локаль: {{ LaravelLocalization::getCurrentLocale() }} </p>
<!-- выводим выбор языков -->
<ul>
    @foreach(LaravelLocalization::getSupportedLocales() as $localeCode => $properties)
        <li>
            <a rel="alternate" hreflang="{{ $localeCode }}" href="{{ LaravelLocalization::getLocalizedURL($localeCode, null, [], true) }}">
                {{ $properties['native'] }}
            </a>
        </li>
    @endforeach
</ul>

Дополнительные варианты смотрим по ссылке в начали статьи.

Конфигурирование

Вариант 1

php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"

После этого правится файл config/laravellocalization.php

Вариант 2

Создается файл сервис-провайдера app/providers/ConfigServicePovider.php  содержания:

<?php namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class ConfigServiceProvider extends ServiceProvider {
	public function register()
	{
		config([
			'laravellocalization.supportedLocales' => [
				'ace' => array( 'name' => 'Achinese', 'script' => 'Latn', 'native' => 'Aceh' ),
				'ca'  => array( 'name' => 'Catalan', 'script' => 'Latn', 'native' => 'català' ),
				'en'  => array( 'name' => 'English', 'script' => 'Latn', 'native' => 'English' ),
			],
 
			'laravellocalization.useAcceptLanguageHeader' => true,
 
			'laravellocalization.hideDefaultLocaleInURL' => true
		]);
	}
 
}

Потом этот сервис нужно прописать в config/app.php в виде:

   'providers' => [
      App\Providers\ConfigServicePovider::class,
   ],

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] CCBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.511 сек, 7 запросов выполнено - Использовано памяти: 2.11 Мбайт (Пик: 2.66 Мбайт) ]

www.000webhost.com