!7 cmodule SayWithLanguageDetect { S typingText, text, detectedLanguage; visualize { ret northCenterAndSouthWithMargins( dm_bigInputAndSubmit('typingText, "Say / Sag", rThread sayIt), fontSizePlus(5, dm_centeredLabel('detectedLanguage)), rightAlignedButtons("Correct", rThread correct, "Not correct", rThread notCorrect); } void sayIt enter { S s = typingText; setField(text := s); S lang = dm_detectGermanVsEnglish(s); print(s + " => " + lang); if (eq("de", lang)) { setField(detectedLanguage := "Detected as: German"); dm_sayInGerman(s); ret; } if (eq("en", lang)) setField(detectedLanguage := "Detected as: English"); else setField(detectedLanguage := "Unknown language"); dm_sayInEnglish(s); } void correct enter { if (!swic(detectedLanguage, "unknown")) dm_addWordToLanguageExample(text, lower(lastWord(detectedLanguage))); } void notCorrect enter { fS text = this.text; inputText("What is the correct language for " + quote(text) + "?", cic(detectedLanguage, "english") ? "german" : "english", voidfunc(S s) { dm_addWordToLanguageExample(text, lower(s)); }); } // API void say(S s) { setField(typingText := s); sayIt(); } }