From aebcace782d149a36111cf402f0f240072852744 Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 17 Jun 2025 17:00:28 +0800 Subject: [PATCH] fix: i18n --- backend/apps/chat/api/chat.py | 21 ++++++++++----------- frontend/src/i18n/en.json | 13 +++++++++++++ frontend/src/i18n/zh-CN.json | 13 +++++++++++++ frontend/src/views/chat/ChatAnswer.vue | 17 ++++++++++++----- 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/backend/apps/chat/api/chat.py b/backend/apps/chat/api/chat.py index 51d45d98..1a8eaedc 100644 --- a/backend/apps/chat/api/chat.py +++ b/backend/apps/chat/api/chat.py @@ -123,48 +123,47 @@ async def stream_sql(session: SessionDep, current_user: CurrentUser, request_que def run_task(): try: # return id - yield json.dumps({'type': 'id', 'id': llm_service.get_record().id}) + '\n\n' + yield orjson.dumps({'type': 'id', 'id': llm_service.get_record().id}).decode() + '\n\n' # generate sql sql_res = llm_service.generate_sql(session=session, lang=db_user.language) full_sql_text = '' for chunk in sql_res: full_sql_text += chunk - yield json.dumps({'content': chunk, 'type': 'sql-result'}, ensure_ascii=False) + '\n\n' - yield json.dumps({'type': 'info', 'msg': 'sql generated'}) + '\n\n' + yield orjson.dumps({'content': chunk, 'type': 'sql-result'}).decode() + '\n\n' + yield orjson.dumps({'type': 'info', 'msg': 'sql generated'}).decode() + '\n\n' # filter sql print(full_sql_text) sql = llm_service.check_save_sql(session=session, res=full_sql_text) print(sql) - yield json.dumps({'content': sql, 'type': 'sql'}) + '\n\n' + yield orjson.dumps({'content': sql, 'type': 'sql'}).decode() + '\n\n' # execute sql result = llm_service.execute_sql(sql=sql) llm_service.save_sql_data(session=session, data_obj=result) - yield json.dumps({'content': orjson.dumps(result).decode(), 'type': 'sql-data'}) + '\n\n' + yield orjson.dumps({'content': orjson.dumps(result).decode(), 'type': 'sql-data'}).decode() + '\n\n' # generate chart chart_res = llm_service.generate_chart(session=session, lang=db_user.language) full_chart_text = '' for chunk in chart_res: full_chart_text += chunk - yield json.dumps({'content': chunk, 'type': 'chart-result'}, ensure_ascii=False) + '\n\n' - yield json.dumps({'type': 'info', 'msg': 'chart generated'}) + '\n\n' + yield orjson.dumps({'content': chunk, 'type': 'chart-result'}).decode() + '\n\n' + yield orjson.dumps({'type': 'info', 'msg': 'chart generated'}).decode() + '\n\n' # filter chart print(full_chart_text) chart = llm_service.check_save_chart(session=session, res=full_chart_text) print(chart) - yield json.dumps({'content': json.dumps(chart, ensure_ascii=False), 'type': 'chart'}, - ensure_ascii=False) + '\n\n' + yield orjson.dumps({'content': orjson.dumps(chart).decode(), 'type': 'chart'}).decode() + '\n\n' llm_service.finish(session=session) - yield json.dumps({'type': 'finish'}) + yield orjson.dumps({'type': 'finish'}).decode() + '\n\n' except Exception as e: traceback.print_exc() llm_service.save_error(session=session, message=str(e)) - yield json.dumps({'content': str(e), 'type': 'error'}, ensure_ascii=False) + '\n\n' + yield orjson.dumps({'content': str(e), 'type': 'error'}).decode() + '\n\n' return StreamingResponse(run_task(), media_type="text/event-stream") diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index f661f639..f7754943 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -136,5 +136,18 @@ "failed": "Connect failed" } } + }, + "chat": { + "chart_type": { + "table": "Table", + "bar": "Bar", + "column": "Column", + "line": "Line", + "pie": "Pie" + }, + "sql_generation": "SQL Generation", + "chart_generation": "Chart Generation", + "inference_process" : "Inference process", + "thinking": "Thinking" } } diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index b17549de..4d87be89 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -136,5 +136,18 @@ "failed": "连接失败" } } + }, + "chat": { + "chart_type": { + "table": "明细表", + "bar": "条形图", + "column": "柱状图", + "line": "折线图", + "pie": "饼图" + }, + "sql_generation": "生成SQL", + "chart_generation": "生成图表", + "inference_process": "思考过程", + "thinking": "思考中" } } diff --git a/frontend/src/views/chat/ChatAnswer.vue b/frontend/src/views/chat/ChatAnswer.vue index eeaa9990..824c994a 100644 --- a/frontend/src/views/chat/ChatAnswer.vue +++ b/frontend/src/views/chat/ChatAnswer.vue @@ -11,7 +11,9 @@ import ICON_LINE from '@/assets/svg/chart/line.svg' import ICON_PIE from '@/assets/svg/chart/pie.svg' import ICON_TABLE from '@/assets/svg/chart/table.svg' import { find } from 'lodash-es' +import { useI18n } from 'vue-i18n' +const { t } = useI18n() const props = defineProps<{ message?: ChatMessage }>() @@ -107,6 +109,7 @@ const chartTypeList = computed(() => { const _list = [ { value: 'table', + name: t('chat.chart_type.table'), icon: ICON_TABLE, }, ] @@ -119,20 +122,24 @@ const chartTypeList = computed(() => { case 'line': _list.push({ value: 'column', + name: t('chat.chart_type.column'), icon: ICON_COLUMN, }) _list.push({ value: 'bar', + name: t('chat.chart_type.bar'), icon: ICON_BAR, }) _list.push({ value: 'line', + name: t('chat.chart_type.line'), icon: ICON_LINE, }) break case 'pie': _list.push({ value: 'pie', + name: t('chat.chart_type.pie'), icon: ICON_PIE, }) } @@ -159,7 +166,7 @@ function onTypeChange() {
-
Thinking ...
+
{{ t('chat.thinking') }} ...
{{ chartObject.title }}
@@ -188,7 +195,7 @@ function onTypeChange() { - {{ t.value }} + {{ t.name }}
@@ -207,19 +214,19 @@ function onTypeChange() {