Appstorrent 翻译切换器

为appstorrent.ru自动切换翻译语言

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            Appstorrent 翻译切换器
// @name:en         Appstorrent Language Switcher
// @namespace       https://greasyfork.org/zh-CN/scripts/490641
// @version         1.3
// @description     为appstorrent.ru自动切换翻译语言
// @description:en  Automatically switch translation language for appstorrent.ru
// @author          Corlius
// @homepageURL     https://github.com/Corlius/Corlius-Scripts
// @icon            https://www.google.com/s2/favicons?sz=64&domain=appstorrent.ru
// @license         MIT
// @match           https://appstorrent.ru/*
// @grant           GM_getValue
// @grant           GM_setValue
// @grant           GM_registerMenuCommand
// @run-at          document-end
// ==/UserScript==

(function() {
    'use strict';

    function isFirstInstall() {
        const isInstalled = GM_getValue('isInstalled', false);
        if (!isInstalled) {
            GM_setValue('isInstalled', true);
            return true;
        }
        return false;
    }

    if (isFirstInstall()) {
        const detailsPageLangInitial = prompt('请选择详情页面的默认语言:\nPlease select the default language for the details pages:\nr = ru 俄语\ne = en 英语\nd = de 德语\nz = zh-TW 中文', 'e');
        const otherPageLangInitial = prompt('请选择其他页面的默认语言:\nPlease select the default language of other pages:\nr = ru 俄语\ne = en 英语\nd = de 德语\nz = zh-TW 中文', 'e');
        const pollingInterval = prompt('请设置监听间隔(毫秒),默认为1500:\nPlease set the listening interval (milliseconds), the default is 1500.', '1500');
    
        GM_setValue('detailsPageLangInitial', detailsPageLangInitial);
        GM_setValue('otherPageLangInitial', otherPageLangInitial); 
        GM_setValue('pollingInterval', pollingInterval);
        window.location.reload();
    }

    // 根据语言代号改变网页语言的函数
    function changeLanguage(languageCode) {
        let languageSelector = document.querySelector(`a[data-google-lang="${languageCode}"]`);
        if (languageSelector) {
            languageSelector.click();
        }
    }

    // 语言映射
    const languageMapping = {
        'r': 'ru',
        'e': 'en',
        'd': 'de',
        'z': 'zh-TW'
    }

    // 获取用户设置的语言首字母
    function getLanguage(firstLetter) {
        return languageMapping[firstLetter] || 'en'; // 默认为英语
    }

    // 获取用户设置的语言
    var detailsPageLangInitial = GM_getValue('detailsPageLangInitial', 'e');
    var otherPageLangInitial = GM_getValue('otherPageLangInitial', 'e');

    // 获取用户设置的监听间隔
    var pollingInterval = GM_getValue('pollingInterval', 1500);

    // 转换用户设置的语言首字母为完整的语言代码
    var detailsPageLang = getLanguage(detailsPageLangInitial);
    var otherPageLang = getLanguage(otherPageLangInitial);

    // 检查当前页面是否是详情页
    var isDetailsPage = window.location.pathname.endsWith(".html");

    // 每pollingInterval毫秒监听一次页面语言变化并更新
    setInterval(function() {
        var currentLang = document.documentElement.getAttribute('lang');
        var targetLang = isDetailsPage ? detailsPageLang : otherPageLang;
        if (currentLang !== targetLang) {
            changeLanguage(targetLang);
        }
    }, pollingInterval);

    // 添加语言选择命令到菜单
    GM_registerMenuCommand('设置详情页语言 / Set details page language', function() {
        var langInitial = prompt('r = ru 俄语,e = en 英语,d= de 德语,z = zh-TW中文:', detailsPageLangInitial);
        if (langInitial) {
            GM_setValue('detailsPageLangInitial', langInitial);
            window.location.reload();
        }
    });

    GM_registerMenuCommand('设置其他页面语言 / Setting other page languages', function() {
        var langInitial = prompt('r = ru 俄语,e = en 英语,d= de 德语,z = zh-TW中文:', otherPageLangInitial);
        if (langInitial) {
            GM_setValue('otherPageLangInitial', langInitial);
            window.location.reload();
        }
    });

    // 添加设置监听间隔命令到菜单
    GM_registerMenuCommand('设置监听间隔 / Set the listening interval', function() {
        var interval = prompt('默认值为1500毫秒,如果遇到页面频繁刷新,请提高此参数:\nThe default value is 1500 ms, if you encounter frequent page refreshes, please increase this parameter:', pollingInterval);
        if (interval !== null) {
            GM_setValue('pollingInterval', interval);
            window.location.reload();
        }
    });
})();