1
0
mirror of https://github.com/laurent22/joplin.git synced 2026-01-11 00:21:45 +02:00

Compare commits

..

16 Commits

Author SHA1 Message Date
Laurent Cozic
f3b708ff64 Exclude from search commands without a label 2020-10-18 21:50:42 +01:00
Laurent Cozic
fea85b39a0 Added command palette 2020-10-18 21:44:28 +01:00
Laurent Cozic
a53955a03d Converted GotoAnything to TypeScript 2020-10-18 19:08:59 +01:00
Laurent Cozic
8d61514f64 Fixed plugins 2020-10-18 18:58:11 +01:00
Laurent Cozic
c8f496b733 Updated plugin command interface 2020-10-18 15:19:27 +01:00
Laurent Cozic
c4414e3bee Updated plugin command interface 2020-10-18 15:17:18 +01:00
Laurent Cozic
89e7a3a65e Add description to commands 2020-10-18 14:53:28 +01:00
Laurent Cozic
b3bce34e9a Clean up menu bar 2020-10-18 14:30:36 +01:00
Laurent Cozic
d059aeebab Added way to validate enabledCondition keys 2020-10-18 14:24:51 +01:00
Laurent Cozic
910a5ad09d Simplified command service code further 2020-10-18 12:41:40 +01:00
Laurent Cozic
259dadb650 More refactoring 2020-10-18 01:55:16 +01:00
Laurent Cozic
4ce2bf492b Refactor to use When Clauses 2020-10-18 00:49:17 +01:00
Laurent Cozic
e635ee967a Renaming togglesidebar 2020-10-17 23:32:02 +01:00
Laurent Cozic
6a43f3be66 Various changes 2020-10-17 22:54:36 +01:00
Laurent Cozic
a4562a0a75 Renamed to when clause 2020-10-17 17:45:45 +01:00
Laurent Cozic
410a0f5d14 Refactor command system to use when clauses instead 2020-10-17 17:40:09 +01:00
28 changed files with 439 additions and 634 deletions

View File

@@ -180,7 +180,6 @@ ElectronClient/gui/SideBar/styles/index.js
ElectronClient/gui/StatusScreen/StatusScreen.js
ElectronClient/gui/style/StyledInput.js
ElectronClient/gui/style/StyledTextInput.js
ElectronClient/gui/TagList.js
ElectronClient/gui/ToggleEditorsButton/styles/index.js
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
ElectronClient/gui/ToolbarBase.js

1
.gitignore vendored
View File

@@ -174,7 +174,6 @@ ElectronClient/gui/SideBar/styles/index.js
ElectronClient/gui/StatusScreen/StatusScreen.js
ElectronClient/gui/style/StyledInput.js
ElectronClient/gui/style/StyledTextInput.js
ElectronClient/gui/TagList.js
ElectronClient/gui/ToggleEditorsButton/styles/index.js
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
ElectronClient/gui/ToolbarBase.js

View File

@@ -123,7 +123,6 @@ ElectronClient/gui/SideBar/styles/index.js
ElectronClient/gui/StatusScreen/StatusScreen.js
ElectronClient/gui/style/StyledInput.js
ElectronClient/gui/style/StyledTextInput.js
ElectronClient/gui/TagList.js
ElectronClient/gui/ToggleEditorsButton/styles/index.js
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
ElectronClient/gui/ToolbarBase.js

File diff suppressed because it is too large Load Diff

View File

