--client side local DEBUG = true local Players = game:GetService("Players") local HttpService = game:GetService("HttpService") local StarterGui = game:GetService("StarterGui") local LocalPlayer = Players.LocalPlayer local currentTargetLanguage = "en" -- Default lang:English -- Lang table: local languages = { 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", auto = "Automatic" } -- ALIASES table: maps alternative shorthand to the proper language code. local aliases = { jp = "ja" -- when the user types "-jp", we treat it as "ja" (Japanese) -- You can add more aliases if needed. } -- CUSTOM UI: Create or get a ScreenGui to display our system messages. local function ensureTranslatorUI() local playerGui = LocalPlayer:WaitForChild("PlayerGui") local screenGui = playerGui:FindFirstChild("TranslatorUI") if not screenGui then screenGui = Instance.new("ScreenGui") screenGui.Name = "TranslatorUI" screenGui.Parent = playerGui -- Create a Frame local frame = Instance.new("Frame") frame.Name = "MessageFrame" frame.BackgroundTransparency = 0.5 frame.BackgroundColor3 = Color3.new(0, 0, 0) frame.Size = UDim2.new(0.3, 0, 0.2, 0) frame.Position = UDim2.new(0.35, 0, 0.7, 0) frame.Parent = screenGui -- UIListLayout for vertical alignment of messages local layout = Instance.new("UIListLayout") layout.FillDirection = Enum.FillDirection.Vertical layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = frame end return screenGui:FindFirstChild("MessageFrame") end -- custom UI local function sendSystemMessage(text) if DEBUG then print("[DEBUG] sendSystemMessage:", text) end local frame = ensureTranslatorUI() local label = Instance.new("TextLabel") label.Text = text label.TextColor3 = Color3.new(1, 1, 1) label.BackgroundTransparency = 1 label.TextScaled = true label.Size = UDim2.new(1, 0, 0, 30) label.Parent = frame delay(6, function() if label then label:Destroy() end end) end -- Display an initial message when the script loads. sendSystemMessage("Chat Translator Active.\nType '-help' for instructions.\nCurrent target language: " .. languages[currentTargetLanguage]) --i wanted to use LibreTranslate API key since i thought it was free but the only free thing is the api which i have to run localy in my cmd and I don't want to get everyone's IP to make this work :<. local LIBRE_TRANSLATE_URL = "https://libretranslate.com/translate" local function translateText(text, callback) if DEBUG then print("[DEBUG] translateText called with text:", text) end local data = { q = text, source = "auto", target = currentTargetLanguage, format = "text", alternatives = 3, api_key = "" } local jsonData = HttpService:JSONEncode(data) if DEBUG then print("[DEBUG] JSON Data:", jsonData) end spawn(function() local success, response = pcall(function() return HttpService:PostAsync(LIBRE_TRANSLATE_URL, jsonData, Enum.HttpContentType.ApplicationJson) end) if DEBUG then print("[DEBUG] HTTP request success:", success) end if success then if DEBUG then print("[DEBUG] HTTP Response:", response) end local decoded local decodeSuccess = pcall(function() decoded = HttpService:JSONDecode(response) end) if not decodeSuccess then if DEBUG then warn("[DEBUG] JSON decode failed") end callback("[Translation Error: JSON decode failed]") return end if decoded and decoded.translatedText then if DEBUG then print("[DEBUG] Translated Text:", decoded.translatedText) end callback(decoded.translatedText) else if DEBUG then warn("[DEBUG] No translatedText in response. Full response:", response) end callback("[Translation Error: No text returned]") end else local errorMessage = tostring(response) if DEBUG then warn("[DEBUG] HTTP Request failed:", errorMessage) end callback("[Translation API Error: " .. errorMessage .. "]") end end) end -- CHAT COMMAND PROCESS local function onPlayerChatted(player, message) if DEBUG then print("[DEBUG] onPlayerChatted - Player:", player.DisplayName, "Message:", message) end -- Process commands only from the LocalPlayer. if player == LocalPlayer then local lowerMessage = message:lower() -- Help command if lowerMessage == "-help" then local helpMsg = "Chat Translator Instructions:\n" .. "• This tool automatically translates chat messages from other players using LibreTranslate.\n" .. "• Current target language: " .. languages[currentTargetLanguage] .. "\n" .. "• To change the target language, use one of the following commands:\n" .. " -language (e.g., -language ja)\n" .. " Or use shorthand commands (e.g., -jp for Japanese, -af for Afrikaans).\n" .. "• Available language codes include: en, af, ja (or jp), fr, de, etc.\n" .. "Enjoy seamless communication!" sendSystemMessage(helpMsg) if DEBUG then print("[DEBUG] Help command processed.") end return end -- Shorthand command processing: Match messages like "-en", "-af", "-jp", etc. local commandCode = message:match("^%-(%S+)$") if commandCode then commandCode = commandCode:lower() -- Check aliases first; for instance, map 'jp' to 'ja' if aliases[commandCode] then commandCode = aliases[commandCode] end if languages[commandCode] then currentTargetLanguage = commandCode sendSystemMessage("Target language updated to: " .. languages[currentTargetLanguage]) if DEBUG then print("[DEBUG] Shorthand language command updated to:", currentTargetLanguage) end return end end -- Full command: "-language " if lowerMessage:sub(1, 9) == "-language" then local langCode = message:match("^%-language%s+(%S+)$") if langCode then langCode = langCode:lower() if languages[langCode] then currentTargetLanguage = langCode sendSystemMessage("Target language updated to: " .. languages[currentTargetLanguage]) if DEBUG then print("[DEBUG] Language updated to:", currentTargetLanguage) end else sendSystemMessage("Invalid language code: " .. langCode) if DEBUG then print("[DEBUG] Invalid language code entered:", langCode) end end else sendSystemMessage("Usage: -language (e.g., -language ja)") if DEBUG then print("[DEBUG] Language command syntax error.") end end return -- Stop further processing for local player's commands. end -- Do not process further if it's a local player's non-command message. return end -- For messages from other players, automatically translate them. translateText(message, function(translated) local displayText = "[Translated] " .. player.DisplayName .. ": " .. translated sendSystemMessage(displayText) if DEBUG then print("[DEBUG] Final displayed translated message:", displayText) end end) end -- CONNECT CHAT EVENTS for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then player.Chatted:Connect(function(message) onPlayerChatted(player, message) end) if DEBUG then print("[DEBUG] Connected Chatted event for player:", player.DisplayName) end end end Players.PlayerAdded:Connect(function(player) if player ~= LocalPlayer then player.Chatted:Connect(function(message) onPlayerChatted(player, message) end) if DEBUG then print("[DEBUG] PlayerAdded - Connected new player:", player.DisplayName) end end end) if DEBUG then print("[DEBUG] Chat Translator loaded successfully for", LocalPlayer.DisplayName) end -- Made by: Lumpia :<