It worth to note that if $langtag array is empty this function returns empty string and not $default . Use array(false) if your $langtag array is empty in order to get default locale.(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Locale::lookup -- locale_lookup — Búsqueda en la lista de la mejor lengua
Estilo orientado a objetos
$languageTag,$locale,$canonicalize = false,$defaultLocale = nullEstilo procedimental
$languageTag,$locale,$canonicalize = false,$defaultLocale = null
   Búsqueda en la lista languageTag de la mejor lengua,
   para la configuración local especificada por locale, según
   el algoritmo de la RFC 4647.
  
languageTag
       Un array que contiene una lista de lenguas a comparar
       con la configuración local locale.
       Se permite un máximo de 100 elementos.
      
localeLa configuración local a utilizar para realizar la búsqueda.
canonicalize
       
           Si true los argumentos serán convertidos a su forma
           canónica antes de su búsqueda.
         
defaultLocaleLa configuración local a utilizar si no se encuentra ninguna solución.
La lengua más cercana que haya sido encontrada en la lista, o bien el valor por defecto.
Returns null when the length of locale exceeds INTL_MAX_LOCALE_LEN.
| Versión | Descripción | 
|---|---|
| 7.4.0 | defaultLocaleahora es nullable. | 
Ejemplo #1 Ejemplo con locale_lookup(), procedimental
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo locale_lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>Ejemplo #2 Ejemplo con Locale::lookup(), POO
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo Locale::lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>El ejemplo anterior mostrará:
de_de_1996
It worth to note that if $langtag array is empty this function returns empty string and not $default . Use array(false) if your $langtag array is empty in order to get default locale.Note that this method does not understand "similar" languages, so the following:
    Locale::lookup(["en-US"], "en-GB", false);
Or:
    Locale::lookup(["es-ES"], "es-CO", false);
Does not work as you would expect (empty result). To get a match in those cases you will have to use two letter language codes instead:
    Locale::lookup(["en"], "en-GB", false);
Or:
    Locale::lookup(["es"], "es-CO", false);
These do return 'en' and 'es' respectively.