First of all, don't make controllers based on language. You'll end up repeating all the code for each language. The most gracefull solution I know of is to replace the default route with a new one. So instead of the router routing [:module]/:controller/:action/* you want it to route :lang/[:module]/:controller/:action/*.
This can be done in the bootstrap something like this:
Code:
$frontController = Zend_Controller_Front::getInstance();
.
.
.
$defaultRoute = new Zend_Controller_Router_Route(
':lang/:module/:controller/:action/*',
array('lang' => 'en', //sets default if lang is not specified
'module' => 'default'));
$router = $frontController->getRouter();
$router->removeDefaultRoutes()
->addRoute('default',$defaultRoute);
.
.
.
$frontController->dispatch();
* note I did not test this route you might have to monkey with it to get it to work, but the theory is sound and documented by Zend.
This way you'll end up with a param called lang that is available via getParam() and normal routing otherwise. You can then key of the lang param and implement internationalization as normal.