mirror of
https://github.com/hpware/news-analyze.git
synced 2025-06-23 07:41:02 +08:00
Add translating system to aboutNewsOrg. (And it didn't work ;(
This commit is contained in:
parent
46197bc4a3
commit
3d9e69d4fc
@ -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<string, translateInterfaceText> = {};
|
||||
|
||||
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?
|
||||
</script>
|
||||
<template>
|
||||
<div>
|
||||
@ -76,7 +127,11 @@ const openNews = (url: string, titleName: string) => {
|
||||
class="text-4xl font-bold m-2 text-center"
|
||||
ref="orgNameAnimation"
|
||||
>
|
||||
{{ fetchNewsOrgInfo?.title }}
|
||||
{{
|
||||
translateText
|
||||
? translateItem[fetchNewsOrgInfo?.title]
|
||||
: fetchNewsOrgInfo?.title
|
||||
}}
|
||||
</h1>
|
||||
|
||||
<div v-if="pending" class="flex flex-col gap-2 m-1 mt-5">
|
||||
@ -85,7 +140,11 @@ const openNews = (url: string, titleName: string) => {
|
||||
<div class="h-4 bg-gray-200 animate-pulse rounded w-4/6"></div>
|
||||
</div>
|
||||
<span v-else class="text-ms m-1 mt-5 text-left text-wrap">
|
||||
{{ fetchNewsOrgInfo?.description }}
|
||||
{{
|
||||
translateText
|
||||
? translateItem[fetchNewsOrgInfo?.description]
|
||||
: fetchNewsOrgInfo?.description
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -109,9 +168,13 @@ const openNews = (url: string, titleName: string) => {
|
||||
<div>
|
||||
<div class="flex flex-col">
|
||||
<span class="title text-bold texxt-sm">{{
|
||||
item.title.replaceAll("獨家專欄》", "")
|
||||
translateText
|
||||
? translateItem[item.title.replaceAll("獨家專欄》", "")]
|
||||
: item.title.replaceAll("獨家專欄》", "")
|
||||
}}</span>
|
||||
<span class="date text-xs">{{
|
||||
translateText ? translateItem[item.date] : item.date
|
||||
}}</span>
|
||||
<span class="date text-xs">{{ item.date }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
|
@ -216,6 +216,12 @@ const openPublisher = (slug: string, title: string) => {
|
||||
};
|
||||
const isLoading = computed(() => contentArray.value.length === 0);
|
||||
const testmessage = await translate("嗨", { from: "zh", to: "en" });
|
||||
const shouldHideItem = (item) => {
|
||||
return (
|
||||
item.contentType !== "GENERAL" ||
|
||||
item.publisher?.toLowerCase().includes("line")
|
||||
);
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<div class="justify-center align-center text-center">
|
||||
@ -257,7 +263,7 @@ const testmessage = await translate("嗨", { from: "zh", to: "en" });
|
||||
<div>
|
||||
<!-- Loading State -->
|
||||
<template v-if="isLoading">
|
||||
<div v-for="n in 5" :key="n" class="p-2 bg-gray-200 rounded m-1">
|
||||
<div v-for="n in 7" :key="n" class="p-2 bg-gray-200 rounded m-1">
|
||||
<!-- Title Skeleton -->
|
||||
<div
|
||||
class="h-8 bg-gray-300 animate-pulse rounded-lg w-3/4 mx-auto mb-2"
|
||||
@ -303,9 +309,9 @@ const testmessage = await translate("嗨", { from: "zh", to: "en" });
|
||||
<div
|
||||
v-for="item in contentArray"
|
||||
:key="item.id"
|
||||
:class="item.contentType !== 'GENERAL' && 'hidden'"
|
||||
:class="shouldHideItem(item) && 'hidden'"
|
||||
>
|
||||
<div class="p-2 bg-gray-200 rounded m-1 p-1">
|
||||
<div class="p-2 bg-gray-200 rounded m-1">
|
||||
<h1
|
||||
class="text-2xl text-bold"
|
||||
:class="getCheckResult(item.title) ? 'text-red-600' : ''"
|
||||
|
Loading…
x
Reference in New Issue
Block a user