Translate Script
Key RequiredUniversal Patched

Translate Script

Universal Scriptsodrimaz331sodrimaz331 1K views 69 executesUpdated Feb 21, 2026
Unrated
00
Lua Script•178 lines (10678 chars)
local H = game:GetService("HttpService")
local P = game:GetService("Players")
local R = game:GetService("ReplicatedStorage")
local T = game:GetService("TextChatService")
local UIS = game:GetService("UserInputService")

local p = P.LocalPlayer
local pg = p:WaitForChild("PlayerGui")

-- Eski UI temizle
if pg:FindFirstChild("ECHO_HAX") then pg.ECHO_HAX:Destroy() end

local chatHistory = {}
local MyLang, TargetLang, TargetLangName, UILang = "tr", "en", "ENGLISH", "tr"
local currentOverlayMode = ""
local isOpened = true

-- 🌍 UI Sözlüğü
local dict = {
    ["en"] = {my="MY:", tg="TARGET:", lg="LOGS", sn="SEND", ui="UI:", bk="BACK", se="Search...", ph="Type here..."},
    ["tr"] = {my="BENİM:", tg="HEDEF:", lg="GEÇMİŞ", sn="GÖNDER", ui="DİL:", bk="GERİ", se="Ara...", ph="Buraya yaz..."}
}
setmetatable(dict, {__index = function() return dict["en"] end})

local langList = {{"ENGLISH", "en"}, {"TURKISH", "tr"}, {"CHINESE", "zh-CN"}, {"HINDI", "hi"}, {"SPANISH", "es"}, {"FRENCH", "fr"}, {"ARABIC", "ar"}, {"BENGALI", "bn"}, {"PORTUGUESE", "pt"}, {"RUSSIAN", "ru"}, {"URDU", "ur"}, {"INDONESIAN", "id"}, {"GERMAN", "de"}, {"JAPANESE", "ja"}, {"VIETNAMESE", "vi"}, {"TAGALOG", "tl"}, {"KOREAN", "ko"}, {"PERSIAN", "fa"}, {"HAUSA", "ha"}, {"ITALIAN", "it"}, {"POLISH", "pl"}, {"GREEK", "el"}, {"TELUGU", "te"}, {"MARATHI", "mr"}, {"TAMIL", "ta"}}

-- ⚡ AKIŞKAN SÜRÜKLEME (SMOOTH DRAG)
local function SmoothDrag(frame)
    local dragging, dragInput, dragStart, startPos
    frame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true; dragStart = input.Position; startPos = frame.Position
            input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end)
        end
    end)
    frame.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end
    end)
    UIS.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            local delta = input.Position - dragStart
            frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)
end

-- 🔄 ÇEVİRİ MOTORU
local function Translate(text, to)
    local url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl="..to.."&dt=t&q="..H:UrlEncode(text)
    local success, res = pcall(function()
        return (request or syn.request or http_request)({Url = url, Method = "GET"}).Body
    end)
    if success and res then return H:JSONDecode(res)[1][1][1] end
    return text
end

-- 🏗️ UI TEMEL
local sg = Instance.new("ScreenGui", pg); sg.Name = "ECHO_HAX"; sg.ResetOnSpawn = false
local main = Instance.new("Frame", sg)
main.Size = UDim2.new(0, 400, 0, 460); main.Position = UDim2.new(0.5, -200, 0.5, -230); main.BackgroundColor3 = Color3.fromRGB(15, 15, 15); main.Active = true
Instance.new("UIStroke", main).Color = Color3.fromRGB(0, 255, 150)
Instance.new("UICorner", main)
SmoothDrag(main)

-- 🏷️ BAŞLIK (ECHO HAX)
local title = Instance.new("TextLabel", main)
title.Size = UDim2.new(1, 0, 0, 30); title.Position = UDim2.new(0, 0, 0, 5); title.BackgroundTransparency = 1; title.Text = "ECHO HAX"; title.TextColor3 = Color3.fromRGB(0, 255, 150); title.Font = "GothamBold"; title.TextSize = 18

-- 🔴 NEON + BUTONU
local mini = Instance.new("TextButton", sg)
mini.Size = UDim2.new(0, 40, 0, 40); mini.Position = main.Position; mini.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
mini.Text = "+"; mini.TextColor3 = Color3.new(1, 1, 1); mini.Font = "GothamBold"; mini.TextSize = 25; mini.Visible = false; mini.Active = true
Instance.new("UICorner", mini).CornerRadius = UDim.new(0.5, 0)
local glow = Instance.new("UIStroke", mini); glow.Color = Color3.fromRGB(255, 0, 0); glow.Thickness = 3; glow.Transparency = 0.3
SmoothDrag(mini)

