mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-21 22:53:56 +08:00
update:上下文源功能的国际化
This commit is contained in:
@@ -2,14 +2,14 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
:visible.sync="dialogVisible"
|
:visible.sync="dialogVisible"
|
||||||
width="900px"
|
width="900px"
|
||||||
title="编辑源"
|
:title="$t('contextProviderDialog.title')"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
custom-class="context-provider-dialog"
|
custom-class="context-provider-dialog"
|
||||||
append-to-body
|
append-to-body
|
||||||
>
|
>
|
||||||
<div class="dialog-content">
|
<div class="dialog-content">
|
||||||
<el-empty v-if="localProviders.length === 0" description="暂无上下文API">
|
<el-empty v-if="localProviders.length === 0" :description="$t('contextProviderDialog.noContextApi')">
|
||||||
<el-button type="primary" icon="el-icon-plus" @click="addProvider(0)">添加</el-button>
|
<el-button type="primary" icon="el-icon-plus" @click="addProvider(0)">{{ $t('contextProviderDialog.add') }}</el-button>
|
||||||
</el-empty>
|
</el-empty>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -20,10 +20,10 @@
|
|||||||
<el-card class="provider-card" shadow="hover" :body-style="{ padding: '15px 20px' }">
|
<el-card class="provider-card" shadow="hover" :body-style="{ padding: '15px 20px' }">
|
||||||
<!-- URL Row -->
|
<!-- URL Row -->
|
||||||
<div class="input-row">
|
<div class="input-row">
|
||||||
<span class="label-text">接口地址</span>
|
<span class="label-text">{{ $t('contextProviderDialog.apiUrl') }}</span>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="provider.url"
|
v-model="provider.url"
|
||||||
placeholder="http://api.example.com/data"
|
:placeholder="$t('contextProviderDialog.apiUrlPlaceholder')"
|
||||||
size="small"
|
size="small"
|
||||||
class="flex-1"
|
class="flex-1"
|
||||||
></el-input>
|
></el-input>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<!-- Headers Section -->
|
<!-- Headers Section -->
|
||||||
<div class="headers-section">
|
<div class="headers-section">
|
||||||
<div class="label-text" style="margin-top: 6px;">请求头</div>
|
<div class="label-text" style="margin-top: 6px;">{{ $t('contextProviderDialog.requestHeaders') }}</div>
|
||||||
<div class="headers-list">
|
<div class="headers-list">
|
||||||
<div
|
<div
|
||||||
v-for="(header, hIndex) in provider.headers"
|
v-for="(header, hIndex) in provider.headers"
|
||||||
@@ -40,14 +40,14 @@
|
|||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="header.key"
|
v-model="header.key"
|
||||||
placeholder="Key"
|
:placeholder="$t('contextProviderDialog.headerKeyPlaceholder')"
|
||||||
size="small"
|
size="small"
|
||||||
style="width: 180px;"
|
style="width: 180px;"
|
||||||
></el-input>
|
></el-input>
|
||||||
<span class="separator">:</span>
|
<span class="separator">:</span>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="header.value"
|
v-model="header.value"
|
||||||
placeholder="Value"
|
:placeholder="$t('contextProviderDialog.headerValuePlaceholder')"
|
||||||
size="small"
|
size="small"
|
||||||
class="flex-1"
|
class="flex-1"
|
||||||
></el-input>
|
></el-input>
|
||||||
@@ -73,13 +73,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Empty Headers State -->
|
<!-- Empty Headers State -->
|
||||||
<div v-if="provider.headers.length === 0" class="header-row empty-header">
|
<div v-if="provider.headers.length === 0" class="header-row empty-header">
|
||||||
<span class="no-header-text">暂无 Headers</span>
|
<span class="no-header-text">{{ $t('contextProviderDialog.noHeaders') }}</span>
|
||||||
<el-button
|
<el-button
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-plus"
|
icon="el-icon-plus"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="addHeader(pIndex, 0)"
|
@click="addHeader(pIndex, 0)"
|
||||||
>添加 Header</el-button>
|
>{{ $t('contextProviderDialog.addHeader') }}</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -106,8 +106,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button @click="dialogVisible = false">{{ $t('contextProviderDialog.cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="handleConfirm">确定</el-button>
|
<el-button type="primary" @click="handleConfirm">{{ $t('contextProviderDialog.confirm') }}</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -230,6 +230,26 @@ export default {
|
|||||||
'voicePrintDialog.requiredName': 'Bitte Namen eingeben',
|
'voicePrintDialog.requiredName': 'Bitte Namen eingeben',
|
||||||
'voicePrintDialog.requiredAudioVector': 'Bitte Audio-Vektor auswählen',
|
'voicePrintDialog.requiredAudioVector': 'Bitte Audio-Vektor auswählen',
|
||||||
|
|
||||||
|
// Context provider dialog related
|
||||||
|
'contextProviderDialog.title': 'Quelle bearbeiten',
|
||||||
|
'contextProviderDialog.noContextApi': 'Keine Kontext-API',
|
||||||
|
'contextProviderDialog.add': 'Hinzufügen',
|
||||||
|
'contextProviderDialog.apiUrl': 'API-URL',
|
||||||
|
'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
|
||||||
|
'contextProviderDialog.requestHeaders': 'Anfrage-Header',
|
||||||
|
'contextProviderDialog.headerKeyPlaceholder': 'Schlüssel',
|
||||||
|
'contextProviderDialog.headerValuePlaceholder': 'Wert',
|
||||||
|
'contextProviderDialog.noHeaders': 'Keine Headers',
|
||||||
|
'contextProviderDialog.addHeader': 'Header hinzufügen',
|
||||||
|
'contextProviderDialog.cancel': 'Abbrechen',
|
||||||
|
'contextProviderDialog.confirm': 'Bestätigen',
|
||||||
|
|
||||||
|
// Role config page - context provider related
|
||||||
|
'roleConfig.contextProvider': 'Kontext',
|
||||||
|
'roleConfig.contextProviderSuccess': '{count} Quellen erfolgreich hinzugefügt.',
|
||||||
|
'roleConfig.contextProviderDocLink': 'Wie man Kontextquellen bereitstellt',
|
||||||
|
'roleConfig.editContextProvider': 'Quelle bearbeiten',
|
||||||
|
|
||||||
// Voice print page related
|
// Voice print page related
|
||||||
'voicePrint.pageTitle': 'Stimmabdruck-Erkennung',
|
'voicePrint.pageTitle': 'Stimmabdruck-Erkennung',
|
||||||
'voicePrint.name': 'Name',
|
'voicePrint.name': 'Name',
|
||||||
|
|||||||
@@ -230,6 +230,26 @@ export default {
|
|||||||
'voicePrintDialog.requiredName': 'Please enter name',
|
'voicePrintDialog.requiredName': 'Please enter name',
|
||||||
'voicePrintDialog.requiredAudioVector': 'Please select audio vector',
|
'voicePrintDialog.requiredAudioVector': 'Please select audio vector',
|
||||||
|
|
||||||
|
// Context provider dialog related
|
||||||
|
'contextProviderDialog.title': 'Edit Source',
|
||||||
|
'contextProviderDialog.noContextApi': 'No Context API',
|
||||||
|
'contextProviderDialog.add': 'Add',
|
||||||
|
'contextProviderDialog.apiUrl': 'API URL',
|
||||||
|
'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
|
||||||
|
'contextProviderDialog.requestHeaders': 'Request Headers',
|
||||||
|
'contextProviderDialog.headerKeyPlaceholder': 'Key',
|
||||||
|
'contextProviderDialog.headerValuePlaceholder': 'Value',
|
||||||
|
'contextProviderDialog.noHeaders': 'No Headers',
|
||||||
|
'contextProviderDialog.addHeader': 'Add Header',
|
||||||
|
'contextProviderDialog.cancel': 'Cancel',
|
||||||
|
'contextProviderDialog.confirm': 'Confirm',
|
||||||
|
|
||||||
|
// Role config page - context provider related
|
||||||
|
'roleConfig.contextProvider': 'Context',
|
||||||
|
'roleConfig.contextProviderSuccess': 'Successfully added {count} sources.',
|
||||||
|
'roleConfig.contextProviderDocLink': 'How to deploy context provider',
|
||||||
|
'roleConfig.editContextProvider': 'Edit Source',
|
||||||
|
|
||||||
// Voice print page related
|
// Voice print page related
|
||||||
'voicePrint.pageTitle': 'Voice Print Recognition',
|
'voicePrint.pageTitle': 'Voice Print Recognition',
|
||||||
'voicePrint.name': 'Name',
|
'voicePrint.name': 'Name',
|
||||||
|
|||||||
@@ -230,6 +230,26 @@ export default {
|
|||||||
'voicePrintDialog.requiredName': 'Vui lòng nhập tên',
|
'voicePrintDialog.requiredName': 'Vui lòng nhập tên',
|
||||||
'voicePrintDialog.requiredAudioVector': 'Vui lòng chọn vector âm thanh',
|
'voicePrintDialog.requiredAudioVector': 'Vui lòng chọn vector âm thanh',
|
||||||
|
|
||||||
|
// Context provider dialog related
|
||||||
|
'contextProviderDialog.title': 'Chỉnh sửa nguồn',
|
||||||
|
'contextProviderDialog.noContextApi': 'Không có API ngữ cảnh',
|
||||||
|
'contextProviderDialog.add': 'Thêm',
|
||||||
|
'contextProviderDialog.apiUrl': 'Địa chỉ API',
|
||||||
|
'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
|
||||||
|
'contextProviderDialog.requestHeaders': 'Header yêu cầu',
|
||||||
|
'contextProviderDialog.headerKeyPlaceholder': 'Khóa',
|
||||||
|
'contextProviderDialog.headerValuePlaceholder': 'Giá trị',
|
||||||
|
'contextProviderDialog.noHeaders': 'Không có Headers',
|
||||||
|
'contextProviderDialog.addHeader': 'Thêm Header',
|
||||||
|
'contextProviderDialog.cancel': 'Hủy bỏ',
|
||||||
|
'contextProviderDialog.confirm': 'Xác nhận',
|
||||||
|
|
||||||
|
// Role config page - context provider related
|
||||||
|
'roleConfig.contextProvider': 'Bối cảnh',
|
||||||
|
'roleConfig.contextProviderSuccess': 'Đã thêm thành công {count} nguồn.',
|
||||||
|
'roleConfig.contextProviderDocLink': 'Cách triển khai nguồn ngữ cảnh',
|
||||||
|
'roleConfig.editContextProvider': 'Chỉnh sửa nguồn',
|
||||||
|
|
||||||
// Voice print page related
|
// Voice print page related
|
||||||
'voicePrint.pageTitle': 'Nhận dạng dấu giọng nói',
|
'voicePrint.pageTitle': 'Nhận dạng dấu giọng nói',
|
||||||
'voicePrint.name': 'Tên',
|
'voicePrint.name': 'Tên',
|
||||||
|
|||||||
@@ -230,6 +230,26 @@ export default {
|
|||||||
'voicePrintDialog.requiredName': '请输入姓名',
|
'voicePrintDialog.requiredName': '请输入姓名',
|
||||||
'voicePrintDialog.requiredAudioVector': '请选择音频向量',
|
'voicePrintDialog.requiredAudioVector': '请选择音频向量',
|
||||||
|
|
||||||
|
// 上下文源对话框相关
|
||||||
|
'contextProviderDialog.title': '编辑源',
|
||||||
|
'contextProviderDialog.noContextApi': '暂无上下文API',
|
||||||
|
'contextProviderDialog.add': '添加',
|
||||||
|
'contextProviderDialog.apiUrl': '接口地址',
|
||||||
|
'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
|
||||||
|
'contextProviderDialog.requestHeaders': '请求头',
|
||||||
|
'contextProviderDialog.headerKeyPlaceholder': 'Key',
|
||||||
|
'contextProviderDialog.headerValuePlaceholder': 'Value',
|
||||||
|
'contextProviderDialog.noHeaders': '暂无 Headers',
|
||||||
|
'contextProviderDialog.addHeader': '添加 Header',
|
||||||
|
'contextProviderDialog.cancel': '取消',
|
||||||
|
'contextProviderDialog.confirm': '确定',
|
||||||
|
|
||||||
|
// 角色配置页面-上下文源相关
|
||||||
|
'roleConfig.contextProvider': '上下文源',
|
||||||
|
'roleConfig.contextProviderSuccess': '已成功添加 {count} 个源。',
|
||||||
|
'roleConfig.contextProviderDocLink': '如何部署上下文源',
|
||||||
|
'roleConfig.editContextProvider': '编辑源',
|
||||||
|
|
||||||
// 声纹页面相关
|
// 声纹页面相关
|
||||||
'voicePrint.pageTitle': '声纹识别',
|
'voicePrint.pageTitle': '声纹识别',
|
||||||
'voicePrint.name': '姓名',
|
'voicePrint.name': '姓名',
|
||||||
|
|||||||
@@ -230,6 +230,26 @@ export default {
|
|||||||
'voicePrintDialog.requiredName': '請輸入姓名',
|
'voicePrintDialog.requiredName': '請輸入姓名',
|
||||||
'voicePrintDialog.requiredAudioVector': '請選擇音頻向量',
|
'voicePrintDialog.requiredAudioVector': '請選擇音頻向量',
|
||||||
|
|
||||||
|
// 上下文源對話框相關
|
||||||
|
'contextProviderDialog.title': '編輯源',
|
||||||
|
'contextProviderDialog.noContextApi': '暫無上下文API',
|
||||||
|
'contextProviderDialog.add': '添加',
|
||||||
|
'contextProviderDialog.apiUrl': '接口地址',
|
||||||
|
'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
|
||||||
|
'contextProviderDialog.requestHeaders': '請求頭',
|
||||||
|
'contextProviderDialog.headerKeyPlaceholder': 'Key',
|
||||||
|
'contextProviderDialog.headerValuePlaceholder': 'Value',
|
||||||
|
'contextProviderDialog.noHeaders': '暫無 Headers',
|
||||||
|
'contextProviderDialog.addHeader': '添加 Header',
|
||||||
|
'contextProviderDialog.cancel': '取消',
|
||||||
|
'contextProviderDialog.confirm': '確定',
|
||||||
|
|
||||||
|
// 角色配置頁面-上下文源相關
|
||||||
|
'roleConfig.contextProvider': '上下文源',
|
||||||
|
'roleConfig.contextProviderSuccess': '已成功添加 {count} 個源。',
|
||||||
|
'roleConfig.contextProviderDocLink': '如何部署上下文源',
|
||||||
|
'roleConfig.editContextProvider': '編輯源',
|
||||||
|
|
||||||
// 聲紋頁面相關
|
// 聲紋頁面相關
|
||||||
'voicePrint.pageTitle': '聲紋識別',
|
'voicePrint.pageTitle': '聲紋識別',
|
||||||
'voicePrint.name': '姓名',
|
'voicePrint.name': '姓名',
|
||||||
|
|||||||
@@ -55,17 +55,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="上下文源:" class="context-provider-item">
|
<el-form-item :label="$t('roleConfig.contextProvider') + ':'" class="context-provider-item">
|
||||||
<div style="display: flex; align-items: center; justify-content: space-between;">
|
<div style="display: flex; align-items: center; justify-content: space-between;">
|
||||||
<span style="color: #606266; font-size: 13px;">
|
<span style="color: #606266; font-size: 13px;">
|
||||||
已成功添加 {{ currentContextProviders.length }} 个源。<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docs/context-provider-integration.md" target="_blank" class="doc-link">如何部署上下文源</a>
|
{{ $t('roleConfig.contextProviderSuccess', { count: currentContextProviders.length }) }}<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docs/context-provider-integration.md" target="_blank" class="doc-link">{{ $t('roleConfig.contextProviderDocLink') }}</a>
|
||||||
</span>
|
</span>
|
||||||
<el-button
|
<el-button
|
||||||
class="edit-function-btn"
|
class="edit-function-btn"
|
||||||
size="small"
|
size="small"
|
||||||
@click="openContextProviderDialog"
|
@click="openContextProviderDialog"
|
||||||
>
|
>
|
||||||
编辑源
|
{{ $t('roleConfig.editContextProvider') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
Reference in New Issue
Block a user