
KeylessUniversal

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)



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