YouTube字幕自動翻訳

自動的にYouTubeの字幕を日本語に翻訳します

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         YouTube字幕自動翻訳
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  自動的にYouTubeの字幕を日本語に翻訳します
// @author       Aoi
// @match        https://www.youtube.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    function setJapaneseSubtitles() {
        let settingsButton = document.querySelector('.ytp-settings-button');
        if (settingsButton) {
            settingsButton.click();
            setTimeout(() => {
                let menuItems = document.querySelectorAll('.ytp-menuitem');
                let subtitlesMenuItem = Array.from(menuItems).find(item => item.innerText.includes('字幕'));
                if (subtitlesMenuItem) {
                    subtitlesMenuItem.click();
                    setTimeout(() => {
                        let langItems = document.querySelectorAll('.ytp-menuitem');
                        let japaneseItem = Array.from(langItems).find(langItem => langItem.innerText.includes('日本語'));
                        if (japaneseItem) {
                            japaneseItem.click();
                            // 設定メニューを閉じる
                            setTimeout(() => {
                                settingsButton.click();
                            }, 500);
                        } else {
                            // 日本語字幕が見つからなかった場合でも設定メニューを閉じる
                            settingsButton.click();
                        }
                    }, 500);
                } else {
                    // 字幕メニューが見つからなかった場合でも設定メニューを閉じる
                    settingsButton.click();
                }
            }, 500);
        }
    }

    // 字幕ボタンのクリックイベントを監視
    const observer = new MutationObserver(() => {
        let subtitleButton = document.querySelector('.ytp-subtitles-button.ytp-button');
        if (subtitleButton) {
            subtitleButton.addEventListener('click', setJapaneseSubtitles);
            observer.disconnect();
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });
})();