@@ -2,29 +2,25 @@
# Copyright (C) 2017 Lucas Vieites
# Copyright (C) 2019 Andros Fenollosa
# Copyright (C) 2019 Germán Martín
# Copyright (C) 2020 Andros Fenollosa
# This file is distributed under the same license as the Joplin-CLI package.
# Lucas Vieites <lucas.vieites@gmail.com>, 2017.
# Andros Fenollosa <andros@fenollosa.email>, 2019.
# Germán Martín <gmag11@gmail.com>, 2019.
# Fernando Pindado <fpindado@gmail.com>, 2020.
# Andros Fenollosa <andros@fenollosa.email>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: Joplin-CLI 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Andros Fenollosa <andros@fenollosa.email>\n"
"Last-Translator: Fernando Pindado <fpindado@gmail.com>\n"
"Language-Team: Spanish <lucas.vieites@gmail.com>\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.1\n"
"X-Generator: Poedit 2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
#: ElectronClient/services/plugins/UserWebviewDialogButtonBar.js:20
#: ElectronClient/checkForUpdates.js:139
@@ -532,14 +528,12 @@ msgstr "Creando nuevo %s..."
#: ElectronClient/gui/NoteEditor/NoteEditor.js:373
msgid "The following attachments are being watched for changes:"
msgstr ""
"Los siguientes adjuntos están siendo vigilados para ver si hay cambios:"
#: ElectronClient/gui/NoteEditor/NoteEditor.js:376
msgid ""
"The attachments will no longer be watched when you switch to a different "
"note."
msgstr ""
"Los archivos adjuntos ya no se verán cuándo cambies a una nota diferente."
#: ElectronClient/gui/NoteEditor/NoteEditor.js:381
#, javascript-format
@@ -655,15 +649,12 @@ msgid ""
"may take a few minutes to complete and the app needs to be restarted. To "
"proceed please click on the link."
msgstr ""
"El objetivo de sincronización necesita ser actualizado antes de que Joplin "
"pueda sincronizarse. La operación puede tardar unos minutos en completarse y "
"la aplicación necesita ser reiniciada. Para proceder, por favor, haz clic en "
"el enlace."
#: ElectronClient/gui/MainScreen/MainScreen.js:416
#: ElectronClient/gui/MainScreen/MainScreen.min.js:306
#, fuzzy
msgid "Restart and upgrade"
msgstr "Reiniciar y actualizar"
msgstr "Claves maestras que necesitan actualización"
#: ElectronClient/gui/MainScreen/MainScreen.js:420
#: ElectronClient/gui/MainScreen/MainScreen.min.js:313
@@ -823,8 +814,9 @@ msgid "Toggle sidebar"
msgstr "Cambia la barra lateral"
#: ElectronClient/gui/MainScreen/commands/toggleEditors.js:17
#, fuzzy
msgid "Toggle editors"
msgstr "Intercambiar editores"
msgstr "Cambia el diseño del editor"
#: ElectronClient/gui/MainScreen/commands/selectTemplate.js:23
msgid "Template file:"
@@ -1329,8 +1321,9 @@ msgid "Import"
msgstr "Importar"
#: ElectronClient/gui/MenuBar.js:343
#, fuzzy
msgid "Export all"
msgstr "Exportar todo"
msgstr "Exportar"
#: ElectronClient/gui/MenuBar.js:356
#, javascript-format
@@ -1411,36 +1404,38 @@ msgstr "Adjuntos"
#: ElectronClient/gui/KeymapConfig/ShortcutRecorder.js:48
msgid "Press the shortcut"
msgstr "Presiona el atajo"
msgstr ""
#: ElectronClient/gui/KeymapConfig/ShortcutRecorder.js:48
msgid ""
"Press the shortcut and then press ENTER. Or, press BACKSPACE to clear the "
"shortcut."
msgstr ""
"Pulse el atajo y luego ENTER. O bien, pulse RETROCESO para borrar el atajo."
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:62
#: ReactNativeClient/lib/services/KeymapService.js:142
#, javascript-format
#, fuzzy, javascript-format
msgid "Error: %s"
msgstr "Error: %s"
msgstr "Error"
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:125
msgid "Command"
msgstr "Comando"
msgstr ""
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:126
#, fuzzy
msgid "Keyboard Shortcut"
msgstr "Atajo de teclado"
msgstr "Modo de teclado"
#: ElectronClient/gui/KeymapConfig/utils/getLabel.js:24
#, fuzzy
msgid "Hide Joplin"
msgstr "Ocultar Joplin"
msgstr "Acerca de Joplin"
#: ElectronClient/gui/KeymapConfig/utils/getLabel.js:28
#, fuzzy
msgid "Preferences"
msgstr "Preferencias"
msgstr "Preferencias..."
#: ElectronClient/gui/NoteContentPropertiesDialog.js:77
msgid "Words"
@@ -1485,8 +1480,6 @@ msgstr "Estadísticas"
msgid ""
"The app is now going to close. Please relaunch it to complete the process."
msgstr ""
"La aplicación se va a cerrar. Por favor, vuelva a iniciarla para completar "
"el proceso."
#: ElectronClient/app.js:340
#, javascript-format
@@ -1498,8 +1491,9 @@ msgid "Exit"
msgstr "Salir"
#: ElectronClient/commands/copyDevCommand.js:17
#, fuzzy
msgid "Copy dev mode command to clipboard"
msgstr "Copiar el comando del modo de desarrollo al portapapeles"
msgstr "Copiar la ruta en el portapapeles"
#: ElectronClient/commands/startExternalEditing.js:18
msgid "Edit in external editor"
@@ -1511,12 +1505,13 @@ msgid "Error opening note in editor: %s"
msgstr "Error abriendo la nota en el editor: %s"
#: ElectronClient/commands/toggleExternalEditing.js:16
#, fuzzy
msgid "Toggle external editing"
msgstr "Intercambiar la edición externa"
msgstr "Detener la edición externa"
#: ElectronClient/commands/toggleExternalEditing.js:42
msgid "Stop"
msgstr "Parar"
msgstr ""
#: ElectronClient/commands/stopExternalEditing.js:16
msgid "Stop external editing"
@@ -1745,7 +1740,7 @@ msgstr ""
#: CliClient/app/command-sync.js:35
msgid "Upgrade the sync target to the latest version."
msgstr "Actualiza el objetivo de sincronización a la última versión."
msgstr ""
#: CliClient/app/command-sync.js:105
#, javascript-format
@@ -2252,10 +2247,10 @@ msgstr ""
"No se puede cargar el módulo «%s» para el formato «%s» y destino \"%s\""
#: ReactNativeClient/lib/services/interop/InteropService.js:152
#, javascript-format
#, fuzzy, javascript-format
msgid "Cannot load \"%s\" module for format \"%s\" and target \"%s\""
msgstr ""
"No se puede cargar el módulo %s para el formato %s y el objetivo “%s”"
"No se puede cargar el módulo «%s» para el formato «%s» y destino \"%s\""
#: ReactNativeClient/lib/services/interop/InteropService.js:187
#, javascript-format
@@ -2272,23 +2267,23 @@ msgstr "Notas restauradas"
#: ReactNativeClient/lib/services/KeymapService.js:236
msgid "command"
msgstr "comando"
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:236
#: ReactNativeClient/lib/services/KeymapService.js:241
#, javascript-format
msgid "\"%s\" is missing the required \"%s\" property."
msgstr "A “%s” le falta la propiedad requerida de “%s”."
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:241
#: ReactNativeClient/lib/services/KeymapService.js:248
msgid "accelerator"
msgstr "acelerador"
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:248
#, javascript-format
#, fuzzy, javascript-format
msgid "Invalid %s: %s."
msgstr "Inválido %s: %s."
msgstr "Respuesta inválida: %s"
#: ReactNativeClient/lib/services/KeymapService.js:266
#, javascript-format
@@ -2296,13 +2291,11 @@ msgid ""
"Accelerator \"%s\" is used for \"%s\" and \"%s\" commands. This may lead to "
"unexpected behaviour."
msgstr ""
"El acelerador “%s” se usa para los comandos “%s” y “%s”. Esto puede llevar a "
"un comportamiento inesperado."
#: ReactNativeClient/lib/services/KeymapService.js:291
#, javascript-format
msgid "Accelerator \"%s\" is not valid."
msgstr "El acelerador “%s” no es válido."
msgstr ""
#: ReactNativeClient/lib/services/report.js:121
msgid "Items that cannot be synchronised"
@@ -2452,7 +2445,7 @@ msgstr "Versión del perfil: %s"
#: ReactNativeClient/lib/versionInfo.js:23
#, javascript-format
msgid "Keychain Supported: %s"
msgstr "Llavero soportado: %s"
msgstr ""
#: ReactNativeClient/lib/JoplinServerApi.js:71
#, javascript-format
@@ -2856,7 +2849,7 @@ msgstr "Añadir título"
#: ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js:42
msgid "Sync Target Upgrade"
msgstr "Actualización del objetivo de sincronización"
msgstr ""
#: ReactNativeClient/lib/components/screens/encryption-config.js:119
#, javascript-format
@@ -2948,8 +2941,6 @@ msgstr ""
#: ReactNativeClient/lib/components/screen-header.js:453
msgid "The sync target needs to be upgraded. Press this banner to proceed."
msgstr ""
"El objetivo de sincronización necesita ser mejorado. Presiona este banner "
"para proceder."
#: ReactNativeClient/lib/components/side-menu-content.js:126
#, javascript-format
@@ -3146,7 +3137,7 @@ msgstr "sí"
#: ReactNativeClient/lib/models/Setting.js:66
#, javascript-format
msgid "(wysiwyg: %s)"
msgstr "(wysiwyg: %s)"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:66
msgid "no"
@@ -3189,7 +3180,7 @@ msgstr "Nord"
#: ReactNativeClient/lib/models/Setting.js:80
msgid "Aritim Dark"
msgstr "Aritim Oscuro"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:81
msgid "OLED Dark"
@@ -3238,15 +3229,15 @@ msgstr "Contraseña de WebDAV"
#: ReactNativeClient/lib/models/Setting.js:214
msgid "AWS S3 bucket"
msgstr "AWS S3 bucket"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:225
msgid "AWS key"
msgstr "AWS key"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:235
msgid "AWS secret"
msgstr "AWS secret"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:247
msgid "Attachment download behaviour"
@@ -3704,8 +3695,9 @@ msgid "Web Clipper"
msgstr "Web Clipper"
#: ReactNativeClient/lib/models/Setting.js:1292
#, fuzzy
msgid "Keyboard Shortcuts"
msgstr "Atajos de teclado"
msgstr "Modo de teclado"
#: ReactNativeClient/lib/models/Setting.js:1299
msgid ""
@@ -3752,7 +3744,7 @@ msgstr "OneDrive"
#: ReactNativeClient/lib/SyncTargetAmazonS3.js:28
msgid "AWS S3"
msgstr "AWS S3"
msgstr ""
#: ReactNativeClient/lib/commands/historyForward.js:16
msgid "Forward"

View File

