mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 18:50:56 +08:00
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:
parent
ef8f09ad96
commit
3752516b6d
@ -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": "音声通話テスト",
|
||||
|
||||
@ -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": {
|
||||
|
||||
@ -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": {
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
36
yarn.lock
36
yarn.lock
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user