nikola Posted December 22, 2011 Share Posted December 22, 2011 I'm doing a multilanguage site that will contain 3 languages with multi tree approach. I'll have tree set up as following: Home - hr - page 1 - page 2 - ... - en - page 1 - page 2 - ... - de - page 1 - page 2 - ... Pages under each language branch are using language specific templates. I want to avoid having too many templates all together, so my question is how to accomplish this scenario: Instead using language specific templates, I want to use let's say, one template that will have language specific code based on hr, en or de selection. How can I check if page is under the "hr" branch and then use specific code for "hr"? Same procedure will be for "en" and "de", all contained in one template. Link to comment Share on other sites More sharing options...
vknt Posted December 22, 2011 Share Posted December 22, 2011 You could just use a switch command for the title? switch ($page->parent->title) { case "hr": // do something break; case "en": // do something break; case "de": // do something break; case "" : // do something break; } Link to comment Share on other sites More sharing options...
Soma Posted December 22, 2011 Share Posted December 22, 2011 That's an easy scenario. Code of VKNT is ok but not working for all pages and levels. Since it uses only $page->parent. If we assume the language tree branches are under the root level like /hr/, /en/ you can check for it in the url using strpos or alike, or by using $page->rootParent->name == 'hr' for example. Your choice. I got a language check that is like this, saving it in a session is not required but I needed it in this project. Setting a $lang and a $langpath variable is also project specific. But you get the idea. <?php // get path of request for finding langpath $url = $page->path; if($session->lang){ // if on langpath as in session or requested by /objects/... if(strpos($url,$session->langpath) !== FALSE ){ $lang = $session->lang; $langpath = $session->langpath; }else{ $lang = ''; } } else{ $lang = ''; } if($lang == ''){ if(strpos($url,"/de-ch/") !== FALSE){ $langpath = 'de-ch'; $lang = 'de'; } else if(strpos($url,"/en-ch/") !== FALSE){ $langpath = "en-ch"; $lang = 'en'; } else if(strpos($url,"/fr-fr/") !== FALSE){ $langpath = "fr-fr"; $lang = "fr"; } else if(strpos($url,"/en-fr/") !== FALSE){ $langpath = "en-fr"; $lang = "en"; } else if(strpos($url,"/de-de/") !== FALSE){ $langpath = "de-de"; $lang = "de"; } else{ $langpath = "de-ch"; $lang = "de"; } $session->set('lang',$lang); $session->set('langpath',$langpath); } /** * YAML Language files * import yaml language file for common translations * * key: "value" * * Available in php with $txt['key'] */ require_once($config->paths->root . "site/libs/yaml/sfYaml.php"); require_once($config->paths->root . "site/libs/yaml/sfYamlParser.php"); // instance a parser object $yaml = new sfYamlParser(); // parse language file $txt = $yaml->parse(file_get_contents($config->paths->root . "site/languages/" . $lang . ".yaml")); ?> Link to comment Share on other sites More sharing options...
nikola Posted December 22, 2011 Author Share Posted December 22, 2011 Thank you both, I got the idea how to make it work. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now