diff --git a/src/config/i18n.js b/src/config/i18n.js index 9da886f..696ff44 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -2577,6 +2577,13 @@ export const I18N = { ja: `原字幕を表示`, ko: `원본 자막 표시`, }, + subtitle_same_lang: { + zh: `原语言与目标语言相同,字幕不予显示`, + en: `The source language is the same as the target language, the subtitles will not be displayed`, + zh_TW: `原语言与目标语言相同,字幕不予显示`, + ja: `原言語と目標言語が同じ場合、字幕は表示されません`, + ko: `원본 언어와 대상 언어가 동일한 경우, 자막은 표시되지 않습니다`, + }, }; export const newI18n = (lang) => (key) => I18N[key]?.[lang] || ""; diff --git a/src/subtitle/YouTubeCaptionProvider.js b/src/subtitle/YouTubeCaptionProvider.js index b41f6a0..1b17648 100644 --- a/src/subtitle/YouTubeCaptionProvider.js +++ b/src/subtitle/YouTubeCaptionProvider.js @@ -8,6 +8,7 @@ import { OPT_TRANS_MICROSOFT, MSG_MENUS_PROGRESSED, MSG_MENUS_UPDATEFORM, + OPT_LANGS_SPEC_DEFAULT, } from "../config"; import { sleep, genEventName, downloadBlobFile } from "../libs/utils.js"; import { createLogoSVG } from "../libs/svg.js"; @@ -414,6 +415,20 @@ class YouTubeCaptionProvider { return []; } + #getFromLang(lang) { + if (lang === "zh") { + return "zh-CN"; + } + + return ( + OPT_LANGS_SPEC_DEFAULT.get(lang) || + OPT_LANGS_SPEC_DEFAULT.get(lang.slice(0, 2)) || + OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang) || + OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0, 2)) || + "auto" + ); + } + async #handleInterceptedRequest(url, responseText) { const videoId = this.#videoId; if (!videoId) { @@ -462,16 +477,14 @@ class YouTubeCaptionProvider { } const lang = potUrl.searchParams.get("lang"); - const fromLang = - OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang) || - OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0, 2)) || - "auto"; + const fromLang = this.#getFromLang(lang); logger.debug( - `Youtube Provider: fromLang: ${fromLang}, toLang: ${toLang}` + `Youtube Provider: lang: ${lang}, fromLang: ${fromLang}, toLang: ${toLang}` ); if (this.#isSameLang(fromLang, toLang)) { logger.debug("Youtube Provider: skip same lang", fromLang, toLang); + this.#showNotification(this.#i18n("subtitle_same_lang")); return; } @@ -673,6 +686,11 @@ class YouTubeCaptionProvider { if (noSpaceLanguages.some((l) => lang?.startsWith(l))) { const subtitles = []; + + if (this.#isQualityPoor(flatEvents, 5, 0.5)) { + return flatEvents; + } + let currentLine = null; const MAX_LENGTH = 100;