use reqwest;
use serde_json::Value;
pub async fn translate(text: &str, from: &str, to: &str) -> Result<String, Box<dyn std::error::Error>> {
let url = format!(
"https://translate.googleapis.com/translate_a/single?client=gtx&sl={}&tl={}&dt=t&q={}",
from, to, text
);
let response = reqwest::get(&url).await?.text().await?;
let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
Ok(translated_text)
}
pub async fn translate_to_english(text: &str) -> Result<String, Box<dyn std::error::Error>> {
let from = "auto";
let to = "en";
let url = format!(
"https://translate.googleapis.com/translate_a/single?client=gtx&sl={}&tl={}&dt=t&q={}",
from, to, text
);
let response = reqwest::get(&url).await?.text().await?;
let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
Ok(translated_text)
}
pub async fn translate_from_english(text: &str, to: &str) -> Result<String, Box<dyn std::error::Error>> {
let url = format!(
"https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl={}&dt=t&q={}",
to, text
);
let response = reqwest::get(&url).await?.text().await?;
let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
Ok(translated_text)
}
pub mod supported_languages {
pub fn get_languages() -> Vec<&'static str> {
vec![
"af", "sq", "am", "ar", "hy", "az", "eu", "be", "bn", "bs", "bg", "ca", "ceb", "ny", "zh", "zh-TW",
"co", "hr", "cs", "da", "nl", "en", "eo", "et", "tl", "fi", "fr", "fy", "gl", "ka", "de", "el", "gu",
"ht", "ha", "haw", "he", "hi", "hmn", "hu", "is", "ig", "id", "ga", "it", "ja", "jv", "kn", "kk", "km",
"rw", "ko", "ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt", "mi", "mr", "mn",
"my", "ne", "no", "or", "ps", "fa", "pl", "pt", "pa", "ro", "ru", "sm", "gd", "sr", "st", "sn", "sd",
"si", "sk", "sl", "so", "es", "su", "sw", "sv", "tg", "ta", "te", "th", "tr", "uk", "ur", "ug", "uz",
"vi", "cy", "xh", "yi", "yo", "zu",
]
}
}