from figma.cool
// ==UserScript==
// @name Figma CN
// @match *://*.figma.com/*
// @icon https://cdn.jim-nielsen.com/macos/1024/figma-2021-05-05.png
// @license GPL-3.0 license
// @version 1.4.0
// @namespace Violentmonkey Scripts
// @description from figma.cool
// ==/UserScript==
(function() {
'use strict';
// 远程脚本的 URL
const contentScriptUrl = 'https://raw.githubusercontent.com/Figma-Cool/figmaCN/refs/heads/master/js/content.js';
const translationsScriptUrl = 'https://raw.githubusercontent.com/Figma-Cool/figmaCN/refs/heads/master/js/translations.js';
console.log('FigmaCN 脚本开始加载...');
Promise.all([
fetch(contentScriptUrl).then(res => res.text()),
fetch(translationsScriptUrl).then(res => res.text())
])
.then(([contentScriptText, translationsScriptText]) => {
console.log('FigmaCN: 远程脚本已成功获取。');
// 步骤 1: 解析翻译数据
const getTranslationsData = new Function(translationsScriptText + '; return translations;');
const translationData = getTranslationsData();
if (!translationData || !Array.isArray(translationData) || translationData.length === 0) {
throw new Error('FigmaCN: 未能成功解析翻译数据,或者数据为空。');
}
console.log(`FigmaCN: 已加载 ${translationData.length} 条翻译词条。`);
// 步骤 2: 准备并执行主逻辑
// 移除远程脚本中会引发错误的自动执行调用 `loadTranslationData()`
// 使用正则表达式以应对可能的空格差异,增强稳定性
const modifiedContentScript = contentScriptText.replace(/loadTranslationData\s*\(\s*\);/g, '//$& -- 被用户脚本禁用');
// 创建一个安全的、独立的执行器函数
// 这个函数接收一个名为 `allData` 的参数
// 函数体是修改后的远程脚本,它会定义 `initializeTranslation` 函数,然后我们紧接着调用它
const mainLogicRunner = new Function('allData', `
// --- 以下是远程 content.js 脚本的内容 ---
${modifiedContentScript}
// --- 远程脚本内容结束 ---
// 在这个独立的作用域内,直接调用刚刚被定义的函数
if (typeof initializeTranslation === 'function') {
console.log('FigmaCN: 启动翻译引擎...');
initializeTranslation(allData);
console.log('FigmaCN: 翻译功能已激活!');
} else {
throw new Error('FigmaCN: 核心函数 initializeTranslation 未找到,可能是远程脚本已更新。');
}
`);
// 步骤 3: 运行执行器,并传入我们获取的翻译数据
mainLogicRunner(translationData);
})
.catch(error => {
console.error('FigmaCN: 加载或执行脚本时发生严重错误:', error);
});
})();