Загрузка...

Script
Script for Funpay - automatic translation from Russian into English using gemini

Thread in JS/TS created by Hornet_Silksong Jan 31, 2026. (bumped Feb 6, 2026) 275 views

  1. Hornet_Silksong
    Hornet_Silksong Topic starter Jan 31, 2026 Hollow Knight: Silksong in my :love2: 6,246 Oct 9, 2020
    Сделал данный софт так как устал от того что надо как продавец я постоянно перевожу текст с помощью обычного переводчика, который может перевести не так слова, а так же теряет сленг игр.

    Что бы его установить вам нужно.

    1. Скачайте https://www.tampermonkey.net/ и добавье его в ваше расшерение

    2. Зайдите в расшерение и нажмите " Создать новый скрипт "
    [IMG]
    3. Удалите весь текст и вставьте скрипт
    JS
    // ==UserScript==
    // @name Funpay translator
    // @namespace https://Funpay.com/
    // @version 1.0
    // @match https://Funpay.com/*
    // @grant GM_xmlhttpRequest
    // @connect generativelanguage.googleapis.com
    // ==/UserScript==

    (function () {
    'use strict';

    const GEMINI_API_KEY = 'ТУТ ТВОЙ АПИ gemini';
    const GEMINI_MODEL = 'gemini-3-flash-preview';

    //const GEMINI_MODEL = 'gemini-2.5-flash'; можите использовать эту версию просто уберите этот текст и //

    const selectors = {
    ruSummary: 'input[name="fields[summary][ru]"]',
    ruDesc: 'textarea[name="fields[desc][ru]"]',
    enSummary: 'input[name="fields[summary][en]"]',
    enDesc: 'textarea[name="fields[desc][en]"]',
    enTab: 'li.js-locale-switcher[data-locale="en"] a',
    };

    function setValue(el, value) {
    if (!el) return;
    el.value = value;
    el.dispatchEvent(new Event('input', { bubbles: true }));
    el.dispatchEvent(new Event('change', { bubbles: true }));
    }

    function translateText(text) {
    return new Promise((resolve, reject) => {
    GM_xmlhttpRequest({
    method: 'POST',
    url: `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_API_KEY}`,
    headers: {
    'Content-Type': 'application/json',
    },
    data: JSON.stringify({
    contents: [
    {
    role: 'user',
    parts: [
    {
    text: ',Переведи этот текст для продажи игрового аккаунта на английский язык учти что ты должен разобрать сленг, а так же проверь все что ты перевел и напиши только финальный вариант без фраз подобных " хорошо вот твой вариант и т п " просто ответ, }\n\n' + text,
    },
    ],
    },
    ],
    generationConfig: {
    temperature: 1,
    },
    }),
    onload: (response) => {
    try {
    const json = JSON.parse(response.responseText);
    const content = json?.candidates?.[0]?.content?.parts?.[0]?.text?.trim();
    if (!content) return reject(new Error('Empty translation'));
    resolve(content);
    } catch (err) {
    reject(err);
    }
    },
    onerror: (err) => reject(err),
    });
    });
    }

    async function handleTranslate() {
    const ruSummary = document.querySelector(selectors.ruSummary);
    const ruDesc = document.querySelector(selectors.ruDesc);

    if (!ruSummary || !ruDesc) {
    alert('RU поля не найдены. Убедитесь, что открыта форма на русском.');
    return;
    }

    const summaryText = ruSummary.value.trim();
    const descText = ruDesc.value.trim();

    if (!summaryText && !descText) {
    alert('Нет текста для перевода.');
    return;
    }

    try {
    const [summaryEn, descEn] = await Promise.all([
    summaryText ? translateText(summaryText) : Promise.resolve(''),
    descText ? translateText(descText) : Promise.resolve(''),
    ]);

    const enTab = document.querySelector(selectors.enTab);
    if (enTab) enTab.click();

    setTimeout(() => {
    const enSummary = document.querySelector(selectors.enSummary);
    const enDesc = document.querySelector(selectors.enDesc);
    setValue(enSummary, summaryEn);
    setValue(enDesc, descEn);
    }, 150);
    } catch (err) {
    console.error(err);
    alert('Ошибка перевода. Проверьте API ключ и доступ.');
    }
    }

    function addTranslateButton() {
    const localeSwitcher = document.querySelector('li.js-locale-switcher[data-locale="en"]');
    if (!localeSwitcher || document.getElementById('tm-Funpay-translate-btn')) return;

    const button = document.createElement('button');
    button.type = 'button';
    button.id = 'tm-Funpay-translate-btn';
    button.textContent = 'Translate RU → EN';
    button.style.marginTop = '8px';
    button.style.padding = '6px 10px';
    button.style.borderRadius = '4px';
    button.style.border = '1px solid #ccc';
    button.style.background = '#f5f5f5';
    button.style.cursor = 'pointer';

    button.addEventListener('click', () => {
    handleTranslate();
    });

    localeSwitcher.parentElement?.appendChild(button);
    }

    document.addEventListener('keydown', (e) => {
    if (e.altKey && e.code === 'KeyT') {
    e.preventDefault();
    handleTranslate();
    }
    });

    addTranslateButton();
    const observer = new MutationObserver(() => addTranslateButton());
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    4. Перейди на сайт
    https://aistudio.google.com/api-keys
    и создай там api ключ и копируем его
    [IMG]


    5. Вставляем в код
    Найдите строчку
    const GEMINI_API_KEY = 'ТУТ ТВОЙ АПИ gemini';
    ( 14 строчка )


    6. Заходим на https://Funpay.com/



    и тестим при добовление товара должна быть кнопка
    [IMG]



    Данный код можно использовать ТОЛЬКО С ***
    ( если у вас стоит региональное огранечение
    A.K.A санкции )
    Если вам не понравится как gemini переводит текст, вы можите поменять промт в 48 строчке кода.
     
    1. llimonix
  2. dendi_pudg
    был тут до бана за скамм
     
    1. View previous comments (1)
Loading...