@@ -7,16 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: Joplin-CLI 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: João Duarte <jduar@protonmail.com>\n"
"Last-Translator: Diogo Caveiro \n"
"Language-Team: \n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.4.1\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"X-Generator: Poedit 2.2.4\n"
#: ElectronClient/services/plugins/UserWebviewDialogButtonBar.js:20
#: ElectronClient/checkForUpdates.js:139
@@ -114,28 +112,29 @@ msgid "Full Release Notes"
msgstr "Notas de Lançamento Completas"
#: ElectronClient/InteropServiceHelper.js:153
#, javascript-format
#, fuzzy, javascript-format
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "A exportar para \"%s\" com o formato \"%s\". Por favor, aguarde..."
msgstr "A importar de \"%s\" com o formato \"%s\". Por favor, aguarde..."
#: ElectronClient/InteropServiceHelper.js:170
#, javascript-format
#, fuzzy, javascript-format
msgid "Could not export notes: %s"
msgstr "Não foi possível exportar as notas: %s"
msgstr "Não foi possível atualizar a chave mestra: %s"
#: ElectronClient/plugins/GotoAnything.min.js:459
#, fuzzy
msgid ""
"Type a note title or part of its content to jump to it. Or type # followed "
"by a tag name, or @ followed by a notebook name."
msgstr ""
"Escreva um título de uma nota ou parte do seu conteúdo para saltar para o "
"mesmo. Ou digite # seguido de um nome de etiqueta, ou @ seguido de um nome "
"de um caderno."
"Digite um título de nota para avançar para o mesmo. Ou digite # seguido do "
"título de uma etiqueta, ou @ seguido do nome de um bloco de notas, ou / "
"seguido do conteúdo da nota."
#: ElectronClient/plugins/GotoAnything.min.js:499
#: ElectronClient/gui/KeymapConfig/utils/getLabel.js:20
msgid "Goto Anything..."
msgstr "Saltar para..."
msgstr "Ir até qualquer coisa..."
#: ElectronClient/gui/NoteListControls/commands/focusSearch.js:15
msgid "Search in all the notes"
@@ -179,9 +178,9 @@ msgid "Delete"
msgstr "Eliminar"
#: ElectronClient/gui/ResourceScreen.js:94
#, javascript-format
#, fuzzy, javascript-format
msgid "Delete attachment \"%s\"?"
msgstr "Eliminar anexo \"%s\"?"
msgstr "Eliminar nota \"%s\"?"
#: ElectronClient/gui/ResourceScreen.js:140
msgid ""
@@ -189,9 +188,6 @@ msgid ""
"notes. Please be careful when deleting one of them as they cannot be "
"restored afterwards."
msgstr ""
"Esta é uma ferramenta avançada para ver os anexos que estão ligados às suas "
"notas. Por favor tenha cuidado ao apagar um deles já que não poderão ser "
"repostos de seguida."
#: ElectronClient/gui/ResourceScreen.js:141
msgid "Please wait..."
@@ -199,13 +195,13 @@ msgstr "Por favor, aguarde..."
#: ElectronClient/gui/ResourceScreen.js:143
msgid "No resources!"
msgstr "Sem recursos!"
msgstr "Sem fontes!"
#: ElectronClient/gui/ResourceScreen.js:145
#, javascript-format
msgid "Warning: not all resources shown for performance reasons (limit: %s)."
msgstr ""
"Aviso: nem todos os recursos apresentadas por razões de desempenho (limite: "
"Aviso: nem todas as fontes apresentadas por razões de desempenho (limite: "
"%s)."
#: ElectronClient/gui/PromptDialog.min.js:249
@@ -431,11 +427,11 @@ msgstr "Anexar ficheiro"
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:584
msgid "Code Block"
msgstr "Bloco de Código"
msgstr ""
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:593
msgid "Inline Code"
msgstr "Código em Linha"
msgstr ""
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:608
#: ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js:83
@@ -444,12 +440,13 @@ msgstr "Inserir Data e Hora"
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:1030
msgid "Drop notes or files here"
msgstr "Insira notas ou ficheiros aqui"
msgstr ""
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:1030
#: ElectronClient/gui/MainScreen/MainScreen.min.js:419
#, fuzzy
msgid "Code View"
msgstr "Vista de Código"
msgstr "Código"
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js:1030
#, javascript-format
@@ -457,18 +454,18 @@ msgid ""
"Please wait for all attachments to be downloaded and decrypted. You may also "
"switch to %s to edit the note."
msgstr ""
"Por favor espere que todos os anexados sejam transferidos e desencriptados. "
"Também pode mudar para %s para editar a nota."
#: ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js:2151
#, fuzzy
msgid "Checkbox list"
msgstr "Lista de caixas de seleção"
msgstr "Campo de seleção"
#: ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js:165
msgid "strong text"
msgstr "texto destacado"
#: ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js:166
#, fuzzy
msgid "emphasised text"
msgstr "texto realçado"
@@ -529,14 +526,13 @@ msgstr "A criar novo/a %s..."
#: ElectronClient/gui/NoteEditor/NoteEditor.js:373
msgid "The following attachments are being watched for changes:"
msgstr "Os anexos seguintes estão a ser monitorizados quanto a alterações:"
msgstr ""
#: ElectronClient/gui/NoteEditor/NoteEditor.js:376
msgid ""
"The attachments will no longer be watched when you switch to a different "
"note."
msgstr ""
"Os anexos deixarão de ser monitorizados quando mudar para uma nota diferente."
#: ElectronClient/gui/NoteEditor/NoteEditor.js:381
#, javascript-format
@@ -553,7 +549,7 @@ msgstr "Guardar como..."
#: ElectronClient/gui/NoteEditor/utils/contextMenu.js:65
msgid "Reveal file in folder"
msgstr "Revelar arquivo na pasta"
msgstr ""
#: ElectronClient/gui/NoteEditor/utils/contextMenu.js:73
msgid "Copy path to clipboard"
@@ -653,15 +649,12 @@ msgid ""
"may take a few minutes to complete and the app needs to be restarted. To "
"proceed please click on the link."
msgstr ""
"O alvo de sincronização deve ser atualizado antes que o Joplin possa "
"sincronizar. A operação pode demorar alguns minutos a ser completa e a "
"aplicação precisará de ser reiniciada. Para proceder, por favor clique na "
"ligação."
#: ElectronClient/gui/MainScreen/MainScreen.js:416
#: ElectronClient/gui/MainScreen/MainScreen.min.js:306
#, fuzzy
msgid "Restart and upgrade"
msgstr "Reiniciar e atualizar"
msgstr "Chaves mestras que necessitam de atualização"
#: ElectronClient/gui/MainScreen/MainScreen.js:420
#: ElectronClient/gui/MainScreen/MainScreen.min.js:313
@@ -719,11 +712,11 @@ msgstr "Procurar..."
#: ElectronClient/gui/MainScreen/commands/moveToFolder.js:17
msgid "Move to notebook"
msgstr "Mudar para o caderno"
msgstr "Mudar para o bloco de notas"
#: ElectronClient/gui/MainScreen/commands/moveToFolder.js:36
msgid "Move to notebook:"
msgstr "Mudar para o caderno:"
msgstr "Mudar para o bloco de notas:"
#: ElectronClient/gui/MainScreen/commands/setTags.js:16
#: ElectronClient/gui/SideBar/SideBar.js:426
@@ -821,8 +814,9 @@ msgid "Toggle sidebar"
msgstr "Alternar a barra lateral"
#: ElectronClient/gui/MainScreen/commands/toggleEditors.js:17
#, fuzzy
msgid "Toggle editors"
msgstr "Alternar editores"
msgstr "Alternar a estrutura do editor"
#: ElectronClient/gui/MainScreen/commands/selectTemplate.js:23
msgid "Template file:"
@@ -830,7 +824,7 @@ msgstr "Ficheiro do modelo:"
#: ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js:16
msgid "Statistics..."
msgstr "Estatísticas..."
msgstr ""
#: ElectronClient/gui/EncryptionConfigScreen.min.js:96
#: ElectronClient/gui/KeymapConfig/ShortcutRecorder.js:49
@@ -1154,12 +1148,13 @@ msgstr ""
#: ElectronClient/gui/NoteList/NoteList.min.js:151
#: ElectronClient/gui/NoteList/NoteList.js:160
msgid "Custom order"
msgstr "Ordem personalizada"
msgstr ""
#: ElectronClient/gui/NoteList/NoteList.min.js:151
#: ElectronClient/gui/NoteList/NoteList.js:160
#, fuzzy
msgid "View"
msgstr "Ver"
msgstr "&Ver"
#: ElectronClient/gui/NoteList/NoteList.min.js:151
#: ElectronClient/gui/NoteList/NoteList.js:160
@@ -1174,13 +1169,12 @@ msgid ""
"To manually sort the notes, the sort order must be changed to \"%s\" in the "
"menu \"%s\" > \"%s\""
msgstr ""
"Para ordenar as notas manualmente, a ordem deve ser alterada para \"%s\" no "
"menu \"%s\" > \"%s\""
#: ElectronClient/gui/NoteList/NoteList.min.js:152
#: ElectronClient/gui/NoteList/NoteList.js:161
#, fuzzy
msgid "Do it now"
msgstr "Fazer agora"
msgstr "Obter agora:"
#: ElectronClient/gui/NoteList/NoteList.min.js:423
#: ElectronClient/gui/NoteList/NoteList.js:412
@@ -1293,8 +1287,9 @@ msgid "Options"
msgstr "Opções"
#: ElectronClient/gui/MenuBar.js:266
#, fuzzy
msgid "Note attachments..."
msgstr "Anexos das notas..."
msgstr "Anexos"
#: ElectronClient/gui/MenuBar.js:296 ElectronClient/gui/MenuBar.js:366
#: ElectronClient/gui/MenuBar.js:659
@@ -1325,8 +1320,9 @@ msgid "Import"
msgstr "Importar"
#: ElectronClient/gui/MenuBar.js:343
#, fuzzy
msgid "Export all"
msgstr "Exportar todos"
msgstr "Exportar"
#: ElectronClient/gui/MenuBar.js:356
#, javascript-format
@@ -1364,8 +1360,9 @@ msgid "Zoom Out"
msgstr "Reduzir"
#: ElectronClient/gui/MenuBar.js:516
#, fuzzy
msgid "&Note"
msgstr "&Nota"
msgstr "Nota"
#: ElectronClient/gui/MenuBar.js:525
msgid "&Tools"
@@ -1402,42 +1399,44 @@ msgid "Dropbox Login"
msgstr "Acesso Dropbox"
#: ElectronClient/gui/Root.js:105 ElectronClient/gui/Root.min.js:105
#, fuzzy
msgid "Note attachments"
msgstr "Anexos das notas"
msgstr "Anexos"
#: ElectronClient/gui/KeymapConfig/ShortcutRecorder.js:48
msgid "Press the shortcut"
msgstr "Prima o atalho"
msgstr ""
#: ElectronClient/gui/KeymapConfig/ShortcutRecorder.js:48
msgid ""
"Press the shortcut and then press ENTER. Or, press BACKSPACE to clear the "
"shortcut."
msgstr ""
"Prima o atalho e de seguida prima ENTER. Ou então, prima BACKSPACE para "
"apagar o atalho."
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:62
#: ReactNativeClient/lib/services/KeymapService.js:142
#, javascript-format
#, fuzzy, javascript-format
msgid "Error: %s"
msgstr "Erro: %s"
msgstr "Erro"
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:125
msgid "Command"
msgstr "Comando"
msgstr ""
#: ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js:126
#, fuzzy
msgid "Keyboard Shortcut"
msgstr "Atalhos de Teclado"
msgstr "Modo de Teclado"
#: ElectronClient/gui/KeymapConfig/utils/getLabel.js:24
#, fuzzy
msgid "Hide Joplin"
msgstr "Esconder o Joplin"
msgstr "Sobre o Joplin"
#: ElectronClient/gui/KeymapConfig/utils/getLabel.js:28
#, fuzzy
msgid "Preferences"
msgstr "Preferências"
msgstr "Preferências..."
#: ElectronClient/gui/NoteContentPropertiesDialog.js:77
msgid "Words"
@@ -1472,18 +1471,17 @@ msgstr "Visualizador"
#: ElectronClient/gui/NoteContentPropertiesDialog.js:106
#, javascript-format
msgid "Read time: %s min"
msgstr "Tempo de leitura: %s min"
msgstr ""
#: ElectronClient/gui/NoteContentPropertiesDialog.js:109
#, fuzzy
msgid "Statistics"
msgstr "Estatísticas"
msgstr "Estado"
#: ElectronClient/bridge.js:177
msgid ""
"The app is now going to close. Please relaunch it to complete the process."
msgstr ""
"A aplicação vai fechar. Por favor volte a executá-la para completar o "
"processo."
#: ElectronClient/app.js:340
#, javascript-format
@@ -1495,8 +1493,9 @@ msgid "Exit"
msgstr "Sair"
#: ElectronClient/commands/copyDevCommand.js:17
#, fuzzy
msgid "Copy dev mode command to clipboard"
msgstr "Copiar comando de modo dev para a área de transferências"
msgstr "Copiar caminho para a área de transferência"
#: ElectronClient/commands/startExternalEditing.js:18
msgid "Edit in external editor"
@@ -1508,12 +1507,13 @@ msgid "Error opening note in editor: %s"
msgstr "Erro a abrir a nota no editor: %s"
#: ElectronClient/commands/toggleExternalEditing.js:16
#, fuzzy
msgid "Toggle external editing"
msgstr "Alternar edição externa"
msgstr "Parar a edição externa"
#: ElectronClient/commands/toggleExternalEditing.js:42
msgid "Stop"
msgstr "Parar"
msgstr ""
#: ElectronClient/commands/stopExternalEditing.js:16
msgid "Stop external editing"
@@ -1649,8 +1649,8 @@ msgid ""
msgstr ""
"Em qualquer comando, uma nota ou caderno pode ser indicada pelo título ou "
"ID, ou através dos atalhos `$n` ou `$b` para, respetivamente, a nota ou "
"caderno atualmente selecionado. O `$c` pode ser usado para indicar o item "
"atualmente selecionado."
"bloco de notas atualmente selecionado. O `$c` pode ser usado para indicar o "
"item atualmente selecionado."
#: CliClient/app/command-help.js:79
msgid "To move from one pane to another, press Tab or Shift+Tab."
@@ -1743,7 +1743,7 @@ msgstr ""
#: CliClient/app/command-sync.js:35
msgid "Upgrade the sync target to the latest version."
msgstr "Atualize o alvo de sincronização para a última versão."
msgstr ""
#: CliClient/app/command-sync.js:105
#, javascript-format
@@ -1771,8 +1771,9 @@ msgid "Synchronisation target: %s (%s)"
msgstr "Destino de sincronização: %s (%s)"
#: CliClient/app/command-sync.js:177
#, fuzzy
msgid "Cannot initialise synchroniser."
msgstr "Não é possível inicializar o sincronizador."
msgstr "Não é possível alterar item encriptado."
#: CliClient/app/command-sync.js:207
msgid "Starting synchronisation..."
@@ -1915,8 +1916,9 @@ msgstr ""
"desencriptados em segundo plano e estarão disponíveis brevemente."
#: CliClient/app/gui/NoteWidget.js:50
#, fuzzy
msgid "You may also type `status` for more information."
msgstr "Pode também escrever `status` para mais informação."
msgstr "Não peça confirmação."
#: CliClient/app/gui/FolderListWidget.js:31
msgid "Search:"
@@ -1960,16 +1962,14 @@ msgstr ""
"vários minutos, dependendo de quanto há para desencriptar."
#: CliClient/app/command-e2ee.js:53
#, javascript-format
#, fuzzy, javascript-format
msgid "Decrypted items: %d"
msgstr "Itens desencriptados: %d"
msgstr "Itens desencriptados: %s / %s"
#: CliClient/app/command-e2ee.js:54
#, javascript-format
msgid "Skipped items: %d (use --retry-failed-items to retry decrypting them)"
msgstr ""
"Itens ignorados: %d (use --retry-failed-items para tentar desencriptá-los "
"novamente)"
#: CliClient/app/command-e2ee.js:68
msgid "Completed decryption."
@@ -2018,9 +2018,9 @@ msgid "Do not ask for confirmation."
msgstr "Não peça confirmação."
#: CliClient/app/command-import.js:27
#, javascript-format
#, fuzzy, javascript-format
msgid "Output format: %s"
msgstr "Formato da saída: %s"
msgstr "Formato da origem: %s"
#: CliClient/app/command-import.js:65
msgid "Importing notes..."
@@ -2051,8 +2051,6 @@ msgstr "Exibe um resumo sobre as notas e os cadernos."
msgid ""
"To retry decryption of these items. Run `e2ee decrypt --retry-failed-items`"
msgstr ""
"Para tentar desencriptar estes itens novamente. Execute `e2ee decrypt --"
"retry-failed-items`"
#: CliClient/app/command-undone.js:12
msgid "Marks a to-do as non-completed."
@@ -2246,17 +2244,14 @@ msgid "HTML Directory"
msgstr "Diretório HTML"
#: ReactNativeClient/lib/services/interop/InteropService.js:127
#, javascript-format
#, fuzzy, javascript-format
msgid "Cannot load \"%s\" module for format \"%s\" and output \"%s\""
msgstr ""
"Não é possível carregar o módulo \"%s\" para o formato \"%s\" e saída \"%s\""
msgstr "Não é possível carregar o módulo \"%s\" para o formato \"%s\"."
#: ReactNativeClient/lib/services/interop/InteropService.js:152
#, javascript-format
#, fuzzy, javascript-format
msgid "Cannot load \"%s\" module for format \"%s\" and target \"%s\""
msgstr ""
"Não é possível carregar o módulo \"%s\" para o formato \"%s\" e o alvo \"%s"
"\"."
msgstr "Não é possível carregar o módulo \"%s\" para o formato \"%s\"."
#: ReactNativeClient/lib/services/interop/InteropService.js:187
#, javascript-format
@@ -2274,37 +2269,35 @@ msgstr "Notas Recuperadas"
#: ReactNativeClient/lib/services/KeymapService.js:236
msgid "command"
msgstr "comando"
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:236
#: ReactNativeClient/lib/services/KeymapService.js:241
#, javascript-format
msgid "\"%s\" is missing the required \"%s\" property."
msgstr "Está em falta a propriedade \"%s\" de \"%s\"."
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:241
#: ReactNativeClient/lib/services/KeymapService.js:248
msgid "accelerator"
msgstr "acelerador"
msgstr ""
#: ReactNativeClient/lib/services/KeymapService.js:248
#, fuzzy, javascript-format
msgid "Invalid %s: %s."
msgstr "\"%s\" inválida: %s"
msgstr "Resposta inválida: %s"
#: ReactNativeClient/lib/services/KeymapService.js:266
#, fuzzy, javascript-format
#, javascript-format
msgid ""
"Accelerator \"%s\" is used for \"%s\" and \"%s\" commands. This may lead to "
"unexpected behaviour."
msgstr ""
"O acelerador \"%s\" é usado para comandos \"%s\" e \"%s\". Isto pode levar a "
"comportamentos inesperados."
#: ReactNativeClient/lib/services/KeymapService.js:291
#, fuzzy, javascript-format
#, javascript-format
msgid "Accelerator \"%s\" is not valid."
msgstr "O acelerador \"%s\" não é válido."
msgstr ""
#: ReactNativeClient/lib/services/report.js:121
msgid "Items that cannot be synchronised"
@@ -2316,9 +2309,9 @@ msgid ""
"target. In order to find these items, either search for the title or the ID "
"(which is displayed in brackets above)."
msgstr ""
"Esses itens permanecerão no dispositivo, mas não serão enviados para o alvo "
"de sincronização. Para encontrar estes itens, procure o título ou o ID (que "
"é apresentado entre parênteses acima)."
"Esses itens permanecerão no dispositivo, mas não serão enviados para o "
"destino de sincronização. Para encontrar estes itens, procure o título ou o "
"ID (que é apresentado entre parênteses acima)."
#: ReactNativeClient/lib/services/report.js:130
#, javascript-format
@@ -2454,7 +2447,7 @@ msgstr "Versão do Perfil: %s"
#: ReactNativeClient/lib/versionInfo.js:23
#, javascript-format
msgid "Keychain Supported: %s"
msgstr "Porta-Chaves Suportado: %s"
msgstr ""
#: ReactNativeClient/lib/JoplinServerApi.js:71
#, javascript-format
@@ -2856,7 +2849,7 @@ msgstr "Adicionar título"
#: ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js:42
msgid "Sync Target Upgrade"
msgstr "Atualização do Alvo de Sincronização"
msgstr ""
#: ReactNativeClient/lib/components/screens/encryption-config.js:119
#, javascript-format
@@ -2884,7 +2877,7 @@ msgid ""
"the data! To enable encryption, please enter your password below."
msgstr ""
"Ativar a encriptação significa que *todas* as suas notas e anexos serão "
"ressincronizados e enviados encriptados para o alvo de sincronização. Não "
"ressincronizados e enviados encriptados para o destino de sincronização. Não "
"perca a palavra-passe pois, por razões de segurança, esta será a única forma "
"de desencriptar os dados! Para ativar a encriptação, introduza a sua palavra-"
"passe abaixo."
@@ -2946,11 +2939,8 @@ msgstr ""
"Alguns itens não puderam ser sincronizados. Prima para mais informações."
#: ReactNativeClient/lib/components/screen-header.js:453
#, fuzzy
msgid "The sync target needs to be upgraded. Press this banner to proceed."
msgstr ""
"O alvo de sincronização precisa de ser atualizado. Clique neste banner para "
"proceder."
#: ReactNativeClient/lib/components/side-menu-content.js:126
#, javascript-format
@@ -3031,7 +3021,7 @@ msgid ""
"the sync target is accessible. The reported error was:"
msgstr ""
"Erro. Por favor verifique se o endereço, nome de utilizador, palavra-passe, "
"etc. estão corretos e se o alvo de sincronização está acessível. O erro "
"etc. estão corretos e se o destino de sincronização está acessível. O erro "
"reportado foi:"
#: ReactNativeClient/lib/components/note-list.js:97
@@ -3096,20 +3086,17 @@ msgid "Downloaded"
msgstr "Transferido"
#: ReactNativeClient/lib/models/Resource.js:371
#, javascript-format
#, fuzzy, javascript-format
msgid "Attachment conflict: \"%s\""
msgstr "Anexos em conflito: \"%s\""
msgstr "Anexos"
#: ReactNativeClient/lib/models/Resource.js:372
#, javascript-format
#, fuzzy, javascript-format
msgid ""
"There was a [conflict](%s) on the attachment below.\n"
"\n"
"%s"
msgstr ""
"Ocorreu um [conflito](%s) no anexo em baixo.\n"
"\n"
"%s"
msgstr "Ocorreu um erro ao transferir este anexo:"
#: ReactNativeClient/lib/models/BaseItem.js:721
msgid "Encrypted"
@@ -3117,7 +3104,7 @@ msgstr "Encriptado"
#: ReactNativeClient/lib/models/BaseItem.js:781
msgid "Encrypted items cannot be modified"
msgstr "Não é possível modificar itens encriptados"
msgstr "Não é possível modificar tens encriptados"
#: ReactNativeClient/lib/models/Note.js:27
msgid "created date"
@@ -3125,7 +3112,7 @@ msgstr "data criada"
#: ReactNativeClient/lib/models/Note.js:28
msgid "custom order"
msgstr "ordem personalizada"
msgstr ""
#: ReactNativeClient/lib/models/Note.js:92
msgid "This note does not have geolocation information."
@@ -3142,18 +3129,20 @@ msgid "Cannot move note to \"%s\" notebook"
msgstr "Não é possível mover a nota para o caderno \"%s\""
#: ReactNativeClient/lib/models/Setting.js:65
#, fuzzy
msgid "yes"
msgstr "sim"
msgstr "Sim"
#: ReactNativeClient/lib/models/Setting.js:65
#: ReactNativeClient/lib/models/Setting.js:66
#, javascript-format
msgid "(wysiwyg: %s)"
msgstr "(wysiwyg: %s)"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:66
#, fuzzy
msgid "no"
msgstr "não"
msgstr "n"
#: ReactNativeClient/lib/models/Setting.js:68
#, javascript-format
@@ -3192,7 +3181,7 @@ msgstr "Nórdico"
#: ReactNativeClient/lib/models/Setting.js:80
msgid "Aritim Dark"
msgstr "Escuro Aritim"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:81
msgid "OLED Dark"
@@ -3207,8 +3196,8 @@ msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"O destino para a sincronização. Cada alvo de sincronização pode ter "
"parâmetros adicionais que são designados como `sync.NUM.NAME` (todos "
"O destino para a sincronização. Cada destino de sincronização pode ter "
"parâmetros adicionais que são designados como `sync.NUM.NUM.NAME` (todos "
"documentados abaixo)."
#: ReactNativeClient/lib/models/Setting.js:131
@@ -3241,15 +3230,15 @@ msgstr "Palavra-passe WebDAV"
#: ReactNativeClient/lib/models/Setting.js:214
msgid "AWS S3 bucket"
msgstr "Bucket AWS S3"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:225
msgid "AWS key"
msgstr "Chave AWS"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:235
msgid "AWS secret"
msgstr "Segredo AWS"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:247
msgid "Attachment download behaviour"
@@ -3261,9 +3250,10 @@ msgid ""
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
"No modo \"Manual\", os anexos são transferidos apenas quando são clicados. "
"Em \"Automático\", eles são transferidos quando a nota é aberta. Em \"Sempre"
"\", todos os anexos são transferidos, quer a nota seja aberta ou não."
"No modo \"Manual\", os anexos são transferidos apenas quando é dado um "
"clique neles. Em \"Automático\", eles são transferidos quando a nota é "
"aberta. Em \"Sempre\", todos os anexos são transferidos, quer a nota seja "
"aberta ou não."
#: ReactNativeClient/lib/models/Setting.js:251
msgid "Always"
@@ -3299,15 +3289,15 @@ msgstr "Tema"
#: ReactNativeClient/lib/models/Setting.js:337
msgid "Automatically switch theme to match system theme"
msgstr "Mudar automaticamente o tema para combinar com o tema do sistema"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:348
msgid "Preferred light theme"
msgstr "Tema claro preferido"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:361
msgid "Preferred dark theme"
msgstr "Tema escuro preferido"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:365
msgid "Show note counts"
@@ -3470,14 +3460,15 @@ msgid "Editor font family"
msgstr "Família da letra do editor"
#: ReactNativeClient/lib/models/Setting.js:556
#, fuzzy
msgid ""
"This should be a *monospace* font or some elements will render incorrectly. "
"If the font is incorrect or empty, it will default to a generic monospace "
"font."
msgstr ""
"Este deverá ser um tipo de letra *mono-espaçado* ou não funcionará "
"corretamente. Se o tipo de letra estiver incorreto ou em branco, reverterá "
"para um tipo de letra mono-espaçado genérico pré-definido."
"corretamente. Se o tipo de letra estiver incorreto ou em branco, será pré-"
"definida para um tipo de letra mono-espaçado genérico."
#: ReactNativeClient/lib/models/Setting.js:595
msgid "Custom stylesheet for Joplin-wide app styles"
@@ -3491,7 +3482,7 @@ msgstr "Atualizar a aplicação automaticamente"
#: ReactNativeClient/lib/models/Setting.js:601
msgid "Get pre-releases when checking for updates"
msgstr "Obtenha versões de pré-lançamento ao verificar se há atualizações"
msgstr "Obtenha versões de pré-lançamento ao verificar atualizações"
#: ReactNativeClient/lib/models/Setting.js:601
#, javascript-format
@@ -3500,7 +3491,7 @@ msgstr "Consulte a página de pré-lançamento para obter mais detalhes: %s"
#: ReactNativeClient/lib/models/Setting.js:609
msgid "Synchronisation interval"
msgstr "Intervalo de sincronização"
msgstr "Periodicidade de sincronização"
#: ReactNativeClient/lib/models/Setting.js:613
#: ReactNativeClient/lib/models/Setting.js:614
@@ -3619,8 +3610,8 @@ msgid ""
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
"result of a misconfiguration or bug)"
msgstr ""
"Segurança contra falhas: Não elimine os dados locais quando o alvo de "
"sincronização está em branco (muitas vezes o resultado de uma má "
"À prova de falhas: Não elimine os dados locais quando o destino de "
"sincronização está em brancp (muitas vezes o resultado de uma má "
"configuração ou erro)"
#: ReactNativeClient/lib/models/Setting.js:695
@@ -3650,7 +3641,7 @@ msgstr "Manter histórico de notas por"
#: ReactNativeClient/lib/models/Setting.js:735
msgid "Notebook list growth factor"
msgstr "Fator de crescimento do caderno"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:736
#: ReactNativeClient/lib/models/Setting.js:748
@@ -3661,18 +3652,14 @@ msgid ""
"item with a factor of 2 will take twice as much space as an item with a "
"factor of 1.Restart app to see changes."
msgstr ""
"A propriedade fator define como um item aumentará ou diminuirá para ocupar o "
"espaço disponível no seu contentor com respeito aos outros itens. Como tal, "
"um item com um fator de 2 ocupará o dobro do espaço de um item com um fator "
"de 1. Reinicie a aplicação para ver as alterações."
#: ReactNativeClient/lib/models/Setting.js:747
msgid "Note list growth factor"
msgstr "Fator de crescimento da lista de notas"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:759
msgid "Note area growth factor"
msgstr "Fator de crescimento da área de notas"
msgstr ""
#: ReactNativeClient/lib/models/Setting.js:1272
msgid "General"
@@ -3707,8 +3694,9 @@ msgid "Web Clipper"
msgstr "Recorte Web"
#: ReactNativeClient/lib/models/Setting.js:1292
#, fuzzy
msgid "Keyboard Shortcuts"
msgstr "Atalhos do Teclado"
msgstr "Modo de Teclado"
#: ReactNativeClient/lib/models/Setting.js:1299
msgid ""
@@ -3720,12 +3708,6 @@ msgid ""
"formatting. It is indicated below which plugins are compatible or not with "
"the WYSIWYG editor."
msgstr ""
"Estes plugins modificam o renderizador de Markdown com recursos adicionais. "
"Note que, enquanto estes recursos podem ser úteis, não são Markdown padrão "
"e, como tal, a maioria deles só funcionará no Joplin. Adicionalmente, alguns "
"deles são *incompatíveis* com o editor WYSIWYG. Se abrir uma nota que use um "
"destes plugins nesse editor, perderá a formatação do plugin. Está indicado "
"abaixo quais os plugins que são ou não compatíveis com o editor WYSIWYG."
#: ReactNativeClient/lib/models/Setting.js:1301
#, javascript-format
@@ -3754,11 +3736,11 @@ msgstr "OneDrive"
#: ReactNativeClient/lib/SyncTargetAmazonS3.js:28
msgid "AWS S3"
msgstr "AWS S3"
msgstr ""
#: ReactNativeClient/lib/commands/historyForward.js:16
msgid "Forward"
msgstr "Avançar"
msgstr ""
#: ReactNativeClient/lib/shim-init-node.js:158
#, javascript-format

