private Language languageBelow(Item item) {
        if (item.getLanguage() != Language.UNKNOWN) return item.getLanguage();
        if (item instanceof CompositeItem) {
            for (Iterator<Item> i = ((CompositeItem) item).getItemIterator(); i.hasNext(); ) {
                Language childLanguage = languageBelow(i.next());
                if (childLanguage != Language.UNKNOWN) return childLanguage;
            }
        }
        return Language.UNKNOWN;
    }
Gets the language to use for parsing. If this is explicitly set in the model, that language is returned.
Otherwise, if a query tree is already produced and any node in it specifies a language the first such
node encountered in a depth first
left to right search is returned. Otherwise the language is guessed from the query string.
If this does not yield an actual language, English is returned as the default.

@return the language determined, never null
container-search/src/main/java/com/yahoo/search/query/Model.java