Обычно в ЧПУ страниц используется транслит, перевод или фраза в оригинальном состоянии без изменений. С третьим вариантом проблем возникать не должно, Laravel понимает кириллицу из коробки. Рассмотрим остальные два варианта.
Перевод
Для генерации переведённого ЧПУ нам понадобится пакет Google Translate PHP. Устанавливаем его командой composer require stichoza/google-translate-php.
Дальше нужно определиться, где и когда мы будем генерировать переведённый ЧПУ. Можно делать это автоматически при сохранении сущности (тут множество вариантов — события модели, трейт в контроллере с нужным методом и т.д.) или сделать кнопку в интерфейсе рядом с названием сущности, при нажатии на которую у сервера будет запрашиваться перевод и писаться в поле ЧПУ.
В данном примере я воспользуюсь вторым вариантом, потому как он более гибкий. У нас будет выбор — сгенерировать ЧПУ автоматически или ввести вручную.
Сам метод для перевода можно разместить в отдельном контроллере, например, SeoController или сделать трейт, который при подключении к контроллеру сущности будет добавлять метод. Тут выбор за вами.
Сам метод:
/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getTranslatedSlug(Request $request)
{
// получаем текст из запроса
$text = $request->get('text');
// проверяем на пустоту
if (!$text || trim($text) === "") {
return response()->json(["result" => ""]);
}
// создаём наш Google Translate клиент
// первым аргументом вводится язык источника
// вторым — язык, на который нужно перевести
// соответственно, если первый аргумент null, то производится автоматическое определение языка
$tr = new TranslateClient(null, 'en');
// переводим и преобразуем в корректный url
$translatedSlug = str_slug($tr->translate($text));
// возвращаем
return response()->json(["result" => $translatedSlug]);
}
Собственно, вот и всё, осталось написать фронтенд на пару строк. Можно лапшой на jQuery, примерно так:
$('#translate-slug').on('click', function(e) {
e.preventDefault();
var url = '/seo/translated-slug';
$.ajax(url, {
dataType: "json",
data: { text: $('#name').val() },
success: function(resp) {
$('#slug').val(resp.result);
}
});
});
Транслит
Для транслита нам уже не обязательно посылать что-либо на сервер, так как его можно сгенерировать на клиенте. Поэтому достаточно воспользоваться каким-либо готовым плагином, например, jQuery Generate URL или написать своё решение. Если вы всё же хотите сгенерировать транслит на сервере, то можно использовать str_slug().
Заключение
В заключение приведу ссылку на рекомендации Google о структуре URL на сайте. Смотреть в раздел «Структура URL сайта».