From 1ec351696c81b58de768c1bf3984e9af0677a42f Mon Sep 17 00:00:00 2001 From: fly_mc Date: Thu, 17 Oct 2024 23:57:29 +0800 Subject: [PATCH] add translate button in MkNoteDetailed --- packages/frontend/src/components/MkNote.vue | 2 +- .../src/components/MkNoteDetailed.vue | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index c935e2c97..cf6ba6ae3 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -81,7 +81,7 @@ SPDX-License-Identifier: AGPL-3.0-only :enableEmojiMenuReaction="true" />
- +
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index a323406f5..646cdaff7 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -92,6 +92,10 @@ SPDX-License-Identifier: AGPL-3.0-only :enableEmojiMenuReaction="true" /> RN: +
+ + +
@@ -273,6 +277,8 @@ import MkButton from '@/components/MkButton.vue'; import { isEnabledUrlPreview } from '@/instance.js'; import { getAppearNote } from '@/scripts/get-appear-note.js'; import { type Keymap } from '@/scripts/hotkey.js'; +import { miLocalStorage } from '@/local-storage.js'; +import detectLanguage from '@/scripts/detect-language.js'; const props = withDefaults(defineProps<{ note: Misskey.entities.Note; @@ -591,6 +597,27 @@ async function clip(): Promise { os.popupMenu(await getNoteClipMenu({ note: note.value, isDeleted }), clipButton.value).then(focus); } +const isForeignLanguage: boolean = appearNote.value.text != null && (() => { + const targetLang = (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2); + const postLang = detectLanguage(appearNote.value.text); + return postLang !== '' && postLang !== targetLang; +})(); + +async function translate(): Promise { + if (translation.value != null) return; + collapsed.value = false; + translating.value = true; + if (props.mock) { + return; + } + const res = await misskeyApi('notes/translate', { + noteId: appearNote.value.id, + targetLang: miLocalStorage.getItem('lang') ?? navigator.language, + }); + translating.value = false; + translation.value = res; +} + function showRenoteMenu(): void { if (!isMyRenote) return; pleaseLogin(undefined, pleaseLoginContext.value);