From 77a13cffd6dabf480f514f37f39624dfe4ef39c8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 23 Mar 2021 04:52:32 +0100 Subject: [PATCH 1/4] Translated using Weblate (Portuguese (Brazil)) Currently translated at 22.8% (272 of 1189 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/pt_BR/ --- www/common/translations/messages.pt-br.json | 59 +++++++++++---------- 1 file changed, 31 insertions(+), 28 deletions(-) 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." } From 1179727d906885ec049e39e18e5b86410645dd24 Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 23 Mar 2021 09:24:07 +0530 Subject: [PATCH 2/4] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) 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 From 75f9459950729d04ba8ab5752dceed341226b5dc Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 23 Mar 2021 09:25:02 +0530 Subject: [PATCH 3/4] leave a FIXME in the server --- lib/hk-util.js | 1 + 1 file changed, 1 insertion(+) 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; From 774c6864d505fc55576d3482dcde9a6bbf45a95d Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 23 Mar 2021 10:58:06 +0530 Subject: [PATCH 4/4] identify translations with complex inline HTML --- scripts/find-html-translations.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 scripts/find-html-translations.js 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); + } +});