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_BR
This commit is contained in:
parent
701242a36b
commit
89c7477bd6
2 changed files with 137 additions and 1 deletions
46
scripts/copy-i18n.py
Executable file
46
scripts/copy-i18n.py
Executable file
|
@ -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)
|
|
@ -871,5 +871,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 a new issue