Jump to content

Creación de un sistema Multilenguaje.


starksZ

Recommended Posts

Emm bueno no se por donde empezar, pero quisiera saber como podría comenzar y que debería usar para crear este sistema Multi Lenguaje el cual le añadir 3 lenguajes: Inglés, español y portugués.

Esto seria que si el en el Login da click en español se use un setElementData para que se quede ese dato en la cuenta y a el solo le aparezca este lenguaje, Pero como haría para que a el le salga su mensaje en su idioma por ejemplo un outputChatBox.

Usando tablas también seria, pero como haría tal cosa?

Link to comment

Mis últimos recursos los he trabajado para soporte de múltiples idiomas; como aclaración debes entender que hacer algo así no es tan automático como se puede pensar, lo que recomiendo es utilizar 'setElementData' (asignando un número a cada idioma, por cierto) y luego crear una tabla con una estructura de dos niveles, siendo la primera una tabla general con índices numéricos correlacionados al idioma, y la segunda una tabla que contenga cada texto que deba estar en cada idioma. Es el método más cómodo, aunque aún así es una carga extra al momento de realizarlo.

Si la explicación resulta poco comprensible, tan sólo dímelo y te muestro un ejemplo más concreto, ahora mismo no estoy en un PC y me pareció dificultoso intentar ejemplificar la estructura de la tabla.

Link to comment
Mis últimos recursos los he trabajado para soporte de múltiples idiomas; como aclaración debes entender que hacer algo así no es tan automático como se puede pensar, lo que recomiendo es utilizar 'setElementData' (asignando un número a cada idioma, por cierto) y luego crear una tabla con una estructura de dos niveles, siendo la primera una tabla general con índices numéricos correlacionados al idioma, y la segunda una tabla que contenga cada texto que deba estar en cada idioma. Es el método más cómodo, aunque aún así es una carga extra al momento de realizarlo.

Si la explicación resulta poco comprensible, tan sólo dímelo y te muestro un ejemplo más concreto, ahora mismo no estoy en un PC y me pareció dificultoso intentar ejemplificar la estructura de la tabla.

Se puede utilizar el mismo código de lenguaje que MTA brinda, getLocalization.

Aquí tienes un ejemplo de un proyecto que comenzó un desarrollador de mi servidor y que lamentablemente abandonó:

GTIlanguage/language.lua

  
----------------------------------------->> 
-- GTI: Grand Theft International 
-- Date: 08 April 2015 
-- Resource: GTIlanguage/language.lua 
-- Type: Both sides 
----------------------------------------->> 
function onClientStart() 
    localPlayer:setData("language",getLocalization()["code"],true) --sync 
end 
addEventHandler("onClientResourceStart",resourceRoot,onClientStart) 
  
function getTranslation(text_variable,language) 
    --Make sure the language table resource is online 
    if not (isLanguageResourceOnline()) then 
        return false 
    end 
     
    --Figure out if we're client or server 
    local side = nil 
    if (localPlayer == nil) then side = "server" else side = "client" end 
     
    --Get the language table 
    local lTable = exports.GTIlanguageTable:getLanguages() 
     
    --Check language 
    if not language then 
        language = getPlayerLanguage() or "en_US" 
    end 
     
    --Check if that language exists, otherwise return false. If it exists but no translation, return en_US version. 
    if not (lTable[side][text_variable]) then return false end 
     
    return lTable[side][text_variable][language] or lTable[side][text_variable]["en_US"] 
end 
     
  
function getPlayerLanguage(player) 
    if localPlayer then 
        player = localPlayer 
    end 
     
    if not player then 
        outputDebugString("Bad argument @ 'getPlayerLanguage' [Expected player, got nil]",1) 
        return false 
    elseif not (isElement(player) and getElementType(player) == "player") then 
        outputDebugString("Bad argument @ 'getPlayerLanguage' [Expected player, got "..tostring(type(player)).."]",1) 
        return false 
    end 
     
    return player:getData("language") 
end 
  
