private function serializeRequest(Request $request)
 {
     return $this->serializeLanguageParams($request->getLanguageTag(), $request->getLanguage(), $request->getScript(), $request->getRegion(), $request->getVariantsTag(), $request->getVariants(), $request->getExtensionsTag(), $request->getExtensions());
 }
 /**
  * Returns the appropriate fallback language chain for a given language.
  *
  * In other words, if a system has the available languages as en-CA, en-US, de-DE
  * Default language is de-DE
  * And a user requests en-SG; this will return array(en-CA, en-US, de-DE).
  * If a user requests fi-FI; will return array(de-DE)
  *
  * TODO: Use External Locale Provider
  * @param string $language
  * @return string[]
  */
 private function resolveLanguageChain($language)
 {
     $resolvedLanguage = $this->resolveLanguage($language);
     if (isset($this->languageResolutionChain[$resolvedLanguage])) {
         return $this->languageResolutionChain[$resolvedLanguage];
     }
     $chain = array();
     $request = new Request('na', $language);
     $chain[] = $request->getLanguageTag();
     $chain[] = implode('-', array_filter(array($request->getLanguage(), $request->getScript(), $request->getRegion())));
     $chain[] = implode('-', array_filter(array($request->getLanguage(), $request->getRegion())));
     $chain[] = implode('-', array_filter(array($request->getLanguage(), $request->getScript())));
     $chain[] = implode('-', array_filter(array($request->getLanguage())));
     $chain[] = $this->getOptions()->getFallbackLanguage();
     $chain = array_filter(array_unique($chain));
     return $chain;
 }