use empty?
refactor language analysis