function isLanguageResourceOnline() 
    if (getResourceState(getResourceFromName("GTIlanguageTable")) == "running") then return true else return false end 
end 
  

GTIlanguage/meta.xml

  
<meta> 
    <info author="Jack" name="GTI Languages" description="Automatically gets translated text based on the player's language." autostart="false" /> 
     
    <script src="language.lua" type="shared" cache="false"/> 
     
    <export function="getPlayerLanguage" type="shared" /> 
    <export function="getTranslation" type="shared" /> 
     
    <oop>true</oop> 
</meta> 
  

GTIlanguageTable/languages.lua

  
    -- -------------------------------------->> 
    -- GTI: Grand Theft International 
    -- Date: 06/04/2015 
    -- Resource: GTIlanguageTable/languages.lua 
    -- Type: Server Side 
    ----------------------------------------->> 
      
    local languages = {} 
      
    --Credits to Callum Dawson for the idea. 
    languages["server"] = { 
            PLAYER_LOGGEDIN = { 
                    en_US = "* %s has logged in.", 
                    fr = "* %s a connecté.", 
                    es = "* %s se ha conectado.", 
                    pt_BR = "%s conectou-se." 
            }, 
            PLAYER_QUIT = { 
                    en_US = "* %s has left the game [%s]", 
                    fr = "* a quitté la partie [%s]", 
                    es = "* %s ha abandonado el juego [%s]", 
                    pt_BR = "* %s desconectou-se [%s]" 
            }, 
            PLAYER_NICK_CHANGE = { 
                    en_US = "* %s is now known as %s", 
                    fr = "* %s est maintenant connu comme %s", 
                    es = "* %s es ahora conocido como %s", 
                    pt_BR = "* %s e agora conhecido como %s" 
            }, 
            PLAYER_FIRST_JOIN = { 
                    en_US = "* %s has joined for the first time. Say hello, guys!", 
                    fr = "* %s a rejoint pour la première fois. Dites bonjour, les gars!", 
                    es = "* %s ha entrado por primera vez. ¡Denle la bienvenida!", 
                    pt_BR = "* %s conectou-se pela primeira vez. Digam Ola, pessoal!" 
            } 
    } 
      
    languages["client"] = { 
            --Login window 
            ACCOUNTS_LOGIN_PLAY = { 
                    en_US = "PLAY!", 
                    fr = "JOUER!", 
                    es = "JUGAR!", 
                    pt_BR = "JOGAR!" 
            }, 
            ACCOUNTS_LOGIN_REGISTER = { 
                    en_US = "Register", 
                    fr = "Se enregistrer", 
                    es = "Registrarse", 
                    pt_BR = "Registe-se" 
                    
            }, 
            ACCOUNTS_LOGIN_LEAVE = { 
                    en_US = "Leave", 
                    fr = "Laisser", 
                    es = "Salir", 
                    pt_BR = "Sair" 
            }, 
            ACCOUNTS_LOGIN_RECOVER = { 
                    en_US = "Recover", 
                    fr = "Récupérer", 
                    es = "Recuperar", 
                    pt_BR = "Recuperar"      
            }, 
            
            --Register window 
            ACCOUNTS_REGISTER_TITLE = { 
                    en_US = "GTI Account Registration", 
                    es = "GTI Registro de Cuenta", 
                    pt_BR = "Registo de Conta do GTI" 
            }, 
            ACCOUNTS_REGISTER_USERNAME = { 
                    en_US = "Enter a username:", 
                    es = "Nombre de usuario:", 
                    pt_BR = "Nome de utilizador:" 
            }, 
            ACCOUNTS_REGISTER_EMAIL = { 
                    en_US = "E-mail Address (Optional):", 
                    es = "E-mail (Opcional):", 
                    pt_BR = "Endereco de E-mail (Opcional):" 
            }, 
            ACCOUNTS_REGISTER_PASSWORD = { 
                    en_US = "Enter a Password", 
                    es = "Ingresa una contrasena", 
                    pt_BR = "Insira uma palavra-passe" 
            }, 
            ACCOUNTS_REGISTER_REPEAT = { 
                    en_US = "Repeat Password", 
                    es = "Repite la contrasena", 
                    pt_BR = "Repita a palavra-passe" 
            }, 
            ACCOUNTS_REGISTER_TEXT = { 
                    en_US = "Your account Username is the username that you will login with. It cannot be changed. Your e-mail address will be used to recover your password in the event that you forget it. It is completely optional, but password recovery will be a lot more difficult without it. Your password can be changed in the future.", 
            es = "Tu nombre de cuenta sera utilizado para la autenticacion. El nombre de cuenta no puede ser cambiado. Tu e-mail sera usado para recuperar tu contrasena en caso de que la olvides. Esto es completamente opcional, pero la recuperacion de tu contrasena sera mas dificil sin esto. Tu contrasena puede ser cambiada en el futuro", 
                    pt_BR = "O Nome de Utilizador sera usado para realizares a autenticacao. O nome de utilizador nao pode ser alterado. O teu endereco de e-mail sera usado para recuperar a tua palavra-passe no caso de te esqueceres dela. E completamente opcional, mas a recuperacao de palavra-passe sera muito mais dificil sem ele. A tua palavra-passe pode ser alterada no futuro." 
            }, 
            ACCOUNTS_REGISTER_REGISTER = { 
                    en_US = "Register", 
                    es = "Registar", 
                    pt_BR = "Registar" 
            }, 
            ACCOUNTS_REGISTER_CLOSE = { 
                    en_US = "Close", 
                    es = "Cerrar", 
                    pt_BR = "Fechar" 
            }, 
            
            --Recovery window 
            ACCOUNTS_RECOVERY_TITLE = { 
                    en_US = "GTI Account Recovery", 
                    es = "GTI Recuperacion de cuenta", 
                    pt_BR = "Recuperacao de conta GTI" 
            }, 
            ACCOUNTS_RECOVERY_USERNAME = { 
                    en_US = "Enter Username:", 
                    es = "Ingresa nombre de usuario:", 
                    pt_BR = "Introduza Nome de utilizador" 
            }, 
            ACCOUNTS_RECOVERY_EMAIL = { 
                    en_US = "Enter Email Address:", 
                    es = "Introduzca un e-mail:", 
                    pt_BR = "Introduza Endereco de E-mail:" 
            }, 
            ACCOUNTS_RECOVERY_RECOVER = { 
                    en_US = "Recover", 
                    es = "Recuperar", 
                    pt_BR = "Recuperar" 
            }, 
            ACCOUNTS_RECOVERY_CANCEL = { 
                    en_US = "Cancel", 
                    es = "Cancelar", 
                    pt_BR = "Cancelar" 
            }, 
      
            USEFUL_MESSAGES_1 = { 
                    en_US = "Get involved in our democratic community | Visit gtirpg.net", 
                    pt_BR = "Envolve-te na nossa comunidade democratica | Visita gtirpg.net", 
                    es = "Introducete en nuestra democratica comunidad | Visita gtirpg.net" 
            }, 
            USEFUL_MESSAGES_2 = { 
                    en_US = "Become a Police Officer at any major police department.", 
                    pt_BR = "Torna-te Policia num dos departamentos de Policia.", 
                    es = "Conviertete en Oficial de Policia en cualquier departamento de policia." 
            }, 
            USEFUL_MESSAGES_3 = { 
                    en_US = "Visit Ammu-Nation for a free Pistol!", 
                    pt_BR = "Visita uma Ammu-Nation para receberes uma pistola gratuita!", 
                    es = "Visita los Ammu-Nations para obtener una pistola gratis!" 
            }, 
            USEFUL_MESSAGES_4 = { 
                    en_US = "Need some cash? Visit the bank! All new accounts get some money to start out with.", 
                    pt_BR = "Precisas de dinheiro? Visita o banco! Todas as novas contas sao criadas com algum dinheiro.", 
                    es = "¿Necesitas dinero? ¡Visita el banco! Todas las nuevas cuentas comienzan con una cantidad de dinero." 
            }, 
            USEFUL_MESSAGES_5 = { 
                    en_US = "Like what you see? Spread the word! Tell your friends about GTI.", 
                    pt_BR = "Gostas do que ves? Espalha a palavra! Fala do GTI aos teus amigos.", 
                    es = "¿Te gusta lo que ves? ¡Propaga la palabra! Dile a tus amigos sobre GTI." 
            }, 
            USEFUL_MESSAGES_6 = { 
                    en_US = "GTI is being updated every day! Use /updates or visit gtirpg.net/updates.php to stay informed on progress.", 
                    pt_BR = "O GTI esta a ser atualizado todos os dias! Usa /updates ou visita gtirpg.net/updates.php para ficar informado do nosso progresso.", 
                    es = "¡GTI es actualizado cada día! Usa /updates o visita gtirpg.net/updates.php para permanecer informado" 
            }, 
            USEFUL_MESSAGES_7 = { 
                    en_US = "You can buy a car at one of our car dealerships spread around San Andreas.", 
                    pt_BR = "Podes comprar um carro num dos nossos concessionarios de veiculos espalhados por San Andreas.", 
                    es = "Puedes comprar un vehiculo en cualquiera de nuestros concesionarios alrededor San Andreas." 
            }, 
            USEFUL_MESSAGES_8 = { 
                    en_US = "Press B to use the GTIdroid. The GTIdroid contains many features that you should explore.", 
                    pt_BR = "Pressiona B para usar o GTIdroid. O GTIdroid contem varias ferramentas que deves explorar.", 
                    es = "Presiona B para usar el GTIdroid. El GTIdroid contiene muchas herramientas que deberias explorar." 
            }, 
            USEFUL_MESSAGES_9 = { 
                    en_US = "Buy a new skin at one of our clothing stores.", 
                    pt_BR = "Compra uma nova skin numa das nossas lojas de roupa.", 
                    es = "Compra un nuevo skin en una de nuestras tiendas de ropa." 
            }, 
            USEFUL_MESSAGES_10 = { 
                    en_US = "Earn quick cash in one of our CnR event robberies. Use /cnrtime to see when the next one is.", 
                    pt_BR = "Ganha dinheiro rapido num dos nossos eventos CnR. Usa /cnrtime para ver qual e quando e o proximo.", 
                    es = "Gana dinero rapidamente en uno de nuestros eventos CnR. Usa /cnrtime para ver cuando es el proximo." 
            }, 
            USEFUL_MESSAGES_11 = { 
                    en_US = "Most server information can be found by pressing F9", 
                    pt_BR = "A maior parte da informacao do servidor pode ser encontrada pressionando F9", 
                    es = "Mas informacion del servidor puede ser encontrada presionando F9" 
            }, 
            USEFUL_MESSAGES_12 = { 
                    en_US = "Forum: gtirpg.net | IRC: irc.gtirpg.net | TS3: ts3.gtirpg.net", 
                    pt_BR = "Forum: gtirpg.net | IRC: irc.gtirpg.net | TS3: ts3.gtirpg.net", 
                    es = "Foro: gtirpg.net | IRC: irc.gtirpg.net | TS3: ts3.gtirpg.net" 
            }, 
            USEFUL_MESSAGES_13 = { 
                    en_US = "Donate to help keep this server alive and kicking! Go to gtirpg.net/donate", 
                    pt_BR = "Doa para manter o servidor a funcionar! Visita gtirpg.net/donate", 
                    es = "¡Dona para mantener el servidor vivo y coleando! Ve a gtirpg.net/donate" 
            } 
    } 
      
    function getLanguages() 
            return languages or {} 
    end 
  

GTIlanguageTable/meta.xml

  
<meta> 
    <info author="Jack" name="Language Translator" description="Returns player's language for specific GUI" autostart="true"/> 
    <script src="languages.lua" type="shared"/> 
     
    <export function="getLanguages" type="shared"/> 
</meta> 
  

Link to comment
  • 2 weeks later...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...