from transformers import pipeline import gradio as gr # Initialize translation pipeline translator = pipeline("translation", model="facebook/m2m100_418M") def translate_text(text, src_lang_code, tgt_lang_code): if not text.strip(): return "" # Set source language translator.tokenizer.src_lang = src_lang_code # Translate result = translator( text, src_lang=src_lang_code, tgt_lang=tgt_lang_code, clean_up_tokenization_spaces=True ) return result[0]['translation_text'] # Language dictionary with native text examples LANGUAGES = { "Afrikaans - Afrikaans": "af", "Albanian - Shqip": "sq", "Amharic - አማርኛ": "am", "Arabic - العربية": "ar", "Armenian - Հայերեն": "hy", "Azerbaijani - Azərbaycanca": "az", "Basque - Euskara": "eu", "Belarusian - Беларуская": "be", "Bengali - বাংলা": "bn", "Bosnian - Bosanski": "bs", "Bulgarian - Български": "bg", "Catalan - Català": "ca", "Cebuano - Cebuano": "ceb", "Chichewa - Nyanja": "ny", "Chinese Simplified - 中文": "zh", "Chinese Traditional - 中文": "zh", "Corsican - Corsu": "co", "Croatian - Hrvatski": "hr", "Czech - Čeština": "cs", "Danish - Dansk": "da", "Dutch - Nederlands": "nl", "English - English": "en", "Esperanto - Esperanto": "eo", "Estonian - Eesti": "et", "Filipino - Filipino": "tl", "Finnish - Suomi": "fi", "French - Français": "fr", "Frisian - Frysk": "fy", "Galician - Galego": "gl", "Georgian - ქართული": "ka", "German - Deutsch": "de", "Greek - Ελληνικά": "el", "Gujarati - ગુજરાતી": "gu", "Haitian Creole - Kreyòl ayisyen": "ht", "Hausa - Hausa": "ha", "Hawaiian - ʻŌlelo Hawaiʻi": "haw", "Hebrew - עברית": "he", "Hindi - हिन्दी": "hi", "Hmong - Hmong": "hmn", "Hungarian - Magyar": "hu", "Icelandic - Íslenska": "is", "Igbo - Asụsụ Igbo": "ig", "Indonesian - Bahasa Indonesia": "id", "Irish - Gaeilge": "ga", "Italian - Italiano": "it", "Japanese - 日本語": "ja", "Javanese - Basa Jawa": "jv", "Kannada - ಕನ್ನಡ": "kn", "Kazakh - Қазақша": "kk", "Khmer - ភាសាខ្មែរ": "km", "Kinyarwanda - Kinyarwanda": "rw", "Korean - 한국어": "ko", "Kurdish - Kurdî": "ku", "Kyrgyz - Кыргызча": "ky", "Lao - ພາສາລາວ": "lo", "Latin - Latina": "la", "Latvian - Latviešu": "lv", "Lithuanian - Lietuvių": "lt", "Luxembourgish - Lëtzebuergesch": "lb", "Macedonian - Македонски": "mk", "Malagasy - Malagasy": "mg", "Malay - Bahasa Melayu": "ms", "Malayalam - മലയാളം": "ml", "Maltese - Malti": "mt", "Maori - Te Reo Māori": "mi", "Marathi - मराठी": "mr", "Mongolian - Монгол": "mn", "Myanmar - မြန်မာဘာသာ": "my", "Nepali - नेपाली": "ne", "Norwegian - Norsk": "no", "Odia - ଓଡ଼ିଆ": "or", "Pashto - پښتو": "ps", "Persian - فارسی": "fa", "Polish - Polski": "pl", "Portuguese - Português": "pt", "Punjabi - ਪੰਜਾਬੀ": "pa", "Romanian - Română": "ro", "Russian - Русский": "ru", "Samoan - Gagana Samoa": "sm", "Scots Gaelic - Gàidhlig": "gd", "Serbian - Српски": "sr", "Sesotho - Sesotho": "st", "Shona - ChiShona": "sn", "Sindhi - سنڌي": "sd", "Sinhala - සිංහල": "si", "Slovak - Slovenčina": "sk", "Slovenian - Slovenščina": "sl", "Somali - Soomaali": "so", "Spanish - Español": "es", "Sundanese - Basa Sunda": "su", "Swahili - Kiswahili": "sw", "Swedish - Svenska": "sv", "Tajik - Тоҷикӣ": "tg", "Tamil - தமிழ்": "ta", "Tatar - Татарча": "tt", "Telugu - తెలుగు": "te", "Thai - ไทย": "th", "Turkish - Türkçe": "tr", "Turkmen - Türkmençe": "tk", "Ukrainian - Українська": "uk", "Urdu - اردو": "ur", "Uyghur - ئۇيغۇرچە": "ug", "Uzbek - O'zbekcha": "uz", "Vietnamese - Tiếng Việt": "vi", "Welsh - Cymraeg": "cy", "Xhosa - IsiXhosa": "xh", "Yiddish - יידיש": "yi", "Yoruba - Èdè Yorùbá": "yo", "Zulu - IsiZulu": "zu" } # Create sorted lists for dropdowns language_names = sorted(LANGUAGES.keys()) default_src = "English - English" default_tgt = "Spanish - Español" # Gradio interface with gr.Blocks(title="Universal Translator") as demo: gr.Markdown("# 🌍 Universal Language Translator") gr.Markdown("Translate between 100+ languages using Hugging Face's M2M100 model") with gr.Row(): with gr.Column(): src_lang = gr.Dropdown( choices=language_names, value=default_src, label="Source Language" ) input_text = gr.Textbox( lines=6, placeholder="Enter text to translate...", label="Input Text" ) with gr.Column(): tgt_lang = gr.Dropdown( choices=language_names, value=default_tgt, label="Target Language" ) output_text = gr.Textbox( lines=6, interactive=False, label="Translation" ) translate_btn = gr.Button("Translate", variant="primary") def translate_wrapper(text, src_lang_name, tgt_lang_name): src_code = LANGUAGES[src_lang_name] tgt_code = LANGUAGES[tgt_lang_name] return translate_text(text, src_code, tgt_code) translate_btn.click( translate_wrapper, inputs=[input_text, src_lang, tgt_lang], outputs=output_text ) gr.Examples( [ ["Hello, how are you today?", "English - English", "French - Français"], ["The weather is beautiful", "English - English", "German - Deutsch"], ["I love programming with Python", "English - English", "Spanish - Español"], ["Machine learning is fascinating", "English - English", "Chinese Simplified - 中文"], ["こんにちは、元気ですか?", "Japanese - 日本語", "English - English"], ["Bonjour, comment allez-vous?", "French - Français", "Russian - Русский"] ], inputs=[input_text, src_lang, tgt_lang] ) gr.Markdown("### Supported Languages") gr.Markdown(f"- **Total Languages**: {len(language_names)}") gr.Markdown("- **Model**: [facebook/m2m100_418M](https://huggingface.co/facebook/m2m100_418M)") gr.Markdown("- **Tip**: Each language shows how it's written in its own script (e.g., Russian - Русский)") if __name__ == "__main__": demo.launch()