For multiple languages in the same buffer an option would be to use hunspell.
Based on rom Spell check with multiple dictionaries :
(eval-after-load "ispell" (defun myflyspell-multilingual-setup () ;; POSSIBLE FIXES FOR MISSING DICTIONARIES FOR HUNSPELL: ;; - zypper install myspell-de_DE ;; COULD NOT GET IT TO WORK ON WINDOWS (unless (eq system-type 'windows-nt) (condition-case err (progn (setq ispell-program-name "hunspell") (setq ispell-dictionary "en_US,de_DE") (let ((null-device (make-temp-file "nuldevice"))) (ispell-set-spellchecker-params)) (ispell-hunspell-add-multi-dic ispell-dictionary)) ('error (warn "In myflyspell-multilingual-setup: %S" err))))))
Fun fact: The only other spell-checker that I've seen to be able to check multiple languages without explicitly switching is the one built into Chrome. No Office suite or offline Email client I know of has this ability, which is extremely annoying for a non-native English speaker regularly writing with international contacts.