import gradio as gr from langdetect import detect from gtts import gTTS import os # Define lang_map in global scope lang_map = { 'en': 'English', 'es': 'Spanish', 'fr': 'French', 'de': 'German', 'it': 'Italian', 'pt': 'Portuguese', 'nl': 'Dutch', 'ru': 'Russian', 'zh-cn': 'Chinese (Simplified)', 'ja': 'Japanese', 'ko': 'Korean', 'pl': 'Polish', 'uk': 'Ukrainian', 'sk': 'Slovak', 'lt': 'Lithuanian', 'cs': 'Czech', 'sr': 'Serbian', 'hr': 'Croatian', 'hi': 'Hindi' } def identify_and_pronounce(name, selected_lang): if not name or name.strip() == "": return "Please enter a name.", None # Detect the language of the name try: detected_lang = detect(name) except Exception as e: return f"Error detecting language: {str(e)}", None # If detected language isn't in map, use English as default but allow override detected_lang_name = lang_map.get(detected_lang, 'English (default)') detected_lang_code = detected_lang if detected_lang in lang_map else 'en' # Use selected language if provided and not "Auto", otherwise use detected language if selected_lang != "Auto" and selected_lang in lang_map.values(): lang_name = selected_lang lang_code = [code for code, name in lang_map.items() if name == selected_lang][0] else: lang_name = detected_lang_name lang_code = detected_lang_code # Generate pronunciation try: tts = gTTS(text=name, lang=lang_code, slow=False) audio_file = "output.mp3" tts.save(audio_file) return f"Detected language: {detected_lang_name}\nPronounced in: {lang_name}", audio_file except Exception as e: return f"Error generating pronunciation: {str(e)}", None # Gradio interface language_options = ["Auto"] + list(lang_map.values()) # Include "Auto" as default option interface = gr.Interface( fn=identify_and_pronounce, inputs=[ gr.Textbox(label="Enter a name", value="Tomasz DurzyƄski"), gr.Dropdown(choices=language_options, label="Select Language (Auto uses detection)", value="Auto") ], outputs=[ gr.Textbox(label="Language Info"), gr.Audio(label="Pronunciation") ], title="Name Language Detector and Pronouncer", description="Enter a name to detect its language and hear it pronounced. Optionally, select a language to override the default." ) # Launch the app interface.launch()