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; }