From 465a92207bb71181ed4859ccf37953bad14d3b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9?= <42449362+WarNote@users.noreply.github.com> Date: Thu, 2 Jul 2020 22:08:06 -0300 Subject: [PATCH] Brazilian portuguese translation This translation i made by hand and it's not 100% literal i adapted one thing here another there. I really would appreciate someone revising my work because i believe it's not so good. --- languages/pt-BR.js | 201 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 languages/pt-BR.js diff --git a/languages/pt-BR.js b/languages/pt-BR.js new file mode 100644 index 00000000..2c7a72bd --- /dev/null +++ b/languages/pt-BR.js @@ -0,0 +1,201 @@ +const { Language, util } = require('klasa'); + +module.exports = class extends Language { + constructor(...args) { + super(...args, { enabled: true }); + + this.language = { + DEFAULT: (key) => `${key} não foi encotrada para pt-BR ainda.`, + DEFAULT_LANGUAGE: 'Idioma padrão', + PREFIX_REMINDER: (prefix = `@${this.client.user.tag}`) => (Array.isArray(prefix) + ? `Os prefixos para esta guilda são: ${prefix.map((pre) => `\`${pre}\``).join(', ')}` + : ` O prefixo para esta guilda é: \`${prefix}\`` + ), + SETTING_GATEWAY_EXPECTS_GUILD: 'O parâmetro \'\' espera tanto uma Guilda ou um \'Guild Object\'.', + SETTING_GATEWAY_VALUE_FOR_KEY_NOEXT: (data, key) => `O valor ${data} para a chave ${key} não existe.`, + SETTING_GATEWAY_VALUE_FOR_KEY_ALREXT: (data, key) => `O valor ${data} para a chave ${key} já existe.`, + SETTING_GATEWAY_SPECIFY_VALUE: 'Você deve especificar o valor para adicionar no filtro.', + SETTING_GATEWAY_KEY_NOT_ARRAY: (key) => `A chave ${key} não é um 'array'.`, + SETTING_GATEWAY_KEY_NOEXT: (key) => `A chave ${key} não existe no esquema atual.`, + SETTING_GATEWAY_INVALID_TYPE: 'O tipo do parâmetro deve ser tanto um \'add\' ou \'remove\'.', + SETTING_GATEWAY_INVALID_FILTERED_VALUE: (piece, value) => `${piece.key} não aceita o valor: ${value}`, + RESOLVER_MULTI_TOO_FEW: (name, min = 1) => `Forneceu poucos ${name}s. Pelo menos ${min} ${min === 1 ? 'é requirido' : 'são requiridos'}.`, + RESOLVER_INVALID_BOOL: (name) => `${name} deve ser 'true' ou 'false'.`, + RESOLVER_INVALID_CHANNEL: (name) => `${name} deve ser um 'channel tag' ou um id de canal válido.`, + RESOLVER_INVALID_CUSTOM: (name, type) => `${name} deve ser um válido ${type}.`, + RESOLVER_INVALID_DATE: (name) => `${name} deve ser uma data válida.`, + RESOLVER_INVALID_DURATION: (name) => `${name} deve ser uma válida 'duration string'.`, + RESOLVER_INVALID_EMOJI: (name) => `${name} deve ser um 'emoji tag' customizado ou um válido id de emoji.`, + RESOLVER_INVALID_FLOAT: (name) => `${name} deve ser um número válido.`, + RESOLVER_INVALID_GUILD: (name) => `${name} deve ser um 'guild id' válido.`, + RESOLVER_INVALID_INT: (name) => `${name} deve ser um inteiro.`, + RESOLVER_INVALID_LITERAL: (name) => `Sua opção não correspondeu a única possível: ${name}`, + RESOLVER_INVALID_MEMBER: (name) => `${name} deve ser uma menção ou um id de usuário válido.`, + RESOLVER_INVALID_MESSAGE: (name) => `${name} deve ser um id de mensagem válido`, + RESOLVER_INVALID_PIECE: (name, piece) => `${name} deve ser um nome ${piece} válido.`, + RESOLVER_INVALID_REGEX_MATCH: (name, pattern) => `${name} deve seguir este padrão de regex \`${pattern}\`.`, + RESOLVER_INVALID_ROLE: (name) => `${name} deve ser uma menção de cargo ou um id.`, + RESOLVER_INVALID_STRING: (name) => `${name} deve ser uma 'string' válida.`, + RESOLVER_INVALID_TIME: (name) => `${name} deve ser uma duração válida ou 'date string'.`, + RESOLVER_INVALID_URL: (name) => `${name} deve ser uma url válida.`, + RESOLVER_INVALID_USER: (name) => `${name} deve ser uma menção ou um id de usuário válido.`, + RESOLVER_STRING_SUFFIX: ' caracteres', + RESOLVER_MINMAX_EXACTLY: (name, min, suffix) => `${name} deve ser exatamente ${min}${suffix}.`, + RESOLVER_MINMAX_BOTH: (name, min, max, suffix) => `${name} deve estar entre ${min} e ${max}${suffix}.`, + RESOLVER_MINMAX_MIN: (name, min, suffix) => `${name} deve ser maior que ${min}${suffix}.`, + RESOLVER_MINMAX_MAX: (name, max, suffix) => `${name} deve ser menor que ${max}${suffix}.`, + REACTIONHANDLER_PROMPT: 'Para qual página você gostaria de ir?', + COMMANDMESSAGE_MISSING: 'Faltando um ou mais argumentos ao fim do comando.', + COMMANDMESSAGE_MISSING_REQUIRED: (name) => `${name} é um argumente necessário.`, + COMMANDMESSAGE_MISSING_OPTIONALS: (possibles) => `Faltando as seguintes opções: (${possibles})`, + COMMANDMESSAGE_NOMATCH: (possibles) => `Sua opção não correspondeu com nenhuma das possibilidades: (${possibles})`, + MONITOR_COMMAND_HANDLER_REPROMPT: (tag, error, time, abortOptions) => ( + `${tag} | **${error}** | Você tem **${time}** segundos para responder para este 'prompt' com um argumento válido.` + + ` Digite **${abortOptions.join('**, **')}** para abortar este 'prompt'.`), + MONITOR_COMMAND_HANDLER_REPEATING_REPROMPT: (tag, name, time, cancelOptions) => ( + `${tag} | **${name}** é um argumento repetido | Você tem **${time}** segundos para responder para este` + + ` 'prompt' com argumentos válidos adicionais. Digite **${cancelOptions.join('**, **')}** para cancelar` + + 'este \'prompt\'.'), + MONITOR_COMMAND_HANDLER_ABORTED: 'Abortado', + INHIBITOR_COOLDOWN: (remaining, guildCooldown) => ( + `${guildCooldown ? 'Alguém' : 'Você'} já utilizou este comando. Você poderá o utilizar` + + ` novamente em ${remaining} segundo${remaining === 1 ? '' : 's'}.`), + INHIBITOR_DISABLED_GUILD: 'Este comando foi desabilitado por um administrador desta guilda.', + INHIBITOR_DISABLED_GLOBAL: 'Este comando foi desabilitado globalmente pelo dono do bot.', + INHIBITOR_MISSING_BOT_PERMS: (missing) => `Permissões insuficientes, faltando: **${missing}**`, + INHIBITOR_NSFW: 'Você pode apenas usar comandos \'NSFW\' em canais \'NSFW\'.', + INHIBITOR_PERMISSIONS: 'Você não tem permissão para utilizar este comando.', + INHIBITOR_REQUIRED_SETTINGS: (settings) => (`A guilda está faltando ${settings.length !== 1 ? 'as configuraçãos' : 'a configuração'}` + + `**${settings.join(', ')}** e por isso este comando não irá rodar.`), + INHIBITOR_RUNIN: (types) => `Este comando está apenas disponível em canais do tipo ${types}.`, + INHIBITOR_RUNIN_NONE: (name) => `O comando ${name} não está configurado para rodar em qualquer canal.`, + COMMAND_BLACKLIST_DESCRIPTION: '\'Blacklists\' ou \'un-blacklists\' de usuários e guildas do bot.', + COMMAND_BLACKLIST_SUCCESS: (usersAdded, usersRemoved, guildsAdded, guildsRemoved) => [ + usersAdded.length ? `**Usuários adicionados**\n${util.codeBlock('', usersAdded.join(', '))}` : '', + usersRemoved.length ? `**Usuários removidos**\n${util.codeBlock('', usersRemoved.join(', '))}` : '', + guildsAdded.length ? `**Guildas adicionadas**\n${util.codeBlock('', guildsAdded.join(', '))}` : '', + guildsRemoved.length ? `**Guildas removidas**\n${util.codeBlock('', guildsRemoved.join(', '))}` : '', + ].filter((val) => val !== '').join('\n'), + COMMAND_EVAL_DESCRIPTION: 'Avalia código Javascript arbitrariamente. Reservado apenas para o dono do bot.', + COMMAND_EVAL_EXTENDEDHELP: [ + 'O comando eval avalia código do jeito que está, qualquer erro providenciado será tratado.', + 'Também usa o recurso de \'flags\'. Write --silent, --depth=number ou --async para customizar o resultado.', + 'A \'flag\'--silent fará com resultado seja não seja mostrado.', + 'A \'flag\' --depth aceita um número, por exemplo, --depth=2, para customizar \'util.inspect\'s depth\'.', + 'A \'flag\' --async transformará o código um uma função async onde você pode utilizar \'await\', porém, se você não quiser retornar o resultado, você irá precisar a palavra reservada \'return\'.', + 'A \'flag\' --showHidden irá habilitar a opção \'showHidden\' em \'util.inspect\'.', + 'Caso o resultado seja muito grande, o resultado será mandado como arquivo, ou no console caso o bot não tiver a permissão \'ATTACH_FILES\'.', + ].join('\n'), + COMMAND_EVAL_ERROR: (time, output, type) => `**Erro**:${output}\n**Tipo**:${type}\n${time}`, + COMMAND_EVAL_OUTPUT: (time, output, type) => `**Resultado**:${output}\n**Tipo**:${type}\n${time}`, + COMMAND_EVAL_SENDFILE: (time, type) => `Resultado era muito grande... foi enviado como arquivo.\n**Type**:${type}\n${time}`, + COMMAND_EVAL_SENDCONSOLE: (time, type) => `Resultado era muito grande... foi enviado no console.\n**Type**:${type}\n${time}`, + COMMAND_UNLOAD: (type, name) => `✅ Descarregado ${type}: ${name}`, + COMMAND_UNLOAD_DESCRIPTION: 'Descarrega um \'klasa piece\'.', + COMMAND_UNLOAD_WARN: 'Você provavelmente não quer desabilitar isto, já que você não poderia rodar um comando para a habilitar novamente', + COMMAND_TRANSFER_ERROR: '❌ Este arquivo já fora transferido ou nunca existiu.', + COMMAND_TRANSFER_SUCCESS: (type, name) => `✅ Transferido com sucesso ${type}: ${name}.`, + COMMAND_TRANSFER_FAILED: (type, name) => `Transferência de ${type}: ${name} para o 'Client' falhou. Por favor cheque seu console.`, + COMMAND_TRANSFER_DESCRIPTION: 'Transfere um \'core piece\' para sua respectiva pasta.', + COMMAND_RELOAD: (type, name, time) => `✅ Recarregado ${type}: ${name}. (Demorou: ${time})`, + COMMAND_RELOAD_FAILED: (type, name) => `❌ Falhou para recarregar ${type}: ${name}. Por favor cheque seu console.`, + COMMAND_RELOAD_ALL: (type, time) => `✅ Recerrado todos ${type}. (Demorou: ${time})`, + COMMAND_RELOAD_EVERYTHING: (time) => `✅ Recarregado tudo. (Demorou: ${time})`, + COMMAND_RELOAD_DESCRIPTION: 'Recarregado um \'klasa piece\', ou todos \'pieces\' de uma \'klasa store\'.', + COMMAND_REBOOT: 'Reiniciando...', + COMMAND_REBOOT_DESCRIPTION: 'Reinicia o bot.', + COMMAND_LOAD: (time, type, name) => `✅ Carregado com sucesso ${type}: ${name}. (Demorou: ${time})`, + COMMAND_LOAD_FAIL: 'O arquivo não existe, ou ocorreu um erro ao carregar o arquivo. Por favor cheque seu console.', + COMMAND_LOAD_ERROR: (type, name, error) => `❌ Falha ao carregar ${type}: ${name}. Motivo:${util.codeBlock('js', error)}`, + COMMAND_LOAD_DESCRIPTION: 'Carrega um \'piece\' de seu bot.', + COMMAND_PING: 'Ping?', + COMMAND_PING_DESCRIPTION: 'Roda um teste de conexão com o Discord.', + COMMAND_PINGPONG: (diff, ping) => `Pong! (Volta completa demorou: ${diff}ms. Batimento cardíaco: ${ping}ms.)`, + COMMAND_INVITE: () => [ + `Para adicionar ${this.client.user.username} para sua guilda do discord:`, + `<${this.client.invite}>`, + util.codeBlock('', [ + 'O link acima é gerado requirindo o mínimo de permissões para utilizar todos os comandos atualmente.', + 'Eu sei nem todas as permissões estão certas para todas as guilds, então não fique com medo de retirar o que achar necessário.', + 'Se você tentar usar um comando que precisa de mais permissão do que o bot tem, ele irá lhe informar.', + ].join(' ')), + 'Por favor registre um \'issue\' em caso você encontre algum bug.', + ], + COMMAND_INVITE_DESCRIPTION: 'Mostra o link de vonite do bot, para o convidálo para sua guilda.', + COMMAND_INFO: [ + 'Klasa é um framework \'plug-and-play\' construído em cima do \'Discord.js library\'.', + 'A maioria dos comandos é modularizado, que permite desenvolvedores editar o \'Klasa\' para servir a suas necessidades.', + '', + 'Algums recursos do Klasa incluem:', + '• 🐇💨 Carregamento rápido com o suporte de ES2017 (`async`/`await`)', + '• 🎚🎛 Configurações por cliente/guilda/usuário que podem ser estendidas com seus próprios campos', + '• 💬 Sistema de comandos customizáveis com resolução de parâmetros automatizados e a habilidade de carregar/recarregar comandos \'on-the-fly\'', + '• 👀 "Monitors", os quais podem monitorar mensagens e edições (para filtro de palavrões, proteção contra spam, etc.)', + '• ⛔ "Inhibitors", os quais previnem comandos de rudar baseado em quaisquer condições que você aplicar (for permissions, blacklists, etc.)', + '• 🗄 "Providers", os quais simplificam de qualquer \'database\' de sua escolha', + '• ✅ "Finalizers", os quais rodam após um comando bem-sucedido (para logging, armazenar status, limpando respostas, etc.)', + '• ➕ "Extendables", os quais passivamente adicionam métodos, \'getters/setters\', ou \'static properties\' para uma classe existente do Discord.js ou Klasa', + '• 🌐 "Languages", as quais o permitem a modificar o idioma das respostas de seu bot', + '• ⏲ "Tasks", as quais podem ser agendadas para rodar no futuro, opicionalmente repetidamente', + '', + 'Nós esperamos que o framework seja 100% customizável para que possa atendar a todas as audiências. Nós frequentemente atualizamos e corrigimos bugs quando disponível.', + 'Se estiver interessado, confira https://klasa.js.org', + ], + COMMAND_INFO_DESCRIPTION: 'Provê algumas informações sobre este bot.', + COMMAND_HELP_DESCRIPTION: 'Mostra ajuda para algum comando.', + COMMAND_HELP_NO_EXTENDED: 'Nenhuma ajuda extendida disponível.', + COMMAND_HELP_DM: '📥 | A lista de comandos os quais você tem acesso foi enviada no seu privado.', + COMMAND_HELP_NODM: '❌ | Você tem as mensagens privadas desabilitadas para este servidor então não consegui lhe enviar os comandos em seu privado.', + COMMAND_HELP_USAGE: (usage) => `Uso :: ${usage}`, + COMMAND_HELP_EXTENDED: 'Uso extendido ::', + COMMAND_ENABLE: (type, name) => `+ Habilitado com sucesso ${type}: ${name}`, + COMMAND_ENABLE_DESCRIPTION: 'Rehabilita ou temporiariamente habilita um comando/inibidor/monitor/finalisador. Estado padrão é restaurado no reinício.', + COMMAND_DISABLE: (type, name) => `+ Desabilitado com sucesso ${type}: ${name}`, + COMMAND_DISABLE_DESCRIPTION: 'Desabilita novamente ou temporiariamente desabilita um comando/inibidor/monitor/finalisador/evento. Estado padrão é restaurado no reinício.', + COMMAND_DISABLE_WARN: 'Você provavelmente não quer desabilitar aquilo, ' + + 'já que você não conseguiria rodar nenhum comando para habilitar novamente', + COMMAND_CONF_NOKEY: 'Você deve fornecer uma chave', + COMMAND_CONF_NOVALUE: 'Você deve fornecer um valor', + COMMAND_CONF_GUARDED: (name) => `${util.toTitleCase(name)} não pode ser desabilitado.`, + COMMAND_CONF_UPDATED: (key, response) => `Chave atualizada com sucesso **${key}**: \`${response}\``, + COMMAND_CONF_KEY_NOT_ARRAY: 'Esta chave não é um array. Ao invés utilize a ação \'reset\'.', + COMMAND_CONF_GET_NOEXT: (key) => `A chave **${key}** não parece que existe.`, + COMMAND_CONF_GET: (key, value) => `O valor da chave **${key}** é: \`${value}\``, + COMMAND_CONF_RESET: (key, response) => `A chave **${key}** foi restada para: \`${response}\``, + COMMAND_CONF_NOCHANGE: (key) => `O valor para **${key}** já era anteriormente o mesmo valor.`, + COMMAND_CONF_SERVER_DESCRIPTION: 'Define configurações por guild.', + COMMAND_CONF_SERVER: (key, list) => `**Configurações de guild${key}**\n${list}`, + COMMAND_CONF_USER_DESCRIPTION: 'Define configurações por usuário.', + COMMAND_CONF_USER: (key, list) => `**Configurações do usuário${key}**\n${list}`, + COMMAND_STATS: (...statsArgs) => { + const [ + memUsage, + uptime, + users, + guilds, + channels, + klasaVersion, + discordVersion, + processVersion, + message, + ] = statsArgs; + return [ + '= Estatísticas =', + '', + `• Uso de ram :: ${memUsage} MB`, + `• Uptime :: ${uptime}`, + `• Usuários :: ${users}`, + `• Servidores :: ${guilds}`, + `• Canais :: ${channels}`, + `• Klasa :: v${klasaVersion}`, + `• Discord.js :: v${discordVersion}`, + `• Node.js :: ${processVersion}`, + `• Shard :: ${(message.guild ? message.guild.shardID : 0) + 1} / ${this.client.options.totalShardCount}`, + ]; + }, + COMMAND_STATS_DESCRIPTION: 'Provê alguns detalhes sobre o bot e seu estado.', + MESSAGE_PROMPT_TIMEOUT: 'O prompt expirou.', + TEXT_PROMPT_ABORT_OPTIONS: ['abort', 'stop', 'cancel'], + }; + } +};