diff --git a/CHANGELOG.md b/CHANGELOG.md index 644be1c35..9002860d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ * faster load time, less junk on the server * `AppConfig.allowDrivelessMode` * cursor color is randomly generated each time and doesn't persist after creating a drive + * only affects framework apps for now * secure iframe now always knows the channel of the related document * more consistent API with other APPs * debug app doesn't create a drive diff --git a/lib/hk-util.js b/lib/hk-util.js index da08fcd8b..860435c86 100644 --- a/lib/hk-util.js +++ b/lib/hk-util.js @@ -677,6 +677,7 @@ const handleGetHistory = function (Env, Server, seq, userId, parsed) { err: err && err.message || err, stack: err && err.stack, }); } + // FIXME err.message isn't useful for users const parsedMsg = {error:err.message, channel: channelName, txid: txid}; Server.send(userId, [0, HISTORY_KEEPER_ID, 'MSG', userId, JSON.stringify(parsedMsg)]); return; diff --git a/scripts/find-html-translations.js b/scripts/find-html-translations.js new file mode 100644 index 000000000..fd5a01f54 --- /dev/null +++ b/scripts/find-html-translations.js @@ -0,0 +1,27 @@ +var EN = require("../www/common/translations/messages.json"); + +var simpleTags = [ + '
', + '
', +]; + +['a', 'b', 'em', 'p'].forEach(function (tag) { + simpleTags.push('<' + tag + '>'); + simpleTags.push(''); +}); + +Object.keys(EN).forEach(function (k) { + var s = EN[k]; + if (typeof(s) !== 'string') { return; } + var usesHTML; + + s.replace(/<.*?>/g, function (html) { + if (simpleTags.indexOf(html) !== -1) { return; } + usesHTML = true; + console.log("{%s}", html); + }); + + if (usesHTML) { + console.log("[%s] %s\n", k, s); + } +}); diff --git a/www/common/translations/messages.pt-br.json b/www/common/translations/messages.pt-br.json index d9ebe6794..bd78dbf1b 100644 --- a/www/common/translations/messages.pt-br.json +++ b/www/common/translations/messages.pt-br.json @@ -12,8 +12,8 @@ "kanban": "Kanban", "todo": "A Fazer", "contacts": "Contactos", - "sheet": "SpreadSheet (Beta)", - "teams": "" + "sheet": "Planilha (Beta)", + "teams": "Times" }, "button_newpad": "Novo bloco RTF", "button_newcode": "Novo bloco de código", @@ -26,7 +26,7 @@ "loading": "Carregando...", "error": "Erro", "saved": "Salvo", - "deleted": "Bloco deletado do seu CryptDrive", + "deleted": "Deletado", "disconnected": "Desconectado", "synchronizing": "Sincronizando", "reconnecting": "Reconectando...", @@ -260,32 +260,32 @@ "feedback_about": "If you're reading this, you were probably curious why CryptPad is requesting web pages when you perform certain actions", "feedback_privacy": "We care about your privacy, and at the same time we want CryptPad to be very easy to use. We use this file to figure out which UI features matter to our users, by requesting it along with a parameter specifying which action was taken.", "feedback_optout": "If you would like to opt out, visit your user settings page, where you'll find a checkbox to enable or disable user feedback", - "button_newkanban": "", + "button_newkanban": "Novo Kanban", "button_newsheet": "Nova Planilha", "padNotPinned": "Esse pad vai expirar depois de 3 meses de inatividade. {0}login{1} ou {2}registrar-se{3} para preservá-lo.", - "anonymousStoreDisabled": "", - "expiredError": "", - "deletedError": "", - "inactiveError": "", - "chainpadError": "", - "invalidHashError": "", - "errorCopy": "", - "errorRedirectToHome": "", - "newVersionError": "", - "deletedFromServer": "", - "mustLogin": "", - "disabledApp": "", - "realtime_unrecoverableError": "", - "typing": "", - "initializing": "", - "forgotten": "", - "errorState": "", - "userlist_offline": "", - "pinLimitReachedAlertNoAccounts": "", - "importButton": "", - "exportButton": "", - "saveTitle": "", - "forgetButton": "", + "anonymousStoreDisabled": "O webmaster desta instância do CryptPad desabilitou o armazenamento para usuários anônimos. Você precisa fazer login para habilitar o uso do CryptDrive.", + "expiredError": "Este pad alcançou o tempo de expiração e não está mais disponível.", + "deletedError": "Este documento foi deletado e não está mais disponível.", + "inactiveError": "Este pad foi deletado por inatividade. Tecle Esc para criar um novo pad.", + "chainpadError": "Um erro crítico ocorreu enquanto atualizava seu conteúdo. Esta página está em modo somente leitura para ter certeza de que você não perderá seu trabalho.
Tecle Esc para continuar vendo este pad, ou recarregue para tentar edita-lo novamente.", + "invalidHashError": "O documento requerido tem uma URL inválida.", + "errorCopy": " Você pode continuar usando esta versão em modo somente leitura teclando Esc.", + "errorRedirectToHome": "Tecle Esc para ser redirecionado para seu CryptDrive.", + "newVersionError": "Uma nova versão do CryptPad está disponível.
Recarregued para usar a nova versão, ou tecle Esc para acessar seu conteúdo em modo offline.", + "deletedFromServer": "Documento destruído", + "mustLogin": "Você precisa estar logado para acessar esta página", + "disabledApp": "Esta aplicação foi desabilitada. Contate o administrador deste CryptPad para mais informações.", + "realtime_unrecoverableError": "Um erro irrecuperável ocorreu. Click em OK para recarregar.", + "typing": "Editando", + "initializing": "Inicializando...", + "forgotten": "Movido para a lixeira", + "errorState": "Erro crítico: {0}", + "userlist_offline": "Você está desconectado, a lista do usuário não está disponível.", + "pinLimitReachedAlertNoAccounts": "Você alcançou o seu limite de armazenamento", + "importButton": "importar", + "exportButton": "Exportar", + "saveTitle": "Salve o título (enter)", + "forgetButton": "Deletar", "userListButton": "", "chatButton": "", "userAccountButton": "", @@ -357,5 +357,8 @@ "oo_cantUpload": "", "oo_uploaded": "", "canvas_opacityLabel": "", - "canvas_widthLabel": "" + "canvas_widthLabel": "", + "storageStatus": "Armazenamento:
{0} usados do total {1}", + "upgradeAccount": "Atualizar conta", + "padNotPinnedVariable": "Este pad vai expirar em {4} dias de inatividade, {0} faça login{1} ou {2}registre-se{3} para preserva-lo." }