mirror of https://github.com/vector-im/riot-web
				
				
				
			Add script to copy translations between files
So we can fill in missing translations from different dialects Use it to fill in missing strings in pt from pt_BRpull/21833/head
							parent
							
								
									24f1bd1460
								
							
						
					
					
						commit
						aab87233c3
					
				|  | @ -0,0 +1,46 @@ | |||
| #!/usr/bin/env python | ||||
| 
 | ||||
| import json | ||||
| import sys | ||||
| import os | ||||
| 
 | ||||
| if len(sys.argv) < 3: | ||||
|     print "Usage: %s <source> <dest>" % (sys.argv[0],) | ||||
|     print "eg. %s pt_BR.json pt.json" % (sys.argv[0],) | ||||
|     print | ||||
|     print "Adds any translations to <dest> that exist in <source> but not <dest>" | ||||
|     sys.exit(1) | ||||
| 
 | ||||
| srcpath = sys.argv[1] | ||||
| dstpath = sys.argv[2] | ||||
| tmppath = dstpath + ".tmp" | ||||
| 
 | ||||
| with open(srcpath) as f: | ||||
|     src = json.load(f) | ||||
| 
 | ||||
| with open(dstpath) as f: | ||||
|     dst = json.load(f) | ||||
| 
 | ||||
| toAdd = {} | ||||
| for k,v in src.iteritems(): | ||||
|     if k not in dst: | ||||
|         print "Adding %s" % (k,) | ||||
|         toAdd[k] = v | ||||
| 
 | ||||
| # don't just json.dumps as we'll probably re-order all the keys (and they're | ||||
| # not in any given order so we can't just sort_keys). Append them to the end. | ||||
| with open(dstpath) as ifp: | ||||
|     with open(tmppath, 'w') as ofp: | ||||
|         for line in ifp: | ||||
|             strippedline = line.strip() | ||||
|             if strippedline in ('{', '}'): | ||||
|                 ofp.write(line) | ||||
|             elif strippedline.endswith(','): | ||||
|                 ofp.write(line) | ||||
|             else: | ||||
|                 ofp.write('    '+strippedline) | ||||
|                 ofp.write(",\n") | ||||
|                 toAddStr = json.dumps(toAdd, indent=4, separators=(',', ': '), ensure_ascii=False, encoding="utf8")[1:-1] | ||||
|                 ofp.write(toAddStr.encode('utf8')) | ||||
| 
 | ||||
| os.rename(tmppath, dstpath) | ||||
|  | @ -875,5 +875,95 @@ | |||
|     "Tagged as: ": "Marcado como: ", | ||||
|     "You have <a>disabled</a> URL previews by default.": "Você <a>desabilitou</a> pré-visualizações de links por padrão.", | ||||
|     "You have <a>enabled</a> URL previews by default.": "Você <a>habilitou</a> pré-visualizações de links por padrão.", | ||||
|     "You have entered an invalid contact. Try using their Matrix ID or email address.": "Você inseriu um contato inválido. Tente usar o ID Matrix ou endereço de e-mail da pessoa que está buscando." | ||||
|     "You have entered an invalid contact. Try using their Matrix ID or email address.": "Você inseriu um contato inválido. Tente usar o ID Matrix ou endereço de e-mail da pessoa que está buscando.", | ||||
| 
 | ||||
