YouTube字幕自動翻訳

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

// ==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 });
})();