コード例 #1
0
ファイル: Localizer.php プロジェクト: timesplinter/tsfw-i18n
 /**
  * @param string $acceptedLanguagesString
  * @param array $fallBacks
  * @param string $default
  * @param array|null $categories
  *
  * @return Localizer
  */
 public static function fromAcceptedLanguages($acceptedLanguagesString, array $fallBacks = array(), $default = 'C', array $categories = array(LC_ALL))
 {
     $acceptedLanguageArray = array($default => 0.0);
     foreach (explode(',', $acceptedLanguagesString) as $lang) {
         if (preg_match('/([a-z-]{2,})(?:;q=(.+))?/i', $lang, $matches) === 0) {
             continue;
         }
         $localeParts = explode('_', strtr($matches[1], array('-' => '_')));
         $localeCode = strtolower($localeParts[0]) . (isset($localeParts[1]) ? '_' . strtoupper($localeParts[1]) : null);
         $acceptedLanguageArray[$localeCode] = isset($matches[2]) ? (double) $matches[2] : 1.0;
     }
     uasort($acceptedLanguageArray, function ($a, $b) {
         if ($a === $b) {
             return 0;
         } elseif ($a < $b) {
             return 1;
         } else {
             return 0;
         }
     });
     sort($categories);
     $localesToSet = array_keys($acceptedLanguageArray);
     $localizer = new Localizer();
     $localeArr = array_fill_keys($categories, $localesToSet);
     if (isset($localeArr[LC_ALL]) === true) {
         // special case wa?
         foreach ($fallBacks as $cat => $localeMap) {
             $localeArr[$cat] = $localeArr[LC_ALL];
         }
     }
     foreach ($localeArr as $cat => $locales) {
         for ($i = 0; $i < count($locales); ++$i) {
             if (isset($fallBacks[$cat][$locales[$i]]) === false) {
                 continue;
             }
             $localeArr[$cat][$i] = $fallBacks[$cat][$locales[$i]];
         }
         $localeArr[$cat] = array_unique($localeArr[$cat]);
     }
     $localizer->setLocale($localeArr);
     return $localizer;
 }