'Languages Management', 'description' => 'This plugin will display a list of the available languages for the Piwik interface. The language selected will be saved in the preferences for each user.', 'author' => 'Piwik', 'author_homepage' => 'http://piwik.org/', 'version' => Piwik_Version::VERSION, ); } public function getListHooksRegistered() { return array( 'template_css_import' => 'css', 'template_topBar' => 'showLanguagesSelector', 'Translate.getLanguageToLoad' => 'getLanguageToLoad', ); } function css() { echo "\n"; } /** * Show styled language selection drop-down list * * @param string $url The form action. Default is to save language. */ function showLanguagesSelector() { $view = Piwik_View::factory("languages"); $view->languages = Piwik_LanguagesManager_API::getAvailableLanguageNames(); $view->currentLanguageCode = self::getLanguageCodeForCurrentUser(); $view->currentLanguageName = self::getLanguageNameForCurrentUser(); echo $view ->render(); } function getLanguageToLoad($notification) { $language =& $notification->getNotificationObject(); $language = self::getLanguageCodeForCurrentUser(); } /** * @throws Exception if non-recoverable error */ public function install() { // we catch the exception try{ $sql = "CREATE TABLE ". Piwik::prefixTable('user_language')." ( login VARCHAR( 100 ) NOT NULL , language VARCHAR( 10 ) NOT NULL , PRIMARY KEY ( login ) ) DEFAULT CHARSET=utf8 " ; Piwik_Exec($sql); } catch(Exception $e){ // mysql code error 1050:table already exists // see bug #153 http://dev.piwik.org/trac/ticket/153 if(!Zend_Registry::get('db')->isErrNo($e, '1050')) { throw $e; } } } /** * @throws Exception if non-recoverable error */ public function uninstall() { $sql = "DROP TABLE ". Piwik::prefixTable('user_language') ; Piwik_Exec($sql); } /** * @return string Two letters language code, eg. "fr" */ static public function getLanguageCodeForCurrentUser() { $languageCode = self::getLanguageFromPreferences(); if(!Piwik_LanguagesManager_API::isLanguageAvailable($languageCode)) { $languageCode = Piwik_Common::extractLanguageCodeFromBrowserLanguage(Piwik_Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getAvailableLanguages()); } if(!Piwik_LanguagesManager_API::isLanguageAvailable($languageCode)) { $languageCode = 'en'; } return $languageCode; } /** * @return string Full english language string, eg. "French" */ static public function getLanguageNameForCurrentUser() { $languageCode = self::getLanguageCodeForCurrentUser(); $languages = Piwik_LanguagesManager_API::getAvailableLanguageNames(); foreach($languages as $language) { if($language['code'] === $languageCode) { return $language['name']; } } } /** * @return string|false if language preference could not be loaded */ static protected function getLanguageFromPreferences() { if ($language = Piwik_LanguagesManager_API::getLanguageForSession()) { return $language; } try { $currentUser = Piwik::getCurrentUserLogin(); return Piwik_LanguagesManager_API::getLanguageForUser($currentUser); } catch(Exception $e) { return false; } } }