fix: from lang bug

This commit is contained in:
Gabe
2025-11-13 01:38:16 +08:00
parent 12b3768598
commit 1e59d57764
2 changed files with 30 additions and 5 deletions

View File

@@ -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] || "";

View File

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