@@ -4,7 +4,7 @@ use crate::{
44} ;
55use axum:: { Json , extract:: State } ;
66use serde:: { Deserialize , Serialize } ;
7- use std:: sync:: Arc ;
7+ use std:: { sync:: Arc , time :: SystemTime } ;
88
99#[ derive( Debug , Deserialize ) ]
1010pub struct DetectLanguageRequest {
@@ -144,9 +144,6 @@ pub async fn translate_hcfy(
144144 const LANGUAGE_CODE_MAP : & [ ( & str , & str ) ] =
145145 & [ ( "中文(简体)" , "zh" ) , ( "英语" , "en" ) , ( "日语" , "jp" ) ] ;
146146
147- const LANGUAGE_NAME_MAP : & [ ( & str , & str ) ] =
148- & [ ( "zh" , "中文(简体)" ) , ( "en" , "英语" ) , ( "jp" , "日语" ) ] ;
149-
150147 fn convert_language_name ( lang : & str ) -> String {
151148 LANGUAGE_CODE_MAP
152149 . iter ( )
@@ -157,10 +154,10 @@ pub async fn translate_hcfy(
157154 }
158155
159156 fn get_language_name ( code : & str ) -> String {
160- LANGUAGE_NAME_MAP
157+ LANGUAGE_CODE_MAP
161158 . iter ( )
162- . find ( |& & ( c , _ ) | c == code)
163- . map ( |& ( _ , name ) | name)
159+ . find ( |& & ( _ , c ) | c == code)
160+ . map ( |& ( name , _ ) | name)
164161 . unwrap_or ( code)
165162 . to_string ( )
166163 }
@@ -189,3 +186,47 @@ pub async fn translate_hcfy(
189186 result : vec ! [ translated_text] ,
190187 } ) )
191188}
189+
190+ #[ derive( Debug , Deserialize ) ]
191+ pub struct DeeplxTranslationRequest {
192+ text : String ,
193+ source_lang : String ,
194+ target_lang : String ,
195+ }
196+
197+ #[ derive( Debug , Serialize ) ]
198+ pub struct DeeplxTranslationResponse {
199+ code : u32 ,
200+ id : u128 ,
201+ data : String ,
202+ alternatives : Vec < String > ,
203+ source_lang : String ,
204+ target_lang : String ,
205+ method : String ,
206+ }
207+
208+ pub async fn translate_deeplx (
209+ State ( state) : State < Arc < AppState > > ,
210+ Json ( request) : Json < DeeplxTranslationRequest > ,
211+ ) -> Result < Json < DeeplxTranslationResponse > , AppError > {
212+ let ( text, from_lang, to_lang) = perform_translation (
213+ & state,
214+ & request. text ,
215+ Some ( request. source_lang . to_lowercase ( ) ) ,
216+ & request. target_lang . to_lowercase ( ) ,
217+ )
218+ . await ?;
219+
220+ Ok ( Json ( DeeplxTranslationResponse {
221+ code : 200 ,
222+ id : SystemTime :: now ( )
223+ . duration_since ( SystemTime :: UNIX_EPOCH )
224+ . unwrap ( )
225+ . as_millis ( ) ,
226+ data : text,
227+ alternatives : vec ! [ ] ,
228+ source_lang : from_lang. to_uppercase ( ) ,
229+ target_lang : to_lang. to_uppercase ( ) ,
230+ method : "Free" . to_owned ( ) ,
231+ } ) )
232+ }
0 commit comments