В интернет-блогах достаточно записей о том, как реализовать мультиязычность в Yii, например,
здесь или
здесь.
Но Yii2 привнес много изменений, да и время не стоит на месте, поэтому возник вопрос, как лучше сейчас реализовать url-управление мультиязычностью? Возможно появились новые методики?
Как я понял, существует несколько подходов.
1) прямое указывание языка в ссылке и переопределение UrlManager. Например, добавляется правило:
'<language:(ru|ua|en)>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
и переопределяется класс. Так было в Yii1.
Но как я понял, в 2 версии (а может и раньше), появилась возможность в качестве правила давать класс UrlRule, и в этом классе уже делать свои правила парсинга:
читать сырую документацию. Возможно ли решить этим классом автоматическое добавление в адрес сайта языка? Например, я делаю так:
Yii::$app->urlManager->createUrl('video/index');
, а часть "ru" в начале адресной строки будет добавляться прозрачно, без дополнительных указаний. Получится ли так или нужно все равно переопределять UrlManager? Может существует более элегантное решение, о котором я не узнал?
2) ссылка для всех языков одинаковая; при первом заходе информацию о языке берем со свойств браузера или показываем модалку, в которой предлагаем выбрать язык. При выборе языка записываем информацию в cookies, и при следующем заходе берем её уже оттуда. Как я понял, это может немного вредить SEO, или разницы нету?
3) совмещение способов. Информацию о языке тоже записываем в cookies, но и в url его показываем (показался, наиболее оптимальным, хотя требует танца с бубном).
Какой способ предпочтительней?
Также получится ли создать правила с помощью расширения класса UrlRule?