Greasy Fork

Greasy Fork is available in English.

Warframe Market 物品名称中英对照显示 支持搜索

Warframe Market 物品名称中英对照显示 老外买东西再也不用翻译英文一个一个找了,直接搜索输入就出来

当前为 2025-12-07 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Warframe Market 物品名称中英对照显示 支持搜索
// @version      1.7
// @description  Warframe Market 物品名称中英对照显示 老外买东西再也不用翻译英文一个一个找了,直接搜索输入就出来
// @author       hhq
// @license      GPL-3.0
// @match        https://warframe.market/zh-hans/profile/*
// @grant        none
// @run-at       document-start
// @namespace http://greasyfork.icu/users/598831
// ==/UserScript==

(function() {
    'use strict';

    const TARGET_KEY = 'manifests/items';
    let interceptedCount = 0; // 记录拦截修改次数

    // --- 数据修改函数 ---
    function modifyItemNames(itemsManifest) {
        let modifiedCount = 0;
        if (!itemsManifest || typeof itemsManifest !== 'object') return itemsManifest;

        for (const itemId in itemsManifest) {
            if (itemsManifest.hasOwnProperty(itemId)) {
                const item = itemsManifest[itemId];
                try {
                    const zhName = item.i18n['zh-hans']?.name;
                    const enName = item.i18n.en?.name;

                    if (zhName && enName && !zhName.includes(`(${enName})`)) {
                        item.i18n['zh-hans'].name = `${zhName} (${enName})`;
                        modifiedCount++;
                    }
                } catch (e) { /* ignore */ }
            }
        }
        return itemsManifest;
    }
    // ----------------------


    // 1. 备份原始的 localStorage.getItem 方法
    const originalGetItem = localStorage.getItem;

    // 2. 重写 localStorage.getItem 方法 (内存修改)
    localStorage.getItem = function(key) {
        const originalString = originalGetItem.apply(this, arguments);

        if (key === TARGET_KEY && originalString) {
            try {
                // *** 拦截成功,在内存中修改 ***
                interceptedCount++;
                console.warn(`脚本:内存拦截成功!目标键 "${TARGET_KEY}" 已被拦截并修改返回。`);

                const originalData = JSON.parse(originalString);
                const modifiedData = modifyItemNames(originalData);

                return JSON.stringify(modifiedData); // 返回修改后的数据
            } catch (e) {
                console.error("内存修改发生错误,返回原始数据:", e);
            }
        }
        return originalString; // 返回原始数据
    };

    // ----------------------------------------------------
    // 3. 延迟检查:如果网站在脚本重写前已经读取了数据,我们就强制写入,并提示用户刷新。
    // ----------------------------------------------------

    window.addEventListener('load', () => {
        // 如果拦截成功 (interceptedCount > 0),则无需额外操作
        if (interceptedCount > 0) {
            console.log("拦截已生效,无需强制修改磁盘。");
            return;
        }

        // 如果拦截失败 (interceptedCount === 0),执行强制写入 (方案四逻辑)
        console.log("🚨 警告:网站可能在脚本重写前读取了缓存。正在执行强制写入磁盘...");

        try {
            const originalString = originalGetItem.call(localStorage, TARGET_KEY); // 使用原始方法读取

            if (originalString) {
                const originalData = JSON.parse(originalString);
                const modifiedData = modifyItemNames(originalData);
                const modifiedString = JSON.stringify(modifiedData);

                // 使用原始方法写入
                localStorage.setItem(TARGET_KEY, modifiedString);

                console.log(`✅ 强制写入成功!请 **刷新页面** (F5) 以读取新的缓存数据并查看效果。`);
            } else {
                 console.log(`键 "${TARGET_KEY}" 没有数据,无法执行强制写入。`);
            }
        } catch (e) {
            console.error("强制写入磁盘失败:", e);
        }
    });

})();