import React, { useState } from 'react'; import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; import { Input } from 'react-native-elements'; import ModalDropdown from 'react-native-modal-dropdown'; import { styles } from "./Style"; const languages = { "am-ET": "Amharic", "ar-SA": "Arabic", "be-BY": "Bielarus", "bem-ZM": "Bemba", "bi-VU": "Bislama", "bjs-BB": "Bajan", "bn-IN": "Bengali", "bo-CN": "Tibetan", "br-FR": "Breton", "bs-BA": "Bosnian", "ca-ES": "Catalan", "cop-EG": "Coptic", "cs-CZ": "Czech", "cy-GB": "Welsh", "da-DK": "Danish", "dz-BT": "Dzongkha", "de-DE": "German", "dv-MV": "Maldivian", "el-GR": "Greek", "en-GB": "English", "es-ES": "Spanish", "et-EE": "Estonian", "eu-ES": "Basque", "fa-IR": "Persian", "fi-FI": "Finnish", "fn-FNG": "Fanagalo", "fo-FO": "Faroese", "fr-FR": "French", "gl-ES": "Galician", "gu-IN": "Gujarati", "ha-NE": "Hausa", "he-IL": "Hebrew", "hi-IN": "Hindi", "hr-HR": "Croatian", "hu-HU": "Hungarian", "id-ID": "Indonesian", "is-IS": "Icelandic", "it-IT": "Italian", "ja-JP": "Japanese", "kk-KZ": "Kazakh", "km-KM": "Khmer", "kn-IN": "Kannada", "ko-KR": "Korean", "ku-TR": "Kurdish", "ky-KG": "Kyrgyz", "la-VA": "Latin", "lo-LA": "Lao", "lv-LV": "Latvian", "men-SL": "Mende", "mg-MG": "Malagasy", "mi-NZ": "Maori", "ms-MY": "Malay", "mt-MT": "Maltese", "my-MM": "Burmese", "ne-NP": "Nepali", "niu-NU": "Niuean", "nl-NL": "Dutch", "no-NO": "Norwegian", "ny-MW": "Nyanja", "ur-PK": "Pakistani", "pau-PW": "Palauan", "pa-IN": "Panjabi", "ps-PK": "Pashto", "pis-SB": "Pijin", "pl-PL": "Polish", "pt-PT": "Portuguese", "rn-BI": "Kirundi", "ro-RO": "Romanian", "ru-RU": "Russian", "sg-CF": "Sango", "si-LK": "Sinhala", "sk-SK": "Slovak", "sm-WS": "Samoan", "sn-ZW": "Shona", "so-SO": "Somali", "sq-AL": "Albanian", "sr-RS": "Serbian", "sv-SE": "Swedish", "sw-SZ": "Swahili", "ta-LK": "Tamil", "te-IN": "Telugu", "tet-TL": "Tetum", "tg-TJ": "Tajik", "th-TH": "Thai", "ti-TI": "Tigrinya", "tk-TM": "Turkmen", "tl-PH": "Tagalog", "tn-BW": "Tswana", "to-TO": "Tongan", "tr-TR": "Turkish", "uk-UA": "Ukrainian", "uz-UZ": "Uzbek", "vi-VN": "Vietnamese", "wo-SN": "Wolof", "xh-ZA": "Xhosa", "yi-YD": "Yiddish", "zu-ZA": "Zulu" }; export default function LanguageTranslator() { const [fromText, setFromText] = useState(''); const [toText, setToText] = useState(''); const [fromLanguage, setFromLanguage] = useState('en-GB'); const [toLanguage, setToLanguage] = useState('fa-IR'); const translate = () => { if (!fromText) { setToText(''); return; } setToText('Translating...'); const apiUrl = `https://api.mymemory.translated.net/get?q= ${fromText}&langpair=${fromLanguage}|${toLanguage}`; fetch(apiUrl) .then((res) => res.json()) .then((data) => { setToText(data.responseData.translatedText); data.matches.forEach((data) => { if (data.id === 0) { setToText(data.translation); } }); }); }; const exchangeLanguages = () => { const tempText = fromText; const tempLang = fromLanguage; setFromText(toText); setToText(tempText); setFromLanguage(toLanguage); setToLanguage(tempLang); }; return ( <View style={styles.container}> <View style={styles.wrapper}> <Input placeholder="Enter text" value={fromText} onChangeText={(text) => setFromText(text)} inputContainerStyle= {styles.textInputContainer} multiline={true} // Allow multiline input numberOfLines={4} // Limit the number of lines shown (adjust as needed) /> <View style={styles.controls}> <ModalDropdown options={Object.values(languages)} defaultValue={languages[fromLanguage]} onSelect={(index, value) => { setFromLanguage(Object.keys(languages).find(key => languages[key] === value)); }} style={styles.picker} /> <TouchableOpacity style={styles.exchangeButton} onPress={exchangeLanguages}> <Text style={styles.exchangeButtonText}>↔</Text> </TouchableOpacity> <ModalDropdown options={Object.values(languages)} defaultValue={languages[toLanguage]} onSelect={(index, value) => { setToLanguage(Object.keys(languages) .find(key => languages[key] === value)); }} style={styles.picker} /> </View> <Input placeholder="Translation" value={toText} inputContainerStyle= {styles.translationTextContainer} disabled multiline={true} // Allow multiline input for translation text numberOfLines={4} // Limit the number of lines shown (adjust as needed) /> <TouchableOpacity style={styles.button} onPress={translate}> <Text style={styles.buttonText}>Translate it</Text> </TouchableOpacity> </View> </View> ); }