array($tag) ); } throw new InvalidArgumentException('Invalid language tag '.json_encode($tag) ); } $data['lang'] = strtolower($tags[1]); if( isset($tags[2]) && ( $subtag = $tags[2] ) ){ $data['extlang'] = strtolower( $subtag ); } if( isset($tags[3]) && ( $subtag = $tags[3] ) ){ $data['script'] = strtoupper($subtag{0}).strtolower(substr($subtag,1)); } if( isset($tags[4]) && ( $subtag = $tags[4] ) ){ $data['region'] = strtoupper($tags[4]); } if( isset($tags[5]) && ( $subtag = $tags[5]) ){ $data['variant'] = array_values( array_unique( explode('-',strtolower($subtag) ), SORT_REGULAR ) ); } if( isset($tags[6]) && ( $subtag = $tags[6] ) ){ $subtags = array(); $offset = -1; $parts = explode( '-', $subtag ); while( $value = array_shift($parts) ){ if( isset($value{1}) ){ $subtags[$offset] .= '-'.$value; } else { $subtags[++$offset] = $value; } } $data['extension'] = $subtags; } if( isset($tags[7]) && ( $subtag = $tags[7] ) ){ $data['extension'][] = 'x-'.substr($subtag,2); } return $data; }