Created
March 11, 2020 08:54
-
-
Save nodgear/f801d6b4400319ea11432c75629710c2 to your computer and use it in GitHub Desktop.
Google API Translating using LUA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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