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);