ELanguageUrlManager transparently maps the current application language to the created urls and the other way around.
- handles module urls
- supports "get" and "path" url formats
- "stateless" working - the extension attempts to maintain the language code in the url without cookies
- no need to care with language codes in the configured urlmanager rules - mapping is transparent
- demo method building a basic language selector widget
Change log ¶
- fixed the case when the baseUrl member of CUrlManager is empty
transforming some URLs transparently when the app locale is hu
/apps/demo/site/page/view/about -> /apps/demo/hu/site/page/view/about
/apps/demo/gii/default/login -> /apps/demo/hu/gii/default/login
/apps/demo/index.php?r=site/contact -> /apps/demo/index.php?r=site/contact&lang=hu
/apps/demo/?r=gii/default -> /apps/demo/?r=gii/default&lang=hu
- Place the 2 files in your app's /protected/components directory (or /protected/extensions)
- In /protected/config/main.php, configure your app like
'urlManager' => array( 'class' => 'path.to.your.ELanguageUrlManager', 'languages' => array('en','hu'),//all languages the app uses 'langKey' => 'lang',//key of the url param holding the lang.id 'defaultLang' => false,//default lang.id to carry - will not be visible in the url 'stateful' => false, //set to true only if having problems //...Add your rules here WITHOUT locale handling eg. // //'urlFormat' => 'path', //'showScriptName' => false, //'rules'=>array( // 'login'=>'site/login' // ... //) ),
3. Inherit all controllers of your app from the ELangController class (or at least make sure that the init() and redirect() methods in all controller do the same like ELangControllers' do :-).
4. Test the app, for example, build a language selector somewhere in a layout file by
then switch language, navigate over your links.
How to debug ¶
I've placed a log call commented in the line ~225 of ELanguageUrlManager. If you have problems, uncomment this line and check in the app log what new rules have been generated / how the existing rules transformed.