View File

@@ -299,7 +299,7 @@ describe('services_KeymapService', () => {
],
[
{ command: 'showLocalSearch', accelerator: 'Option+Cmd+S' },
{ command: 'print', accelerator: 'Cmd+P' /* Default of gotoAnything */ },
{ command: 'print', accelerator: 'Cmd+G' /* Default of gotoAnything */ },
{ command: 'focusElementNoteTitle', accelerator: 'Option+Shift+Cmd+J' },
],
];
@@ -317,7 +317,7 @@ describe('services_KeymapService', () => {
],
[
{ command: 'showLocalSearch', accelerator: 'Ctrl+Alt+S' },
{ command: 'print', accelerator: 'Ctrl+P' /* Default of gotoAnything */ },
{ command: 'print', accelerator: 'Ctrl+G' /* Default of gotoAnything */ },
{ command: 'focusElementNoteTitle', accelerator: 'Ctrl+Alt+Shift+J' },
],
];

View File

@@ -425,7 +425,7 @@ class Application extends BaseApplication {
const contextMenu = Menu.buildFromTemplate([
{ label: _('Open %s', app.electronApp().name), click: () => { app.window().show(); } },
{ type: 'separator' },
{ label: _('Quit'), click: () => { app.quit(); } },
{ label: _('Exit'), click: () => { app.quit(); } },
]);
app.createTray(contextMenu);
}

