/**
  * Validates Accept-Language Header Field in according to RFC 2616 Section 14.3
  *
  * <p><strong>RFC Specification</strong></p>
  *
  * <code>
  *        Accept-Language = "Accept-Language" ":"
  *                          1#( language-range [ ";" "q" "=" qvalue ] )
  *
  *        language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
  * </code>
  *
  * @param string $data
  *   Data to validate
  *
  * @return boolean
  *   TRUE if valid and FALSE otherwise
  *
  * @link
  *   http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
  *   RFC 2616 Section 14.4
  */
 public function validate($data)
 {
     preg_match(sprintf('@^(?<abbr>[a-zA-Z]{2})(?:-(?<country>[a-zA-Z]{2}))?(?:;q=(?<quality>%s))?$@x', self::FLOAT), $data, $match);
     if (count($match) != 0) {
         /**
          * @internal
          * General Format is correct
          * Let's check chosen Language Abbreviation against ISO 639 Standards
          */
         $ISO = new ISO639();
         if ($ISO->validate($match['abbr'])) {
             /**
              * @internal
              * Language Abbreviation is Valid
              * Let's check chosen Country Code, if present, against ISO 3166 Standards
              */
             if (isset($match['country'])) {
                 $ISO = new ISO3166();
                 if ($ISO->validate($match['country'])) {
                     return TRUE;
                 }
             }
             // Valid, but without Country Code
             return TRUE;
         }
         // Invalid Language Abbreviation
         return FALSE;
     }
     // Invalid everything xD
     return FALSE;
 }
 /**
  * Validates Content-Language Header Field in according to RFC 2616 Section 14.12
  *
  * <p><strong>RFC Specification</strong></p>
  *
  * <code>
  *        Content-Language  = "Content-Language" ":" 1#language-tag
  * </code>
  *
  * @param string $data
  *   Data to validate
  *
  * @return boolean
  *   TRUE if valid and FALSE otherwise
  *
  * @link
  *   http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.12
  *   RFC 2616 Section 14.12
  */
 public function validate($data)
 {
     /**
      * @internal
      * The rules are the same of Accept-Language, but here Quality Values
      * are not considerated
      */
     preg_match('@^(?<abbr>[a-zA-Z]{2})(?:-(?<country>[a-zA-Z]{2}))?$@', $data, $match);
     if (count($match) != 0) {
         /**
          * @internal
          * General Format is correct
          * Let's check chosen Language Abbreviation against ISO 639 Standards
          */
         $ISO = new ISO639();
         if ($ISO->validate($match['abbr'])) {
             /**
              * @internal
              * Language Abbreviation is Valid
              * Let's check chosen Country Code, if present, against ISO 3166 Standards
              */
             if (isset($match['country'])) {
                 $ISO = new ISO3166();
                 if ($ISO->validate($match['country'])) {
                     return TRUE;
                 }
             }
             // Valid, but without Country Code
             return TRUE;
         }
         // Invalid Language Abbreviation
         return FALSE;
     }
     // Invalid everything xD
     return FALSE;
 }