rust_translate/
lib.rs

1use reqwest;
2use serde_json::Value;
3
4/// Translates text from one language to another.
5///
6/// # Arguments
7///
8/// * `text` - The text to be translated.
9/// * `from` - The language code of the source language.
10/// * `to` - The language code of the target language.
11///
12/// # Examples
13///
14///
15/// ```
16/// use rust_translate::{translate, translate_to_english, translate_from_english};
17///
18/// #[tokio::main]
19/// async fn main() {
20///     // Translate text from any language to any other language
21///     let translated_text = translate("Bonjour le monde!", "fr", "en").await.unwrap();
22///     println!("Translated text: {}", translated_text);
23/// }
24/// ```
25pub async fn translate(text: &str, from: &str, to: &str) -> Result<String, Box<dyn std::error::Error>> {
26    let url = format!(
27        "https://translate.googleapis.com/translate_a/single?client=gtx&sl={}&tl={}&dt=t&q={}",
28        from, to, text
29    );
30
31    let response = reqwest::get(&url).await?.text().await?;
32    let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
33
34    Ok(translated_text)
35}
36
37/// Translates text to English from the detected language.
38///
39/// # Arguments
40///
41/// * `text` - The text to be translated.
42///
43/// # Examples
44///
45/// ```
46/// use rust_translate::{translate, translate_to_english, translate_from_english};
47///
48/// #[tokio::main]
49/// async fn main() {
50///     // Translate text to English
51///     let english_text = translate_to_english("Bonjour le monde!").await.unwrap();
52///     println!("Translated to English: {}", english_text);
53/// }
54/// ```
55pub async fn translate_to_english(text: &str) -> Result<String, Box<dyn std::error::Error>> {
56    let from = "auto";
57    let to = "en";
58
59    let url = format!(
60        "https://translate.googleapis.com/translate_a/single?client=gtx&sl={}&tl={}&dt=t&q={}",
61        from, to, text
62    );
63
64    let response = reqwest::get(&url).await?.text().await?;
65    let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
66
67    Ok(translated_text)
68}
69
70/// Translates text from English to the specified language.
71///
72/// # Arguments
73///
74/// * `text` - The text to be translated.
75/// * `to` - The language code of the target language.
76///
77/// # Examples
78///
79/// ```
80/// use rust_translate::{translate, translate_to_english, translate_from_english};
81///
82/// #[tokio::main]
83/// async fn main() {
84///     // Translate text from English to any other language
85///     let spanish_text = translate_from_english("Hello, world!", "es").await.unwrap();
86///     println!("Translated to Spanish: {}", spanish_text);
87/// }
88/// ```
89pub async fn translate_from_english(text: &str, to: &str) -> Result<String, Box<dyn std::error::Error>>  {
90    let url = format!(
91        "https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl={}&dt=t&q={}",
92        to, text
93    );
94
95    let response = reqwest::get(&url).await?.text().await?;
96    let translated_text: String = serde_json::from_str::<Value>(&response)?[0][0][0].as_str().unwrap().to_string();
97
98    Ok(translated_text)
99}
100
101/// # Supported Languages
102///
103/// This module provides a list of supported language codes for translation.
104///
105/// ## Usage
106///
107/// Users can refer to the documentation to see the list of supported languages and their
108/// corresponding language codes.
109///
110/// # Examples
111/// ```
112/// use rust_translate::{translate, translate_to_english, translate_from_english};
113/// use rust_translate::supported_languages::get_languages;
114/// 
115/// fn main() {
116///     let supported_languages = get_languages();
117///     println!("Supported languages: {:?}", supported_languages);
118/// }
119/// ```
120pub mod supported_languages {
121    /// List of supported language codes.
122    ///
123    /// The following language codes are supported for translation:
124    ///
125    /// - `af`: Afrikaans
126    /// - `sq`: Albanian
127    /// - `am`: Amharic
128    /// - `ar`: Arabic
129    /// - `hy`: Armenian
130    /// - `az`: Azerbaijani
131    /// - `eu`: Basque
132    /// - `be`: Belarusian
133    /// - `bn`: Bengali
134    /// - `bs`: Bosnian
135    /// - `bg`: Bulgarian
136    /// - `ca`: Catalan
137    /// - `ceb`: Cebuano
138    /// - `ny`: Chichewa
139    /// - `zh`: Chinese (Simplified)
140    /// - `zh-TW`: Chinese (Traditional)
141    /// - `co`: Corsican
142    /// - `hr`: Croatian
143    /// - `cs`: Czech
144    /// - `da`: Danish
145    /// - `nl`: Dutch
146    /// - `en`: English
147    /// - `eo`: Esperanto
148    /// - `et`: Estonian
149    /// - `tl`: Filipino
150    /// - `fi`: Finnish
151    /// - `fr`: French
152    /// - `fy`: Frisian
153    /// - `gl`: Galician
154    /// - `ka`: Georgian
155    /// - `de`: German
156    /// - `el`: Greek
157    /// - `gu`: Gujarati
158    /// - `ht`: Haitian Creole
159    /// - `ha`: Hausa
160    /// - `haw`: Hawaiian
161    /// - `he`: Hebrew
162    /// - `hi`: Hindi
163    /// - `hmn`: Hmong
164    /// - `hu`: Hungarian
165    /// - `is`: Icelandic
166    /// - `ig`: Igbo
167    /// - `id`: Indonesian
168    /// - `ga`: Irish
169    /// - `it`: Italian
170    /// - `ja`: Japanese
171    /// - `jv`: Javanese
172    /// - `kn`: Kannada
173    /// - `kk`: Kazakh
174    /// - `km`: Khmer
175    /// - `rw`: Kinyarwanda
176    /// - `ko`: Korean
177    /// - `ku`: Kurdish (Kurmanji)
178    /// - `ky`: Kyrgyz
179    /// - `lo`: Lao
180    /// - `la`: Latin
181    /// - `lv`: Latvian
182    /// - `lt`: Lithuanian
183    /// - `lb`: Luxembourgish
184    /// - `mk`: Macedonian
185    /// - `mg`: Malagasy
186    /// - `ms`: Malay
187    /// - `ml`: Malayalam
188    /// - `mt`: Maltese
189    /// - `mi`: Maori
190    /// - `mr`: Marathi
191    /// - `mn`: Mongolian
192    /// - `my`: Myanmar (Burmese)
193    /// - `ne`: Nepali
194    /// - `no`: Norwegian
195    /// - `or`: Odia (Oriya)
196    /// - `ps`: Pashto
197    /// - `fa`: Persian
198    /// - `pl`: Polish
199    /// - `pt`: Portuguese
200    /// - `pa`: Punjabi
201    /// - `ro`: Romanian
202    /// - `ru`: Russian
203    /// - `sm`: Samoan
204    /// - `gd`: Scots Gaelic
205    /// - `sr`: Serbian
206    /// - `st`: Sesotho
207    /// - `sn`: Shona
208    /// - `sd`: Sindhi
209    /// - `si`: Sinhala
210    /// - `sk`: Slovak
211    /// - `sl`: Slovenian
212    /// - `so`: Somali
213    /// - `es`: Spanish
214    /// - `su`: Sundanese
215    /// - `sw`: Swahili
216    /// - `sv`: Swedish
217    /// - `tg`: Tajik
218    /// - `ta`: Tamil
219    /// - `te`: Telugu
220    /// - `th`: Thai
221    /// - `tr`: Turkish
222    /// - `uk`: Ukrainian
223    /// - `ur`: Urdu
224    /// - `ug`: Uyghur
225    /// - `uz`: Uzbek
226    /// - `vi`: Vietnamese
227    /// - `cy`: Welsh
228    /// - `xh`: Xhosa
229    /// - `yi`: Yiddish
230    /// - `yo`: Yoruba
231    /// - `zu`: Zulu
232pub fn get_languages() -> Vec<&'static str> {
233    vec![
234        "af", "sq", "am", "ar", "hy", "az", "eu", "be", "bn", "bs", "bg", "ca", "ceb", "ny", "zh", "zh-TW",
235        "co", "hr", "cs", "da", "nl", "en", "eo", "et", "tl", "fi", "fr", "fy", "gl", "ka", "de", "el", "gu",
236        "ht", "ha", "haw", "he", "hi", "hmn", "hu", "is", "ig", "id", "ga", "it", "ja", "jv", "kn", "kk", "km",
237        "rw", "ko", "ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt", "mi", "mr", "mn",
238        "my", "ne", "no", "or", "ps", "fa", "pl", "pt", "pa", "ro", "ru", "sm", "gd", "sr", "st", "sn", "sd",
239        "si", "sk", "sl", "so", "es", "su", "sw", "sv", "tg", "ta", "te", "th", "tr", "uk", "ur", "ug", "uz",
240        "vi", "cy", "xh", "yi", "yo", "zu",
241        ]
242    }
243}