From 3d9e69d4fc2d523f8dbeb3afc65cdb54f5a27442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B3=E5=85=83=E7=9A=93?= Date: Sat, 7 Jun 2025 14:23:38 +0800 Subject: [PATCH] Add translating system to aboutNewsOrg. (And it didn't work ;( --- components/app/windows/aboutNewsOrg.vue | 71 +++++++++++++++++++++++-- components/app/windows/news.vue | 12 +++-- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/components/app/windows/aboutNewsOrg.vue b/components/app/windows/aboutNewsOrg.vue index b54ac07..c70184e 100644 --- a/components/app/windows/aboutNewsOrg.vue +++ b/components/app/windows/aboutNewsOrg.vue @@ -6,6 +6,12 @@ import { ScrambleTextPlugin } from "gsap/dist/ScrambleTextPlugin"; gsap.registerPlugin(ScrambleTextPlugin); const loading = ref(true); const { t, locale } = useI18n(); +import translate from "translate"; + +interface translateInterfaceText { + translateText: string; +} +const translateItem: Record = {}; const emit = defineEmits([ "windowopener", @@ -19,6 +25,7 @@ const props = defineProps({ type: String, required: true, }, + applyForTranslation: Boolean, }); const staticProps = props; @@ -59,6 +66,50 @@ watch( const openNews = (url: string, titleName: string) => { emit("openArticles", url, titleName); }; + +const startTranslating = async (text: string) => { + try { + console.log(text); + translateItem[text] = { + translateText: await translate(text, { from: "zh", to: "en" }), + }; + console.log(translateItem[text]); + } catch (error) { + console.error("Translation failed:", error); + traslateFailed.value = true; + translateItem[text] = { translateText: text }; // fallback to original text + } +}; + +// Translating logic +const translateText = ref(false); +const translatedBefore = ref(false); +const traslateFailed = ref(false); +watch( + () => props.applyForTranslation, + (value) => { + if (value === true) { + translateText.value = true; + if (!data.value) { + return; + } + if (translatedBefore.value === true) { + return; + } + startTranslating(fetchNewsOrgInfo.value?.title); + startTranslating(fetchNewsOrgInfo.value?.origin); + startTranslating(fetchNewsOrgInfo.value?.author); + for (const articles of fetchNewsOrgInfo.value?.articles) { + startTranslating(articles.title.replaceAll("獨家專欄》", "")); + startTranslating(articles.date); + } + // NOT retranslating AGAIN when disabling the feat + translatedBefore.value = true; + } else { + translateText.value = false; + } + }, +); // Translate when requested?