local function bBtn(t, p, s, c, par, zi)
    local b = Instance.new("TextButton", par)
    b.Text = t; b.Position = p; b.Size = s; b.BackgroundColor3 = c; b.TextColor3 = Color3.new(1,1,1); b.Font = "GothamBold"; b.TextSize = 13; b.ZIndex = zi or 10
    Instance.new("UICorner", b); return b
end

local d = dict[UILang]
local s1 = bBtn(d.my.." TR", UDim2.new(0.05, 0, 0.12, 0), UDim2.new(0.43, 0, 0, 40), Color3.fromRGB(30, 30, 30), main)
local s2 = bBtn(d.tg.." EN", UDim2.new(0.52, 0, 0.12, 0), UDim2.new(0.43, 0, 0, 40), Color3.fromRGB(0, 150, 100), main)
local box = Instance.new("TextBox", main); box.Size = UDim2.new(0.9, 0, 0, 100); box.Position = UDim2.new(0.05, 0, 0.24, 0); box.BackgroundColor3 = Color3.fromRGB(25, 25, 25); box.TextColor3 = Color3.new(1, 1, 1); box.TextWrapped = true; box.TextSize = 16; box.PlaceholderText = d.ph; box.Text = ""
Instance.new("UICorner", box)
local lBtn = bBtn(d.lg, UDim2.new(0.05, 0, 0.50, 0), UDim2.new(0.9, 0, 0, 40), Color3.fromRGB(70, 40, 150), main)
local snd = bBtn(d.sn, UDim2.new(0.05, 0, 0.62, 0), UDim2.new(0.9, 0, 0, 50), Color3.fromRGB(0, 120, 255), main)
local uiBtn = bBtn(d.ui.." "..UILang:upper(), UDim2.new(0.05, 0, 0.77, 0), UDim2.new(0.9, 0, 0, 40), Color3.fromRGB(45, 45, 45), main)

local overlay = Instance.new("Frame", main); overlay.Size = UDim2.new(1, 0, 1, 0); overlay.BackgroundColor3 = Color3.fromRGB(10, 10, 10); overlay.ZIndex = 100; overlay.Visible = false; Instance.new("UICorner", overlay)
local back = bBtn(d.bk, UDim2.new(0.05, 0, 0.05, 0), UDim2.new(0.25, 0, 0, 35), Color3.fromRGB(150, 0, 0), overlay, 110)
local search = Instance.new("TextBox", overlay); search.Size = UDim2.new(0.6, 0, 0, 35); search.Position = UDim2.new(0.35, 0, 0.05, 0); search.BackgroundColor3 = Color3.fromRGB(30,30,30); search.TextColor3 = Color3.new(1,1,1); search.PlaceholderText = d.se; search.ZIndex = 110; Instance.new("UICorner", search)
local scroll = Instance.new("ScrollingFrame", overlay); scroll.Size = UDim2.new(0.9, 0, 0.75, 0); scroll.Position = UDim2.new(0.05, 0, 0.18, 0); scroll.BackgroundTransparency = 1; scroll.ZIndex = 110; scroll.ScrollBarThickness = 4; scroll.CanvasSize = UDim2.new(0,0,0,0)
Instance.new("UIListLayout", scroll).Padding = UDim.new(0, 8)

-- 🔄 DİL GÜNCELLEME
local function UpdateUILanguage()
    local cur = dict[UILang]
    s1.Text = cur.my.." "..MyLang:upper()
    s2.Text = cur.tg.." "..TargetLangName:upper()
    lBtn.Text = cur.lg; snd.Text = cur.sn; uiBtn.Text = cur.ui.." "..UILang:upper(); back.Text = cur.bk; search.PlaceholderText = cur.se; box.PlaceholderText = cur.ph
end

local function toggleUI()
    isOpened = not isOpened
    if isOpened then main.Position = mini.Position; main.Visible = true; mini.Visible = false
    else mini.Position = main.Position; main.Visible = false; mini.Visible = true end
end
mini.MouseButton1Click:Connect(toggleUI)