|     "You have been banned from %(roomName)s by %(userName)s.": "Você foi expulso(a) da sala %(roomName)s por %(userName)s.", | ||||
|     "Send anyway": "Enviar de qualquer maneira", | ||||
|     "This room": "Esta sala", | ||||
|     "Create new room": "Criar nova sala", | ||||
|     "Click on the button below to start chatting!": "Clique no botão abaixo para começar a conversar!", | ||||
|     "Disable markdown formatting": "Desabilitar formatação MarkDown", | ||||
|     "No display name": "Sem nome público de usuária(o)", | ||||
|     "This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Este será seu nome de conta no Servidor de Base <span></span>, ou então você pode escolher um <a>servidor diferente</a>.", | ||||
|     "Uploading %(filename)s and %(count)s others.one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", | ||||
|     "Hide removed messages": "Ocultar mensagens removidas", | ||||
|     "You may wish to login with a different account, or add this email to this account.": "Você pode querer fazer login com uma conta diferente, ou adicionar este e-mail a esta conta.", | ||||
|     "Welcome page": "Página de boas vindas", | ||||
|     "Upload new:": "Enviar novo:", | ||||
|     "Private Chat": "Conversa privada", | ||||
|     "You must <a>register</a> to use this functionality": "Você deve <a>se registrar</a> para poder usar esta funcionalidade", | ||||
|     "And %(count)s more...": "E mais %(count)s...", | ||||
|     "Start chatting": "Iniciar a conversa", | ||||
|     "Public Chat": "Conversa pública", | ||||
|     "Uploading %(filename)s and %(count)s others.zero": "Enviando o arquivo %(filename)s", | ||||
|     "Room contains unknown devices": "Esta sala contém dispositivos desconhecidos", | ||||
|     "Admin tools": "Ferramentas de administração", | ||||
|     "You have been kicked from %(roomName)s by %(userName)s.": "Você foi removido(a) da sala %(roomName)s por %(userName)s.", | ||||
|     "Undecryptable": "Não é possível descriptografar", | ||||
|     "Incoming video call from %(name)s": "Chamada de vídeo de %(name)s recebida", | ||||
|     "Otherwise, <a>click here</a> to send a bug report.": "Caso contrário, <a>clique aqui</a> para enviar um relatório de erros.", | ||||
|     "To link to a room it must have <a>an address</a>.": "Para produzir um link para uma sala, ela necessita ter <a>um endereço</a>.", | ||||
|     "a room": "uma sala", | ||||
|     "Your home server does not support device management.": "O seu Servidor de Base não suporta o gerenciamento de dispositivos.", | ||||
|     "Searching known users": "Buscando pessoas conhecidas", | ||||
|     "Alias (optional)": "Apelido (opcional)", | ||||
|     "Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)", | ||||
|     "Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Não foi possível garantir que o endereço para o qual este convite foi enviado bate com alqum que está associado com sua conta.", | ||||
|     "Error: Problem communicating with the given homeserver.": "Erro: problema de comunicação com o Servidor de Base fornecido.", | ||||
|     "Failed to upload profile picture!": "Falha ao enviar a imagem de perfil!", | ||||
|     "This invitation was sent to an email address which is not associated with this account:": "Este convite foi enviado para um endereço de e-mail que não é associado a esta conta:", | ||||
|     "Show Text Formatting Toolbar": "Exibir barra de formatação de texto", | ||||
|     "Room directory": "Lista pública de salas", | ||||
|     "Failed to fetch avatar URL": "Falha ao obter a URL da imagem de perfil", | ||||
|     "Incoming call from %(name)s": "Chamada de %(name)s recebida", | ||||
|     "Last seen": "Último uso", | ||||
|     "Drop File Here": "Arraste o arquivo aqui", | ||||
|     "Start Chatting": "Iniciar a conversa", | ||||
|     "Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Você gostaria de <acceptText>aceitar</acceptText> ou <declineText>recusar</declineText> este convite?", | ||||
|     "Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s em %(dateTime)s", | ||||
|     "Verified": "Verificado", | ||||
|     "%(roomName)s does not exist.": "%(roomName)s não existe.", | ||||
|     "Enable Notifications": "Habilitar notificações", | ||||
|     "Username not available": "Nome de usuária(o) indisponível", | ||||
|     "Encrypted by a verified device": "Criptografado por um dispositivo verificado", | ||||
|     "(~%(count)s results).other": "(~%(count)s resultados)", | ||||
|     "unknown caller": "a pessoa que está chamando é desconhecida", | ||||
|     "Start authentication": "Iniciar autenticação", | ||||
|     "(~%(count)s results).one": "(~%(count)s resultado)", | ||||
|     "New Password": "Nova senha", | ||||
|     "Username invalid: %(errMessage)s": "Nome de usuária(o) inválido: %(errMessage)s", | ||||
|     "Disable Notifications": "Desabilitar notificações", | ||||
|     "%(count)s new messages.one": "%(count)s nova mensagem", | ||||
|     "Device Name": "Nome do dispositivo", | ||||
|     "Incoming voice call from %(name)s": "Chamada de voz de %(name)s recebida", | ||||
|     "If you already have a Matrix account you can <a>log in</a> instead.": "Se você já tem uma conta Matrix, pode também fazer <a>login</a>.", | ||||
|     "Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Não foi possível conectar ao Servidor de Base. Por favor, confira sua conectividade à internet, garanta que o <a>certificado SSL do Servidor de Base</a> é confiável, e que uma extensão do navegador não esteja bloqueando as requisições de rede.", | ||||
|     "Encrypted by an unverified device": "Criptografado por um dispositivo não verificado", | ||||
|     "Set": "Definir", | ||||
|     "Unencrypted message": "Mensagem não criptografada", | ||||
|     "Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Participar por <voiceText>voz</voiceText> ou por <videoText>vídeo</videoText>.", | ||||
|     "Uploading %(filename)s and %(count)s others.other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", | ||||
|     "Username available": "Nome de usuária(o) disponível", | ||||
|     "Close": "Fechar", | ||||
|     "Level:": "Nível:", | ||||
|     "%(count)s new messages.other": "%(count)s novas mensagens", | ||||
|     "Unverified": "Não verificado", | ||||
|     "<a>Click here</a> to join the discussion!": "<a>Clique aqui</a> para participar da conversa!", | ||||
|     "Decline": "Recusar", | ||||
|     "Custom": "Personalizado", | ||||
|     "Add": "Adicionar", | ||||
|     "%(user)s is a": "%(user)s é um(a)", | ||||
|     "Unnamed Room": "Sala sem nome", | ||||
|     "The phone number entered looks invalid": "O número de telefone inserido parece ser inválido", | ||||
|     "Rejoin": "Voltar a participar da sala", | ||||
|     "Create a new chat or reuse an existing one": "Criar uma nova conversa ou reutilizar alguma já existente", | ||||
|     "<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Reenviar todas</a> ou <a>cancelar todas</a> agora. Você também pode selecionar mensagens individuais que queira reenviar ou cancelar.", | ||||
|     "Reason: %(reasonText)s": "Justificativa: %(reasonText)s", | ||||
|     "Home": "Início", | ||||
|     "Something went wrong!": "Algo deu errado!", | ||||
|     "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (nível de permissão %(powerLevelNumber)s)", | ||||
|     "Start chat": "Iniciar conversa pessoal", | ||||
|     "You already have existing direct chats with this user:": "Você já tem conversas pessoais com esta pessoa:", | ||||
|     "Accept": "Aceitar", | ||||
|     "%(roomName)s is not accessible at this time.": "%(roomName)s não está acessível neste momento." | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Baker
						David Baker