Skip to content

Commit aebcace

Browse files
committed
fix: i18n
1 parent fa3f57e commit aebcace

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

backend/apps/chat/api/chat.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,48 +123,47 @@ async def stream_sql(session: SessionDep, current_user: CurrentUser, request_que
123123
def run_task():
124124
try:
125125
# return id
126-
yield json.dumps({'type': 'id', 'id': llm_service.get_record().id}) + '\n\n'
126+
yield orjson.dumps({'type': 'id', 'id': llm_service.get_record().id}).decode() + '\n\n'
127127

128128
# generate sql
129129
sql_res = llm_service.generate_sql(session=session, lang=db_user.language)
130130
full_sql_text = ''
131131
for chunk in sql_res:
132132
full_sql_text += chunk
133-
yield json.dumps({'content': chunk, 'type': 'sql-result'}, ensure_ascii=False) + '\n\n'
134-
yield json.dumps({'type': 'info', 'msg': 'sql generated'}) + '\n\n'
133+
yield orjson.dumps({'content': chunk, 'type': 'sql-result'}).decode() + '\n\n'
134+
yield orjson.dumps({'type': 'info', 'msg': 'sql generated'}).decode() + '\n\n'
135135

136136
# filter sql
137137
print(full_sql_text)
138138
sql = llm_service.check_save_sql(session=session, res=full_sql_text)
139139
print(sql)
140-
yield json.dumps({'content': sql, 'type': 'sql'}) + '\n\n'
140+
yield orjson.dumps({'content': sql, 'type': 'sql'}).decode() + '\n\n'
141141

142142
# execute sql
143143
result = llm_service.execute_sql(sql=sql)
144144
llm_service.save_sql_data(session=session, data_obj=result)
145-
yield json.dumps({'content': orjson.dumps(result).decode(), 'type': 'sql-data'}) + '\n\n'
145+
yield orjson.dumps({'content': orjson.dumps(result).decode(), 'type': 'sql-data'}).decode() + '\n\n'
146146

147147
# generate chart
148148
chart_res = llm_service.generate_chart(session=session, lang=db_user.language)
149149
full_chart_text = ''
150150
for chunk in chart_res:
151151
full_chart_text += chunk
152-
yield json.dumps({'content': chunk, 'type': 'chart-result'}, ensure_ascii=False) + '\n\n'
153-
yield json.dumps({'type': 'info', 'msg': 'chart generated'}) + '\n\n'
152+
yield orjson.dumps({'content': chunk, 'type': 'chart-result'}).decode() + '\n\n'
153+
yield orjson.dumps({'type': 'info', 'msg': 'chart generated'}).decode() + '\n\n'
154154

155155
# filter chart
156156
print(full_chart_text)
157157
chart = llm_service.check_save_chart(session=session, res=full_chart_text)
158158
print(chart)
159-
yield json.dumps({'content': json.dumps(chart, ensure_ascii=False), 'type': 'chart'},
160-
ensure_ascii=False) + '\n\n'
159+
yield orjson.dumps({'content': orjson.dumps(chart).decode(), 'type': 'chart'}).decode() + '\n\n'
161160

162161
llm_service.finish(session=session)
163-
yield json.dumps({'type': 'finish'})
162+
yield orjson.dumps({'type': 'finish'}).decode() + '\n\n'
164163

165164
except Exception as e:
166165
traceback.print_exc()
167166
llm_service.save_error(session=session, message=str(e))
168-
yield json.dumps({'content': str(e), 'type': 'error'}, ensure_ascii=False) + '\n\n'
167+
yield orjson.dumps({'content': str(e), 'type': 'error'}).decode() + '\n\n'
169168

170169
return StreamingResponse(run_task(), media_type="text/event-stream")

frontend/src/i18n/en.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,5 +136,18 @@
136136
"failed": "Connect failed"
137137
}
138138
}
139+
},
140+
"chat": {
141+
"chart_type": {
142+
"table": "Table",
143+
"bar": "Bar",
144+
"column": "Column",
145+
"line": "Line",
146+
"pie": "Pie"
147+
},
148+
"sql_generation": "SQL Generation",
149+
"chart_generation": "Chart Generation",
150+
"inference_process" : "Inference process",
151+
"thinking": "Thinking"
139152
}
140153
}

