Fallback to known existing records when a record is missing
You need something similar to

SELECT m.module, 
       COALESCE(c_esp.content, c_eng.content) content
FROM `modules` m
LEFT JOIN ( contents c_esp, 
            languages l_esp ) ON (     m.id = c_esp.module_id 
                                   AND c_esp.language_id = l_esp.id 
                                   AND l_esp.tag = 'es-ES' )
LEFT JOIN ( contents c_eng, 
            languages l_eng ) ON (     m.id = c_eng.module_id 
                                   AND c_eng.language_id = l_eng.id 
                                   AND l_eng.tag = 'es-ES' )