Skip to content

Instantly share code, notes, and snippets.

@nodgear
Created March 11, 2020 08:54
Show Gist options
  • Save nodgear/f801d6b4400319ea11432c75629710c2 to your computer and use it in GitHub Desktop.
Save nodgear/f801d6b4400319ea11432c75629710c2 to your computer and use it in GitHub Desktop.
Google API Translating using LUA
AddCSLuaFile("languages.lua")
local languages = {}
if CLIENT thenlocal langs = {}
langs["english"] = "en"
langs["spanish"] = "es"
langs["german"] = "de"
langs["french"] = "fr"localfunction ChatTranslate(ply, text, teamchat, isdead)if ply:Language() == LocalPlayer():Language() thenreturnend
Translate(ply:Language(), LocalPlayer():Language(), text)
end
hook.Add("OnPlayerChat", "Translate", ChatTranslate)
localfunction TranslateToChat(ply, cmd, args)local text = string.Implode(" ", args)
TranslateTo("en", "fr", text)
end
concommand.Add("translate", TranslateToChat)
function TranslateTo(from, to, text)local text = text:gsub("%s", "%%20")
http.Get("http://translate.google.com/translate_a/t?client=t&text="..text.."&hl="..to.."&sl="..from.."&tl="..to.."&pc=0", "", TranslateToCallback)
endfunction TranslateToCallback(contents, size)local tab = string.Explode(",", contents)
local translated = string.Right(tab[1], string.len(tab[1])-4)
local translated = string.Left(translated, string.len(translated)-1)
RunConsoleCommand("say", translated)
endfunction Translate(from, to, text)local text = text:gsub("%s", "%%20")
http.Get("http://translate.google.com/translate_a/t?client=t&text="..text.."&hl="..to.."&sl="..from.."&tl="..to.."&pc=0", "", TranslateCallback)
endfunction TranslateCallback(contents, size)local tab = string.Explode(",", contents)
local translated = string.Right(tab[1], string.len(tab[1])-3)
chat.AddText(translated)
end
languages.table = {}
local meta = FindMetaTable("Player")
function meta:Language()local language = languages.table[self:UniqueID()]
ifnot language thenreturn"en"endreturn langs[language]
endlocalfunction recieve(msg)
languages.table[msg:ReadString()] = msg:ReadString()
end
usermessage.Hook("LanguageData", recieve)
localfunction prompt(msg)
Derma_StringRequest("Languages", "What language do you speak?", "english", function(text) RunConsoleCommand("mylanguage", text) end)
end
usermessage.Hook("LanguagePrompt", prompt)
elselocalfunction send(ply, lang)
umsg.Start("LanguageData")
umsg.String(ply:UniqueID())
umsg.String(lang)
umsg.End()
endfunction languages.set(ply, cmd, args)
send(ply, args[1])
end
concommand.Add("mylanguage", languages.set)
function languages.prompt(ply)
umsg.Start("LanguagePrompt", ply)
umsg.End()
endlocalfunction spawnedply(ply)ifnot ply.lang then
ply.lang = true
languages.prompt(ply)
endend
hook.Add("PlayerSpawn", "LanguagesPrompt", spawnedply)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment