chore: update yarn.lock and enhance localization in Japanese, Russian, and Traditional Chinese

- Removed unused dependencies from yarn.lock.
- Added new localization strings for emoji filtering and TTS progress bar in Japanese, Russian, and Traditional Chinese.
- Improved layout and styling in TTSSettings and VoiceCallSettings components.
This commit is contained in:
kangfenmao 2025-04-13 21:50:00 +08:00
parent 45cf39fb4e
commit a8e9affb86
6 changed files with 62 additions and 103 deletions

View File

@ -1458,7 +1458,9 @@
"stopped": "音声再生を停止しました",
"segmented": "分割",
"segmented_play": "分割再生",
"segmented_playback": "分割再生"
"segmented_playback": "分割再生",
"filter.emojis": "[to be translated]:过滤表情符号",
"show_progress_bar": "[to be translated]:显示TTS进度条"
},
"asr": {
"title": "音声認識",
@ -1508,8 +1510,7 @@
"browser_not_support": "ブラウザが音声認識をサポートしていません"
},
"auto_start_server": "アプリ起動時にサーバーを自動起動",
"auto_start_server.help": "有効にすると、アプリ起動時に音声認識サーバーが自動的に起動します",
"language": "認識言語"
"auto_start_server.help": "有効にすると、アプリ起動時に音声認識サーバーが自動的に起動します"
},
"voice": {
"title": "音声機能",
@ -1532,8 +1533,7 @@
"reset": "リセット",
"saved": "プロンプトが保存されました",
"reset_done": "プロンプトがリセットされました",
"info": "このプロンプトは音声通話モードでのAIの応答方法を指導します",
"language_info": "リセットボタンをクリックすると、現在の言語のデフォルトプロンプトが取得されます"
"info": "このプロンプトは音声通話モードでのAIの応答方法を指導します"
},
"asr_tts_info": "音声通話は上記の音声認識(ASR)と音声合成(TTS)の設定を使用します",
"test": "音声通話テスト",

View File

