diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index ce0e2eaa6..5da78ff1e 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -324,7 +324,20 @@ const defaultLike = computed(() => defaultStore.state.like ?? '❤️'); const inReplyToCollapsed = ref(defaultStore.state.collapseNotesRepliedTo); const disableReactionsViewer = ref(defaultStore.reactiveState.disableReactionsViewer); + const collapsedUnexpectedLangs = ref(defaultStore.reactiveState.collapsedUnexpectedLangs); +const expectedLangs = computed(() => new Set([ + (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2), + navigator.language.slice(0, 2) +])); +const noteLanguage = computed(() => { + if (!appearNote.value.text || appearNote.value.text.length < 10) return ''; + return detectLanguage(appearNote.value.text); +}); +const isUnexpectedLanguage = computed(() => { + const lang = noteLanguage.value; + return lang !== '' && !expectedLangs.value.has(lang); +}); const pleaseLoginContext = computed<OpenOnRemoteOptions>(() => ({ type: 'lookup', @@ -625,17 +638,6 @@ async function clip(): Promise<void> { os.popupMenu(await getNoteClipMenu({ note: note.value, isDeleted, currentClip: currentClip?.value }), clipButton.value).then(focus); } -function isUnexpectedNote(note: Misskey.entities.Note): boolean { - if (!note.text) return false; - const expectedLangs = new Set([ - (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2), - (navigator.language).slice(0, 2) - ]); - const noteLang = detectLanguage(note.text); - return noteLang !== '' && !expectedLangs.has(noteLang); -} -const isUnexpectedLanguage = computed(() => isUnexpectedNote(appearNote.value)); - async function translate(): Promise<void> { if (translation.value != null) return; collapsed.value = false; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index 55417d008..d88a6dc58 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -359,6 +359,20 @@ const showingNoteHistoryRef = ref<ShowingNoteHistoryState>(null); const disableReactionsViewer = ref(defaultStore.reactiveState.disableReactionsViewer); + +const expectedLangs = computed(() => new Set([ + (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2), + navigator.language.slice(0, 2) +])); +const noteLanguage = computed(() => { + if (!appearNote.value.text || appearNote.value.text.length < 10) return ''; + return detectLanguage(appearNote.value.text); +}); +const isUnexpectedLanguage = computed(() => { + const lang = noteLanguage.value; + return lang !== '' && !expectedLangs.value.has(lang); +}); + const pleaseLoginContext = computed<OpenOnRemoteOptions>(() => ({ type: 'lookup', url: `https://${host}/notes/${appearNote.value.id}`, @@ -625,17 +639,6 @@ async function clip(): Promise<void> { os.popupMenu(await getNoteClipMenu({ note: note.value, isDeleted }), clipButton.value).then(focus); } -function isUnexpectedNote(note: Misskey.entities.Note): boolean { - if (!note.text) return false; - const expectedLangs = new Set([ - (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2), - (navigator.language).slice(0, 2) - ]); - const noteLang = detectLanguage(note.text); - return noteLang !== '' && !expectedLangs.has(noteLang); -} -const isUnexpectedLanguage = computed(() => isUnexpectedNote(appearNote.value)); - async function translate(): Promise<void> { if (translation.value != null) return; translating.value = true;