frontend/src/i18n/zh-CN.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,5 +136,18 @@
136136
"failed": "连接失败"
137137
}
138138
}
139+
},
140+
"chat": {
141+
"chart_type": {
142+
"table": "明细表",
143+
"bar": "条形图",
144+
"column": "柱状图",
145+
"line": "折线图",
146+
"pie": "饼图"
147+
},
148+
"sql_generation": "生成SQL",
149+
"chart_generation": "生成图表",
150+
"inference_process": "思考过程",
151+
"thinking": "思考中"
139152
}
140153
}

frontend/src/views/chat/ChatAnswer.vue

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import ICON_LINE from '@/assets/svg/chart/line.svg'
1111
import ICON_PIE from '@/assets/svg/chart/pie.svg'
1212
import ICON_TABLE from '@/assets/svg/chart/table.svg'
1313
import { find } from 'lodash-es'
14+
import { useI18n } from 'vue-i18n'
1415
16+
const { t } = useI18n()
1517
const props = defineProps<{
1618
message?: ChatMessage
1719
}>()
@@ -107,6 +109,7 @@ const chartTypeList = computed(() => {
107109
const _list = [
108110
{
109111
value: 'table',
112+
name: t('chat.chart_type.table'),
110113
icon: ICON_TABLE,
111114
},
112115
]
@@ -119,20 +122,24 @@ const chartTypeList = computed(() => {
119122
case 'line':
120123
_list.push({
121124
value: 'column',
125+
name: t('chat.chart_type.column'),
122126
icon: ICON_COLUMN,
123127
})
124128
_list.push({
125129
value: 'bar',
130+
name: t('chat.chart_type.bar'),
126131
icon: ICON_BAR,
127132
})
128133
_list.push({
129134
value: 'line',
135+
name: t('chat.chart_type.line'),
130136
icon: ICON_LINE,
131137
})
132138
break
133139
case 'pie':
134140
_list.push({
135141
value: 'pie',
142+
name: t('chat.chart_type.pie'),
136143
icon: ICON_PIE,
137144
})
138145
}
@@ -159,7 +166,7 @@ function onTypeChange() {
159166
<el-container v-if="message">
160167
<el-header style="display: flex; align-items: center; flex-direction: row">
161168
<div style="flex: 1">
162-
<div v-if="message.isTyping">Thinking ...</div>
169+
<div v-if="message.isTyping">{{ t('chat.thinking') }} ...</div>
163170
<div v-if="chartObject.title && !message.isTyping">{{ chartObject.title }}</div>
164171
</div>
165172
<div class="tab-container">
@@ -188,7 +195,7 @@ function onTypeChange() {
188195
<el-icon size="34">
189196
<component :is="t.icon" />
190197
</el-icon>
191-
{{ t.value }}
198+
{{ t.name }}
192199
</div>
193200
</el-option>
194201
</el-select>
@@ -207,19 +214,19 @@ function onTypeChange() {
207214
<el-collapse expand-icon-position="left">
208215
<el-collapse-item name="1">
209216
<template #title>
210-
Inference process
217+
{{ t('chat.inference_process') }}
211218
<el-icon v-if="props.message?.isTyping">
212219
<Loading />
213220
</el-icon>
214221
</template>
215222
<div>
216223
<template v-if="message.record.sql_answer">
217-
<div>SQL Generation:</div>
224+
<div style="font-weight: 500">{{ t('chat.sql_generation') }}:</div>
218225
<div v-if="message.record.sql_answer" v-dompurify-html="renderSqlThinking"></div>
219226
</template>
220227
<template v-if="message.record.chart_answer">
221228
<el-divider></el-divider>
222-
<div>Chart Generation:</div>
229+
<div style="font-weight: 500">{{ t('chat.chart_generation') }}:</div>
223230
<div v-dompurify-html="renderChartThinking"></div>
224231
</template>
225232
</div>

0 commit comments

Comments
 (0)