From b5944ae7a83c0e28b61632cd9034700d77a8c2d9 Mon Sep 17 00:00:00 2001 From: KirisameVanilla <118162831+kirisamevanilla@users.noreply.github.com> Date: Mon, 22 Sep 2025 22:22:52 +0800 Subject: [PATCH] feat: translate --- src/api/translate.ts | 92 +++++++++++++++++++++++++++++++++++ src/views/TranslationPage.vue | 72 +++++++++++++++++---------- 2 files changed, 139 insertions(+), 25 deletions(-) create mode 100644 src/api/translate.ts diff --git a/src/api/translate.ts b/src/api/translate.ts new file mode 100644 index 0000000..22aa9fb --- /dev/null +++ b/src/api/translate.ts @@ -0,0 +1,92 @@ +import apiClient from './client' + +/** + * 翻译接口参数 + */ +export interface TranslateRequest { + query: string + from_lang?: 'auto' | 'fr' | 'jp' | 'zh' | 'en' + to_lang: 'fr' | 'jp' | 'zh' | 'en' +} + +/** + * 翻译接口响应 + */ +export interface TranslateResponse { + translated_text: string +} + +/** + * 翻译文本 + * @param params 翻译参数 + * @returns 翻译结果 + */ +export const translateText = async (params: TranslateRequest): Promise => { + try { + const response = await apiClient.post('/translate', params) + return response.data + } catch (error: any) { + console.error('Translation API error:', error) + + // 处理不同类型的错误 + if (error.response) { + const status = error.response.status + const message = error.response.data?.message || '翻译失败' + + switch (status) { + case 401: + throw new Error('请先登录后再使用翻译功能') + case 500: + throw new Error('翻译服务暂时不可用,请稍后重试') + case 400: + throw new Error('翻译请求参数错误') + default: + throw new Error(`翻译失败:${message}`) + } + } else if (error.request) { + throw new Error('网络连接失败,请检查网络连接') + } else { + throw new Error('翻译请求失败,请稍后重试') + } + } +} + +/** + * 管理员调试翻译接口 + * @param query 待翻译文本 + * @param from_lang 源语言 + * @param to_lang 目标语言 + * @returns 翻译结果 + */ +export const debugTranslate = async ( + query: string, + from_lang: string = 'auto', + to_lang: string = 'zh' +): Promise => { + try { + const response = await apiClient.post('/translate/debug', null, { + params: { query, from_lang, to_lang } + }) + return response.data + } catch (error: any) { + console.error('Debug translation API error:', error) + + if (error.response) { + const status = error.response.status + const message = error.response.data?.message || '调试翻译失败' + + switch (status) { + case 403: + throw new Error('权限不足,仅管理员可使用此功能') + case 429: + throw new Error('请求频率过高,请稍后再试') + case 401: + throw new Error('请先登录后再使用翻译功能') + default: + throw new Error(`调试翻译失败:${message}`) + } + } else { + throw new Error('调试翻译请求失败,请稍后重试') + } + } +} \ No newline at end of file diff --git a/src/views/TranslationPage.vue b/src/views/TranslationPage.vue index 43d3c60..2371bea 100644 --- a/src/views/TranslationPage.vue +++ b/src/views/TranslationPage.vue @@ -6,8 +6,8 @@
-

法语翻译

-

中法双向翻译,助力语言学习

+

多语言翻译

+

支持中文、法语、日语互译,助力语言学习

@@ -17,9 +17,10 @@

源语言