Пример #1
0
 /**
  * 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);
 }