From 6cda7f891db78dc95c09ce34fefb6c0b35b6a425 Mon Sep 17 00:00:00 2001 From: icarus Date: Wed, 15 Oct 2025 00:15:48 +0800 Subject: [PATCH] refactor(translate): centralize language label handling with getLanguageLabel Move language label generation from individual TranslateLanguage objects to a centralized getLanguageLabel function in useTranslate hook. This improves maintainability by removing duplicate label logic and makes it easier to update language labels globally. - Remove label() method from TranslateLanguage type and all language objects - Add getLanguageLabel function in useTranslate that handles label generation - Update all components to use getLanguageLabel instead of label() - Add labelMap for common language codes to avoid unnecessary lookups --- .../src/components/LanguageSelect.tsx | 25 +++++---- .../src/components/TranslateButton.tsx | 6 +-- src/renderer/src/config/translate.ts | 22 -------- src/renderer/src/hooks/useTranslate.ts | 53 +++++++++++++++++-- .../pages/home/Messages/MessageMenubar.tsx | 11 ++-- .../src/pages/home/Tabs/SettingsTab.tsx | 12 +++-- .../DocProcessSettings/OcrSystemSettings.tsx | 6 +-- .../OcrTesseractSettings.tsx | 6 +-- .../src/pages/translate/TranslateHistory.tsx | 36 +++++-------- .../src/pages/translate/TranslatePage.tsx | 16 +++--- src/renderer/src/types/index.ts | 1 - src/renderer/src/utils/translate.ts | 1 - 12 files changed, 107 insertions(+), 88 deletions(-) diff --git a/src/renderer/src/components/LanguageSelect.tsx b/src/renderer/src/components/LanguageSelect.tsx index e9799096a7..79405dc3a8 100644 --- a/src/renderer/src/components/LanguageSelect.tsx +++ b/src/renderer/src/components/LanguageSelect.tsx @@ -18,19 +18,22 @@ type Props = { } & Omit const LanguageSelect = (props: Props) => { - const { translateLanguages } = useTranslate() + const { translateLanguages, getLanguageLabel } = useTranslate() const { extraOptionsAfter, extraOptionsBefore, languageRenderer, ...restProps } = props - const defaultLanguageRenderer = useCallback((lang: TranslateLanguage) => { - return ( - - - {lang.emoji} - - {lang.label()} - - ) - }, []) + const defaultLanguageRenderer = useCallback( + (lang: TranslateLanguage) => { + return ( + + + {lang.emoji} + + {getLanguageLabel(lang.langCode)} + + ) + }, + [getLanguageLabel] + ) const labelRender = (props) => { const { label } = props diff --git a/src/renderer/src/components/TranslateButton.tsx b/src/renderer/src/components/TranslateButton.tsx index 7626df97f6..5ce53f579f 100644 --- a/src/renderer/src/components/TranslateButton.tsx +++ b/src/renderer/src/components/TranslateButton.tsx @@ -24,7 +24,7 @@ const TranslateButton: FC = ({ text, onTranslated, disabled, style, isLoa const [isTranslating, setIsTranslating] = useState(false) const [targetLanguage] = usePreference('feature.translate.target_language') const [showTranslateConfirm] = usePreference('chat.input.translate.show_confirm') - const { getLanguageByLangcode } = useTranslate() + const { getLanguageLabel, getLanguageByLangcode } = useTranslate() const translateConfirm = () => { if (!showTranslateConfirm) { @@ -64,9 +64,7 @@ const TranslateButton: FC = ({ text, onTranslated, disabled, style, isLoa }, [isLoading]) return ( - +