@ -1458,7 +1458,9 @@
"stopped": "[to be translated]:已停止语音播放",
"segmented": "[to be translated]:分段",
"segmented_play": "[to be translated]:分段播放",
"segmented_playback": "[to be translated]:分段播放"
"segmented_playback": "[to be translated]:分段播放",
"filter.emojis": "[to be translated]:过滤表情符号",
"show_progress_bar": "[to be translated]:显示TTS进度条"
},
"voice": {
"title": "[to be translated]:语音功能",
@ -1530,12 +1532,12 @@
"reset": "Сбросить",
"saved": "Подсказка сохранена",
"reset_done": "Подсказка сброшена",
"info": "Эта подсказка будет направлять ответы ИИ в режиме голосового вызова",
"language_info": "Нажмите кнопку сброса, чтобы получить стандартную подсказку для текущего языка"
"info": "Эта подсказка будет направлять ответы ИИ в режиме голосового вызова"
},
"asr_tts_info": "Голосовой вызов использует настройки распознавания речи (ASR) и синтеза речи (TTS), указанные выше",
"test": "Тестировать голосовой вызов",
"test_info": "Используйте кнопку голосового вызова справа от поля ввода для тестирования"
"test_info": "Используйте кнопку голосового вызова справа от поля ввода для тестирования",
"welcome_message": "[to be translated]:您好我是您的AI助手请长按说话按钮进行对话。"
}
},
"translate": {

View File

@ -1458,7 +1458,9 @@
"stopped": "[to be translated]:已停止语音播放",
"segmented": "[to be translated]:分段",
"segmented_play": "[to be translated]:分段播放",
"segmented_playback": "[to be translated]:分段播放"
"segmented_playback": "[to be translated]:分段播放",
"filter.emojis": "[to be translated]:过滤表情符号",
"show_progress_bar": "[to be translated]:显示TTS进度条"
},
"voice": {
"title": "[to be translated]:语音功能",
@ -1530,12 +1532,12 @@
"reset": "重置",
"saved": "提示詞已保存",
"reset_done": "提示詞已重置",
"info": "此提示詞將指導AI在語音通話模式下的回覆方式",
"language_info": "點擊重置按鈕可獲取當前語言的預設提示詞"
"info": "此提示詞將指導AI在語音通話模式下的回覆方式"
},
"asr_tts_info": "語音通話使用上面的語音識別(ASR)和語音合成(TTS)設置",
"test": "測試通話",
"test_info": "請使用輸入框右側的語音通話按鈕進行測試"
"test_info": "請使用輸入框右側的語音通話按鈕進行測試",
"welcome_message": "[to be translated]:您好我是您的AI助手请长按说话按钮进行对话。"
}
},
"translate": {

View File

@ -1043,7 +1043,11 @@ const TTSSettings: FC = () => {
/>
<SettingHelpText style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center', gap: 5 }}>
<span>{t('settings.voice.help')}</span>
<a href="https://platform.openai.com/docs/guides/speech-to-text" target="_blank" rel="noopener noreferrer">
<a
href="https://platform.openai.com/docs/guides/speech-to-text"
className="link"
target="_blank"
rel="noopener noreferrer">
{t('settings.voice.learn_more')}
</a>
</SettingHelpText>

View File

@ -66,7 +66,6 @@ const VoiceCallSettings: FC = () => {
</AntTooltip>
</Space>
</Form.Item>
{/* 模型选择 */}
<Form.Item label={t('settings.voice_call.model')} style={{ marginBottom: 16 }}>
<Space>
@ -75,7 +74,11 @@ const VoiceCallSettings: FC = () => {
disabled={!voiceCallEnabled}
icon={
voiceCallModel ? (
<ModelIcon src={getModelLogo(voiceCallModel.id)} alt="Model logo" />
<ModelIcon
src={getModelLogo(voiceCallModel.id)}
alt="Model logo"
style={{ width: 20, height: 20, borderRadius: 10 }}
/>
) : (
<PhoneOutlined style={{ marginRight: 8 }} />
)
@ -88,7 +91,6 @@ const VoiceCallSettings: FC = () => {
</Space>
<InfoText>{t('settings.voice_call.model.info')}</InfoText>
</Form.Item>
{/* 提示词设置 */}
<Form.Item label={t('settings.voice_call.prompt.label')} style={{ marginBottom: 16 }}>
<Input.TextArea
@ -98,6 +100,7 @@ const VoiceCallSettings: FC = () => {
rows={8}
placeholder={t('settings.voice_call.prompt.placeholder')}
/>
<InfoText>{t('settings.voice_call.prompt.info')}</InfoText>
<Space style={{ marginTop: 8 }}>
<Button type="primary" onClick={handleSavePrompt} disabled={!voiceCallEnabled}>
{t('settings.voice_call.prompt.save')}
@ -106,25 +109,6 @@ const VoiceCallSettings: FC = () => {
{t('settings.voice_call.prompt.reset')}
</Button>
</Space>
<InfoText>{t('settings.voice_call.prompt.info')}</InfoText>
</Form.Item>
{/* ASR 和 TTS 设置提示 */}
<Form.Item>
<Alert type="info">{t('settings.voice_call.asr_tts_info')}</Alert>
</Form.Item>
{/* 测试按钮 */}
<Form.Item>
<Button
type="primary"
icon={<PhoneOutlined />}
disabled={!voiceCallEnabled}
onClick={() =>
window.message.info({ content: t('settings.voice_call.test_info'), key: 'voice-call-test' })
}>
{t('settings.voice_call.test')}
</Button>
</Form.Item>
</Form>
</Container>
@ -142,39 +126,40 @@ const InfoText = styled.div`
`
const ModelIcon = styled.img`
width: 16px;
height: 16px;
margin-right: 8px;
width: 20px;
height: 20px;
border-radius: 10px;
margin-top: 4px;
`
const Alert = styled.div<{ type: 'info' | 'warning' | 'error' | 'success' }>`
padding: 8px 12px;
border-radius: 4px;
background-color: ${(props) =>
props.type === 'info'
? 'var(--color-info-bg)'
: props.type === 'warning'
? 'var(--color-warning-bg)'
: props.type === 'error'
? 'var(--color-error-bg)'
: 'var(--color-success-bg)'};
border: 1px solid
${(props) =>
props.type === 'info'
? 'var(--color-info-border)'
: props.type === 'warning'
? 'var(--color-warning-border)'
: props.type === 'error'
? 'var(--color-error-border)'
: 'var(--color-success-border)'};
color: ${(props) =>
props.type === 'info'
? 'var(--color-info-text)'
: props.type === 'warning'
? 'var(--color-warning-text)'
: props.type === 'error'
? 'var(--color-error-text)'
: 'var(--color-success-text)'};
`
// const Alert = styled.div<{ type: 'info' | 'warning' | 'error' | 'success' }>`
// padding: 8px 12px;
// border-radius: 4px;
// background-color: ${(props) =>
// props.type === 'info'
// ? 'var(--color-info-bg)'
// : props.type === 'warning'
// ? 'var(--color-warning-bg)'
// : props.type === 'error'
// ? 'var(--color-error-bg)'
// : 'var(--color-success-bg)'};
// border: 1px solid
// ${(props) =>
// props.type === 'info'
// ? 'var(--color-info-border)'
// : props.type === 'warning'
// ? 'var(--color-warning-border)'
// : props.type === 'error'
// ? 'var(--color-error-border)'
// : 'var(--color-success-border)'};
// color: ${(props) =>
// props.type === 'info'
// ? 'var(--color-info-text)'
// : props.type === 'warning'
// ? 'var(--color-warning-text)'
// : props.type === 'error'
// ? 'var(--color-error-text)'
// : 'var(--color-success-text)'};
// `
export default VoiceCallSettings

View File

@ -3946,7 +3946,6 @@ __metadata:
axios: "npm:^1.7.3"
babel-plugin-styled-components: "npm:^2.1.4"
browser-image-compression: "npm:^2.0.2"
bufferutil: "npm:^4.0.9"
color: "npm:^5.0.0"
dayjs: "npm:^1.11.11"
dexie: "npm:^4.0.8"
@ -4024,11 +4023,9 @@ __metadata:
turndown-plugin-gfm: "npm:^1.0.2"
typescript: "npm:^5.6.2"
undici: "npm:^7.4.0"
utf-8-validate: "npm:^6.0.5"
uuid: "npm:^10.0.0"
vite: "npm:^5.0.12"
webdav: "npm:^5.8.0"
ws: "npm:^8.18.1"
zipread: "npm:^1.3.3"
languageName: unknown
linkType: soft
@ -4952,16 +4949,6 @@ __metadata:
languageName: node
linkType: hard
"bufferutil@npm:^4.0.9":
version: 4.0.9
resolution: "bufferutil@npm:4.0.9"
dependencies:
node-gyp: "npm:latest"
node-gyp-build: "npm:^4.3.0"
checksum: 10c0/f8a93279fc9bdcf32b42eba97edc672b39ca0fe5c55a8596099886cffc76ea9dd78e0f6f51ecee3b5ee06d2d564aa587036b5d4ea39b8b5ac797262a363cdf7d
languageName: node
linkType: hard
"builder-util-runtime@npm:9.2.4":
version: 9.2.4
resolution: "builder-util-runtime@npm:9.2.4"
@ -12140,17 +12127,6 @@ __metadata:
languageName: node
linkType: hard
"node-gyp-build@npm:^4.3.0":
version: 4.8.4
resolution: "node-gyp-build@npm:4.8.4"
bin:
node-gyp-build: bin.js
node-gyp-build-optional: optional.js
node-gyp-build-test: build-test.js
checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1
languageName: node
linkType: hard
"node-gyp@npm:^9.1.0":
version: 9.4.1
resolution: "node-gyp@npm:9.4.1"
@ -16679,16 +16655,6 @@ __metadata:
languageName: node
linkType: hard
"utf-8-validate@npm:^6.0.5":
version: 6.0.5
resolution: "utf-8-validate@npm:6.0.5"
dependencies:
node-gyp: "npm:latest"
node-gyp-build: "npm:^4.3.0"
checksum: 10c0/6dc63c513adb001e47a51819072cdd414158430091c49c21d4947ea99f16df5167b671f680df8fb2b6f2ae6a7f30264b4ec111bd3e573720dfe371da1ab99a81
languageName: node
linkType: hard
"utf8-byte-length@npm:^1.0.1":
version: 1.0.5
resolution: "utf8-byte-length@npm:1.0.5"
@ -17123,7 +17089,7 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:^8.13.0, ws@npm:^8.14.1, ws@npm:^8.18.0, ws@npm:^8.18.1":
"ws@npm:^8.13.0, ws@npm:^8.14.1, ws@npm:^8.18.0":
version: 8.18.1
resolution: "ws@npm:8.18.1"
peerDependencies: