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 — Поиск языковых меток наиболее подходящих заданной локали
Объектно-ориентированный стиль
$languageTag,$locale,$canonicalize = false,$defaultLocale = nullПроцедурный стиль
$languageTag,$locale,$canonicalize = false,$defaultLocale = null
   Ищет элементы languageTag, наилучшим образом подходящие
   для диапазона языков, указанного в locale, в соответствии
   с алгоритмом поиска RFC 4647.
  
Наиболее подходящая данной локали метка языка.
 Метод возвращает null, если длина параметра locale превышает
 значение константы INTL_MAX_LOCALE_LEN.
| Версия | Описание | 
|---|---|
| 7.4.0 | defaultLocaleтеперь допускает значение null. | 
Пример #1 Пример использования locale_lookup()
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo locale_lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>Пример #2 Пример использования в объектно-ориентированном стиле
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo Locale::lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>Результат выполнения приведённого примера:
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.