View File

@@ -26,7 +26,6 @@ import { AppState } from '../../app';
import ToolbarButtonUtils from 'lib/services/commands/ToolbarButtonUtils';
import { _ } from 'lib/locale';
import stateToWhenClauseContext from 'lib/services/commands/stateToWhenClauseContext';
import TagList from '../TagList';
const { themeStyle } = require('lib/theme');
const { substrWithEllipsis } = require('lib/string-utils');
@@ -40,6 +39,7 @@ const Note = require('lib/models/Note.js');
const bridge = require('electron').remote.require('./bridge').default;
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
const NoteRevisionViewer = require('../NoteRevisionViewer.min');
const TagList = require('../TagList.min.js');
const commands = [
require('./commands/showRevisions'),

View File

@@ -1,3 +1,4 @@
import * as React from 'react';
import app from '../app';
import MainScreen from './MainScreen/MainScreen';
import ConfigScreen from './ConfigScreen/ConfigScreen';
@@ -9,7 +10,6 @@ import { themeStyle } from 'lib/theme';
import { Size } from './ResizableLayout/ResizableLayout';
import MenuBar from './MenuBar';
import { _ } from 'lib/locale';
const React = require('react');
const { render } = require('react-dom');
const { connect, Provider } = require('react-redux');

View File

@@ -569,20 +569,6 @@ class SideBarComponent extends React.Component<Props, State> {
CommandService.instance().execute('newFolder');
}
// componentDidUpdate(prevProps:any, prevState:any) {
// for (const n in prevProps) {
// if (prevProps[n] !== (this.props as any)[n]) {
// console.info('CHANGED PROPS', n);
// }
// }
// for (const n in prevState) {
// if (prevState[n] !== (this.state as any)[n]) {
// console.info('CHANGED STATE', n);
// }
// }
// }
render() {
const theme = themeStyle(this.props.themeId);

View File

@@ -0,0 +1,52 @@
const React = require('react');
const { connect } = require('react-redux');
const { themeStyle } = require('lib/theme');
const TagItem = require('./TagItem.min.js');
class TagListComponent extends React.Component {
render() {
const style = Object.assign({}, this.props.style);
const theme = themeStyle(this.props.themeId);
const tags = this.props.items;
style.display = 'flex';
style.flexDirection = 'row';
// style.borderBottom = `1px solid ${theme.dividerColor}`;
style.boxSizing = 'border-box';
style.fontSize = theme.fontSize;
style.whiteSpace = 'nowrap';
// style.height = 40;
style.paddingTop = 8;
style.paddingBottom = 8;
const tagItems = [];
if (tags && tags.length > 0) {
tags.sort((a, b) => {
return a.title < b.title ? -1 : +1;
});
for (let i = 0; i < tags.length; i++) {
const props = {
title: tags[i].title,
key: tags[i].id,
};
tagItems.push(<TagItem {...props} />);
}
}
return (
<div className="tag-list" style={style}>
{tagItems}
</div>
);
}
}
const mapStateToProps = state => {
return { themeId: state.settings.theme };
};
const TagList = connect(mapStateToProps)(TagListComponent);
module.exports = TagList;

View File

@@ -1,63 +0,0 @@
import * as React from 'react';
import { useMemo } from 'react';
import { AppState } from '../app';
const { connect } = require('react-redux');
const { themeStyle } = require('lib/theme');
const TagItem = require('./TagItem.min.js');
interface Props {
themeId: number,
style: any,
items: any[],
}
function TagList(props:Props) {
const style = useMemo(() => {
const theme = themeStyle(props.themeId);
const output = { ...props.style };
output.display = 'flex';
output.flexDirection = 'row';
output.boxSizing = 'border-box';
output.fontSize = theme.fontSize;
output.whiteSpace = 'nowrap';
output.paddingTop = 8;
output.paddingBottom = 8;
return output;
}, [props.style, props.themeId]);
const tags = useMemo(() => {
const output = props.items.slice();
output.sort((a:any, b:any) => {
return a.title < b.title ? -1 : +1;
});
return output;
}, [props.items]);
const tagItems = useMemo(() => {
const output = [];
for (let i = 0; i < tags.length; i++) {
const props = {
title: tags[i].title,
key: tags[i].id,
};
output.push(<TagItem {...props} />);
}
return output;
}, [tags]);
return (
<div className="tag-list" style={style}>
{tagItems}
</div>
);
}
const mapStateToProps = (state:AppState) => {
return { themeId: state.settings.theme };
};
export default connect(mapStateToProps)(TagList);

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.3.7",
"version": "1.3.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.3.7",
"version": "1.3.5",
"description": "Joplin for Desktop",
"main": "main.js",
"scripts": {

View File

@@ -48,7 +48,7 @@ There are other ways to install the terminal application. However, they are not
Operating system | Method
-----------------|----------------
macOS | `brew install joplin`
Arch Linux | An Arch Linux package is available [here](https://aur.archlinux.org/packages/joplin/). To install it, use an AUR wrapper such as yay: `yay -S joplin`. Both the CLI tool (type `joplin`) and desktop app (type `joplin-desktop`) are packaged. You can also install a compiled version with the [chaotic-aur](https://wiki.archlinux.org/index.php/Unofficial_user_repositories#chaotic-aur) repository. For support, please go to the [GitHub repo](https://github.com/masterkorp/joplin-pkgbuild). If you are interested in [pre-release](https://joplinapp.org/prereleases/) you have [joplin-beta](https://aur.archlinux.org/packages/joplin-beta).
Arch Linux | An Arch Linux package is available [here](https://aur.archlinux.org/packages/joplin/). To install it, use an AUR wrapper such as yay: `yay -S joplin`. Both the CLI tool (type `joplin`) and desktop app (type `joplin-desktop`) are packaged. You can also install a compiled version with the [chaotic-aur](https://wiki.archlinux.org/index.php/Unofficial_user_repositories#chaotic-aur) repository. For support, please go to the [GitHub repo](https://github.com/masterkorp/joplin-pkgbuild).
## Web Clipper

View File

@@ -546,13 +546,7 @@ export default class BaseApplication {
await this.refreshNotes(newState, refreshNotesUseSelectedNoteId, refreshNotesHash);
}
if (action.type === 'NOTE_UPDATE_ONE') {
if (!action.changedFields.length || action.changedFields.includes('parent_id') || action.changedFields.includes('encryption_applied')) {
refreshFolders = true;
}
}
if (action.type === 'NOTE_DELETE') {
if (action.type === 'NOTE_UPDATE_ONE' || action.type === 'NOTE_DELETE') {
refreshFolders = true;
}

View File

@@ -41,8 +41,6 @@ class SyncTargetAmazonS3 extends BaseSyncTarget {
accessKeyId: Setting.value('sync.8.username'),
secretAccessKey: Setting.value('sync.8.password'),
s3UseArnRegion: true, // override the request region with the region inferred from requested resource's ARN
s3ForcePathStyle: true,
endpoint: Setting.value('sync.8.url'),
};
}
@@ -58,8 +56,6 @@ class SyncTargetAmazonS3 extends BaseSyncTarget {
accessKeyId: options.username(),
secretAccessKey: options.password(),
s3UseArnRegion: true,
s3ForcePathStyle: true,
endpoint: options.url(),
};
const api = new S3(apiOptions);

View File

@@ -1,7 +1,7 @@
import * as React from 'react';
import { View, Button, Text } from 'react-native';
import { themeStyle } from 'lib/theme';
import { _ } from 'lib/locale';
const { View, Button, Text } = require('react-native');
const PopupDialog = require('react-native-popup-dialog').default;
const { DialogTitle, DialogButton } = require('react-native-popup-dialog');

View File

@@ -43,11 +43,8 @@ const reduxSharedMiddleware = async function(store, next, action) {
DecryptionWorker.instance().scheduleStart();
}
// 2020-10-19: Removed "NOTE_UPDATE_ONE" because there's no property in a note that
// should trigger a refreshing of the tags.
// Trying to fix this: https://github.com/laurent22/joplin/issues/3893
if (action.type == 'NOTE_DELETE' ||
// action.type == 'NOTE_UPDATE_ONE' ||
action.type == 'NOTE_UPDATE_ONE' ||
action.type == 'NOTE_UPDATE_ALL' ||
action.type == 'NOTE_TAG_REMOVE' ||
action.type == 'TAG_UPDATE_ONE') {

View File

@@ -556,7 +556,7 @@ function enexXmlToMdArray(stream, resources) {
} else if (isStrongTag(n)) {
section.lines.push('**');
} else if (isStrikeTag(n)) {
section.lines.push('<s>');
section.lines.push('(');
} else if (isInlineCodeTag(n)) {
section.lines.push('`');
} else if (n == 'q') {
@@ -739,7 +739,7 @@ function enexXmlToMdArray(stream, resources) {
} else if (isStrongTag(n)) {
section.lines.push('**');
} else if (isStrikeTag(n)) {
section.lines.push('</s>');
section.lines.push(')');
} else if (isInlineCodeTag(n)) {
section.lines.push('`');
} else if (isEmTag(n)) {

View File

@@ -25,9 +25,9 @@ function installRule(markdownIt, mdOptions, ruleOptions) {
const longPressHandler = `${ruleOptions.postMessageSyntax}('longclick:${id}')`;
const touchStart = `t=setTimeout(()=>{t=null; ${longPressHandler};}, ${longPressDelay});`;
const cancel = 'if (!!t) clearTimeout(t); t=null';
const touchEnd = 'if (!!t) clearTimeout(t); t=null';
js = ` ontouchstart="${touchStart}" ontouchend="${cancel}" ontouchcancel="${cancel}" ontouchmove="${cancel}"`;
js = ` ontouchstart="${touchStart}" ontouchend="${touchEnd}"`;
}
return `<img data-from-md ${htmlUtils.attributesHtml(Object.assign({}, r, { title: title }))}${js}/>`;

View File

@@ -71,9 +71,9 @@ function installRule(markdownIt, mdOptions, ruleOptions) {
const onLongClick = `${ruleOptions.postMessageSyntax}("longclick:${resourceId}")`;
const touchStart = `t=setTimeout(()=>{t=null; ${onLongClick};}, ${longPressDelay});`;
const cancel = 'if (!!t) {clearTimeout(t); t=null;';
const touchEnd = `${cancel} ${onClick};}`;
js = `ontouchstart='${touchStart}' ontouchend='${touchEnd}' ontouchcancel='${cancel} ontouchmove="${cancel}'`;
const touchEnd = `if (!!t) {clearTimeout(t); t=null; ${onClick};}`;
js = `ontouchstart='${touchStart}' ontouchend='${touchEnd}'`;
} else {
js = `onclick='${js}'`;
}

View File

@@ -587,29 +587,10 @@ class Note extends BaseItem {
// decide what to keep and what to ignore, but in practice keeping the previous content is a bit
// heavy - the note needs to be reloaded here, the JSON blob needs to be saved, etc.
// So the check for old note here is basically an optimisation.
// 2020-10-19: It's not ideal to reload the previous version of the note before saving it again
// but it should be relatively fast anyway. This is so that code that listens to the NOTE_UPDATE_ONE
// action can decide what to do based on the fields that have been modified.
// This is necessary for example so that the folder list is not refreshed every time a note is changed.
// Now it can look at the properties and refresh only if the "parent_id" property is changed.
// Trying to fix: https://github.com/laurent22/joplin/issues/3893
const oldNote = !isNew && o.id ? await Note.load(o.id) : null;
let beforeNoteJson = null;
if (oldNote && this.revisionService().isOldNote(o.id)) {
beforeNoteJson = JSON.stringify(oldNote);
}
const changedFields = [];
if (oldNote) {
for (const field in o) {
if (!o.hasOwnProperty(field)) continue;
if (o[field] !== oldNote[field]) {
changedFields.push(field);
}
}
if (!isNew && this.revisionService().isOldNote(o.id)) {
beforeNoteJson = await Note.load(o.id);
if (beforeNoteJson) beforeNoteJson = JSON.stringify(beforeNoteJson);
}
const note = await super.save(o, options);
@@ -622,7 +603,6 @@ class Note extends BaseItem {
type: 'NOTE_UPDATE_ONE',
note: note,
provisional: isProvisional,
changedFields: changedFields,
});
}

View File

@@ -274,17 +274,6 @@ class Setting extends BaseModel {
label: () => _('AWS S3 bucket'),
description: () => emptyDirWarning,
},
'sync.8.url': {
value: 'https://s3.amazonaws.com/',
type: SettingItemType.String,
section: 'sync',
show: (settings:any) => {
return settings['sync.target'] == SyncTargetRegistry.nameToId('amazon_s3');
},
public: true,
label: () => _('AWS S3 URL'),
secure: false,
},
'sync.8.username': {
value: '',
type: SettingItemType.String,

View File

@@ -176,12 +176,7 @@ class Tag extends BaseItem {
}
static async save(o, options = null) {
options = Object.assign({}, {
dispatchUpdateAction: true,
userSideValidation: false,
}, options);
if (options.userSideValidation) {
if (options && options.userSideValidation) {
if ('title' in o) {
o.title = o.title.trim().toLowerCase();
@@ -191,13 +186,10 @@ class Tag extends BaseItem {
}
return super.save(o, options).then(tag => {
if (options.dispatchUpdateAction) {
this.dispatch({
type: 'TAG_UPDATE_ONE',
item: tag,
});
}
this.dispatch({
type: 'TAG_UPDATE_ONE',
item: tag,
});
return tag;
});
}

View File

@@ -1,42 +1,18 @@
const Folder = require('lib/models/Folder');
const Note = require('lib/models/Note');
const Tag = require('lib/models/Tag');
function randomIndex(array:any[]):number {
return Math.round(Math.random() * (array.length - 1));
}
function randomIndexes(arrayLength:number, count:number):number[] {
const arr = [];
while (arr.length < count) {
const r = Math.floor(Math.random() * arrayLength);
if (arr.indexOf(r) === -1) arr.push(r);
}
return arr;
}
function randomElements(array:any[], count:number):any[] {
const indexes = randomIndexes(array.length, count);
const output = [];
for (const index of indexes) {
output.push(array[index]);
}
return output;
}
// Use the constants below to define how many folders, notes and tags
// should be created.
export default async function populateDatabase(db:any) {
await db.clearForTesting();
const folderCount = 200;
const noteCount = 1000;
const tagCount = 5000;
const tagsPerNote = 10;
const folderCount = 2000;
const noteCount = 20000;
const createdFolderIds:string[] = [];
const createdNoteIds:string[] = [];
const createdTagIds:string[] = [];
for (let i = 0; i < folderCount; i++) {
const folder:any = {
@@ -56,24 +32,6 @@ export default async function populateDatabase(db:any) {
console.info(`Folders: ${i} / ${folderCount}`);
}
let tagBatch = [];
for (let i = 0; i < tagCount; i++) {
tagBatch.push(Tag.save({ title: `tag${i}` }, { dispatchUpdateAction: false }).then((savedTag:any) => {
createdTagIds.push(savedTag.id);
console.info(`Tags: ${i} / ${tagCount}`);
}));
if (tagBatch.length > 1000) {
await Promise.all(tagBatch);
tagBatch = [];
}
}
if (tagBatch.length) {
await Promise.all(tagBatch);
tagBatch = [];
}
let noteBatch = [];
for (let i = 0; i < noteCount; i++) {
const note:any = { title: `note${i}`, body: `This is note num. ${i}` };
@@ -95,20 +53,4 @@ export default async function populateDatabase(db:any) {
await Promise.all(noteBatch);
noteBatch = [];
}
let noteTagBatch = [];
for (const noteId of createdNoteIds) {
const tagIds = randomElements(createdTagIds, tagsPerNote);
noteTagBatch.push(Tag.setNoteTagsByIds(noteId, tagIds));
if (noteTagBatch.length > 1000) {
await Promise.all(noteTagBatch);
noteTagBatch = [];
}
}
if (noteTagBatch.length) {
await Promise.all(noteTagBatch);
noteTagBatch = [];
}
}

View File

@@ -417,15 +417,7 @@ export default function queryBuilder(terms: Term[], fuzzy: boolean) {
let query;
if (withs.length > 0) {
if (terms.find(x => x.name === 'notebook') && terms.find(x => x.name === 'any')) {
// The notebook filter should be independent of the any filter.
// So we're first finding the OR of other filters and then combining them with the notebook filter using AND
// in-required-notebook AND (condition #1 OR condition #2 OR ... )
const queryString = `${queryParts.slice(0, 2).join(' ')} AND ROWID IN ( SELECT ROWID FROM notes_fts WHERE 1=0 ${queryParts.slice(2).join(' ')})`;
query = ['WITH RECURSIVE' , withs.join(',') , queryString].join(' ');
} else {
query = ['WITH RECURSIVE' , withs.join(',') ,queryParts.join(' ')].join(' ');
}
query = ['WITH RECURSIVE' , withs.join(',') ,queryParts.join(' ')].join(' ');
} else {
query = queryParts.join(' ');
}