Well here's my best try:
Keep all your route definitions in e.g. web.php
You can then use multi-domain routing in your RouteServiceProvider
:
Route::group([
'domain' => '{lang}.example.com'
'middleware' => LangMiddleware::class,
'namespace' => $this->namespace // I guess?
], function ($router) {
require base_path('routes/web.php');
});
In addition, using the same routes you can also do prefixed route groups:
Route::group([
'middleware' => LangMiddleware::class,
'namespace' => $this->namespace,
'prefix' => {lang} //Note: This works but is undocumented so may change
], function ($router) {
require base_path('routes/web.php');
});
This all relies on that LangMiddleware
middleware class which can be something like:
class LangMiddleware {
public function handle($request, $next) {
if ($request->route("lang")) {
// also check if language is supported?
App::setlocale($request->route("lang"));
}
return $next($request);
}
}