For anyone looking for a solution like the one @juliomalves gave, and one that doesn't involve the use of middleware on every request, you can:
const nextConfig = {
...
async rewrites() {
return [
// Handle all paths that don't start with a locale
// and point them to the default locale static param: (en)
{
source: '/:path((?!(?:de|fr|es|it|el|pl|nl|en)(?:/|$)).*)',
destination: '/en/:path*',
},
];
},
};