languages = new Languages($this); foreach($kirby->options['languages'] as $lang) { $language = new Language($this, $lang); // store the default language if($language->default) $this->defaultLanguage = $this->language = $language; // add the language to the collection $this->languages->data[$language->code] = $language; } } /** * Returns the translated URI */ public function uri($lang = null) { return null; } public function slug($lang = null) { return null; } /** * Returns the url of the site * * @return string */ public function url($lang = false) { if($lang) { // return the specific language url return $this->languages->find($lang)->url(); } else { return parent::url(); } } /** * Marks the site as a multilanguage site * * @return boolean */ public function multilang() { return true; } /** * Returns the Languages Collection * * @return Languages */ public function languages() { return $this->languages; } /** * Returns the current language * or any other language by language code * * @param string $code * @return Language */ public function language($code = null) { if(is_null($code)) return $this->language; return $this->languages()->find($code); } /** * Returns the default language * * @return Language */ public function defaultLanguage() { return $this->defaultLanguage; } /** * Tries to find the language for the current visitor * * @return Language */ public function visitorLanguage() { return $this->languages()->find(visitor::acceptedLanguageCode()); } /** * Returns the detected language * * @return Language */ public function detectedLanguage() { if($language = $this->visitorLanguage()) { return $language; } else { return $this->defaultLanguage(); } } /** * Returns the language which will be * remembered for the next visit * * @return Language */ public function sessionLanguage() { if($code = s::get('language') and $language = $this->languages()->find($code)) { return $language; } else { return null; } } public function switchLanguage(Language $language) { s::set('language', $language->code()); if($this->language()->code() != $language->code()) { go($this->page()->url($language->code())); } } /** * Sets the currently active page * and returns its page object * * @param string $uri * @return Page */ public function visit($uri = '', $lang = null) { // if the language code is missing or the code is invalid (TODO) if(!in_array($lang, $this->languages()->keys())) { $lang = $this->defaultLanguage->code; } // set the current language $this->language = $this->languages()->data[$lang]; // clean the uri $uri = trim($uri, '/'); if(empty($uri)) { return $this->page = $this->homePage(); } else { if($lang == $this->defaultLanguage->code and $page = $this->children()->find($uri)) { return $this->page = $page; } else if($page = $this->children()->findByURI($uri)) { return $this->page = $page; } else { return $this->page = $this->errorPage(); } } } /** * Returns the locale for the site * * @return string */ public function locale() { return $this->language->locale; } }