if not game["Loaded"] then game["Loaded"]:Wait() end repeat task.wait(.06) until game:GetService("Players").LocalPlayer local Http=game:GetService("HttpService") local Players=game:GetService("Players") local LP=Players.LocalPlayer local TCS=game:GetService("TextChatService") local CoreGui=game:GetService("CoreGui") local YourLang = "en" local function req(opt) local fn=(syn and syn.request) or (http and http.request) or http_request or request if fn then return fn(opt) end return Http:RequestAsync(opt) end local gv=isfile and isfile("googlev.txt") and readfile("googlev.txt") or "" local function consent(body) local t={} for tag in body:gmatch('') do local k,v=tag:match(''); t[k]=v end gv=t.v or ""; if writefile then writefile("googlev.txt",gv) end end local function got(url,method,body) method=method or "GET" local res=req({Url=url,Method=method,Headers={cookie="CONSENT=YES+"..(gv or "")},Body=body}) local b=res.Body or res.body or ""; if type(b)~="string" then b=tostring(b) end if b:match("https://consent.google.com/s") then consent(b) res=req({Url=url,Method="GET",Headers={cookie="CONSENT=YES+"..(gv or "")}}) end return res end local langs={ auto="Automatic",af="Afrikaans",sq="Albanian",am="Amharic",ar="Arabic",hy="Armenian",az="Azerbaijani",eu="Basque",be="Belarusian",bn="Bengali",bs="Bosnian",bg="Bulgarian",ca="Catalan",ceb="Cebuano",ny="Chichewa", ["zh-cn"]="Chinese Simplified",["zh-tw"]="Chinese Traditional",co="Corsican",hr="Croatian",cs="Czech",da="Danish",nl="Dutch",en="English",eo="Esperanto",et="Estonian",tl="Filipino",fi="Finnish",fr="French",fy="Frisian", gl="Galician",ka="Georgian",de="German",el="Greek",gu="Gujarati",ht="Haitian Creole",ha="Hausa",haw="Hawaiian",iw="Hebrew",hi="Hindi",hmn="Hmong",hu="Hungarian",is="Icelandic",ig="Igbo",id="Indonesian",ga="Irish",it="Italian", ja="Japanese",jw="Javanese",kn="Kannada",kk="Kazakh",km="Khmer",ko="Korean",ku="Kurdish (Kurmanji)",ky="Kyrgyz",lo="Lao",la="Latin",lv="Latvian",lt="Lithuanian",lb="Luxembourgish",mk="Macedonian",mg="Malagasy",ms="Malay", ml="Malayalam",mt="Maltese",mi="Maori",mr="Marathi",mn="Mongolian",my="Myanmar (Burmese)",ne="Nepali",no="Norwegian",ps="Pashto",fa="Persian",pl="Polish",pt="Portuguese",pa="Punjabi",ro="Romanian",ru="Russian",sm="Samoan", gd="Scots Gaelic",sr="Serbian",st="Sesotho",sn="Shona",sd="Sindhi",si="Sinhala",sk="Slovak",sl="Slovenian",so="Somali",es="Spanish",su="Sundanese",sw="Swahili",sv="Swedish",tg="Tajik",ta="Tamil",te="Telugu",th="Thai",tr="Turkish", uk="Ukrainian",ur="Urdu",uz="Uzbek",vi="Vietnamese",cy="Welsh",xh="Xhosa",yi="Yiddish",yo="Yoruba",zu="Zulu" } local function iso(s) if not s then return end for k,v in pairs(langs) do if k==s or v==s then return k end end end local function q(data) local s="" for k,v in pairs(data) do if type(v)=="table" then for _,vv in pairs(v) do s..="&"..Http:UrlEncode(k).."="..Http:UrlEncode(vv) end else s..="&"..Http:UrlEncode(k).."="..Http:UrlEncode(v) end end return s:sub(2) end local jE=function(x) return Http:JSONEncode(x) end local jD=function(x) return Http:JSONDecode(x) end local rpc="MkEWBc" local root="https://translate.google.com/" local exec="https://translate.google.com/_/TranslateWebserverUi/data/batchexecute" local fsid,bl,rid=nil,nil,math.random(1000,9999) do local b=(got(root).Body or "") fsid=b:match('"FdrFJe":"(.-)"'); bl=b:match('"cfb2h":"(.-)"') end local function translate(txt,tgt,src) rid+=10000 tgt=iso(tgt) or "en"; src=iso(src) or "auto" local data={{txt,src,tgt,true},{nil}} local freq={{{rpc,jE(data),nil,"generic"}}} local url=exec.."?"..q{rpcids=rpc,["f.sid"]=fsid,bl=bl,hl="en",_reqid=rid-10000,rt="c"} local body=q{["f.req"]=jE(freq)} local res=got(url,"POST",body) local ok,out=pcall(function() local arr=jD((res.Body or ""):match("%[.-%]\n")); return jD(arr[1][3]) end) if not ok then return nil end return out[2][1][1][6][1][1] end local function translateInfo(txt, tgt, src) rid += 10000 tgt = iso(tgt) or "en" src = iso(src) or "auto" local data = {{txt, src, tgt, true}, {nil}} local freq = {{{rpc, jE(data), nil, "generic"}}} local url = exec.."?"..q{rpcids=rpc, ["f.sid"]=fsid, bl=bl, hl="en", _reqid=rid-10000, rt="c"} local body = q{["f.req"]=jE(freq)} local res = got(url, "POST", body) local ok, out = pcall(function() local arr = jD((res.Body or ""):match("%[.-%]\n")) return jD(arr[1][3]) end) if not ok or not out then return nil, nil end return out[2][1][1][6][1][1], out[3] end local function sys(msg) local chans=TCS:WaitForChild("TextChannels") local c=chans:FindFirstChild("RBXSystem") or chans:FindFirstChild("RBXGeneral") or chans:GetChildren()[1] if c and c.DisplaySystemMessage then c:DisplaySystemMessage(msg) end end local function findWhisper(recipient) if not recipient or recipient=="All" then return nil end for _,c in ipairs(TCS.TextChannels:GetChildren()) do if string.find(c.Name,"^RBXWhisper:") and c:FindFirstChild(recipient) then return c end end end local function defaultChannel() return TCS.TextChannels:FindFirstChild("RBXGeneral") or TCS.TextChannels:FindFirstChild("General") or TCS.TextChannels:FindFirstChild("RBXSystem") end local function resolveRecipient(chip) if chip and chip:IsA("TextButton") then local txt=chip.Text or "" local who=string.match(txt,"^%[To%s+(.+)%]$") if who and who~="" then local d=string.lower(who) for _,plr in ipairs(Players:GetPlayers()) do if string.lower(plr.DisplayName)==d then return plr.Name end end end end return "All" end local function sendChat(text,recipient) task.spawn(function() local chan=findWhisper(recipient) or defaultChannel() if chan then chan:SendAsync(text) end end) end local function chunkSend(prefix, list, size) local i=1 while i<=#list do local j=math.min(i+size-1,#list) sys(prefix..table.concat(list,", ",i,j)) i=j+1 end end local function showUsage() sys("translator prefix: '>'") sys("usage:") sys(">d = disable persistent sending") sys(">help = show usage") sys(">langs = list available language codes") sys("examples:") sys(">ru hello") sys(">th how are you?") sys(">ja") end local function showLangs() local codes={} for code,_ in pairs(langs) do table.insert(codes,code) end table.sort(codes,function(a,b) return ahelp" then showUsage(); return true end if raw==">langs" then showLangs(); return true end if raw==">d" then tr_on=false; sys("[TR] Sending Disabled"); return true end local code,msg=raw:match("^>(%a%a)%s+(.+)$") if code and msg then local lang=iso(string.lower(code)) if lang then local out=translate(msg,lang,"auto") or msg sendChat(out,recipient) sys("[TR] Sent in "..lang) else sys("[TR] Invalid language code") end return true end local only=raw:match("^>(%a%a)$") if only then local lang=iso(string.lower(only)) if lang then tr_on=true; tr_lang=lang; sys("[TR] Target "..lang) else sys("[TR] Invalid language code") end return true end if tr_on and tr_lang~="" and raw:sub(1,1)~="/" then local out=translate(raw,tr_lang,"auto") or raw sendChat(out,recipient) return true end return false end task.spawn(function() repeat task.wait() until CoreGui:FindFirstChild("ExperienceChat") local ec=CoreGui:WaitForChild("ExperienceChat") local al=ec:WaitForChild("appLayout") local cb=al:WaitForChild("chatInputBar") local bg=cb:WaitForChild("Background") local ct=bg:WaitForChild("Container") local tc=ct:WaitForChild("TextContainer") local bc=tc:WaitForChild("TextBoxContainer") local box=bc:WaitForChild("TextBox") local btn=ct:WaitForChild("SendButton") local chip=tc:FindFirstChild("TargetChannelChip") local function hook() local m=box.Text if m=="" then return end box.Text="" local rec=resolveRecipient(chip) if not handleOutgoing(m,rec) then sendChat(m,rec) end end box.FocusLost:Connect(function(e) if e then hook() end end) btn.MouseButton1Click:Connect(hook) end) TCS.MessageReceived:Connect(function(msg) if not msg.TextSource or msg.TextSource.UserId == LP.UserId then return end local uid = msg.TextSource.UserId local p = Players:GetPlayerByUserId(uid) local disp = p and p.DisplayName or tostring(uid) local user = p and p.Name or tostring(uid) local nameStr = (disp == user) and ("@"..user) or (disp.." (@"..user..")") local text, detected = translateInfo(msg.Text, YourLang, "auto") if text and text ~= "" and text ~= msg.Text then local langTag = detected and detected ~= "" and detected:upper() or "AUTO" sys("("..langTag..") ["..nameStr.."]: "..text) end end)