local function render(mode, filter)
    currentOverlayMode = mode
    for _, v in pairs(scroll:GetChildren()) do if v:IsA("GuiObject") then v:Destroy() end end
    if mode == "logs" then
        for _, item in pairs(chatHistory) do
            if not filter or item.msg:lower():find(filter:lower()) or item.sender:lower():find(filter:lower()) then
                local b = bBtn("", UDim2.new(0,0,0,0), UDim2.new(1,-10,0,40), Color3.fromRGB(30,30,30), scroll, 120)
                local l = Instance.new("TextLabel", b); l.Size = UDim2.new(1,-16,1,0); l.Position = UDim2.new(0,8,0,0); l.BackgroundTransparency = 1; l.TextColor3 = Color3.new(1,1,1); l.Font = "Gotham"; l.TextSize = 12; l.TextWrapped = true; l.TextXAlignment = "Left"; l.ZIndex = 121; l.Text = item.sender..": "..item.msg
                b.Size = UDim2.new(1,-10,0, math.max(40, l.TextBounds.Y + 14))
                b.MouseButton1Click:Connect(function()
                    box.Text = "...Çevriliyor..."
                    task.spawn(function() box.Text = Translate(item.msg, TargetLang) end)
                    overlay.Visible = false; currentOverlayMode = ""
                end)
            end
        end
    else
        for _, item in pairs(langList) do
            if not filter or item[1]:lower():find(filter:lower()) then
                local b = bBtn(item[1], UDim2.new(0,0,0,0), UDim2.new(1,-10,0,35), Color3.fromRGB(40,40,40), scroll, 120)
                b.MouseButton1Click:Connect(function()
                    if mode == "my" then MyLang = item[2] 
                    elseif mode == "target" then TargetLang = item[2] TargetLangName = item[1] 
                    elseif mode == "ui" then UILang = item[2] end
                    UpdateUILanguage()
                    overlay.Visible = false; currentOverlayMode = ""
                end)
            end
        end
    end
    scroll.CanvasSize = UDim2.new(0,0,0, scroll.UIListLayout.AbsoluteContentSize.Y + 10)
    overlay.Visible = true
end

-- 📝 SINIRSIZ KAYIT SİSTEMİ
local function addLog(sender, message)
    if message == "" or not sender or message:find("Çevriliyor") then return end
    table.insert(chatHistory, 1, {sender = tostring(sender), msg = tostring(message)})
    if overlay.Visible and currentOverlayMode == "logs" then render("logs", search.Text) end
end

for _, v in pairs(P:GetPlayers()) do v.Chatted:Connect(function(m) addLog(v.DisplayName, m) end) end
P.PlayerAdded:Connect(function(v) v.Chatted:Connect(function(m) addLog(v.DisplayName, m) end) end)
T.MessageReceived:Connect(function(m) if m.TextSource then addLog(m.TextSource.DisplayName, m.Text) end end)

UIS.InputBegan:Connect(function(input, processed) if not processed and input.KeyCode == Enum.KeyCode.Z then toggleUI() end end)
lBtn.MouseButton1Click:Connect(function() render("logs") end)
s1.MouseButton1Click:Connect(function() render("my") end)
s2.MouseButton1Click:Connect(function() render("target") end)
uiBtn.MouseButton1Click:Connect(function() render("ui") end)
back.MouseButton1Click:Connect(function() overlay.Visible = false; currentOverlayMode = "" end)
search:GetPropertyChangedSignal("Text"):Connect(function() render(currentOverlayMode, search.Text) end)

snd.MouseButton1Click:Connect(function()
    if box.Text ~= "" then
        local txt = box.Text
        task.spawn(function()
            local t = Translate(txt, TargetLang)
            local ch = T.TextChannels:FindFirstChild("RBXGeneral") or T.TextChannels:FindFirstChild("All")
            if ch then ch:SendAsync(t) else R:FindFirstChild("SayMessageRequest", true):FireServer(t, "All") end
        end)
        box.Text = ""
    end
end)

bBtn("X", UDim2.new(1,-35,0,5), UDim2.new(0,30,0,30), Color3.fromRGB(200,50,50), main, 10).MouseButton1Click:Connect(toggleUI)

Features & Information

💎 ECHO HAX | Universal Real-Time Translator ECHO HAX is a powerful, high-performance universal chat translator designed for seamless communication in any Roblox game. Whether you're dealing with global players or keeping track of server history, Echo Hax provides a smooth and integrated experience. 🌟 Key Features Real-Time Translation: Automatically translates your messages into your target language before sending them to the chat. Universal Compatibility: Works with both Legacy Chat and the new TextChatService. Supported on all major executors (Solara, Wave, etc.). Unlimited Chat Logs: Captures every message in the server with a dedicated "Logs" section. Never miss a message again. Interactive Log Translation: Click on any message in the logs to instantly translate it into your own language. Smooth Dragging System: Features a custom, lag-free dragging algorithm for a buttery-smooth UI experience. Neon Toggle Interface: Minimize the menu into a sleek, neon-red "+" button that you can place anywhere on your screen. Multi-Language UI: Fully supports both English and Turkish UI modes with a dynamic dictionary system. Quick Search: Easily filter through hundreds of chat logs or find specific languages in seconds. ⌨️ Keybinds [Z] Key: Toggle Menu (Show/Hide) 🚀 How to Use Execute the script. Set your "MY" (Your Language) and "TARGET" (Receiver's Language) settings. Type your message in the text box and hit "SEND". Access "LOGS" to see everything being said in the server.
#translator#chat#universal#v#LAUNGAGE

Community Comments (1)

ZONROXZONROXSep 30, 2026

it working.when you wanna translate what you wanna say ,it works perfectly. i hope it can translate what others are saying too

More Scripts for Universal Scripts