mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-30 07:39:06 +08:00
feat: support swap auto detected language in translate page (#9072)
* feat(translate): 支持自动检测语言时交换语言并添加异常处理 * fix(i18n): 更新翻译错误信息并添加缺失的翻译项 * docs(translate): 添加与自动检测相关的交换条件检查注释 * fix(translate): 为翻译结果添加类型声明
This commit is contained in:
parent
1e8143eb8c
commit
4fd00af273
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "Translation content is empty",
|
||||
"error": {
|
||||
"detected_unknown": "Unknown language cannot be exchanged",
|
||||
"empty": "The translation result is empty content",
|
||||
"failed": "Translation failed",
|
||||
"invalid_source": "Invalid source language",
|
||||
"not_configured": "Translation model is not configured",
|
||||
"not_supported": "Unsupported language {{language}}",
|
||||
"unknown": "An unknown error occurred during translation"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "翻訳内容が空です",
|
||||
"error": {
|
||||
"detected_unknown": "未知の言語は交換できません",
|
||||
"empty": "翻訳結果が空の内容です",
|
||||
"failed": "翻訳に失敗しました",
|
||||
"invalid_source": "無効なソース言語",
|
||||
"not_configured": "翻訳モデルが設定されていません",
|
||||
"not_supported": "サポートされていない言語 {{language}}",
|
||||
"unknown": "翻訳中に不明なエラーが発生しました"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "Содержимое перевода пусто",
|
||||
"error": {
|
||||
"detected_unknown": "Неизвестный язык не подлежит обмену",
|
||||
"empty": "Результат перевода пуст",
|
||||
"failed": "Перевод не удалось",
|
||||
"invalid_source": "Недопустимый исходный язык",
|
||||
"not_configured": "Модель перевода не настроена",
|
||||
"not_supported": "Язык не поддерживается {{language}}",
|
||||
"unknown": "Во время перевода возникла неизвестная ошибка"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "翻译内容为空",
|
||||
"error": {
|
||||
"detected_unknown": "未知语言不可交换",
|
||||
"empty": "翻译结果为空内容",
|
||||
"failed": "翻译失败",
|
||||
"invalid_source": "无效的源语言",
|
||||
"not_configured": "翻译模型未配置",
|
||||
"not_supported": "不支持的语言 {{language}}",
|
||||
"unknown": "翻译过程中遇到未知错误"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "翻譯內容為空",
|
||||
"error": {
|
||||
"detected_unknown": "未知語言不可交換",
|
||||
"empty": "翻译结果为空内容",
|
||||
"failed": "翻譯失敗",
|
||||
"invalid_source": "無效的源語言",
|
||||
"not_configured": "翻譯模型未設定",
|
||||
"not_supported": "不支援的語言 {{language}}",
|
||||
"unknown": "翻譯過程中遇到未知錯誤"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "Το μεταφρασμένο κείμενο είναι κενό",
|
||||
"error": {
|
||||
"detected_unknown": "Άγνωστη γλώσσα μη ανταλλάξιμη",
|
||||
"empty": "το αποτέλεσμα της μετάφρασης είναι κενό περιεχόμενο",
|
||||
"failed": "Η μετάφραση απέτυχε",
|
||||
"invalid_source": "Ακύρωση γλώσσας πηγής",
|
||||
"not_configured": "Το μοντέλο μετάφρασης δεν είναι ρυθμισμένο",
|
||||
"not_supported": "Μη υποστηριζόμενη γλώσσα {{language}}",
|
||||
"unknown": "κατά τη μετάφραση παρουσιάστηκε άγνωστο σφάλμα"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "El contenido de traducción está vacío",
|
||||
"error": {
|
||||
"detected_unknown": "Idioma desconocido no intercambiable",
|
||||
"empty": "El resultado de la traducción está vacío",
|
||||
"failed": "Fallo en la traducción",
|
||||
"invalid_source": "Invalid source language",
|
||||
"not_configured": "El modelo de traducción no está configurado",
|
||||
"not_supported": "Idioma no compatible {{language}}",
|
||||
"unknown": "Se produjo un error desconocido durante la traducción"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "Le contenu à traduire est vide",
|
||||
"error": {
|
||||
"detected_unknown": "Langue inconnue non échangeable",
|
||||
"empty": "Le résultat de la traduction est un contenu vide",
|
||||
"failed": "échec de la traduction",
|
||||
"invalid_source": "Langue source invalide",
|
||||
"not_configured": "le modèle de traduction n'est pas configuré",
|
||||
"not_supported": "Langue non prise en charge {{language}}",
|
||||
"unknown": "Une erreur inconnue s'est produite lors de la traduction"
|
||||
|
||||
@ -3612,8 +3612,10 @@
|
||||
},
|
||||
"empty": "O conteúdo de tradução está vazio",
|
||||
"error": {
|
||||
"detected_unknown": "Idioma desconhecido não pode ser trocado",
|
||||
"empty": "Resultado da tradução está vazio",
|
||||
"failed": "Tradução falhou",
|
||||
"invalid_source": "Idioma de origem inválido",
|
||||
"not_configured": "Modelo de tradução não configurado",
|
||||
"not_supported": "Idioma não suportado {{language}}",
|
||||
"unknown": "Ocorreu um erro desconhecido durante a tradução"
|
||||
|
||||
@ -116,7 +116,7 @@ const TranslatePage: FC = () => {
|
||||
|
||||
setTranslating(true)
|
||||
|
||||
let translated
|
||||
let translated: string
|
||||
try {
|
||||
translated = await translateText(text, actualTargetLanguage, throttle(setTranslatedContent, 100))
|
||||
} catch (e) {
|
||||
@ -224,17 +224,33 @@ const TranslatePage: FC = () => {
|
||||
}
|
||||
|
||||
// 控制语言切换按钮
|
||||
const couldExchange = useMemo(() => sourceLanguage !== 'auto' && !isBidirectional, [isBidirectional, sourceLanguage])
|
||||
/** 与自动检测相关的交换条件检查 */
|
||||
const couldExchangeAuto = useMemo(
|
||||
() =>
|
||||
(sourceLanguage === 'auto' && detectedLanguage && detectedLanguage.langCode !== UNKNOWN.langCode) ||
|
||||
sourceLanguage !== 'auto',
|
||||
[detectedLanguage, sourceLanguage]
|
||||
)
|
||||
|
||||
const couldExchange = useMemo(() => couldExchangeAuto && !isBidirectional, [couldExchangeAuto, isBidirectional])
|
||||
|
||||
const handleExchange = useCallback(() => {
|
||||
if (sourceLanguage === 'auto') {
|
||||
if (sourceLanguage === 'auto' && !couldExchangeAuto) {
|
||||
return
|
||||
}
|
||||
const source = sourceLanguage === 'auto' ? detectedLanguage : sourceLanguage
|
||||
if (!source) {
|
||||
window.message.error(t('translate.error.invalid_source'))
|
||||
return
|
||||
}
|
||||
if (source.langCode === UNKNOWN.langCode) {
|
||||
window.message.error(t('translate.error.detected_unknown'))
|
||||
return
|
||||
}
|
||||
const source = sourceLanguage
|
||||
const target = targetLanguage
|
||||
setSourceLanguage(target)
|
||||
setTargetLanguage(source)
|
||||
}, [sourceLanguage, targetLanguage])
|
||||
}, [couldExchangeAuto, detectedLanguage, sourceLanguage, t, targetLanguage])
|
||||
|
||||
useEffect(() => {
|
||||
isEmpty(text) && setTranslatedContent('')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user