getAvailableLanguages()); } /** * Return array of available languages * * @return array Arry of strings, each containing its ISO language code */ public function getAvailableLanguages() { if(!is_null($this->languageNames)) { return $this->languageNames; } $path = PIWIK_INCLUDE_PATH . "/lang/"; $languages = glob($path . "*.php"); $pathLength = strlen($path); $languageNames = array(); foreach($languages as $language) { $languageNames[] = substr($language, $pathLength, -strlen('.php')); } $this->languageNames = $languageNames; return $languageNames; } /** * Return information on translations (code, language, % translated, etc) * * @return array Array of arrays */ public function getAvailableLanguagesInfo() { require PIWIK_INCLUDE_PATH . '/lang/en.php'; $englishTranslation = $translations; $filenames = $this->getAvailableLanguages(); $languagesInfo = array(); foreach($filenames as $filename) { require PIWIK_INCLUDE_PATH . "/lang/$filename.php"; $translationStringsDone = array_intersect_key($englishTranslation, array_filter($translations, 'strlen')); $percentageComplete = count($translationStringsDone) / count($englishTranslation); $percentageComplete = round(100 * $percentageComplete, 0); $languageInfo = array( 'code' => $filename, 'name' => $translations['General_OriginalLanguageName'], 'english_name' => $translations['General_EnglishLanguageName'], 'translators' => $translations['General_TranslatorName'], 'translators_email' => $translations['General_TranslatorEmail'], 'percentage_complete' => $percentageComplete . '%', ); $languagesInfo[] = $languageInfo; } return $languagesInfo; } /** * Return array of available languages * * @return array Arry of array, each containing its ISO language code and name of the language */ public function getAvailableLanguageNames() { if(!is_null($this->availableLanguageNames)) { return $this->availableLanguageNames; } $filenames = $this->getAvailableLanguages(); $languagesInfo = array(); foreach($filenames as $filename) { require PIWIK_INCLUDE_PATH . "/lang/$filename.php"; $languagesInfo[] = array( 'code' => $filename, 'name' => $translations['General_OriginalLanguageName']); } $this->availableLanguageNames = $languagesInfo; return $this->availableLanguageNames; } /** * Returns translation strings by language * * @param string $languageCode ISO language code * @return array|false Array of arrays, each containing 'label' (translation index) and 'value' (translated string); false if language unavailable */ public function getTranslationsForLanguage($languageCode) { if(!$this->isLanguageAvailable($languageCode)) { return false; } require PIWIK_INCLUDE_PATH . "/lang/$languageCode.php"; $languageInfo = array(); foreach($translations as $key => $value) { $languageInfo[] = array('label' => $key, 'value' => $value); } return $languageInfo; } /** * Returns the language for the user * * @param string $login * @param string|false $layout */ public function getLanguageForUser( $login ) { Piwik::checkUserIsSuperUserOrTheUser($login); return Piwik_FetchOne('SELECT language FROM '.Piwik_Common::prefixTable('user_language') . ' WHERE login = ? ', array($login )); } /** * Sets the language for the user * * @param string $login * @param string $languageCode */ public function setLanguageForUser($login, $languageCode) { Piwik::checkUserIsSuperUserOrTheUser($login); $paramsBind = array($login, $languageCode, $languageCode); Piwik_Query('INSERT INTO '.Piwik_Common::prefixTable('user_language') . ' (login, language) VALUES (?,?) ON DUPLICATE KEY UPDATE language=?', $paramsBind); } /** * Returns the langage for the session * * @return string|null */ public function getLanguageForSession() { $session = new Zend_Session_Namespace("Piwik_LanguagesManager"); if(isset($session->language)) { return $session->language; } return null; } /** * Set the language for the session * * @param string $languageCode ISO language code */ public function setLanguageForSession($languageCode) { $session = new Zend_Session_Namespace("Piwik_LanguagesManager"); $session->language = $languageCode; } }