A locale may be known by ICU but without metadata about it (and so, no way to know how to name it in its own language).
Take for example crh which can be named in French or in English but we have no way to name things in crh (no crh.xml in https://github.com/unicode-org/cldr/blob/main/common/main/)
In this case, locale.getDisplayLanguage(locale, langSelfNameICUString); use the default/fallback language for the display name. It is English for library.kiwix.org but it can be changed with LANG env var.
In this case, we should fallback to the language of UI (specific to the user).