/** * Gets and Sets the Locale * @param $language string[optional] The Language to Load */ public static function InitLocale($language = NULL) { $localeDir = 'locale'; $default = $language == NULL ? Config::GetSetting('DEFAULT_LANGUAGE') : $language; global $transEngine; global $stream; // Build an array of supported languages $supportedLanguages = scandir($localeDir); // Try to get the local firstly from _REQUEST (post then get) $requestedLanguage = Kit::GetParam('lang', _REQUEST, _WORD, ''); $foundLanguage = ''; if ($requestedLanguage != '') { // Serve only the requested language // Firstly, Sanitize it $requestedLanguage = str_replace('-', '_', $requestedLanguage); // Check its valid if (in_array($requestedLanguage . '.mo', $supportedLanguages)) { $foundLanguage = $requestedLanguage; } } else { if (Config::GetSetting('DETECT_LANGUAGE') == 1) { // Detect the language, try from HTTP accept // Parse the language header and build a preference array $languagePreferenceArray = TranslationEngine::parseHttpAcceptLanguageHeader(); if (count($languagePreferenceArray) > 0) { // Go through the list until we have a match foreach ($languagePreferenceArray as $languagePreference => $preferenceRating) { // We don't ship an en.mo, so fudge in a case where we automatically convert that to en_GB if ($languagePreference == 'en') { $languagePreference = 'en_GB'; } // Sanitize $languagePreference = str_replace('-', '_', $languagePreference); // Check it is valid if (in_array($languagePreference . '.mo', $supportedLanguages)) { $foundLanguage = $languagePreference; break; } } } } } // Are we still empty, then default language from settings if ($foundLanguage == '') { // Check the default if (!in_array($default . '.mo', $supportedLanguages)) { Debug::Info('Resolved language ' . $default . ' not available.'); return; } // The default is valid $foundLanguage = $default; } // Debug::LogEntry('audit', 'Creating new file streamer for '. $localeDir . '/' . $foundLanguage . '.mo', 'TranslationEngine', 'InitLocal'); if (!($stream = new CachedFileReader($localeDir . '/' . $foundLanguage . '.mo'))) { Debug::Info('Resolved language ' . $foundLanguage . ' not available.'); $transEngine = false; return; } $transEngine = new gettext_reader($stream); self::$locale = $foundLanguage; self::$jsLocale = str_replace('_', '-', $foundLanguage); }