I replicated your problem and used your routes. After modifying them I came to the conclusion two routes would be easier. One for the normal URLs and one for the language routes.
Below are the routes I made:
Route::set('language_default', '(<lang>(/<controller>(/<action>(/<subfolder>))))',
array(
'lang' => '(en|es)',
))
->filter(function($route, $params, $request) {
// Replacing the hyphens for underscores.
$params['action'] = str_replace('-', '_', $params['action']);
return $params; // Returning an array will replace the parameters.
})
->defaults(array(
'controller' => 'Index',
'action' => 'index',
'lang' => 'en',
));
Route::set('default', '(<controller>(/<action>(/<subfolder>)))')
->filter(function($route, $params, $request) {
// Replacing the hyphens for underscores.
$params['action'] = str_replace('-', '_', $params['action']);
return $params; // Returning an array will replace the parameters.
})
->defaults(array(
'controller' => 'Index',
'action' => 'index',
'lang' => 'en',
));