Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте.
Начал копаться в laravel, и не совсем понимаю, как сделать мультиязычный сайт. Точнее, смену языка при указании языка в url:
site.ru/page - язык по-умолчанию, например ru
site.ru/en/page - выбранный язык en
Как это осуществить?
Гугл выдает либо через куки/сессию, либо для старых версий laravel, и сейчас вроде уже не работает...
Не в сети
сделал так, оно даже работает:
в 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)
Не в сети
И второй вопрос, как потом формировать урлы с учетом выбранного языка?
И урлы на смену языка на текущей странице (чтобы на смене языка на странице site.ru/en/page на русский была ссылка site.ru/page)
Не в сети
Написал функцию подстановки языка в урл, которая разбивает необходимый урл по "/", проверяет первый кусок адреса, входит ли он в список языков, и подставляет на первое место необходимый язык (или пустое, если язык по-умолчанию).
Так всё как бы работает, но некрасиво, есть ли встроенный функционал?
Не в сети
И ещё вопрос, установил админку voyager, там есть готовые таблицы под страницы и посты. В постах всё ок с языками, а в страницах некоторые поля почему-то не переводятся, имеют одно значение для всех языков. Как добавить этим полям другие языки?
Не в сети
решилось созданием шаблона редактирования страниц в voyager
Не в сети
смена языков работает у нужных полей, но не сохраняется, почему-то. То есть, при редактировании, все поля при смене языков в нужных языках, но после сохранения в эти поля подставляются два раза последний язык.
Не в сети
нашел это в /vendor/tcg/voyager/src/Models, protected $translatable
Не в сети