function chooseLanguage() { if (!$this->allowedAdminAccess) { return; } if (isset($_POST['chooseLanguage'])) { setGlobalConfigItem('language', $_POST['chooseLanguage']); } $languageDirectory = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; $languageDirectories = glob($languageDirectory . '*'); $languages = array(); $chosenLanguage = getGlobalConfigItem('language'); if ($chosenLanguage == null) { $chosenLanguage = '(auto)'; } $languages[] = getAutoDetectLanguage(); foreach ($languageDirectories as $languageDirectory) { $languages[] = basename($languageDirectory); } $languages[] = getFakeLanguageForTranslators(); $languageHtml = ''; foreach ($languages as $language) { $languageHtml .= '<option value="' . $language . '"'; if ($language == $chosenLanguage) { $languageHtml .= ' selected="selected"'; } $languageHtml .= '>'; $languageCode = '&language-name-' . str_replace(' ', '-', $language) . ';'; $languageHtml .= preg_replace_callback('/\\&(.*?)\\;/s', 'replaceLanguagePlaceholder', $languageCode); $languageHtml .= '</option>'; } $pageTemplate = $this->getThemeFragment('admin-choose-language.htmlf'); $pageTemplate = str_replace('{{list-of-languages}}', $languageHtml, $pageTemplate); return $pageTemplate; }
function getLanguageToUse() { $language = getGlobalConfigItem('language'); if ($language == '' || $language == getAutoDetectLanguage()) { $langCodes = array(); if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $httpLangCodes = substringBefore($_SERVER['HTTP_ACCEPT_LANGUAGE'], ';'); $httpLangCodes = explode(',', $httpLangCodes); foreach ($httpLangCodes as $httpLangCode) { if (strlen($httpLangCode) >= 2) { $langCodes[] = substr($httpLangCode, 0, 2); } } } elseif (isset($_ENV['LC_MESSAGES']) || isset($_ENV[' LC_ALL']) || isset($_ENV['LANG'])) { $langCode = ''; if (isset($_ENV['LC_MESSAGES']) && trim($_ENV['LC_MESSAGES'])) { $langCode = $_ENV['LC_MESSAGES']; } elseif (isset($_ENV['LC_ALL']) && trim($_ENV['LC_ALL'])) { $langCode = $_ENV['LC_ALL']; } elseif (isset($_ENV['LANG']) && trim($_ENV['LANG'])) { $langCode = $_ENV['LANG']; } if (strlen($langCode) >= 2) { $langCodes = array(substr($langCode, 0, 2)); } } foreach ($langCodes as $langCode) { switch ($langCode) { case 'en': return 'english'; case 'fr': return 'french'; } } return 'english'; } else { return $language; } }