Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.04.2020 18:40:17

Мультиязычный сайт, язык не по-умолчанию в url

Здравствуйте.
Начал копаться в laravel, и не совсем понимаю, как сделать мультиязычный сайт. Точнее, смену языка при указании языка в url:
site.ru/page - язык по-умолчанию, например ru
site.ru/en/page - выбранный язык en
Как это осуществить?
Гугл выдает либо через куки/сессию, либо для старых версий laravel, и сейчас вроде уже не работает...

Не в сети

#2 01.04.2020 18:44:33

Re: Мультиязычный сайт, язык не по-умолчанию в url

сделал так, оно даже работает:

в middleware

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;
use App;

class Localization
{
	public static $mainLanguage = 'en';
	public static $languages = ['en', 'ru'];
	
	public function handle($request, Closure $next)
	{
		$language = self::getLang();
		App::setLocale($language ?: self::$mainLanguage);
		return $next($request);
	}
	
	public static function getLang()
	{
		$language = explode('/', URL::getRequest()->server()['REQUEST_URI']);
		$language = current(array_diff($language, [null, ""]));
		if(in_array($language, self::$languages)){
			return $language;
		}else{
			return '';
		}
	}
}

в роутах

Route::group(['prefix' => App\Http\Middleware\Localization::getLang()], function(){
...
}

но совершенно не изящно и как-то костыльно... Laravel же не такой. Как правильно и красиво?

Изменено ShutTap (01.04.2020 18:47:52)

Не в сети

#3 01.04.2020 19:01:24

Re: Мультиязычный сайт, язык не по-умолчанию в url

И второй вопрос, как потом формировать урлы с учетом выбранного языка?
И урлы на смену языка на текущей странице (чтобы на смене языка на странице site.ru/en/page на русский была ссылка site.ru/page)

Не в сети

#4 02.04.2020 16:23:49

Re: Мультиязычный сайт, язык не по-умолчанию в url

Написал функцию подстановки языка в урл, которая разбивает необходимый урл по "/", проверяет первый кусок адреса, входит ли он в список языков,  и подставляет на первое место необходимый язык (или пустое, если язык по-умолчанию).
Так всё как бы работает, но некрасиво, есть ли встроенный функционал?

Не в сети

#5 04.04.2020 20:39:57

Re: Мультиязычный сайт, язык не по-умолчанию в url

И ещё вопрос, установил админку voyager, там есть готовые таблицы под страницы и посты. В постах всё ок с языками, а в страницах некоторые поля почему-то не переводятся, имеют одно значение для всех языков. Как добавить этим полям другие языки?

Не в сети

#6 05.04.2020 12:25:34

Re: Мультиязычный сайт, язык не по-умолчанию в url

решилось созданием шаблона редактирования страниц в voyager

Не в сети

#7 05.04.2020 14:45:24

Re: Мультиязычный сайт, язык не по-умолчанию в url

смена языков работает у нужных полей, но не сохраняется, почему-то. То есть, при редактировании, все поля при смене языков в нужных языках, но после сохранения в эти поля подставляются два раза последний язык.

Не в сети

#8 10.05.2020 13:55:13

Re: Мультиязычный сайт, язык не по-умолчанию в url

нашел это в /vendor/tcg/voyager/src/Models, protected $translatable

Не в сети

Подвал раздела