You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-24 20:19:10 +02:00
Compare commits
188 Commits
android-v1
...
cli-v1.0.1
Author | SHA1 | Date | |
---|---|---|---|
|
5710e3fad0 | ||
|
a03aa62d58 | ||
|
2203a39917 | ||
|
bc58668483 | ||
|
0b4650f355 | ||
|
aecdec48ad | ||
|
e49198a0d4 | ||
|
6aa4553dd3 | ||
|
860e8a8f5a | ||
|
434037d793 | ||
|
214eae27da | ||
|
0567188fa8 | ||
|
4326902683 | ||
|
da3589149d | ||
|
69b4b4d1f4 | ||
|
dd4b46a88b | ||
|
6f2253b2f4 | ||
|
4c00d9512e | ||
|
6f511cb1e6 | ||
|
029e84f538 | ||
|
42b1db1d08 | ||
|
9d4b34cad7 | ||
|
cd9aff0f59 | ||
|
032816fffc | ||
|
1408f06c8d | ||
|
49f8d0c6d8 | ||
|
0d6443c30a | ||
|
e62d91dda8 | ||
|
0e122c9dc5 | ||
|
c2bd453e8c | ||
|
949ea7afb7 | ||
|
9f575101d2 | ||
|
2b4470054e | ||
|
b220613e54 | ||
|
11328babe8 | ||
|
735bc92bc4 | ||
|
6894b9b1b7 | ||
|
4de7815f31 | ||
|
4ce7b48468 | ||
|
77e4cb87ad | ||
|
dd6b43035e | ||
|
e76094c546 | ||
|
9c00dc4cab | ||
|
fc416de348 | ||
|
a2156be4ec | ||
|
cf427eba0f | ||
|
0050c90678 | ||
|
5eeff02dbe | ||
|
eb283efc20 | ||
|
87121c9c21 | ||
|
a2dbbbf832 | ||
|
fd251cd9a9 | ||
|
8ced2d288e | ||
|
242926d381 | ||
|
8c9a148e71 | ||
|
9e165fc7dc | ||
|
f46e4e0cec | ||
|
efcf5ecef4 | ||
|
b6ba843d09 | ||
|
915112e274 | ||
|
cc8f8fcd2c | ||
|
bda3ea9a35 | ||
|
a7aed1f93a | ||
|
a33f602f3b | ||
|
4d08b49578 | ||
|
21e049ab45 | ||
|
1d4234caea | ||
|
d1269de3a7 | ||
|
8c19fcf8fc | ||
|
beaba2be55 | ||
|
32c9ad1d59 | ||
|
a194513252 | ||
|
cd93a1d1e1 | ||
|
2867728996 | ||
|
394cc78851 | ||
|
76f0a26322 | ||
|
92d7a577a0 | ||
|
9c1219b188 | ||
|
f62bbfe286 | ||
|
fef176eb96 | ||
|
ed541dac3b | ||
|
4a175b2158 | ||
|
4076899e11 | ||
|
998bdf3b56 | ||
|
76b211eb6d | ||
|
f781cb3922 | ||
|
ced3e5d623 | ||
|
2a4812cb87 | ||
|
1f384c7ae4 | ||
|
01a3285636 | ||
|
53166cb3f5 | ||
|
893462ae87 | ||
|
949dbf45f1 | ||
|
d7dc625042 | ||
|
cc91c77f9e | ||
|
4847fd76de | ||
|
25b711a8da | ||
|
b5e50fa62e | ||
|
28e40a5c86 | ||
|
a8a7b7c07b | ||
|
299008688d | ||
|
42a674008f | ||
|
8fdc0bf17c | ||
|
4e3896c108 | ||
|
96cd56548e | ||
|
739fb2c3d2 | ||
|
0c98573700 | ||
|
8dc0b34fdc | ||
|
384ca09842 | ||
|
97d86825c2 | ||
|
f5a824b1e6 | ||
|
4fc11e77e8 | ||
|
8d16ad7035 | ||
|
3b1d84b00b | ||
|
3f540da31b | ||
|
3a20f1c245 | ||
|
e803f0c545 | ||
|
c9495c23a6 | ||
|
26aae9eea5 | ||
|
7d92136467 | ||
|
a7896b43d7 | ||
|
2e12b2655b | ||
|
a1f0bd1e6c | ||
|
4472590133 | ||
|
64f1214ad9 | ||
|
bd465a72cf | ||
|
1d1c2a6925 | ||
|
d68ba32533 | ||
|
d1a316032d | ||
|
b465042a56 | ||
|
8ff2418b02 | ||
|
f6640bcc32 | ||
|
fa3c0fd18a | ||
|
2ac03c18c4 | ||
|
51ee6128f3 | ||
|
53478056de | ||
|
83c791564a | ||
|
65d0032995 | ||
|
37c4f99341 | ||
|
adbc873b2a | ||
|
3567a57d6a | ||
|
b4e9fb157f | ||
|
1be3646a04 | ||
|
46b82f877b | ||
|
ef56eb4a52 | ||
|
6989f9fd16 | ||
|
7c3e8547de | ||
|
8268c3edba | ||
|
a8cc8763b0 | ||
|
09b4acf087 | ||
|
3b719ce53b | ||
|
83281197f1 | ||
|
ffda04f9b4 | ||
|
606893286a | ||
|
075b71746a | ||
|
01f1f3e957 | ||
|
88a9d5e802 | ||
|
7eebfae1c3 | ||
|
340fe76b8f | ||
|
e83678df3a | ||
|
0bbbb49a31 | ||
|
0e61115857 | ||
|
8d3ac6f6fe | ||
|
86e644be9a | ||
|
30201249b5 | ||
|
41155f5ef4 | ||
|
f308fe71f9 | ||
|
5a00214fd2 | ||
|
1b3e0f65e1 | ||
|
7cfc537870 | ||
|
53513db5b5 | ||
|
59402cf198 | ||
|
12efc02d91 | ||
|
f38b907680 | ||
|
8fcb46ca4a | ||
|
71ec9a193f | ||
|
393a545548 | ||
|
f88449fbb0 | ||
|
50ad4d05f2 | ||
|
8d0e562c8a | ||
|
c98e67c003 | ||
|
5565538b80 | ||
|
958979e1d7 | ||
|
685845e097 | ||
|
3813f9e417 | ||
|
40cf3fb4d0 | ||
|
3f88b16603 | ||
|
32c02275a2 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,4 +40,5 @@ Tools/github_oauth_token.txt
|
||||
_releases
|
||||
ReactNativeClient/lib/csstojs/
|
||||
ElectronClient/app/gui/note-viewer/fonts/
|
||||
ElectronClient/app/gui/note-viewer/lib.js
|
||||
Tools/commit_hook.txt
|
@@ -1,3 +1,7 @@
|
||||
**IMPORTANT:** At the moment pull requests for new features are no longer being accepted. More info there: https://github.com/laurent22/joplin/issues/1112
|
||||
|
||||
* * *
|
||||
|
||||
# User support
|
||||
|
||||
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
|
||||
@@ -12,14 +16,16 @@ If possible, **please provide a screenshot**. A screenshot showing the problem i
|
||||
|
||||
Again, please check that it has not already been requested. If it has, simply **up-vote the issue** - the ones with the most up-votes are likely to be implemented. "+1" comments are not tracked.
|
||||
|
||||
# Adding new features
|
||||
# Creating a pull request
|
||||
|
||||
If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. Of course you are free to create the pull request directly but it is not guaranteed it is going to be accepted.
|
||||
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. That scope, due to limited resources, might be narrower than you think. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't waste your time implementing something that might not be accepted.
|
||||
|
||||
- Bug fixes have a very high change of being accepted.
|
||||
|
||||
- A pull request that is relevant to the current roadmap has a very high change of being accepted.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
|
||||
Pull requests that automatically change many files tend to be rejected (for example changes that automatically update the code styling, or to add new lines to many files, or to automatically convert images to a different format) so if you have such a pull request in mind, please discuss it first in the forum.
|
||||
|
||||
# Coding style
|
||||
|
||||
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
|
||||
|
@@ -22,6 +22,7 @@ const os = require('os');
|
||||
const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const Cache = require('lib/Cache');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
|
||||
class Application extends BaseApplication {
|
||||
|
||||
@@ -376,6 +377,8 @@ class Application extends BaseApplication {
|
||||
return this.stdout(object);
|
||||
});
|
||||
|
||||
await WelcomeUtils.install(this.dispatch.bind(this));
|
||||
|
||||
// If we have some arguments left at this point, it's a command
|
||||
// so execute it.
|
||||
if (argv.length) {
|
||||
@@ -393,6 +396,12 @@ class Application extends BaseApplication {
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
await Setting.saveAll();
|
||||
|
||||
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
|
||||
// https://stackoverflow.com/questions/18050095
|
||||
process.exit(0);
|
||||
} else { // Otherwise open the GUI
|
||||
this.initRedux();
|
||||
|
||||
|
@@ -154,11 +154,11 @@ class Command extends BaseCommand {
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
|
||||
});
|
||||
tableFields.push({
|
||||
name: 'tags',
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
|
||||
});
|
||||
// tableFields.push({
|
||||
// name: 'tags',
|
||||
// type: Database.enumId('fieldType', 'text'),
|
||||
// description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
|
||||
// });
|
||||
}
|
||||
|
||||
lines.push('# ' + toTitleCase(tableName));
|
||||
|
@@ -49,35 +49,6 @@ class Command extends BaseCommand {
|
||||
type: 'SEARCH_SELECT',
|
||||
id: searchId,
|
||||
});
|
||||
|
||||
// let fields = Note.previewFields();
|
||||
// fields.push('body');
|
||||
// const notes = await Note.previews(folder ? folder.id : null, {
|
||||
// fields: fields,
|
||||
// anywherePattern: '*' + pattern + '*',
|
||||
// });
|
||||
|
||||
// const fragmentLength = 50;
|
||||
|
||||
// let parents = {};
|
||||
|
||||
// for (let i = 0; i < notes.length; i++) {
|
||||
// const note = notes[i];
|
||||
// const parent = parents[note.parent_id] ? parents[note.parent_id] : await Folder.load(note.parent_id);
|
||||
// parents[note.parent_id] = parent;
|
||||
|
||||
// const idx = note.body.indexOf(pattern);
|
||||
// let line = '';
|
||||
// if (idx >= 0) {
|
||||
// let fragment = note.body.substr(Math.max(0, idx - fragmentLength / 2), fragmentLength);
|
||||
// fragment = fragment.replace(/\n/g, ' ');
|
||||
// line = sprintf('%s: %s / %s: %s', BaseModel.shortId(note.id), parent.title, note.title, fragment);
|
||||
// } else {
|
||||
// line = sprintf('%s: %s / %s', BaseModel.shortId(note.id), parent.title, note.title);
|
||||
// }
|
||||
|
||||
// this.stdout(line);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -117,7 +117,6 @@ class Command extends BaseCommand {
|
||||
this.releaseLockFn_ = null;
|
||||
|
||||
// Lock is unique per profile/database
|
||||
// TODO: use SQLite database to do lock?
|
||||
const lockFilePath = require('os').tmpdir() + '/synclock_' + md5(escape(Setting.value('profileDir'))); // https://github.com/pvorb/node-md5/issues/41
|
||||
if (!await fs.pathExists(lockFilePath)) await fs.writeFile(lockFilePath, 'synclock');
|
||||
|
||||
|
@@ -139,7 +139,8 @@ class FolderListWidget extends ListWidget {
|
||||
const orderFolders = (parentId) => {
|
||||
for (let i = 0; i < this.folders.length; i++) {
|
||||
const f = this.folders[i];
|
||||
if (f.parent_id === parentId) {
|
||||
const folderParentId = f.parent_id ? f.parent_id : '';
|
||||
if (folderParentId === parentId) {
|
||||
newItems.push(f);
|
||||
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
|
||||
}
|
||||
|
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Use njstrace to find out what Node.js might be spending time on
|
||||
// var njstrace = require('njstrace').inject();
|
||||
|
||||
// Make it possible to require("/lib/...") without specifying full path
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
|
@@ -589,6 +589,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "S'està exportant a «%s» com a format «%s». Espereu..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Títol del bloc de notes:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "S'està important des de «%s» com a format «%s». Espereu..."
|
||||
@@ -646,6 +660,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -668,6 +685,10 @@ msgstr "Mostra o amaga la barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Canvia el disseny de l'editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Vés al cos"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Eines"
|
||||
|
||||
@@ -718,9 +739,21 @@ msgstr "Cancel·la"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versió actual està actualitzada"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hi ha disponible una actualització. Voleu baixar-la ara?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
@@ -795,13 +828,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes i la configuració es desen a: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -896,6 +932,10 @@ msgstr "Estat"
|
||||
msgid "Encryption is:"
|
||||
msgstr "El xifratge és:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Ús: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Enrere"
|
||||
|
||||
@@ -946,36 +986,6 @@ msgstr "Alguns elements no s'han pogut desxifrar."
|
||||
msgid "Set the password"
|
||||
msgstr "Establiu la contrasenya"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Copia"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia l'enllaç Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Suprimeix"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Voleu suprimir les notes?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "No hi ha cap nota aquí. Creeu-ne una fent clic a «Nota nova»."
|
||||
|
||||
@@ -1025,6 +1035,9 @@ msgstr ""
|
||||
"Aquesta nota no té contingut. Feu clic a «%s» per a anar a l'editor i "
|
||||
"modificar-la."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1118,6 +1131,9 @@ msgstr "Voleu suprimir aquesta etiqueta de totes les notes?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Voleu suprimir aquesta cerca de la barra laterla?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Suprimeix"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Canvia el nom"
|
||||
|
||||
@@ -1367,6 +1383,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualitza automàticament l'aplicació"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Interval de sincronització"
|
||||
|
||||
@@ -1459,6 +1482,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "El valor de l'opció no és vàlid: «%s». Els valors possibles són: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Surt de l'aplicació"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1665,9 +1707,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Per suprimir: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Inicia sessió amb Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clau mestra %s"
|
||||
@@ -1739,6 +1796,9 @@ msgstr "Converteix a nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converteix a llistat de tasques pendents"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia l'enllaç Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Amaga les metadades"
|
||||
|
||||
@@ -1774,6 +1834,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvingut"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Copia"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Voleu suprimir les notes?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estat: %s"
|
||||
|
||||
|
@@ -571,6 +571,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportuji do \"%s\" jako formát \"%s\". Chvíli strpení..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Název zápisníku:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Zápisníky"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importuji z \"%s\" jako formát \"%s\". Chvíli strpení..."
|
||||
@@ -628,6 +642,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -650,6 +667,10 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Změňit layout editoru"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Vybrat text poznámky"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Nástroje"
|
||||
|
||||
@@ -700,9 +721,21 @@ msgstr "Zrušit"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Současná verze je aktuální."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Je k dispozici update, chcete jej stáhnout?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ano"
|
||||
|
||||
@@ -770,13 +803,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Zkontrolujte nastavení synchronizace"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Poznámky a nastavení uloženo v: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Zkontrolujte nastavení synchronizace"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -866,6 +902,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Šifrování je:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Použití: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Zpět"
|
||||
|
||||
@@ -918,37 +958,6 @@ msgstr "Některé položky nelze rozšifrovat."
|
||||
msgid "Set the password"
|
||||
msgstr "Nastavit heslo"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Přidat či odebrat tagy"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopírovat"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Smazat poznámky?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Žádné poznámky. Vytvořte jednu kliknutím na \"Nová poznámka\"."
|
||||
|
||||
@@ -994,6 +1003,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr "Tato poznámka je prázdný. Klikněte na \"%s\" pro otevření editoru."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1088,6 +1100,9 @@ msgstr "Odebrat tento tag ze všech poznámek?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Smazat tento hledaný výraz z panelu?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Přejmenovat"
|
||||
|
||||
@@ -1342,6 +1357,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automaticky updatovat aplikaci"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Interval synchronizace"
|
||||
|
||||
@@ -1434,6 +1456,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Neplatná hodnota: \"%s\". Přípustné hodnoty jsou: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Obecná nastavení"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Stav synchronizace"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Zápisníky"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Ukončí aplikaci."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1634,10 +1675,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Web Joplinu"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Web Joplinu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "K smazání: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Přihlásit se pomocí OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Master heslo %s"
|
||||
@@ -1708,6 +1764,10 @@ msgstr "Konvertovat na poznámku"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konvertovat na todo"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Schovat metadata"
|
||||
|
||||
@@ -1742,6 +1802,27 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
|
||||
msgid "Welcome"
|
||||
msgstr "Vítejte"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Přidat či odebrat tagy"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopírovat"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Přepnout mezi poznámkou a to-do"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Smazat poznámky?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stav: %s."
|
||||
|
||||
|
@@ -576,6 +576,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Eksporterer til \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notesbogs titel:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
@@ -633,6 +647,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -655,6 +672,10 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Skift editor layout"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Værktøjer"
|
||||
|
||||
@@ -705,9 +726,21 @@ msgstr "Fortryd"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Aktuel version er nyeste."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Opdatering er til rådighed, vil du hente den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
@@ -775,13 +808,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Noter og indstillinger er gemt i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -875,6 +911,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering er:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Forbrug: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
@@ -927,37 +967,6 @@ msgstr "Nogle emner kan ikke krypteres."
|
||||
msgid "Set the password"
|
||||
msgstr "Indstil kodeord"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Tilføj eller slet mærker"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopier"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Slet noter?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Der er ingen noter her. Opret en ved at klikke på \"Ny note\"."
|
||||
|
||||
@@ -1003,6 +1012,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr "Denne note er tom. Klik på \"%s\" for at starte editor og rette noten."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1097,6 +1109,9 @@ msgstr "Slet denne markering fra alle noter?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Slet denne søgning fra sidebjælke?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Omdøb"
|
||||
|
||||
@@ -1351,6 +1366,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatisk app update"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniserings interval"
|
||||
|
||||
@@ -1443,6 +1465,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Forlad/luk program."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1643,10 +1684,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Til sletning: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Log på med OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoved nøgle %s"
|
||||
@@ -1717,6 +1773,10 @@ msgstr "Konverter til note"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konverter til opgave"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skjul metadata"
|
||||
|
||||
@@ -1751,6 +1811,27 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Tilføj eller slet mærker"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopier"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Slet noter?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tilstand: %s."
|
||||
|
||||
|
@@ -472,10 +472,10 @@ msgid "Starting synchronisation..."
|
||||
msgstr "Starte Synchronisation..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
msgstr "Lade Anhänge herunter..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Abbrechen… Bitte warten."
|
||||
msgstr "Abbrechen... Bitte warten."
|
||||
|
||||
msgid ""
|
||||
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
|
||||
@@ -598,9 +598,23 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportiere „%s“ ins „%s“ Format. Bitte warten..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notizbuch-Titel:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notizbücher"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten…"
|
||||
msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-Datei"
|
||||
@@ -654,6 +668,9 @@ msgstr "Fett"
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Datum / Uhrzeit einfügen"
|
||||
|
||||
@@ -663,19 +680,22 @@ msgstr "Im externen Editor bearbeiten"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Alle Notizen durchsuchen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Alle Notizen durchsuchen"
|
||||
msgstr "Aktuelle Notiz durchsuchen"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Ansicht"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Seitenleiste ein/aus"
|
||||
msgstr "Seitenleiste umschalten"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Editor-Layout umschalten"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokussiere Inhalt"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Werkzeuge"
|
||||
|
||||
@@ -701,7 +721,7 @@ msgid "Make a donation"
|
||||
msgstr "Spenden"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Updates…"
|
||||
msgstr "Überprüfe auf Aktualisierungen..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
@@ -724,10 +744,23 @@ msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Die aktuelle Version ist up-to-date."
|
||||
msgstr "Die aktuelle Version ist auf dem neuesten Stand."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Es ist ein Update verfügbar. Soll es jetzt heruntergeladen werden?"
|
||||
msgstr ""
|
||||
"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -805,13 +838,16 @@ msgstr ""
|
||||
"Dieses Autorisierung-Token wird nur benötigt, um Drittanbieter-Anwendungen "
|
||||
"Zugriff auf Joplin zu gewähren."
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Überprüfen der Synchronisationseinstellungen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Überprüfen der Synchronisationseinstellungen"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Anwenden"
|
||||
|
||||
@@ -883,7 +919,7 @@ msgstr ""
|
||||
"Notizbücher ursprünglich verschlüsselt wurden."
|
||||
|
||||
msgid "Missing Master Keys"
|
||||
msgstr "Fehlender Hauptschlüssel"
|
||||
msgstr "Fehlende Hauptschlüssel"
|
||||
|
||||
msgid ""
|
||||
"The master keys with these IDs are used to encrypt some of your items, "
|
||||
@@ -905,6 +941,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Die Verschlüsselung ist:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Nutzung: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
@@ -957,34 +997,6 @@ msgstr "Einige Objekte können nicht entschlüsselt werden."
|
||||
msgid "Set the password"
|
||||
msgstr "Setze ein Passwort"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplizieren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s kopieren"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Zwischen Notiz und To-Do Typ wechseln"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Zu Notiz-Typ wechseln"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Zu To-Do-Typ wechseln"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown-Link kopieren"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Notizen löschen?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Keine Notizen vorhanden. Erstelle eine, indem du auf \"Neue Notiz\" drückst."
|
||||
@@ -1023,6 +1035,7 @@ msgstr "Link-Adresse kopieren"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
"Dieser Anhang wurde nicht heruntergeladen oder noch nicht entschlüsselt."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1036,6 +1049,9 @@ msgstr ""
|
||||
"Diese Notiz hat keinen Inhalt. Klicke auf „%s“ um den Editor zu aktivieren "
|
||||
"und die Notiz zu bearbeiten."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "Fetter Text"
|
||||
|
||||
@@ -1128,6 +1144,9 @@ msgstr "Dieses Schlagwort von allen Notizen entfernen?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Diese Suche von der Seitenleiste entfernen?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
@@ -1141,9 +1160,9 @@ msgstr "Notizbücher"
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Entschlüsselte Objekte: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Anhänge: %d."
|
||||
msgstr "Ressourcen abrufen: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
@@ -1354,6 +1373,9 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Dadurch kann Joplin im Hintergrund laufen. Es wird empfohlen,diese "
|
||||
"Einstellung zu aktivieren, damit deine Notizen ständig synchronisiertwerden "
|
||||
"und somit die Anzahl der Konflikte reduziert wird."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "Starte die Anwendung minimiert im Tray"
|
||||
@@ -1361,12 +1383,11 @@ msgstr "Starte die Anwendung minimiert im Tray"
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Zoomstufe der Benutzeroberfläche"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor Schriftenfamilie"
|
||||
msgstr "Schriftgröße im Editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor Schriftenfamilie"
|
||||
msgstr "Schriftfamilie im Editor"
|
||||
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
@@ -1379,6 +1400,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Die Applikation automatisch aktualisieren"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisationsinterval"
|
||||
|
||||
@@ -1478,6 +1506,26 @@ msgstr "Ignoriere TLS-Zertifikatfehler"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ungültiger Optionswert: \"%s\". Mögliche Werte sind: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notizbücher"
|
||||
|
||||
# Please note: The term 'Location' is assumed to be the geographical location where the note has been created. For this the german word 'Standort' fits better than the previously used 'Ablageort'. The latter one is used for the folder where files are stored.
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Standort"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1495,9 +1543,8 @@ msgstr "Joplin Export Verzeichnis"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote Export Datei"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin Export Verzeichnis"
|
||||
msgstr "Json Export Verzeichnis"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Verzeichnis"
|
||||
@@ -1575,10 +1622,10 @@ msgid "On %s: %s"
|
||||
msgstr "Auf %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "Berechtigung zur Verwendung der Kamera"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
msgstr "Deine Zustimmung zur Verwendung deiner Kamera ist erforderlich."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
@@ -1691,9 +1738,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website von Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Datenbank v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS aktiviert: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Mit Dropbox anmelden"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Hier Code eingeben"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hauptschlüssel %s"
|
||||
@@ -1746,9 +1808,8 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Nicht unterstütztes Fotoformat: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Foto anhängen"
|
||||
msgstr "Foto aufnehmen"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Foto anhängen"
|
||||
@@ -1765,6 +1826,9 @@ msgstr "In eine Notiz umwandeln"
|
||||
msgid "Convert to todo"
|
||||
msgstr "In ein To-Do umwandeln"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown-Link kopieren"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Metadaten verstecken"
|
||||
|
||||
@@ -1775,7 +1839,7 @@ msgid "View on map"
|
||||
msgstr "Auf der Karte anzeigen"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
msgstr "Zur Quell-URL gehen"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Notizbuch löschen"
|
||||
@@ -1802,6 +1866,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Schlagwörter hinzufügen oder entfernen"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplizieren"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopieren"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Zwischen Notiz und To-Do Typ wechseln"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Zu Notiz-Typ wechseln"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Zu To-Do-Typ wechseln"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notizen löschen?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: %s."
|
||||
|
||||
@@ -1845,9 +1930,6 @@ msgstr "Willkommen"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Das vorherige Fenster fokussieren"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Zum Terminal-Modus wechseln"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Den Terminal-Modus verlassen"
|
||||
|
||||
@@ -1866,7 +1948,6 @@ msgstr "Willkommen"
|
||||
#~ msgid "Set a to-do as completed / not completed"
|
||||
#~ msgstr "Ein To-Do als abgeschlossen / nicht abgeschlossen markieren"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "[t]oggle [c]onsole between maximized/minimized/hidden/visible."
|
||||
#~ msgstr ""
|
||||
#~ "Schal[t]e das Terminal zwischen maximiert/minimiert/versteckt/sichtbar um."
|
||||
|
@@ -508,6 +508,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note body"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -564,6 +576,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -585,6 +600,9 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
@@ -635,9 +653,21 @@ msgstr ""
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -704,13 +734,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -789,6 +822,9 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -839,34 +875,6 @@ msgstr ""
|
||||
msgid "Set the password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -912,6 +920,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1004,6 +1015,9 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
@@ -1241,6 +1255,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1325,6 +1346,21 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1514,9 +1550,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1586,6 +1637,9 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -585,6 +585,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título de libreta:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Libretas"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
@@ -642,6 +656,9 @@ msgstr "Negrita"
|
||||
msgid "Italic"
|
||||
msgstr "Cursiva"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Introduce fecha"
|
||||
|
||||
@@ -664,6 +681,10 @@ msgstr "Cambia la barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambia el diseño del editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Foco en el cuerpo"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Herramientas"
|
||||
|
||||
@@ -714,9 +735,21 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versión actual está actualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hay disponible una actualización. ¿Quiere descargarla ahora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
@@ -791,13 +824,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar sincronización"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Las notas y los ajustes se guardan en: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar sincronización"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
@@ -891,6 +927,10 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "El cifrado está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
@@ -941,36 +981,6 @@ msgstr "No se han podido descifrar algunos elementos."
|
||||
msgid "Set the password"
|
||||
msgstr "Establecer la contraseña"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicado"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar el enlace de Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "¿Desea eliminar notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "No hay ninguna nota. Cree una pulsando «Nota nueva»."
|
||||
|
||||
@@ -1018,6 +1028,9 @@ msgstr ""
|
||||
"Esta nota no tiene contenido. Pulse en \"%s\" para cambiar al editor y "
|
||||
"editar la nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto destacado"
|
||||
|
||||
@@ -1110,6 +1123,9 @@ msgstr "¿Desea eliminar esta etiqueta de todas las notas?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "¿Desea eliminar esta búsqueda de la barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renombrar"
|
||||
|
||||
@@ -1360,6 +1376,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizar la aplicación automáticamente"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronización"
|
||||
|
||||
@@ -1457,6 +1480,25 @@ msgstr "Ignorar errores en certificados TLS"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Opción inválida: «%s». Los valores posibles son: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opciones generales"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estado de la sincronización"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Libretas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Salir de la aplicación."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1663,9 +1705,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Borrar: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Acceder con Dropbox"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrar en modo línea de comandos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clave maestra %s"
|
||||
@@ -1737,6 +1795,9 @@ msgstr "Convertir a nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Convertir a lista de tareas"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar el enlace de Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadatos"
|
||||
|
||||
@@ -1772,6 +1833,29 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenido"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplicado"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copiar"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "¿Desea eliminar notas?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: «%s»."
|
||||
|
||||
@@ -1822,9 +1906,6 @@ msgstr "Bienvenido"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Enfocar el panel anterior"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Entrar en modo línea de comandos"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Salir del modo línea de comandos"
|
||||
|
||||
@@ -1834,9 +1915,6 @@ msgstr "Bienvenido"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Cancelar el comando actual."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Salir de la aplicación."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Eliminar la nota o libreta seleccionada."
|
||||
|
||||
|
@@ -582,6 +582,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Koadernoaren izenburua: "
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -641,6 +655,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -663,6 +680,9 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Tresnak"
|
||||
|
||||
@@ -714,9 +734,21 @@ msgstr "Utzi"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -785,14 +817,17 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -883,6 +918,10 @@ msgstr "Egoera"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Zifratua da:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Erabili: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Atzera"
|
||||
|
||||
@@ -937,36 +976,6 @@ msgstr "Zenbait item ezin dira deszifratu."
|
||||
msgid "Set the password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiatu"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ezabatu"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Oharrak ezabatu?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Hemen ez dago oharrik. Sortu bat \"Ohar berria\" sakatuta."
|
||||
|
||||
@@ -1013,6 +1022,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1110,6 +1122,9 @@ msgstr "Kendu etiketa hori ohar guztietatik?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Kendu bilaketa hori ohar guztietatik?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ezabatu"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Berrizendatu"
|
||||
|
||||
@@ -1369,6 +1384,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatikoki eguneratu aplikazioa"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Sinkronizazio tartea"
|
||||
|
||||
@@ -1464,6 +1486,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Irten aplikaziotik"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1664,10 +1705,26 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Ezabatzeko: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login with OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Sartu komando-lerro moduan "
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Pasahitz Nagusia %s"
|
||||
@@ -1738,6 +1795,9 @@ msgstr "Oharra bihurtu"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Zeregina bihurtu"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ezkutatu metadatuak"
|
||||
|
||||
@@ -1772,6 +1832,27 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiatu"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Oharrak ezabatu?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Egoera: \"%s\"."
|
||||
@@ -1814,9 +1895,6 @@ msgstr "Ongi etorri!"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Eraman fokua aurreko panelera"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Sartu komando-lerro moduan "
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Irten komando-lerro modutik"
|
||||
|
||||
@@ -1826,9 +1904,6 @@ msgstr "Ongi etorri!"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Utzi uneko komandoa"
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Irten aplikaziotik"
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Ezabatu aukeratutako oharra edo koadernoa"
|
||||
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr "Pour supprimer une vignette, enlever là des notes associées."
|
||||
@@ -583,6 +583,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exporter vers \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr "Barre latérale"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr "Liste de notes"
|
||||
|
||||
msgid "Note title"
|
||||
msgstr "Titre de la note"
|
||||
|
||||
msgid "Note body"
|
||||
msgstr "Corps de la note"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
@@ -639,6 +651,9 @@ msgstr "Gras"
|
||||
msgid "Italic"
|
||||
msgstr "Italique"
|
||||
|
||||
msgid "Link"
|
||||
msgstr "Lien"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Insérer la date et l'heure"
|
||||
|
||||
@@ -660,6 +675,9 @@ msgstr "Basculer barre latérale"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Basculer l'agencement de l'éditeur"
|
||||
|
||||
msgid "Focus"
|
||||
msgstr "Naviguer"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Outils"
|
||||
|
||||
@@ -710,10 +728,22 @@ msgstr "Annuler"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La version actuelle est à jour."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (pré-release)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Votre version : v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Nouvelle version : v%s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
|
||||
@@ -789,13 +819,16 @@ msgstr ""
|
||||
"Ce code d'authentification est nécessaire uniquement pour permettre aux "
|
||||
"logiciels tiers d'accéder aux données de Joplin."
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Vérifier config synchronisation"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes et paramètres se trouve dans : %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Parcourir…"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Vérifier config synchronisation"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Appliquer"
|
||||
|
||||
@@ -891,6 +924,9 @@ msgstr "État"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Le chiffrement est :"
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "Utilisation"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
@@ -943,34 +979,6 @@ msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
msgid "Set the password"
|
||||
msgstr "Définir le mot de passe"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gérer les étiquettes"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliquer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copie"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alterner entre note et tâche"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Convertir en note"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Convertir en tâche"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copier lien Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Supprimer les notes ?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Pas de notes ici. Créez-en une en pressant le bouton \"Nouvelle note\"."
|
||||
@@ -1021,6 +1029,11 @@ msgstr ""
|
||||
"Cette note n'a pas de contenu. Cliquer sur \"%s\" pour basculer vers "
|
||||
"l'éditeur et éditer cette note."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
"Les notes ne peuvent être imprimées ou exportées en PDF qu'une seule à la "
|
||||
"fois."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texte en gras"
|
||||
|
||||
@@ -1113,6 +1126,9 @@ msgstr "Enlever cette étiquette de toutes les notes ?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Enlever cette recherche de la barre latérale ?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
@@ -1365,6 +1381,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Mettre à jour le logiciel automatiquement"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "Recevoir les pré-release lors de la vérification des mises à jour"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "Voir la page des pré-release pour plus de détails : %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalle de synchronisation"
|
||||
|
||||
@@ -1464,6 +1487,21 @@ msgstr "Ignorer les erreurs de certificats TLS"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
|
||||
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisation"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Apparence"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Application"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr "L'étiquette \"%s\" existe déjà. Veuillez choisir un autre nom."
|
||||
@@ -1673,9 +1711,24 @@ msgstr "- Position : Pour attacher à une note les coordonnées GPS."
|
||||
msgid "Joplin website"
|
||||
msgstr "Site web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Base de données v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS activé : %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Se connecter à Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrez le code ici"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clef maître %s"
|
||||
@@ -1746,6 +1799,9 @@ msgstr "Convertir en note"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Convertir en tâche"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copier lien Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Cacher les métadonnées"
|
||||
|
||||
@@ -1782,6 +1838,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Gérer les étiquettes"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Dupliquer"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copie"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alterner entre note et tâche"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Convertir en note"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Convertir en tâche"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Supprimer les notes ?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "État : %s."
|
||||
|
||||
@@ -1832,9 +1909,6 @@ msgstr "Bienvenue"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Activer le volet précédent"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Démarrer le mode de ligne de commande"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Sortir du mode de ligne de commande"
|
||||
|
||||
|
@@ -576,6 +576,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando a «%s» como formato «%s». Agarde..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título do caderno:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando de «%s» como formato «%s». Agarde..."
|
||||
@@ -633,6 +647,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -655,6 +672,10 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambiar a disposición do editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
@@ -705,9 +726,21 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "A versión actual está actualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hai unha actualización dispoñíbel, desexa descargala agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Si"
|
||||
|
||||
@@ -775,13 +808,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "As notas e axustes gardáronse en: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -873,6 +909,10 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "O cifrado é:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Anterior"
|
||||
|
||||
@@ -924,37 +964,6 @@ msgstr "Non é posíbel descifrar algúns elementos."
|
||||
msgid "Set the password"
|
||||
msgstr "Estabelecer un contrasinal"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Desexa eliminar as notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Aquí non hai notas. Cree unha premendo en «Nova nota»."
|
||||
|
||||
@@ -1002,6 +1011,9 @@ msgstr ""
|
||||
"Esta nota non ten contido. Prema en «%s» para ir ao editor e modificar a "
|
||||
"nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1096,6 +1108,9 @@ msgstr "Desexa eliminar esta etiqueta de todas as notas?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Desexa eliminar esta busca da barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
@@ -1350,6 +1365,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizar automaticamente o aplicativo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronización"
|
||||
|
||||
@@ -1442,6 +1464,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sae do aplicativo."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1642,10 +1683,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Borrar: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Acceder con OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chave mestra %s"
|
||||
@@ -1716,6 +1772,10 @@ msgstr "Converter para nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converter para tarefa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadados"
|
||||
|
||||
@@ -1750,6 +1810,27 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Copiar"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Desexa eliminar as notas?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: %s."
|
||||
|
||||
|
@@ -579,6 +579,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Naslov bilježnice:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -638,6 +652,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -660,6 +677,10 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Naslov bilješke:"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
@@ -712,9 +733,21 @@ msgstr "Odustani"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -783,14 +816,17 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Bilješke i postavke su pohranjene u: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -869,6 +905,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Korištenje: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
@@ -924,36 +964,6 @@ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
msgid "Set the password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Obriši"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Obriši bilješke?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Ovdje nema bilješki. Stvori novu pritiskom na \"Nova bilješka\"."
|
||||
|
||||
@@ -1000,6 +1010,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1096,6 +1109,9 @@ msgstr "Makni ovu oznaku iz svih bilješki?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Makni ovu pretragu iz izbornika?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Obriši"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Preimenuj"
|
||||
|
||||
@@ -1351,6 +1367,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatsko instaliranje nove verzije"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Interval sinkronizacije"
|
||||
|
||||
@@ -1441,6 +1464,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcije"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1639,10 +1681,26 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Za brisanje: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Prijavi se u OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Otvori naredbeni redak"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1714,6 +1772,9 @@ msgstr "Pretvori u bilješku"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Pretvori u zadatak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Sakrij metapodatke"
|
||||
|
||||
@@ -1748,6 +1809,27 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Dodaj ili makni oznake"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiraj"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Obriši bilješke?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: \"%s\"."
|
||||
@@ -1789,9 +1871,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Fokusiraj prethodno okno"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Otvori naredbeni redak"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Napusti naredbeni redak"
|
||||
|
||||
@@ -1801,9 +1880,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Prekini trenutnu naredbu."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Izađi iz aplikacije."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Obriši odabranu bilješku ili bilježnicu."
|
||||
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.1.1\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
@@ -462,7 +462,7 @@ msgid "Starting synchronisation..."
|
||||
msgstr "Inizio sincronizzazione..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
msgstr "Scaricamento risorse…"
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancellazione... Attendere per favore."
|
||||
@@ -566,6 +566,13 @@ msgid ""
|
||||
"\n"
|
||||
"For example, to create a notebook press `mb`; to create a note press `mn`."
|
||||
msgstr ""
|
||||
"Benvenuto in Joplin!\n"
|
||||
"\n"
|
||||
"Digita `:help shortcuts` per la lista delle scorciatoie da tastiera, oppure "
|
||||
"solo `:help` per le informazioni di utilizzo.\n"
|
||||
"\n"
|
||||
"Per esempio, per creare un taccuino digita `mb`; per creare una nota digita "
|
||||
"`mn`."
|
||||
|
||||
msgid ""
|
||||
"One or more items are currently encrypted and you may need to supply a "
|
||||
@@ -582,6 +589,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Esportazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titolo del Taccuino:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Taccuini"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
@@ -629,9 +650,8 @@ msgstr "Taglia"
|
||||
msgid "Paste"
|
||||
msgstr "Incolla"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Seleziona la data"
|
||||
msgstr "Seleziona tutto"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Grasseto"
|
||||
@@ -639,6 +659,9 @@ msgstr "Grasseto"
|
||||
msgid "Italic"
|
||||
msgstr "Corsivo"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserisci data e ora"
|
||||
|
||||
@@ -648,9 +671,8 @@ msgstr "Modifica in un editor esterno"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Cerca in tutte le note"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Cerca in tutte le note"
|
||||
msgstr "Cerca nella nota corrente"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
@@ -661,6 +683,10 @@ msgstr "Attiva / disattiva barra laterale"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Attiva / disattiva il layout dell'editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focus sul testo"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Strumenti"
|
||||
|
||||
@@ -711,9 +737,21 @@ msgstr "Cancella"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versione attuale è aggiornata."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sì"
|
||||
|
||||
@@ -787,13 +825,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Le note e le impostazioni sono memorizzate in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Applica"
|
||||
|
||||
@@ -889,6 +930,10 @@ msgstr "Stato"
|
||||
msgid "Encryption is:"
|
||||
msgstr "La crittografia è:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
@@ -939,36 +984,6 @@ msgstr "Alcuni elementi non possono essere decodificati."
|
||||
msgid "Set the password"
|
||||
msgstr "Imposta la password"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Aggiungi o rimuovi etichetta"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicare"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copia"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia il link Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Eliminare le note?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Non è presente nessuna nota. Creane una cliccando \"Nuova nota\"."
|
||||
|
||||
@@ -1004,7 +1019,7 @@ msgid "Copy Link Address"
|
||||
msgstr "Copia l'indirizzo del link"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
msgstr "Questo allegato non è ancora stato scaricato o decriptato."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1018,6 +1033,9 @@ msgstr ""
|
||||
"Questa nota non ha contenuto. Fai clic su \"%s\" per attivare l'editor e "
|
||||
"modificare la nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "Testo grasseto"
|
||||
|
||||
@@ -1111,6 +1129,9 @@ msgstr "Rimuovere questa etichetta da tutte le note?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Rimuovere questa ricerca dalla barra laterale?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Rinomina"
|
||||
|
||||
@@ -1316,10 +1337,10 @@ msgid "When creating a new to-do:"
|
||||
msgstr "Quando crei un nuovo \"Cose-da-fare\":"
|
||||
|
||||
msgid "Focus title"
|
||||
msgstr ""
|
||||
msgstr "Focus sul titolo"
|
||||
|
||||
msgid "Focus body"
|
||||
msgstr ""
|
||||
msgstr "Focus sul testo"
|
||||
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando si crea una nuova nota:"
|
||||
@@ -1335,6 +1356,9 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Questo consentirà Joplin di essere in esecuzione in background. E’ "
|
||||
"raccomandata l’attivazione di questa impostazione per sincronizzare "
|
||||
"costantemente le tue note e quindi ridurre il numero di conflitti."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
@@ -1342,12 +1366,11 @@ msgstr ""
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Percentuale di zoom globale"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor Famiglia Caratteri"
|
||||
msgstr "Editor dimensione caratteri"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor Famiglia Caratteri"
|
||||
msgstr "Editor famiglia caratteri"
|
||||
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
@@ -1360,6 +1383,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Aggiorna automaticamente l'applicazione"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervallo di sincronizzazione"
|
||||
|
||||
@@ -1454,14 +1484,33 @@ msgstr "Ignora gli errori del certificato TLS"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Oprione non valida: \"%s\". I valori possibili sono: %s."
|
||||
msgstr "Opzione non valida: \"%s\". I valori possibili sono: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Taccuini"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Esci dall'applicazione."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "Il tag \"%s\" esiste già. Scegliere un nome differente."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Esposta files di Joplin"
|
||||
msgstr "Esporta file di Joplin"
|
||||
|
||||
msgid "Markdown"
|
||||
msgstr "Markdown"
|
||||
@@ -1472,9 +1521,8 @@ msgstr "Cartella di esportazione di Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Esporta files di Evernote"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Cartella di esportazione di Joplin"
|
||||
msgstr "Cartella di esportazione JSON"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Cartella"
|
||||
@@ -1551,7 +1599,7 @@ msgid "On %s: %s"
|
||||
msgstr "Su %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "Permesso di usare la fotocamera"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
@@ -1661,11 +1709,26 @@ msgstr ""
|
||||
"geografica ad una nota."
|
||||
|
||||
msgid "Joplin website"
|
||||
msgstr "Siro web Joplin"
|
||||
msgstr "Sito web Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS attivato: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Inserisci qui il codice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chiave Master %s"
|
||||
@@ -1718,9 +1781,8 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo di immagine non supportata: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Allega foto"
|
||||
msgstr "Scatta foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Allega foto"
|
||||
@@ -1737,6 +1799,9 @@ msgstr "Converti in nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converti in Todo"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia il link Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Nascondi i Metadati"
|
||||
|
||||
@@ -1772,6 +1837,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvenuto"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Aggiungi o rimuovi etichetta"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplicare"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copia"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Converti in nota"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Converti in \"Cose-da-fare\""
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Eliminare le note?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stato: %s."
|
||||
|
||||
@@ -1829,9 +1915,6 @@ msgstr "Benvenuto"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Pannello precedente"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Accedi alla modalità linea di comando"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Esci dalla modalità linea di comando"
|
||||
|
||||
@@ -1841,9 +1924,6 @@ msgstr "Benvenuto"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Cancella il comando corrente."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Esci dall'applicazione."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Elimina la nota o il taccuino selezionato."
|
||||
|
||||
|
@@ -236,7 +236,7 @@ msgstr ""
|
||||
"ムを参照できます。"
|
||||
|
||||
msgid "To move from one pane to another, press Tab or Shift+Tab."
|
||||
msgstr "ペイン間を移動するには、TabかShift+Tabをおしてください。"
|
||||
msgstr "ペイン間を移動するには、TabかShift+Tabを押してください。"
|
||||
|
||||
msgid ""
|
||||
"Use the arrows and page up/down to scroll the lists and text areas "
|
||||
@@ -446,7 +446,7 @@ msgid "Starting synchronisation..."
|
||||
msgstr "同期を開始中..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
msgstr "リソースをダウンロード中..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "中止中...お待ちください。"
|
||||
@@ -570,6 +570,20 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
"\"%s\" を \"%s\" フォーマットにエクスポート中。しばらくお待ちください..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "ノートブックの題名:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "ノートブック"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -618,9 +632,8 @@ msgstr "切り取り"
|
||||
msgid "Paste"
|
||||
msgstr "貼り付け"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "日付の選択"
|
||||
msgstr "すべて選択"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "太字"
|
||||
@@ -628,6 +641,9 @@ msgstr "太字"
|
||||
msgid "Italic"
|
||||
msgstr "斜体"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "日付の入力"
|
||||
|
||||
@@ -637,9 +653,8 @@ msgstr "外部エディターで編集"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "すべてのノートを検索"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "すべてのノートを検索"
|
||||
msgstr "現在のノートを検索"
|
||||
|
||||
msgid "View"
|
||||
msgstr "表示"
|
||||
@@ -650,6 +665,10 @@ msgstr "サイドバーの表示切り替え"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "エディターレイアウトの表示切り替え"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "本文にフォーカス"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "ツール"
|
||||
|
||||
@@ -700,9 +719,21 @@ msgstr "キャンセル"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "現在のバージョンは最新版です。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "アップデートがあります。すぐにダウンロードしますか?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Yes"
|
||||
|
||||
@@ -710,7 +741,7 @@ msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
msgstr "トークンをクリップボードにコピーしました!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "Webクリッパーサービスは有効で、自動起動します。"
|
||||
@@ -760,28 +791,32 @@ msgstr "ステップ2: 拡張機能のインストール"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "関連する拡張機能をブラウザーにインストールします:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "詳細な設定の表示"
|
||||
msgstr "詳細な設定"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
msgstr "認証するトークン:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
msgstr "トークンのコピー"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "同期の設定を確認する"
|
||||
"この認証トークンはサードパーティアプリケーションがJoplinにアクセスするためだ"
|
||||
"けに必要です。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "ノートと設定は次の場所に保存されます: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "同期の設定を確認する"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "適用"
|
||||
|
||||
@@ -873,6 +908,10 @@ msgstr "状態"
|
||||
msgid "Encryption is:"
|
||||
msgstr "暗号化の状態:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "使用方法: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
@@ -925,36 +964,6 @@ msgstr "いくつかの項目は復号されませんでした。"
|
||||
msgid "Set the password"
|
||||
msgstr "パスワードの設定"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "タグの追加と削除"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "複製"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - コピー"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "ノートとToDoを切り替え"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "ノートとToDoを切り替え"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "ノートとToDoを切り替え"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownのリンクをコピー"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "ノートを削除しますか?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "ノートがありません。新しいノートを作成して下さい。"
|
||||
|
||||
@@ -963,13 +972,13 @@ msgid ""
|
||||
msgstr "ノートブックがありません。新しいノートブックを作成してください。"
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "場所"
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
msgstr "ノートのプロパティ"
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "開く..."
|
||||
@@ -988,7 +997,7 @@ msgid "Copy Link Address"
|
||||
msgstr "リンクアドレスをコピー"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
msgstr "この添付ファイルはダウンロードできないか、まだ復号できません。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1002,6 +1011,9 @@ msgstr ""
|
||||
"このノートには中身がありません。 \"%s\" をクリックしてエディターを表示し、"
|
||||
"ノートを編集してください。"
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "文字を太字に"
|
||||
|
||||
@@ -1015,7 +1027,7 @@ msgid "Insert Hyperlink"
|
||||
msgstr "ハイパーリンクの挿入"
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "ファイルを添付"
|
||||
msgstr "ファイルを添付する"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "タグ"
|
||||
@@ -1094,6 +1106,9 @@ msgstr "すべてのノートからこのタグを削除しますか?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "サイドバーからこの検索を削除しますか?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "名前の変更"
|
||||
|
||||
@@ -1107,9 +1122,9 @@ msgstr "ノートブック"
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "復号中のアイテム: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "リソース: %d."
|
||||
msgstr "取得中のリソース: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "同期状況の出力先を選択してください"
|
||||
@@ -1320,6 +1335,8 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"有効にすると、Joplinがバックグラウンドで動作するようになります。ノートを定期"
|
||||
"的に同期し、衝突を減らすために強くおすすめする設定です。"
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "アプリケーションをトレイアンコンで最小化して起動"
|
||||
@@ -1327,9 +1344,8 @@ msgstr "アプリケーションをトレイアンコンで最小化して起動
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "全体ズームの割合"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "エディターのフォントファミリー"
|
||||
msgstr "エディターのフォントサイズ"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "エディターのフォントファミリー"
|
||||
@@ -1342,7 +1358,14 @@ msgstr ""
|
||||
"誤っているか空の場合は、一般的な等幅フォントが指定されるでしょう。"
|
||||
|
||||
msgid "Automatically update the application"
|
||||
msgstr "アプリケーションの自動更新"
|
||||
msgstr "アプリケーションを自動的にアップデート"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "同期間隔"
|
||||
@@ -1441,6 +1464,25 @@ msgstr "TLS証明書のエラーを無視"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "全般のオプション"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "同期状況"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "ノートブック"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "場所"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr "タグ \"%s\" はすでにあります。ほかの名前を選択してください。"
|
||||
@@ -1457,9 +1499,8 @@ msgstr "Joplin エクスポートディレクトリ"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote エクスポートファイル"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin エクスポートディレクトリ"
|
||||
msgstr "Json エクスポートディレクトリ"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "ディレクトリ"
|
||||
@@ -1536,10 +1577,10 @@ msgid "On %s: %s"
|
||||
msgstr "日時 %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "カメラ使用の許可"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
msgstr "カメラを使用するには権限が必要です。"
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "ノートがありません。(+)ボタンを押して新しいノートを作成してください。"
|
||||
@@ -1569,9 +1610,8 @@ msgstr "%d個のノートを\"%s\"に移動しますか?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "復号するパスワードを入力してください。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "アラームをセット"
|
||||
msgstr "アラームをクリア"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "アラームの保存"
|
||||
@@ -1585,22 +1625,21 @@ msgstr "確認"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "同期の中止"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "中止中...お待ちください。"
|
||||
msgstr "確認中...お待ちください。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "同期の設定を確認する"
|
||||
msgstr "成功です! 同期の設定は正しいようです。"
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"エラーです。URL、ユーザー名、パスワードなどを修正し、同期するターゲットにアク"
|
||||
"セスできるかを確認してください。次が報告されたエラーです:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "アプリケーションは問題なく認証されました。"
|
||||
msgstr "アプリケーションは問題なく認証されました!"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1610,10 +1649,15 @@ msgid ""
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"アプリケーションが認証できません:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"やり直してください。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "復号中のアイテム: %d/%d"
|
||||
msgstr "復号中のアイテム: %s/%s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "新しいタグ:"
|
||||
@@ -1644,9 +1688,25 @@ msgstr "- 位置情報: ノートに位置情報を添付するのに必要で
|
||||
msgid "Joplin website"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "削除予定: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Dropboxでログイン"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "コマンドラインモードに入る"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "マスターキー %s"
|
||||
@@ -1698,9 +1758,8 @@ msgstr "Joplinモバイルアプリは次のタイプのリンクをまだサポ
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "サポートされていない画像の形式: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "写真を添付"
|
||||
msgstr "写真を撮影する"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "写真を添付"
|
||||
@@ -1717,6 +1776,9 @@ msgstr "ノートに変換"
|
||||
msgid "Convert to todo"
|
||||
msgstr "ToDoに変換"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownのリンクをコピー"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "メタデータを隠す"
|
||||
|
||||
@@ -1727,7 +1789,7 @@ msgid "View on map"
|
||||
msgstr "地図上に表示"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
msgstr "ソースURLに行く"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "ノートブックを削除"
|
||||
@@ -1753,6 +1815,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "ようこそ"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "タグの追加と削除"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "複製"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - コピー"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "ノートとToDoを切り替え"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "ノートに切り替え"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "ToDoに切り替え"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "ノートを削除しますか?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "状態: \"%s\"."
|
||||
|
||||
@@ -1793,9 +1876,6 @@ msgstr "ようこそ"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "前のペインへ"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "コマンドラインモードに入る"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "コマンドラインモードの終了"
|
||||
|
||||
|
@@ -508,6 +508,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note body"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -564,6 +576,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -585,6 +600,9 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
@@ -635,9 +653,21 @@ msgstr ""
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -704,13 +734,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -789,6 +822,9 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -839,34 +875,6 @@ msgstr ""
|
||||
msgid "Set the password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -912,6 +920,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1004,6 +1015,9 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
@@ -1241,6 +1255,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1325,6 +1346,21 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1514,9 +1550,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1586,6 +1637,9 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -447,12 +447,11 @@ msgid "Starting synchronisation..."
|
||||
msgstr "동기화를 시작합니다..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
msgstr "리소스 다운로드 중..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "취소하는 중입니다... 잠시만 기다리세요."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
|
||||
"[tag] from [note], or to list the notes associated with [tag]. The command "
|
||||
@@ -460,7 +459,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"[note]로부터 [tag]를 지우거나 지정할 때, 아니면 [tag]와 관련된 노트의 목록을 "
|
||||
"확인할 때 <tag-command>로 \"add\", \"remove\" 또는 \"list\" 를 사용할 수 있습"
|
||||
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다."
|
||||
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다 (옵션 -l 사"
|
||||
"용 가능)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -568,6 +568,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "\"%s\"에 \"%s\" 포맷으로 내보내는 중입니다. 잠시만 기다리세요..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "노트북 제목:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "노트북"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만 기다리세요..."
|
||||
@@ -615,9 +629,8 @@ msgstr "잘라내기"
|
||||
msgid "Paste"
|
||||
msgstr "붙여넣기"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "날짜 선택"
|
||||
msgstr "모두 선택"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "굵게"
|
||||
@@ -625,6 +638,9 @@ msgstr "굵게"
|
||||
msgid "Italic"
|
||||
msgstr "기울임"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "날짜와 시간 입력"
|
||||
|
||||
@@ -634,9 +650,8 @@ msgstr "외부 편집기에서 편집하기"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "모든 노트에서 검색"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "모든 노트에서 검색"
|
||||
msgstr "현재 노트에서 검색"
|
||||
|
||||
msgid "View"
|
||||
msgstr "보기"
|
||||
@@ -647,6 +662,10 @@ msgstr "사이드바 표시 전환"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "편집기 배치 형태 전환"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "내용에 포커스"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "도구"
|
||||
|
||||
@@ -697,9 +716,21 @@ msgstr "취소"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "현재 버전은 최신입니다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (프리-릴리즈)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "현재 버전: v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "새 버전: v%s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "예"
|
||||
|
||||
@@ -707,7 +738,7 @@ msgid "No"
|
||||
msgstr "아니오"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
msgstr "토큰이 클립보드로 복사되었습니다!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "웹 수집기 서비스가 활성화되었고 자동으로 시작하도록 설정되었습니다."
|
||||
@@ -756,28 +787,32 @@ msgstr "2단계: 확장 기능 설치"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "브라우저에 적절한 확장 기능을 다운로드 및 설치하세요:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "고급 옵션"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
msgstr "인증 토큰:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
msgstr "토큰 복사"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "동기화 설정 확인"
|
||||
"이 인증 토큰은 오직 서드파티 애플리케이션에서 조플린을 접근할 때만 필요합니"
|
||||
"다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "동기화 설정 확인"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "적용"
|
||||
|
||||
@@ -869,6 +904,10 @@ msgstr "상태"
|
||||
msgid "Encryption is:"
|
||||
msgstr "암호화는 다음과 같습니다:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "사용량: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "뒤로 가기"
|
||||
|
||||
@@ -919,36 +958,6 @@ msgstr "일부 항목들은 암호화할 수 없습니다."
|
||||
msgid "Set the password"
|
||||
msgstr "암호 설정"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "태그 추가 및 제거"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "복제"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - 복사"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "마크다운 링크 복사"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "노트를 삭제할까요?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "노트가 없습니다. '새 노트'를 선택해서 노트를 새로 만드세요."
|
||||
|
||||
@@ -957,13 +966,13 @@ msgid ""
|
||||
msgstr "노트북이 없습니다. '새 노트북'을 선택해서 노트북을 새로 만드세요."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "위치"
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
msgstr "노트 속성"
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "열기..."
|
||||
@@ -982,7 +991,7 @@ msgid "Copy Link Address"
|
||||
msgstr "링크 주소 복사"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
msgstr "이 첨부는 아직 다운로드 또는 복호화 되지 않았습니다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -996,6 +1005,9 @@ msgstr ""
|
||||
"비어있는 노트입니다. \"%s\" 항목을 선택해서 편집기를 전환하고 노트를 편집하세"
|
||||
"요."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr "한 번에 오직 하나의 노트만 출력하거나 내보내기 할 수 있습니다."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "중요 텍스트"
|
||||
|
||||
@@ -1088,6 +1100,9 @@ msgstr "모든 노트에서 이 태그를 제거할까요?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "사이드바에서 이 검색 항목을 제거할까요?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "이름 바꾸기"
|
||||
|
||||
@@ -1101,9 +1116,9 @@ msgstr "노트북"
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "복호화 항목: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "리소스: %d."
|
||||
msgstr "리소스 가져오는 중: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
|
||||
@@ -1312,16 +1327,17 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"조플린을 백그라운드에서 구동합니다. 노트가 정기적으로 동기화 되어 충돌 횟수"
|
||||
"를 줄이기 위해 이 옵션을 활성화 하는 것을 추천합니다."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
msgstr "트레이 아이콘에 최소화 된 상태로 애플리케이션 시작"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "전체적 확대 비율"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "편집기 글꼴 집합"
|
||||
msgstr "편집기 글꼴 크기"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "편집기 글꼴 집합"
|
||||
@@ -1337,6 +1353,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "애플리케이션을 자동으로 업데이트"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "업데이트 확인 시 프리-릴리즈 받기"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "자세한 내용은 프리-릴리즈 페이지를 참조하세요: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "동기화 간격"
|
||||
|
||||
@@ -1394,6 +1417,8 @@ msgid ""
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
@@ -1431,9 +1456,28 @@ msgstr "TLS 인증서 오류 무시"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "올바르지 않은 옵션 값: \"%s\". 가능한 값은 다음과 같습니다: \"%s\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "노트북"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "위치"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "태그 \"%s\"(이)가 이미 존재합니다. 다른 이름을 선택해 주세요."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "조플린 내보내기 파일"
|
||||
@@ -1447,9 +1491,8 @@ msgstr "조플린 내보내기 폴더"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "에버노트 내보내기 파일"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "조플린 내보내기 폴더"
|
||||
msgstr "Json 내보내기 폴더"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "폴더"
|
||||
@@ -1526,10 +1569,10 @@ msgid "On %s: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "카메라 사용 허가"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
msgstr "카메라 사용을 허가가 요구됩니다."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "노트가 없습니다. (+) 버튼을 선택해 새로 만드세요."
|
||||
@@ -1559,9 +1602,8 @@ msgstr "%d 노트를 \"%s\" 노트북으로 옮길까요?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "복호화 암호를 설정하려면 누르세요."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "알람 설정"
|
||||
msgstr "알람 취소"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "알람 저장"
|
||||
@@ -1575,20 +1617,19 @@ msgstr "확인"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "동기화 취소"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "취소하는 중입니다... 잠시만 기다리세요."
|
||||
msgstr "확인 중입니다... 잠시만 기다리세요."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "동기화 설정 확인"
|
||||
msgstr "성공! 동기화 설정이 올바릅니다."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "애플리케이션이 성공적으로 허가되었습니다."
|
||||
|
||||
@@ -1600,10 +1641,15 @@ msgid ""
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"애플리케이션을 허가할 수 없습니다:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"다시 시도해 주세요."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "복호화 항목: %d/%d"
|
||||
msgstr "복호화된 항목: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "새 태그:"
|
||||
@@ -1634,9 +1680,24 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
|
||||
msgid "Joplin website"
|
||||
msgstr "조플린 웹사이트"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "조플린 v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "데이터베이스 v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS 활성됨: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Dropbox로 로그인"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "여기에 코드를 입력하세요"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "관리자 키 %s"
|
||||
@@ -1688,9 +1749,8 @@ msgstr "조플린 모바일 앱은 현재 해당 형식의 링크를 지원하
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "지원하지 않는 이미지 형식: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "사진 첨부"
|
||||
msgstr "사진 찍기"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "사진 첨부"
|
||||
@@ -1707,6 +1767,9 @@ msgstr "노트로 변환"
|
||||
msgid "Convert to todo"
|
||||
msgstr "'할 일'로 변환"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "마크다운 링크 복사"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "메타데이터 숨김"
|
||||
|
||||
@@ -1717,7 +1780,7 @@ msgid "View on map"
|
||||
msgstr "지도에 표시"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
msgstr "소스 URL로 이동"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "노트북 삭제"
|
||||
@@ -1741,6 +1804,27 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
|
||||
msgid "Welcome"
|
||||
msgstr "환영합니다"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "태그 추가 및 제거"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "복제"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - 복사"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "'노트' 형식으로 전환합니다."
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "'할 일' 형식으로 전환합니다."
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "노트를 삭제할까요?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "상태: %s."
|
||||
|
||||
|
@@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Laurent Cozic
|
||||
# This file is distributed under the same license as the Joplin-CLI package.
|
||||
# Mats Estensen <matsest@mxe.no>, 2018
|
||||
# Mats Estensen <code@mxe.no>, 2018
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Joplin-CLI 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Mats Estensen <matsest@mxe.no>\n"
|
||||
"Last-Translator: Mats Estensen <code@mxe.no>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: nb_NO\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -164,7 +164,7 @@ msgstr "Rediger notat."
|
||||
msgid ""
|
||||
"No text editor is defined. Please set it using `config editor <editor-path>`"
|
||||
msgstr ""
|
||||
"Inger teksteditor er valgt. Velg en ved å bruke `config editor <editor-path>`"
|
||||
"Ingen teksteditor er valgt. Velg en ved å bruke `config editor <editor-path>`"
|
||||
|
||||
msgid "No active notebook."
|
||||
msgstr "Ingen aktiv notatbok."
|
||||
@@ -576,6 +576,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Eksporterer til \"%s\" i \"%s\" format. Vennligst vent..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Tittel på notatbok:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notatbøker"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importerer fra \"%s\" i \"%s\"-format. Vennligst vent..."
|
||||
@@ -602,7 +616,7 @@ msgid "Export"
|
||||
msgstr "Eksport"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv Ut"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -624,7 +638,7 @@ msgid "Paste"
|
||||
msgstr "Lim inn"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Velg alle"
|
||||
msgstr "Marker alt"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Fet"
|
||||
@@ -632,6 +646,9 @@ msgstr "Fet"
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Sett inn dato/tid"
|
||||
|
||||
@@ -643,10 +660,10 @@ msgstr "Søk i alle notater"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Søk i alle notater"
|
||||
msgstr "Søk i nåværende notat"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Utseende"
|
||||
msgstr "Vis"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Vis/skjul sidepanel"
|
||||
@@ -654,6 +671,10 @@ msgstr "Vis/skjul sidepanel"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Bytt editorutseende"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Verktøy"
|
||||
|
||||
@@ -693,7 +714,7 @@ msgid "Open %s"
|
||||
msgstr "Åpne %s"
|
||||
|
||||
msgid "Exit"
|
||||
msgstr "Gå ut"
|
||||
msgstr "Avslutt"
|
||||
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
@@ -704,9 +725,21 @@ msgstr "Avbryt"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Nåværende versjon er den siste tilgjengelige."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (førutgivelse)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En oppdatering er tilgjengelig, vil du laste den ned nå?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Din versjon: v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Ny versjon: v%s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
@@ -777,16 +810,19 @@ msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Denne autentiseringsbeviset er det eneste nødvendig for å gi "
|
||||
"Denne autoriseringsbeviset er det eneste nødvendig for å gi "
|
||||
"tredjepartsapplikasjoner tilgang til Joplin."
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sjekk synkroniseringskonfigurasjon"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notater og innstillinger er lagret i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sjekk synkroniseringskonfigurasjon"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Bruk"
|
||||
|
||||
@@ -881,6 +917,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering er:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Bruk: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
|
||||
@@ -933,34 +973,6 @@ msgstr "Noen elementer kan ikke dekrypteres."
|
||||
msgid "Set the password"
|
||||
msgstr "Sett passord"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Legg til eller fjern merkelapper"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliser"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Kopier"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Bytt mellom notat og gjøremål"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Bytt til notatmodus"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Bytt til gjøremålmodus"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopier Markdown-link"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Slette notater?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Ingen notater her enda. Opprett et ved å klikke på \"Nytt notat\"."
|
||||
|
||||
@@ -1008,6 +1020,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Dette notatet har ikke noe innhold. Klikk på \"%s\" for å redigere notatet."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "fet tekst"
|
||||
|
||||
@@ -1024,7 +1039,7 @@ msgid "Attach file"
|
||||
msgstr "Legg ved fil"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Merkelapp"
|
||||
msgstr "Merkelapper"
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr "Angi alarm"
|
||||
@@ -1100,6 +1115,9 @@ msgstr "Fjern denne merkelappen fra alle notater?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Fjerne dette søket fra sidepanelet?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Gi nytt navn"
|
||||
|
||||
@@ -1302,7 +1320,7 @@ msgid "Save geo-location with notes"
|
||||
msgstr "Lagre stedsinformasjon med notater"
|
||||
|
||||
msgid "When creating a new to-do:"
|
||||
msgstr "Når nytt gjøre mål opprettes:"
|
||||
msgstr "Når nytt gjøremål opprettes:"
|
||||
|
||||
msgid "Focus title"
|
||||
msgstr "Fokuser på tittel"
|
||||
@@ -1336,7 +1354,7 @@ msgstr "Global forstørrelse"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor skrifttype"
|
||||
msgstr "Editor skriftstørrelse"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor skrifttype"
|
||||
@@ -1352,6 +1370,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Oppdater applikasjonen automatisk"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "Få førutgivelse når du sjekker etter oppdateringer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "Se førutgivelsessiden for flere detaljer: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniserinsintervall"
|
||||
|
||||
@@ -1449,24 +1474,43 @@ msgstr "Ignorer TLS-sertifikatfeil"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ugyldig verdi: \"%s\". Mulige verdier er: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notatbøker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Lokasjon"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr "Merkelappen \"%s\" eksiterer allerede. Vennligst velg et annet navn."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Joplin Eksporter Fil"
|
||||
msgstr "Joplin-eksportert fil"
|
||||
|
||||
msgid "Markdown"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr "Joplin Eksporter Katalog"
|
||||
msgstr "Joplin-eksportert katalog"
|
||||
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote Eksporter Fil"
|
||||
msgstr "Evernote-eksportert fil"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json Eksporter Katalog"
|
||||
msgstr "Json-eksportert katalog"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
@@ -1654,9 +1698,24 @@ msgstr "- Sted: for å legge ved stedsinformation til notatet."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplins nettsted"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Fulltekstsøk aktivert: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Innlogging med Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Skriv inn kode her"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Masternøkkel: %s"
|
||||
@@ -1710,7 +1769,7 @@ msgstr "Bildetypen er ikke støttet: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Legg ved et bilde"
|
||||
msgstr "Ta et bilde"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Legg ved et bilde"
|
||||
@@ -1727,6 +1786,9 @@ msgstr "Konverter til notat"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konverter til gjøremål"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopier Markdown-link"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skjul metadata"
|
||||
|
||||
@@ -1760,3 +1822,24 @@ msgstr "Du har enda ingen notatbok. Lag en ved å klikke på (+)-knappen."
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Legg til eller fjern merkelapper"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Dupliser"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopier"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Bytt mellom notat og gjøremål"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Bytt til notatmodus"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Bytt til gjøremålmodus"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Slette notater?"
|
||||
|
@@ -584,6 +584,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notitieboek titel:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -643,6 +657,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -665,6 +682,9 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
@@ -716,9 +736,21 @@ msgstr "Annuleer"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -787,14 +819,17 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen zijn opgeslaan in %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -885,6 +920,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Versleuteling is:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@@ -939,36 +978,6 @@ msgstr "Sommige items kunnen niet gedecodeerd worden."
|
||||
msgid "Set the password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopieer"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Geen notities. Maak een notitie door op \"Nieuwe notitie\" te klikken."
|
||||
|
||||
@@ -1017,6 +1026,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1113,6 +1125,9 @@ msgstr "Deze tag verwijderen van alle notities?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Dit item verwijderen van de zijbalk?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Hernoem"
|
||||
|
||||
@@ -1371,6 +1386,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Update de applicatie automatisch"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisatie interval"
|
||||
|
||||
@@ -1464,6 +1486,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1666,10 +1707,26 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Verwijderen: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Log in met OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Ga naar command line modus"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoofdsleutel: %s"
|
||||
@@ -1740,6 +1797,9 @@ msgstr "Converteer naar notitie"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converteer naar to-do"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Verberg metadata"
|
||||
|
||||
@@ -1776,6 +1836,27 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopieer"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notities verwijderen?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: \"%s\""
|
||||
@@ -1818,9 +1899,6 @@ msgstr "Welkom"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Focus op het vorige paneel"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Ga naar command line modus"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Ga uit command line modus"
|
||||
|
||||
@@ -1830,9 +1908,6 @@ msgstr "Welkom"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Annuleer het huidige commando."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Sluit de applicatie."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr ""
|
||||
#~ "Verwijder de geselecteerde notitie of het geselecteerde notitieboek."
|
||||
|
@@ -585,6 +585,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Bezig met exporteren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titel van notitieboek:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
@@ -642,6 +656,9 @@ msgstr "Vetgedrukt"
|
||||
msgid "Italic"
|
||||
msgstr "Cursief"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Datum en tijd invoegen"
|
||||
|
||||
@@ -664,6 +681,10 @@ msgstr "Zijbalk tonen/verbergen"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Bewerkindeling tonen/verbergen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Inhoud focussen"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
@@ -714,9 +735,21 @@ msgstr "Annuleren"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "De huidige versie is up-to-date."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Er is een update beschikbaar. Wil je deze nu downloaden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
@@ -790,13 +823,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen worden opgeslagen in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Toepassen"
|
||||
|
||||
@@ -891,6 +927,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Gebruikte versleuteling:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@@ -943,36 +983,6 @@ msgstr "Sommige items kunnen niet worden ontsleuteled."
|
||||
msgid "Set the password"
|
||||
msgstr "Wachtwoord instellen"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Labels toevoegen of verwijderen"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliceren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - kopiëren"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownlink kopiëren"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Er zijn hier geen notities. Creëer een notitie door de klikken op \"Nieuwe "
|
||||
@@ -1024,6 +1034,9 @@ msgstr ""
|
||||
"Deze notitie bevat geen inhoud. Klik op \"%s\" om de bewerker te openen en "
|
||||
"de notitie te bewerken."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "vetgedrukte tekst"
|
||||
|
||||
@@ -1116,6 +1129,9 @@ msgstr "Wil je dit label verwijderen van alle notities?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Wil je deze zoekopdracht verwijderen uit de zijbalk?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Naam wijzigen"
|
||||
|
||||
@@ -1365,6 +1381,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Applicatie automatisch bijwerken"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisatietussenpoos"
|
||||
|
||||
@@ -1462,6 +1485,25 @@ msgstr "TLS-certificaatfouten negeren"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie af."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1670,9 +1712,24 @@ msgstr "- Locatie: zodat je locatie-informatie kunt toevoegen aan een notitie."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Te verwijderen: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Inloggen met Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoofdsleutel %s"
|
||||
@@ -1743,6 +1800,9 @@ msgstr "Omzetten naar notitie"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Omzetten naar taak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownlink kopiëren"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Metagegevens verbergen"
|
||||
|
||||
@@ -1779,6 +1839,29 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Labels toevoegen of verwijderen"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Dupliceren"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - kopiëren"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notities verwijderen?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: %s."
|
||||
|
||||
|
@@ -14,7 +14,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
@@ -582,6 +582,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando para \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título do caderno:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
@@ -638,6 +652,9 @@ msgstr "Negrito"
|
||||
msgid "Italic"
|
||||
msgstr "Itálico"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserir Data e Hora"
|
||||
|
||||
@@ -647,9 +664,8 @@ msgstr "Editar com editor externo"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pesquisar em todas as notas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Pesquisar em todas as notas"
|
||||
msgstr "Pesquisar na nota atual"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Visualizar"
|
||||
@@ -660,6 +676,10 @@ msgstr "Alternar barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Alternar layout do editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
@@ -710,9 +730,21 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "A versão atual está atualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Uma atualização está disponível, você quer baixar agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sim"
|
||||
|
||||
@@ -787,13 +819,16 @@ msgstr ""
|
||||
"Esse token de autoriza\\u00e7\\u00e3o só é necess\\u00e1rio para permitir "
|
||||
"que aplicativos de terceiros acessem o Joplin."
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notas e configurações estão armazenadas em: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
@@ -887,6 +922,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Encriptação está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
@@ -938,34 +977,6 @@ msgstr "Alguns itens não podem ser decriptados."
|
||||
msgid "Set the password"
|
||||
msgstr "Configurar a senha"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adicionar ou remover tags"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alternar entre os tipos Nota e Tarefa"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Alternar para o tipo Nota"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Alternar para o tipo Tarefa"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Excluir notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Não há notas aqui. Crie uma, clicando em \"Nova nota\"."
|
||||
|
||||
@@ -1013,6 +1024,9 @@ msgstr ""
|
||||
"Esta nota não possui conteúdo. Clique em \"%s\" para alternar para o editor, "
|
||||
"e edite a nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto forte"
|
||||
|
||||
@@ -1105,6 +1119,9 @@ msgstr "Remover esta tag de todas as notas?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Remover essa pesquisa da barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
@@ -1260,7 +1277,7 @@ msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data de ataualização"
|
||||
msgstr "data de atualização"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de criação"
|
||||
@@ -1342,9 +1359,8 @@ msgstr "Iniciar aplicativo minimizado na barra de tarefas"
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Porcentagem global do zoom"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Família de fontes do editor"
|
||||
msgstr "Tamanho da fonte no Editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Família de fontes do editor"
|
||||
@@ -1359,6 +1375,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Atualizar automaticamente o aplicativo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronização"
|
||||
|
||||
@@ -1458,6 +1481,25 @@ msgstr "Ignorar erros de certificados TLS"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Localização"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr "A tag \"%s\" já existe. Escolha um nome diferente."
|
||||
@@ -1668,9 +1710,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Para excluir: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login com Dropbox"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrar no modo de linha de comando"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chave Master %s"
|
||||
@@ -1722,9 +1780,8 @@ msgstr "O app mobile do Joplin não suporta, atualmente, esse tipo de link: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imagem não suportada: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Anexar foto"
|
||||
msgstr "Tirar foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Anexar foto"
|
||||
@@ -1741,6 +1798,9 @@ msgstr "Converter para nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converter para tarefa"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadados"
|
||||
|
||||
@@ -1775,6 +1835,27 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Adicionar ou remover tags"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplicar"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copiar"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alternar entre os tipos Nota e Tarefa"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Alternar para o tipo Nota"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Alternar para o tipo Tarefa"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Excluir notas?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: \"%s\"."
|
||||
|
||||
@@ -1818,9 +1899,6 @@ msgstr "Bem-vindo"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Dar o foco para o painel anterior"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Entrar no modo de linha de comando"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Sair do modo de linha de comando"
|
||||
|
||||
|
@@ -521,6 +521,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Se exportă către \"%s\" în format \"%s\". Vă rugăm să așteotați..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titlul caietului de notițe:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -578,6 +592,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -600,6 +617,9 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
@@ -650,9 +670,21 @@ msgstr "Anulați"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Versiunea curentă este actualizată."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Da"
|
||||
|
||||
@@ -720,13 +752,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicați"
|
||||
|
||||
@@ -805,6 +840,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Criptarea este:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Utilizare: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Înapoi"
|
||||
|
||||
@@ -855,36 +894,6 @@ msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
msgid "Set the password"
|
||||
msgstr "Setați parola"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiați"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiați link-ul Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Ștergeți notițele?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -930,6 +939,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1022,6 +1034,9 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Redenumiți"
|
||||
|
||||
@@ -1260,6 +1275,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizați automat aplicația"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalul de sincronizare"
|
||||
|
||||
@@ -1344,6 +1366,25 @@ msgstr "Ignoră erorile de certificat TLS"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Duplicați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1535,9 +1576,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "De șters: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Autentificați-vă cu Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1608,6 +1664,9 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiați link-ul Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ascundeți metadatele"
|
||||
|
||||
@@ -1643,6 +1702,26 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copiați"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Ștergeți notițele?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Statut: %s."
|
||||
|
||||
|
@@ -583,6 +583,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Экспорт в «%s» в формате «%s». Пожалуйста, ожидайте..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Название блокнота:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Блокноты"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Импорт из «%s» в формате «%s». Пожалуйста, ожидайте..."
|
||||
@@ -640,6 +654,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -657,11 +674,15 @@ msgid "View"
|
||||
msgstr "Вид"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
msgstr "Переключить панель"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Переключить вид редактора"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Фокус на содержимом"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Инструменты"
|
||||
|
||||
@@ -669,7 +690,7 @@ msgid "Synchronisation status"
|
||||
msgstr "Статус синхронизации"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
msgstr "Настройки веб-клиппера"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Настройки шифрования"
|
||||
@@ -712,9 +733,21 @@ msgstr "Отмена"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Вы используете самую свежую версию."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Доступно обновление. Желаете скачать его сейчас?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Да"
|
||||
|
||||
@@ -725,7 +758,7 @@ msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
msgstr "Веб-клиппер включен"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
@@ -736,13 +769,13 @@ msgid "Status: %s"
|
||||
msgstr "Статус: «%s»."
|
||||
|
||||
msgid "Disable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Выключить веб-клиппер"
|
||||
|
||||
msgid "The web clipper service is not enabled."
|
||||
msgstr ""
|
||||
msgstr "Веб-клиппер остановлен"
|
||||
|
||||
msgid "Enable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Включить веб-клиппер"
|
||||
|
||||
msgid ""
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
|
||||
@@ -753,7 +786,7 @@ msgid "In order to use the web clipper, you need to do the following:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Step 1: Enable the clipper service"
|
||||
msgstr ""
|
||||
msgstr "Шаг 1: включить веб-клиппер"
|
||||
|
||||
msgid ""
|
||||
"This service allows the browser extension to communicate with Joplin. When "
|
||||
@@ -762,38 +795,41 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Step 2: Install the extension"
|
||||
msgstr ""
|
||||
msgstr "Шаг 2: установить расширение"
|
||||
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
msgstr "Скачайте и установите расширение для вашего браузера"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Показывать расширенные настройки"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
msgstr "Токен авторизации"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
msgstr "Скопировать токен"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Проверить настройки синхронизации"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Заметки и настройки сохранены в: %s"
|
||||
|
||||
msgid "Apply"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Проверить настройки синхронизации"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Применить"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Отправить"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
@@ -882,6 +918,10 @@ msgstr "Статус"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Шифрование:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Использование: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Назад"
|
||||
|
||||
@@ -934,37 +974,6 @@ msgstr "Некоторые элементы не могут быть расши
|
||||
msgid "Set the password"
|
||||
msgstr "Установить пароль"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Добавить или удалить теги"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Копировать"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Удалить заметки?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Здесь нет заметок. Создайте новую нажатием на «Новая заметка»."
|
||||
|
||||
@@ -1012,6 +1021,9 @@ msgstr ""
|
||||
"Заметка пуста. Нажмите на «%s», чтобы переключиться в редактор и "
|
||||
"отредактировать её."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1106,6 +1118,9 @@ msgstr "Убрать этот тег со всех заметок?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Убрать этот запрос с боковой панели?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
@@ -1360,6 +1375,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Автоматически обновлять приложение"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Интервал синхронизации"
|
||||
|
||||
@@ -1452,6 +1474,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Неверное значение параметра: «%s». Доступные значения: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Статус синхронизации"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Блокноты"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Выйти из приложения."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1653,10 +1694,26 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Сайт Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Сайт Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "К удалению: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Войти в OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Войти в режим командной строки"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Мастер-ключ %s"
|
||||
@@ -1727,6 +1784,10 @@ msgstr "Преобразовать в заметку"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Преобразовать в задачу"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Скрыть метаданные"
|
||||
|
||||
@@ -1761,6 +1822,27 @@ msgstr "У вас сейчас нет блокнота. Создайте его
|
||||
msgid "Welcome"
|
||||
msgstr "Добро пожаловать"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Добавить или удалить теги"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Копировать"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Переключить тип между заметкой и задачей"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Удалить заметки?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Статус: «%s»."
|
||||
@@ -1802,9 +1884,6 @@ msgstr "Добро пожаловать"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Переключиться на предыдущую панель"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Войти в режим командной строки"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Выйти из режима командной строки"
|
||||
|
||||
@@ -1814,9 +1893,6 @@ msgstr "Добро пожаловать"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Отменить текущую команду."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Выйти из приложения."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Удалить текущую выбранную заметку или блокнот."
|
||||
|
||||
|
@@ -582,6 +582,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Izvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Naslov beležnice:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Beležnice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
@@ -639,6 +653,9 @@ msgstr ""
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -661,6 +678,10 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Spremeni izgled urejevalnika"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokusiraj vsebino"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Orodja"
|
||||
|
||||
@@ -711,9 +732,21 @@ msgstr "Prekliči"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Sedanja verzija je najnovejša."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Posodobitev je na voljo, jo želite prenesti sedaj?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Da"
|
||||
|
||||
@@ -781,13 +814,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Zabeležke in nastavitve so shranjene v: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -881,6 +917,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Enkripcija je:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uporaba: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Nazaj"
|
||||
|
||||
@@ -934,37 +974,6 @@ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
|
||||
msgid "Set the password"
|
||||
msgstr "Nastavi geslo"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Sistem označevanja"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Izbriši"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Izbriši zabeležke?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Trenutno ni tukaj nobene zabeležke. Ustvarite jo z klikom na \"Nova zabeležka"
|
||||
@@ -1016,6 +1025,9 @@ msgstr ""
|
||||
"Ta zabeležka nima vsebine. Kliknite na \"%s\" da menjate med urejevalnikom "
|
||||
"in urejanje zabeležke."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1110,6 +1122,9 @@ msgstr "Odstranite to oznako iz vseh zabeležk?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Odstranite ta iskalni niz iz stranske vrstice?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Izbriši"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Preimenuj"
|
||||
|
||||
@@ -1364,6 +1379,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Samodejno posodobi aplikacijo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Časovni interval sinhronizacije"
|
||||
|
||||
@@ -1456,6 +1478,25 @@ msgstr ""
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Beležnice"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izhod iz aplikacije."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1656,10 +1697,25 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Za izbris: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Prijavi se z OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Glavno geslo %s"
|
||||
@@ -1730,6 +1786,10 @@ msgstr "Pretvori v zabeležko"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Pretvori v za narediti"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Sistem označevanja"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skrij meta podatke"
|
||||
|
||||
@@ -1764,6 +1824,27 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiraj"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Izbriši zabeležke?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: %s."
|
||||
|
||||
|
@@ -589,6 +589,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportera till \"%s\" som \"%s\" format. Vänta..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titel på anteckningsbok:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Anteckningsböcker"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
|
||||
@@ -646,6 +660,9 @@ msgstr "Fet"
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Infoga datumtid"
|
||||
|
||||
@@ -668,6 +685,10 @@ msgstr "Växla sidofältet"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Växla redigeringslayout"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokus på huvuddel"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Verktyg"
|
||||
|
||||
@@ -718,9 +739,21 @@ msgstr "Avbryt"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Nuvarande version är uppdaterad."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En uppdatering är tillgänglig, vill du hämta den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
@@ -793,13 +826,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Anteckningar och inställningar lagras i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Tillämpa"
|
||||
|
||||
@@ -894,6 +930,10 @@ msgstr "Tillstånd"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering är:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Användning: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
@@ -946,36 +986,6 @@ msgstr "Några objekt kan inte dekrypteras."
|
||||
msgid "Set the password"
|
||||
msgstr "Ställ in lösenord"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Lägg till eller ta bort taggar"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplikat"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Kopiera"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopiera Markdown-länk"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Ta bort anteckningar?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Inga anteckningar här. Skapa en genom att klicka på \"Ny anteckning\"."
|
||||
|
||||
@@ -1025,6 +1035,9 @@ msgstr ""
|
||||
"Den här anteckningen har inget innehåll. Klicka på \"%s\" för att växla "
|
||||
"redigeraren och redigera anteckningen."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "stark text"
|
||||
|
||||
@@ -1117,6 +1130,9 @@ msgstr "Ta bort den här taggen från alla anteckningar?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Ta bort den här sökningen från sidofältet?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Byt namn"
|
||||
|
||||
@@ -1367,6 +1383,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Uppdatera programmet automatiskt"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniseringsintervall"
|
||||
|
||||
@@ -1463,6 +1486,25 @@ msgstr "Ignorera TLS-certifikatfel"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Anteckningsböcker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Avslutar programmet."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1672,9 +1714,24 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "För att ta bort: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Logga in med Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Huvudnyckel %s"
|
||||
@@ -1746,6 +1803,9 @@ msgstr "Konvertera till anteckning"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konvertera till att-göra"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopiera Markdown-länk"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Dölj metadata"
|
||||
|
||||
@@ -1783,6 +1843,29 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Välkommen"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Lägg till eller ta bort taggar"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplikat"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopiera"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Ta bort anteckningar?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tillstånd: %s."
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -548,6 +548,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "匯出到 \"%s\" 為 \"%s\" 格式。請稍候..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "記事本標題:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "記事本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
|
||||
@@ -605,6 +619,9 @@ msgstr "粗體"
|
||||
msgid "Italic"
|
||||
msgstr "斜體"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "插入日期時間"
|
||||
|
||||
@@ -627,6 +644,10 @@ msgstr "顯示 / 隱藏側邊欄"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "切換編輯器佈局"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "游標置於內文"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "工具"
|
||||
|
||||
@@ -677,9 +698,21 @@ msgstr "取消"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "此版本是最新的。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "有可用的更新,您需要立即下載嗎?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
|
||||
@@ -749,13 +782,16 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "檢測同步設置"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "所有記事和設置均儲存於: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "檢測同步設置"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "套用"
|
||||
|
||||
@@ -843,6 +879,10 @@ msgstr "狀態"
|
||||
msgid "Encryption is:"
|
||||
msgstr "加密:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "使用資訊: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
@@ -893,36 +933,6 @@ msgstr "有些項目不能解密。"
|
||||
msgid "Set the password"
|
||||
msgstr "設置密碼"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "新增或移除標籤"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "新增複本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - 複本"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "複製 Markdown 連結"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "刪除此記事?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "當前沒有任何筆記。通過按一下 \"新增筆記\" 去建立。"
|
||||
|
||||
@@ -968,6 +978,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr "此筆記沒有內容。按一下 \"%s\" 切換到編輯模式並編輯筆記。"
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "重要文字 <strong>"
|
||||
|
||||
@@ -1060,6 +1073,9 @@ msgstr "是否從所有記事中刪除此標籤?"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "是否從側邊欄中刪除此搜索?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
||||
@@ -1305,6 +1321,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "自動更新應用程式"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "同步時間間隔"
|
||||
|
||||
@@ -1396,6 +1419,25 @@ msgstr "忽略 TLS 證書錯誤"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "不正確選項值: \"%s\"。可能的值為: %s。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "一般選項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "記事本"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "離開本程式。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1594,9 +1636,24 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "標示刪除: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "以 Dropbox 登錄"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "主密碼 %s"
|
||||
@@ -1667,6 +1724,9 @@ msgstr "轉換為記事"
|
||||
msgid "Convert to todo"
|
||||
msgstr "轉換為待辦事項"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "複製 Markdown 連結"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "隱藏後設資料 (metadata)"
|
||||
|
||||
@@ -1699,6 +1759,29 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
|
||||
msgid "Welcome"
|
||||
msgstr "歡迎"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "新增或移除標籤"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "新增複本"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - 複本"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "刪除此記事?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "狀態: %s。"
|
||||
|
||||
|
131
CliClient/package-lock.json
generated
131
CliClient/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joplin",
|
||||
"version": "1.0.118",
|
||||
"version": "1.0.122",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -29,16 +29,16 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz",
|
||||
"integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg=="
|
||||
"version": "6.0.6",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
|
||||
"integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.0.1.tgz",
|
||||
"integrity": "sha512-PqVQ8c6a3kyqdsUZlC7nljp3FFuxipBRHKu+7C1h8QygBFlzTaDX5HD383jej3Peed+1aDG8HwkfB1Z1HMNPkw=="
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
|
||||
"integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw=="
|
||||
},
|
||||
"ajv": {
|
||||
"version": "5.5.2",
|
||||
@@ -488,12 +488,12 @@
|
||||
"integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
|
||||
},
|
||||
"data-urls": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz",
|
||||
"integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
|
||||
"integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
|
||||
"requires": {
|
||||
"abab": "^2.0.0",
|
||||
"whatwg-mimetype": "^2.1.0",
|
||||
"whatwg-mimetype": "^2.2.0",
|
||||
"whatwg-url": "^7.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -555,6 +555,11 @@
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
|
||||
},
|
||||
"diacritics": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
|
||||
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
|
||||
},
|
||||
"domexception": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
|
||||
@@ -1422,9 +1427,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"joplin-turndown": {
|
||||
"version": "4.0.9",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.9.tgz",
|
||||
"integrity": "sha512-8MOxX4t5Ai22muHhXPMGNoKc/AB7gSo0eUvNh6dyd6b3vcSiMIRZE8UHpMjS9ruJQ+8e+8TtJXc0nfbexeHwrA==",
|
||||
"version": "4.0.11",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
|
||||
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
|
||||
"requires": {
|
||||
"jsdom": "^11.9.0"
|
||||
}
|
||||
@@ -1483,6 +1488,17 @@
|
||||
"xml-name-validator": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
|
||||
"integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
|
||||
@@ -1501,46 +1517,46 @@
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
|
||||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
|
||||
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "1.0.6",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"dependencies": {
|
||||
"combined-stream": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
|
||||
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
|
||||
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
|
||||
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
|
||||
"requires": {
|
||||
"ajv": "^5.3.0",
|
||||
"ajv": "^6.5.5",
|
||||
"har-schema": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.36.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
|
||||
"integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
|
||||
"version": "1.37.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
|
||||
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.20",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
|
||||
"integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
|
||||
"version": "2.1.21",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
|
||||
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
|
||||
"requires": {
|
||||
"mime-db": "~1.36.0"
|
||||
"mime-db": "~1.37.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
@@ -2788,7 +2804,7 @@
|
||||
"requires": {
|
||||
"chalk": "^2.1.0",
|
||||
"emphasize": "^1.5.0",
|
||||
"node-emoji": "git+https://github.com/laurent22/node-emoji.git#9fa01eac463e94dde1316ef8c53089eeef4973b5",
|
||||
"node-emoji": "git+https://github.com/laurent22/node-emoji.git",
|
||||
"slice-ansi": "^1.0.0",
|
||||
"string-width": "^2.1.1",
|
||||
"terminal-kit": "^1.13.11",
|
||||
@@ -2910,6 +2926,21 @@
|
||||
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
|
||||
"integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
|
||||
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"url-parse": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
|
||||
@@ -2958,17 +2989,17 @@
|
||||
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
|
||||
},
|
||||
"whatwg-encoding": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz",
|
||||
"integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==",
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
|
||||
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
|
||||
"requires": {
|
||||
"iconv-lite": "0.4.23"
|
||||
"iconv-lite": "0.4.24"
|
||||
},
|
||||
"dependencies": {
|
||||
"iconv-lite": {
|
||||
"version": "0.4.23",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
|
||||
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"requires": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
@@ -2976,9 +3007,9 @@
|
||||
}
|
||||
},
|
||||
"whatwg-mimetype": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz",
|
||||
"integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw=="
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
|
||||
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "6.5.0",
|
||||
|
@@ -15,11 +15,12 @@
|
||||
"years": [
|
||||
2016,
|
||||
2017,
|
||||
2018
|
||||
2018,
|
||||
2019
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.118",
|
||||
"version": "1.0.122",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@@ -31,6 +32,7 @@
|
||||
"async-mutex": "^0.1.3",
|
||||
"base-64": "^0.1.0",
|
||||
"compare-version": "^0.1.2",
|
||||
"diacritics": "^1.3.0",
|
||||
"es6-promise-pool": "^2.5.0",
|
||||
"follow-redirects": "^1.2.4",
|
||||
"form-data": "^2.1.4",
|
||||
@@ -39,7 +41,7 @@
|
||||
"html-minifier": "^3.5.15",
|
||||
"image-data-uri": "^2.0.0",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.9",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"jssha": "^2.3.0",
|
||||
"levenshtein": "^1.0.5",
|
||||
|
@@ -22,18 +22,22 @@ trap finish EXIT
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
npm test tests-build/ArrayUtils.js
|
||||
npm test tests-build/encryption.js
|
||||
npm test tests-build/EnexToMd.js
|
||||
npm test tests-build/HtmlToMd.js
|
||||
npm test tests-build/markdownUtils.js
|
||||
npm test tests-build/models_BaseItem.js
|
||||
npm test tests-build/models_Folder.js
|
||||
npm test tests-build/models_ItemChange.js
|
||||
npm test tests-build/models_Note.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/models_Resource.js
|
||||
npm test tests-build/models_Setting.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/pathUtils.js
|
||||
npm test tests-build/services_InteropService.js
|
||||
npm test tests-build/services_ResourceService.js
|
||||
npm test tests-build/urlUtils.js
|
||||
npm test tests-build/encryption.js
|
||||
npm test tests-build/services_rest_Api.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/services_SearchEngine.js
|
||||
npm test tests-build/StringUtils.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
@@ -37,7 +37,7 @@ describe('HtmlToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'anchor_with_url_with_spaces.html') continue;
|
||||
// if (htmlFilename !== 'picture.html') continue;
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
45
CliClient/tests/StringUtils.js
Normal file
45
CliClient/tests/StringUtils.js
Normal file
@@ -0,0 +1,45 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const StringUtils = require('lib/string-utils');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('StringUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should surround keywords with strings', async (done) => {
|
||||
const testCases = [
|
||||
[[], 'test', 'a', 'b', 'test'],
|
||||
[['test'], 'test', 'a', 'b', 'atestb'],
|
||||
[['test'], 'Test', 'a', 'b', 'aTestb'],
|
||||
[['te[]st'], 'Te[]st', 'a', 'b', 'aTe[]stb'],
|
||||
// [['test1', 'test2'], 'bla test1 blabla test1 bla test2 not this one - test22', 'a', 'b', 'bla atest1b blabla atest1b bla atest2b not this one - test22'],
|
||||
[['test1', 'test2'], 'bla test1 test1 bla test2', '<span class="highlighted-keyword">', '</span>', 'bla <span class="highlighted-keyword">test1</span> <span class="highlighted-keyword">test1</span> bla <span class="highlighted-keyword">test2</span>'],
|
||||
// [[{ type:'regex', value:'test.*?'}], 'bla test1 test1 bla test2 test tttest', 'a', 'b', 'bla atest1b atest1b bla atest2b atestb tttest'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
|
||||
const keywords = t[0];
|
||||
const input = t[1];
|
||||
const prefix = t[2];
|
||||
const suffix = t[3];
|
||||
const expected = t[4];
|
||||
|
||||
const actual = StringUtils.surroundKeywords(keywords, input, prefix, suffix);
|
||||
|
||||
expect(actual).toBe(expected, 'Test case ' + i);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
47
CliClient/tests/html_to_md/picture.html
Normal file
47
CliClient/tests/html_to_md/picture.html
Normal file
@@ -0,0 +1,47 @@
|
||||
<figure itemprop="associatedMedia image" itemscope="" itemtype="http://schema.org/ImageObject" data-component="image" data-media-id="75583fcfe2eb74f1e89ea320355ff4156f4ade7b" id="img-1">
|
||||
<meta itemprop="representativeOfPage" content="true">
|
||||
<meta itemprop="url" content="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=85&auto=format&fit=max&s=2a6a7ba9738c6a6a79eab39ba46c34cd">
|
||||
<meta itemprop="width" content="3904">
|
||||
<meta itemprop="height" content="2342">
|
||||
<a href="#img-1" data-link-name="Launch Article Lightbox" data-is-ajax="">
|
||||
<div>
|
||||
<picture>
|
||||
<!--[if IE 9]><video style="display: none;"><![endif]-->
|
||||
<source media="(min-width: 980px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 980px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=45&auto=format&fit=max&dpr=2&s=bacff59339e5ba117f957c24218ef76b 1240w">
|
||||
<source media="(min-width: 980px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=85&auto=format&fit=max&s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
|
||||
<source media="(min-width: 740px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 740px) and (min-resolution: 120dpi)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=45&auto=format&fit=max&dpr=2&s=70accd3c6e7d2c36f5ccc7321eab097e 1400w">
|
||||
<source media="(min-width: 740px)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=85&auto=format&fit=max&s=2a6a7ba9738c6a6a79eab39ba46c34cd 700w">
|
||||
<source media="(min-width: 660px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 660px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=45&auto=format&fit=max&dpr=2&s=bacff59339e5ba117f957c24218ef76b 1240w">
|
||||
<source media="(min-width: 660px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=85&auto=format&fit=max&s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
|
||||
<source media="(min-width: 480px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 480px) and (min-resolution: 120dpi)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&quality=45&auto=format&fit=max&dpr=2&s=6751fcff1b880acc45ed5aab6511a2ca 1290w">
|
||||
<source media="(min-width: 480px)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&quality=85&auto=format&fit=max&s=d18702564383ce5d613d22b96ec6d726 645w">
|
||||
<source media="(min-width: 0px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 0px) and (min-resolution: 120dpi)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&quality=45&auto=format&fit=max&dpr=2&s=a7b87fb26b9813d197f3c236a5282ca4 930w">
|
||||
<source media="(min-width: 0px)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&quality=85&auto=format&fit=max&s=821ae9e950ae92371b40a35e98a31116 465w">
|
||||
<!--[if IE 9]></video><![endif]-->
|
||||
<img itemprop="contentUrl" alt="A blood moon" src="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=300&quality=85&auto=format&fit=max&s=1e9b643d2c109a1e271f50046eac1324">
|
||||
</picture>
|
||||
</div>
|
||||
<span>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22">
|
||||
<path d="M3.4 20.2L9 14.5 7.5 13l-5.7 5.6L1 14H0v7.5l.5.5H8v-1l-4.6-.8M18.7 1.9L13 7.6 14.4 9l5.7-5.7.5 4.7h1.2V.6l-.5-.5H14v1.2l4.7.6"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<label for="show-caption">
|
||||
<span>
|
||||
<svg width="6" height="14" viewBox="0 0 6 14">
|
||||
<path d="M4.6 12l-.4 1.4c-.7.2-1.9.6-3 .6-.7 0-1.2-.2-1.2-.9 0-.2 0-.3.1-.5l2-6.7H.7l.4-1.5 4.2-.6h.2L3 12h1.6zm-.3-9.2c-.9 0-1.4-.5-1.4-1.3C2.9.5 3.7 0 4.6 0 5.4 0 6 .5 6 1.3c0 1-.8 1.5-1.7 1.5z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</label>
|
||||
<figcaption itemprop="description">
|
||||
<span>
|
||||
<svg width="11" height="10" viewBox="0 0 11 10">
|
||||
<path fill-rule="evenodd" d="M5.5 0L11 10H0z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK.
|
||||
Photograph: JM F Almeida/Getty Images
|
||||
</figcaption>
|
||||
</figure>
|
3
CliClient/tests/html_to_md/picture.md
Normal file
3
CliClient/tests/html_to_md/picture.md
Normal file
@@ -0,0 +1,3 @@
|
||||
[](#img-1)
|
||||
|
||||
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK. Photograph: JM F Almeida/Getty Images
|
53
CliClient/tests/models_ItemChange.js
Normal file
53
CliClient/tests/models_ItemChange.js
Normal file
@@ -0,0 +1,53 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const ItemChangeUtils = require('lib/services/ItemChangeUtils');
|
||||
const Note = require('lib/models/Note');
|
||||
const Setting = require('lib/models/Setting');
|
||||
const ItemChange = require('lib/models/ItemChange');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
let searchEngine = null;
|
||||
|
||||
describe('models_ItemChange', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
searchEngine = new SearchEngine();
|
||||
searchEngine.setDb(db());
|
||||
done();
|
||||
});
|
||||
|
||||
it('should delete old changes that have been processed', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
const resourceService = new ResourceService();
|
||||
|
||||
await searchEngine.syncTables();
|
||||
|
||||
// If we run this now, it should not delete any change because
|
||||
// the resource service has not yet processed the change
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await resourceService.indexNoteResources();
|
||||
|
||||
// Now that the resource service has processed the change,
|
||||
// the change can be deleted.
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(0);
|
||||
}));
|
||||
|
||||
});
|
@@ -1,6 +1,6 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { friendlySafeFilename } = require('lib/path-utils.js');
|
||||
const { extractExecutablePath, quotePath, unquotePath, friendlySafeFilename } = require('lib/path-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
@@ -36,4 +36,41 @@ describe('pathUtils', function() {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should quote and unquote paths', async (done) => {
|
||||
const testCases = [
|
||||
['', ''],
|
||||
['/my/path', '/my/path'],
|
||||
['/my/path with spaces', '"/my/path with spaces"'],
|
||||
['/my/weird"path', '"/my/weird\\"path"'],
|
||||
['c:\\Windows\\test.dll', 'c:\\Windows\\test.dll'],
|
||||
['c:\\Windows\\test test.dll', '"c:\\Windows\\test test.dll"'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
expect(quotePath(t[0])).toBe(t[1]);
|
||||
expect(unquotePath(quotePath(t[0]))).toBe(t[0]);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should extract executable path from command', async (done) => {
|
||||
const testCases = [
|
||||
['', ''],
|
||||
['/my/cmd -some -args', '/my/cmd'],
|
||||
['"/my/cmd" -some -args', '"/my/cmd"'],
|
||||
['"/my/cmd"', '"/my/cmd"'],
|
||||
['"/my/cmd and space" -some -flags', '"/my/cmd and space"'],
|
||||
['"" -some -flags', '""'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
expect(extractExecutablePath(t[0])).toBe(t[1]);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
@@ -1,9 +1,11 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, asyncTest, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const Note = require('lib/models/Note');
|
||||
const ItemChange = require('lib/models/ItemChange');
|
||||
const Setting = require('lib/models/Setting');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
@@ -23,53 +25,71 @@ describe('services_SearchEngine', function() {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should keep the content and FTS table in sync', async (done) => {
|
||||
it('should keep the content and FTS table in sync', asyncTest(async () => {
|
||||
let rows, n1, n2, n3;
|
||||
|
||||
n1 = await Note.save({ title: "a" });
|
||||
n2 = await Note.save({ title: "b" });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('a');
|
||||
expect(rows.length).toBe(1);
|
||||
expect(rows[0].title).toBe('a');
|
||||
|
||||
await Note.delete(n1.id);
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('a');
|
||||
expect(rows.length).toBe(0);
|
||||
rows = await engine.search('b');
|
||||
expect(rows[0].title).toBe('b');
|
||||
|
||||
await Note.save({ id: n2.id, title: 'c' });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('b');
|
||||
expect(rows.length).toBe(0);
|
||||
rows = await engine.search('c');
|
||||
expect(rows[0].title).toBe('c');
|
||||
|
||||
await Note.save({ id: n2.id, encryption_applied: 1 });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('c');
|
||||
expect(rows.length).toBe(0);
|
||||
|
||||
await Note.save({ id: n2.id, encryption_applied: 0 });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('c');
|
||||
expect(rows.length).toBe(1);
|
||||
}));
|
||||
|
||||
done();
|
||||
});
|
||||
it('should, after initial indexing, save the last change ID', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
const n2 = await Note.save({ title: "abcd aaaaa abcd abcd" }); // 1
|
||||
|
||||
it('should order search results by relevance (1)', async (done) => {
|
||||
expect(Setting.value('searchEngine.initialIndexingDone')).toBe(false);
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
const lastChangeId = await ItemChange.lastChangeId();
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect(Setting.value('searchEngine.lastProcessedChangeId')).toBe(lastChangeId);
|
||||
expect(Setting.value('searchEngine.initialIndexingDone')).toBe(true);
|
||||
}));
|
||||
|
||||
|
||||
it('should order search results by relevance (1)', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
const n2 = await Note.save({ title: "abcd aaaaa abcd abcd" }); // 1
|
||||
const n3 = await Note.save({ title: "abcd aaaaa bbbb eeee abcd" }); // 2
|
||||
|
||||
await engine.syncTables();
|
||||
const rows = await engine.search('abcd');
|
||||
|
||||
expect(rows[0].id).toBe(n2.id);
|
||||
expect(rows[1].id).toBe(n3.id);
|
||||
expect(rows[2].id).toBe(n1.id);
|
||||
}));
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should order search results by relevance (2)', async (done) => {
|
||||
it('should order search results by relevance (2)', asyncTest(async () => {
|
||||
// 1
|
||||
const n1 = await Note.save({ title: "abcd efgh", body: "XX abcd XX efgh" });
|
||||
// 4
|
||||
@@ -81,6 +101,7 @@ describe('services_SearchEngine', function() {
|
||||
// 5
|
||||
const n5 = await Note.save({ title: "occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh" });
|
||||
|
||||
await engine.syncTables();
|
||||
const rows = await engine.search('abcd efgh');
|
||||
|
||||
expect(rows[0].id).toBe(n1.id);
|
||||
@@ -88,15 +109,18 @@ describe('services_SearchEngine', function() {
|
||||
expect(rows[2].id).toBe(n3.id);
|
||||
expect(rows[3].id).toBe(n2.id);
|
||||
expect(rows[4].id).toBe(n5.id);
|
||||
}));
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should supports various query types', async (done) => {
|
||||
it('should supports various query types', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const n1 = await Note.save({ title: "abcd efgh ijkl", body: "aaaa bbbb" });
|
||||
const n2 = await Note.save({ title: "iiii efgh bbbb", body: "aaaa bbbb" });
|
||||
const n3 = await Note.save({ title: "Агентство Рейтер" });
|
||||
const n4 = await Note.save({ title: "Dog" });
|
||||
const n5 = await Note.save({ title: "СООБЩИЛО" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
rows = await engine.search('abcd ijkl');
|
||||
expect(rows.length).toBe(1);
|
||||
@@ -122,10 +146,65 @@ describe('services_SearchEngine', function() {
|
||||
rows = await engine.search('body:bbbb iiii');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
done();
|
||||
});
|
||||
rows = await engine.search('Рейтер');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
it('should parse normal query strings', async (done) => {
|
||||
rows = await engine.search('рейтер');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('Dog');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('dog');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('сообщило');
|
||||
expect(rows.length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with or without accents', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "père noël" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('père')).length).toBe(1);
|
||||
expect((await engine.search('pere')).length).toBe(1);
|
||||
expect((await engine.search('noe*')).length).toBe(1);
|
||||
expect((await engine.search('noë*')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Chinese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "我是法国人" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('我')).length).toBe(1);
|
||||
expect((await engine.search('法国人')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Japanese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "私は日本語を話すことができません" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('日本')).length).toBe(1);
|
||||
expect((await engine.search('できません')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Korean characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "이것은 한국말이다" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('이것은')).length).toBe(1);
|
||||
expect((await engine.search('말')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should parse normal query strings', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const testCases = [
|
||||
@@ -142,47 +221,63 @@ describe('services_SearchEngine', function() {
|
||||
const expected = t[1];
|
||||
const actual = engine.parseQuery(input);
|
||||
|
||||
expect(JSON.stringify(actual.terms._)).toBe(JSON.stringify(expected._));
|
||||
expect(JSON.stringify(actual.terms.title)).toBe(JSON.stringify(expected.title));
|
||||
expect(JSON.stringify(actual.terms.body)).toBe(JSON.stringify(expected.body));
|
||||
const _Values = actual.terms._ ? actual.terms._.map(v => v.value) : undefined;
|
||||
const titleValues = actual.terms.title ? actual.terms.title.map(v => v.value) : undefined;
|
||||
const bodyValues = actual.terms.body ? actual.terms.body.map(v => v.value) : undefined;
|
||||
|
||||
expect(JSON.stringify(_Values)).toBe(JSON.stringify(expected._), 'Test case (_) ' + i);
|
||||
expect(JSON.stringify(titleValues)).toBe(JSON.stringify(expected.title), 'Test case (title) ' + i);
|
||||
expect(JSON.stringify(bodyValues)).toBe(JSON.stringify(expected.body), 'Test case (body) ' + i);
|
||||
}
|
||||
}));
|
||||
|
||||
done();
|
||||
});
|
||||
// it('should parse query strings with wildcards', asyncTest(async () => {
|
||||
// let rows;
|
||||
|
||||
it('should parse query strings with wildcards', async (done) => {
|
||||
// const testCases = [
|
||||
// ['do*', ['do', 'dog', 'domino'], [] ],
|
||||
// // "*" is a wildcard only when used at the end (to search for documents with the specified prefix)
|
||||
// // If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
|
||||
// ['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
|
||||
// ['no*no', ['no*no'], ['nonono'] ],
|
||||
// ];
|
||||
|
||||
// for (let i = 0; i < testCases.length; i++) {
|
||||
// const t = testCases[i];
|
||||
// const input = t[0];
|
||||
// const shouldMatch = t[1];
|
||||
// const shouldNotMatch = t[2];
|
||||
// const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
|
||||
|
||||
// for (let j = 0; j < shouldMatch.length; j++) {
|
||||
// const r = shouldMatch[j].match(regex);
|
||||
// expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
|
||||
// }
|
||||
// }
|
||||
|
||||
// expect(engine.parseQuery('*').termCount).toBe(0);
|
||||
// }));
|
||||
|
||||
it('should handle queries with special characters', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const testCases = [
|
||||
['do*', ['do', 'dog', 'domino'], [] ],
|
||||
// "*" is a wildcard only when used at the end (to searhc for documents with the specified prefix)
|
||||
// If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
|
||||
['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
|
||||
['no*no', ['no*no'], ['nonono'] ],
|
||||
['did-not-match', 'did-not-match'],
|
||||
['does match', 'does match'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
const input = t[0];
|
||||
const shouldMatch = t[1];
|
||||
const shouldNotMatch = t[2];
|
||||
const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
|
||||
const content = t[0];
|
||||
const query = t[1];
|
||||
|
||||
for (let j = 0; j < shouldMatch.length; j++) {
|
||||
const r = shouldMatch[j].match(regex);
|
||||
expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
|
||||
}
|
||||
const n = await Note.save({ title: content });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search(query);
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
// for (let j = 0; j < shouldNotMatch.length; j++) {
|
||||
// const r = shouldNotMatch[j].match(regex);
|
||||
// // console.info(input, shouldNotMatch)
|
||||
// expect(!!r).toBe(false, '"' + input + '" should not match "' + shouldNotMatch[j] + '"');
|
||||
// }
|
||||
await Note.delete(n.id);
|
||||
}
|
||||
|
||||
expect(engine.parseQuery('*').termCount).toBe(0);
|
||||
|
||||
done();
|
||||
});
|
||||
}));
|
||||
|
||||
});
|
@@ -170,6 +170,17 @@ describe('services_rest_Api', function() {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create folders with supplied ID', async (done) => {
|
||||
const response = await api.route('POST', 'folders', null, JSON.stringify({
|
||||
id: '12345678123456781234567812345678',
|
||||
title: 'from api',
|
||||
}));
|
||||
|
||||
expect(response.id).toBe('12345678123456781234567812345678');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create notes with images', async (done) => {
|
||||
let response = null;
|
||||
const f = await Folder.save({ title: "mon carnet" });
|
||||
|
@@ -15,6 +15,7 @@ const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry.js');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
@@ -1099,4 +1100,44 @@ describe('Synchronizer', function() {
|
||||
expect(note2.title).toBe("un UPDATE");
|
||||
}));
|
||||
|
||||
it("should sync Welcome notebook and not duplicate it", asyncTest(async () => {
|
||||
// Create the Welcome items on two separate clients and verify
|
||||
// that they appear only once (due to having hard-coded IDs), that they are not duplicated.
|
||||
|
||||
Setting.setConstant('env', 'prod');
|
||||
|
||||
await WelcomeUtils.createWelcomeItems();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await WelcomeUtils.createWelcomeItems();
|
||||
const beforeFolderCount = (await Folder.all()).length;
|
||||
const beforeNoteCount = (await Note.all()).length;
|
||||
expect(beforeFolderCount >= 1).toBe(true);
|
||||
expect(beforeNoteCount > 1).toBe(true);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const afterFolderCount = (await Folder.all()).length;
|
||||
const afterNoteCount = (await Note.all()).length;
|
||||
|
||||
expect(afterFolderCount).toBe(beforeFolderCount);
|
||||
expect(afterNoteCount).toBe(beforeNoteCount);
|
||||
|
||||
// Changes to the Welcome items should be synced to all clients
|
||||
|
||||
const f1 = (await Folder.all())[0];
|
||||
await Folder.save({ id: f1.id, title: 'Welcome MOD' });
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const f1_1 = (await Folder.all())[0];
|
||||
expect(f1_1.title).toBe('Welcome MOD');
|
||||
}));
|
||||
|
||||
});
|
||||
|
@@ -137,6 +137,7 @@ async function clearDatabase(id = null) {
|
||||
'DELETE FROM settings',
|
||||
'DELETE FROM deleted_items',
|
||||
'DELETE FROM sync_items',
|
||||
'DELETE FROM notes_normalized',
|
||||
];
|
||||
|
||||
await databases_[id].transactionExecBatch(queries);
|
||||
|
1
CliClientDemo/.gitignore
vendored
1
CliClientDemo/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
node_modules
|
Binary file not shown.
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict';
|
||||
|
||||
const spawn = require('child_process').spawn;
|
||||
const os = require('os');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
const joplinPath = __dirname + '/node_modules/.bin/joplin';
|
||||
const profileDir = os.homedir() + '/.config/demo-joplin';
|
||||
const dbFilename = 'database.sqlite';
|
||||
|
||||
fs.ensureDirSync(profileDir);
|
||||
if (!fs.pathExistsSync(profileDir + '/' + dbFilename)) {
|
||||
fs.copySync(__dirname + '/' + dbFilename, profileDir + '/' + dbFilename);
|
||||
}
|
||||
|
||||
const opt = {
|
||||
cwd: __dirname,
|
||||
env: (function() {
|
||||
process.env.NODE_PATH = '.';
|
||||
return process.env;
|
||||
}()),
|
||||
stdio: [process.stdin, process.stdout, process.stderr]
|
||||
};
|
||||
|
||||
const app = spawn(joplinPath, ['--is-demo', '--profile', profileDir], opt);
|
||||
|
||||
app.on('close', (code) => {
|
||||
process.exit(code);
|
||||
});
|
2124
CliClientDemo/package-lock.json
generated
2124
CliClientDemo/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"name": "demo-joplin",
|
||||
"version": "1.0.8",
|
||||
"description": "Demo for Joplin CLI",
|
||||
"bin": {
|
||||
"demo-joplin": "./index.js"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/laurent22/joplin/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laurent22/joplin"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.7.0"
|
||||
},
|
||||
"copyright": {
|
||||
"title": "Demo for Joplin CLI",
|
||||
"years": [
|
||||
2016,
|
||||
2017,
|
||||
2018
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": "^4.0.2",
|
||||
"joplin": "^0.10.69"
|
||||
},
|
||||
"author": "Laurent Cozic",
|
||||
"license": "MIT"
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
npm version patch
|
||||
npm publish
|
@@ -30,6 +30,21 @@
|
||||
return output;
|
||||
}
|
||||
|
||||
function getImageSizes(element) {
|
||||
const images = element.getElementsByTagName('img');
|
||||
const output = {};
|
||||
for (let i = 0; i < images.length; i++) {
|
||||
const img = images[i];
|
||||
output[img.src] = {
|
||||
width: img.width,
|
||||
height: img.height,
|
||||
naturalWidth: img.naturalWidth,
|
||||
naturalHeight: img.naturalHeight,
|
||||
};
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// Cleans up element by removing all its invisible children (which we don't want to render as Markdown)
|
||||
function cleanUpElement(element) {
|
||||
const childNodes = element.childNodes;
|
||||
@@ -74,7 +89,7 @@
|
||||
async function prepareCommandResponse(command) {
|
||||
console.info('Got command: ' + command.name);
|
||||
|
||||
const clippedContentResponse = (title, html) => {
|
||||
const clippedContentResponse = (title, html, imageSizes) => {
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
title: title,
|
||||
@@ -83,6 +98,7 @@
|
||||
url: location.origin + location.pathname + location.search,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: imageSizes,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -99,20 +115,20 @@
|
||||
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
|
||||
return response;
|
||||
}
|
||||
return clippedContentResponse(article.title, article.body);
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(document));
|
||||
|
||||
} else if (command.name === "completePageHtml") {
|
||||
|
||||
const cleanDocument = document.body.cloneNode(true);
|
||||
cleanUpElement(cleanDocument);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, getImageSizes(document));
|
||||
|
||||
} else if (command.name === "selectedHtml") {
|
||||
|
||||
const range = window.getSelection().getRangeAt(0);
|
||||
const container = document.createElement('div');
|
||||
container.appendChild(range.cloneContents());
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML);
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
|
||||
|
||||
} else if (command.name === 'screenshot') {
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper [DEV]",
|
||||
"version": "1.0.7",
|
||||
"version": "1.0.8",
|
||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||
"homepage_url": "https://joplin.cozic.net",
|
||||
"icons": {
|
||||
|
@@ -29,6 +29,7 @@ class Bridge {
|
||||
source_url: command.url,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: command.image_sizes || {},
|
||||
};
|
||||
|
||||
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });
|
||||
|
@@ -58,7 +58,7 @@ class ElectronAppWrapper {
|
||||
|
||||
// Linux icon workaround for bug https://github.com/electron-userland/electron-builder/issues/2098
|
||||
// Fix: https://github.com/electron-userland/electron-builder/issues/2269
|
||||
if (shim.isLinux()) windowOptions.icon = __dirname + '/build/icons/128x128.png';
|
||||
if (shim.isLinux()) windowOptions.icon = path.join(__dirname, '..', 'build/icons/128x128.png');
|
||||
|
||||
require('electron-context-menu')({
|
||||
shouldShowMenu: (event, params) => {
|
||||
@@ -231,4 +231,4 @@ class ElectronAppWrapper {
|
||||
|
||||
}
|
||||
|
||||
module.exports = { ElectronAppWrapper };
|
||||
module.exports = { ElectronAppWrapper };
|
||||
|
@@ -23,7 +23,6 @@ const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const InteropService = require('lib/services/InteropService');
|
||||
const InteropServiceHelper = require('./InteropServiceHelper.js');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const ClipperServer = require('lib/ClipperServer');
|
||||
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
@@ -43,6 +42,7 @@ const appDefaultState = Object.assign({}, defaultState, {
|
||||
sidebarVisibility: true,
|
||||
windowContentSize: bridge().windowContentSize(),
|
||||
watchedNoteFiles: [],
|
||||
lastEditorScrollPercents: {},
|
||||
});
|
||||
|
||||
class Application extends BaseApplication {
|
||||
@@ -172,6 +172,14 @@ class Application extends BaseApplication {
|
||||
}
|
||||
break;
|
||||
|
||||
case 'EDITOR_SCROLL_PERCENT_SET':
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
const newPercents = Object.assign({}, newState.lastEditorScrollPercents);
|
||||
newPercents[action.noteId] = action.percent;
|
||||
newState.lastEditorScrollPercents = newPercents;
|
||||
break;
|
||||
|
||||
}
|
||||
} catch (error) {
|
||||
error.message = 'In reducer: ' + error.message + ' Action: ' + JSON.stringify(action);
|
||||
@@ -198,10 +206,6 @@ class Application extends BaseApplication {
|
||||
this.updateEditorFont();
|
||||
}
|
||||
|
||||
if (["NOTE_UPDATE_ONE", "NOTE_DELETE", "FOLDER_UPDATE_ONE", "FOLDER_DELETE"].indexOf(action.type) >= 0) {
|
||||
if (!await reg.syncTarget().syncStarted()) reg.scheduleSync(30 * 1000, { syncSteps: ["update_remote", "delete_remote"] });
|
||||
}
|
||||
|
||||
if (['EVENT_NOTE_ALARM_FIELD_CHANGE', 'NOTE_DELETE'].indexOf(action.type) >= 0) {
|
||||
await AlarmService.updateNoteNotification(action.id, action.type === 'NOTE_DELETE');
|
||||
}
|
||||
@@ -230,6 +234,14 @@ class Application extends BaseApplication {
|
||||
this.updateMenu(screen);
|
||||
}
|
||||
|
||||
focusElement_(target) {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: target,
|
||||
});
|
||||
}
|
||||
|
||||
updateMenu(screen) {
|
||||
if (this.lastMenuScreen_ === screen) return;
|
||||
|
||||
@@ -249,6 +261,32 @@ class Application extends BaseApplication {
|
||||
});
|
||||
}
|
||||
|
||||
const focusItems = [];
|
||||
|
||||
focusItems.push({
|
||||
label: _('Sidebar'),
|
||||
click: () => { this.focusElement_('sideBar') },
|
||||
accelerator: 'CommandOrControl+Shift+S',
|
||||
});
|
||||
|
||||
focusItems.push({
|
||||
label: _('Note list'),
|
||||
click: () => { this.focusElement_('noteList') },
|
||||
accelerator: 'CommandOrControl+Shift+L',
|
||||
});
|
||||
|
||||
focusItems.push({
|
||||
label: _('Note title'),
|
||||
click: () => { this.focusElement_('noteTitle') },
|
||||
accelerator: 'CommandOrControl+Shift+N',
|
||||
});
|
||||
|
||||
focusItems.push({
|
||||
label: _('Note body'),
|
||||
click: () => { this.focusElement_('noteBody') },
|
||||
accelerator: 'CommandOrControl+Shift+B',
|
||||
});
|
||||
|
||||
const importItems = [];
|
||||
const exportItems = [];
|
||||
const ioService = new InteropService();
|
||||
@@ -436,10 +474,22 @@ class Application extends BaseApplication {
|
||||
name: 'textItalic',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Link'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+K',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'textLink',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('Insert Date Time'),
|
||||
screens: ['Main'],
|
||||
visible: false,
|
||||
accelerator: 'CommandOrControl+Shift+T',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
@@ -466,7 +516,7 @@ class Application extends BaseApplication {
|
||||
}, {
|
||||
label: _('Search in all the notes'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'F6',
|
||||
accelerator: shim.isMac() ? 'Shift+Command+F' : 'F6',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
@@ -489,7 +539,7 @@ class Application extends BaseApplication {
|
||||
submenu: [{
|
||||
label: _('Toggle sidebar'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'F10',
|
||||
accelerator: shim.isMac() ? 'Option+Command+S' : 'F10',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
@@ -537,6 +587,13 @@ class Application extends BaseApplication {
|
||||
click: () => {
|
||||
Setting.setValue('showCompletedTodos', !Setting.value('showCompletedTodos'));
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('Focus'),
|
||||
screens: ['Main'],
|
||||
submenu: focusItems,
|
||||
}],
|
||||
}, {
|
||||
label: _('Tools'),
|
||||
@@ -589,7 +646,7 @@ class Application extends BaseApplication {
|
||||
}, {
|
||||
label: _('Check for updates...'),
|
||||
click: () => {
|
||||
bridge().checkForUpdates(false, bridge().window(), this.checkForUpdateLoggerPath());
|
||||
bridge().checkForUpdates(false, bridge().window(), this.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
@@ -601,7 +658,7 @@ class Application extends BaseApplication {
|
||||
let message = [
|
||||
p.description,
|
||||
'',
|
||||
'Copyright © 2016-2018 Laurent Cozic',
|
||||
'Copyright © 2016-2019 Laurent Cozic',
|
||||
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
|
||||
];
|
||||
bridge().showInfoMessageBox(message.join('\n'), {
|
||||
@@ -772,7 +829,7 @@ class Application extends BaseApplication {
|
||||
if (shim.isWindows() || shim.isMac()) {
|
||||
const runAutoUpdateCheck = () => {
|
||||
if (Setting.value('autoUpdateEnabled')) {
|
||||
bridge().checkForUpdates(true, bridge().window(), this.checkForUpdateLoggerPath());
|
||||
bridge().checkForUpdates(true, bridge().window(), this.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -794,9 +851,6 @@ class Application extends BaseApplication {
|
||||
|
||||
ResourceService.runInBackground();
|
||||
|
||||
SearchEngine.instance().setDb(reg.db());
|
||||
SearchEngine.instance().setLogger(reg.logger());
|
||||
|
||||
if (Setting.value('env') === 'dev') {
|
||||
AlarmService.updateAllNotifications();
|
||||
} else {
|
||||
|
@@ -116,9 +116,9 @@ class Bridge {
|
||||
return require('electron').shell.openItem(fullPath)
|
||||
}
|
||||
|
||||
checkForUpdates(inBackground, window, logFilePath) {
|
||||
checkForUpdates(inBackground, window, logFilePath, options) {
|
||||
const { checkForUpdates } = require('./checkForUpdates.js');
|
||||
checkForUpdates(inBackground, window, logFilePath);
|
||||
checkForUpdates(inBackground, window, logFilePath, options);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -29,15 +29,35 @@ function onCheckEnded() {
|
||||
isCheckingForUpdate_ = false;
|
||||
}
|
||||
|
||||
async function fetchLatestRelease() {
|
||||
const response = await fetch('https://api.github.com/repos/laurent22/joplin/releases/latest');
|
||||
async function fetchLatestRelease(options) {
|
||||
options = Object.assign({}, { includePreReleases: false }, options);
|
||||
|
||||
if (!response.ok) {
|
||||
const responseText = await response.text();
|
||||
throw new Error('Cannot get latest release info: ' + responseText.substr(0,500));
|
||||
let json = null;
|
||||
|
||||
if (options.includePreReleases) {
|
||||
// This end-point will include all releases, including pre-releases (but not draft), so we take
|
||||
// whatever is the latest release. It might be the same as releases/latest, or it might be
|
||||
// a pre-release.
|
||||
const response = await fetch('https://api.github.com/repos/laurent22/joplin/releases');
|
||||
|
||||
if (!response.ok) {
|
||||
const responseText = await response.text();
|
||||
throw new Error('Cannot get latest release info: ' + responseText.substr(0,500));
|
||||
}
|
||||
|
||||
json = await response.json();
|
||||
if (!json.length) throw new Error('Cannot get latest release info: ' + responseText.substr(0,500));
|
||||
json = json[0];
|
||||
} else {
|
||||
const response = await fetch('https://api.github.com/repos/laurent22/joplin/releases/latest');
|
||||
|
||||
if (!response.ok) {
|
||||
const responseText = await response.text();
|
||||
throw new Error('Cannot get latest release info: ' + responseText.substr(0,500));
|
||||
}
|
||||
|
||||
json = await response.json();
|
||||
}
|
||||
|
||||
const json = await response.json();
|
||||
|
||||
const version = json.tag_name.substr(1);
|
||||
let downloadUrl = null;
|
||||
@@ -69,10 +89,11 @@ async function fetchLatestRelease() {
|
||||
downloadUrl: downloadUrl,
|
||||
notes: json.body,
|
||||
pageUrl: json.html_url,
|
||||
prerelease: json.prerelease,
|
||||
};
|
||||
}
|
||||
|
||||
function checkForUpdates(inBackground, window, logFilePath) {
|
||||
function checkForUpdates(inBackground, window, logFilePath, options) {
|
||||
if (isCheckingForUpdate_) {
|
||||
autoUpdateLogger_.info('checkForUpdates: Skipping check because it is already running');
|
||||
return;
|
||||
@@ -91,18 +112,22 @@ function checkForUpdates(inBackground, window, logFilePath) {
|
||||
|
||||
checkInBackground_ = inBackground;
|
||||
|
||||
fetchLatestRelease().then(release => {
|
||||
autoUpdateLogger_.info('checkForUpdates: Checking with options ' + JSON.stringify(options));
|
||||
|
||||
fetchLatestRelease(options).then(release => {
|
||||
autoUpdateLogger_.info('Current version: ' + packageInfo.version);
|
||||
autoUpdateLogger_.info('Latest version: ' + release.version);
|
||||
autoUpdateLogger_.info('Is Pre-release:', release.prerelease);
|
||||
|
||||
if (compareVersions(release.version, packageInfo.version) <= 0) {
|
||||
if (!checkInBackground_) dialog.showMessageBox({ message: _('Current version is up-to-date.') })
|
||||
} else {
|
||||
const releaseNotes = release.notes.trim() ? "\n\n" + release.notes.trim() : '';
|
||||
const newVersionString = release.prerelease ? _('%s (pre-release)', release.version) : release.version;
|
||||
|
||||
const buttonIndex = dialog.showMessageBox(parentWindow_, {
|
||||
type: 'info',
|
||||
message: _('An update is available, do you want to download it now?' + releaseNotes),
|
||||
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: v%s', packageInfo.version) + '\n' + _('New version: v%s', newVersionString) + releaseNotes,
|
||||
buttons: [_('Yes'), _('No')]
|
||||
});
|
||||
|
||||
|
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
|
||||
const spawnSync = require('child_process').spawnSync;
|
||||
|
||||
const babelPath = __dirname + '/node_modules/.bin/babel' + (process.platform === 'win32' ? '.cmd' : '');
|
||||
const basePath = __dirname + '/../..';
|
||||
const guiPath = __dirname + '/gui';
|
||||
|
||||
function fileIsNewerThan(path1, path2) {
|
||||
@@ -27,7 +28,7 @@ fs.readdirSync(guiPath).forEach((filename) => {
|
||||
|
||||
if (fileIsNewerThan(jsxPath, jsPath)) {
|
||||
console.info('Compiling ' + jsxPath + '...');
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file',jsPath, jsxPath]);
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file', jsPath, jsxPath]);
|
||||
if (result.status !== 0) {
|
||||
const msg = [];
|
||||
if (result.stdout) msg.push(result.stdout.toString());
|
||||
@@ -38,3 +39,10 @@ fs.readdirSync(guiPath).forEach((filename) => {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const libContent = [
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/string-utils-common.js', 'utf8'),
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/markJsUtils.js', 'utf8'),
|
||||
];
|
||||
|
||||
fs.writeFileSync(__dirname + '/gui/note-viewer/lib.js', libContent.join('\n'), 'utf8');
|
@@ -7,6 +7,7 @@ const { Header } = require('./Header.min.js');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { commandArgumentsToString } = require('lib/string-utils');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
||||
const shared = require('lib/components/shared/config-shared.js');
|
||||
|
||||
@@ -43,6 +44,49 @@ class ConfigScreenComponent extends React.Component {
|
||||
return output;
|
||||
}
|
||||
|
||||
sectionToComponent(key, section, settings) {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const settingComps = [];
|
||||
|
||||
for (let i = 0; i < section.metadatas.length; i++) {
|
||||
const md = section.metadatas[i];
|
||||
|
||||
const settingComp = this.settingToComponent(md.key, settings[md.key]);
|
||||
settingComps.push(settingComp);
|
||||
}
|
||||
|
||||
const sectionStyle = {
|
||||
marginBottom: 20,
|
||||
};
|
||||
|
||||
const headerStyle = Object.assign({}, theme.headerStyle, {
|
||||
borderBottomWidth: 1,
|
||||
borderBottomColor: theme.dividerColor,
|
||||
borderBottomStyle: 'solid',
|
||||
paddingBottom: '.4em',
|
||||
});
|
||||
|
||||
if (section.name === 'general') {
|
||||
sectionStyle.borderTopWidth = 0;
|
||||
}
|
||||
|
||||
const noteComp = section.name !== 'general' ? null : (
|
||||
<div style={Object.assign({}, theme.textStyle, {marginBottom: 10})}>
|
||||
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
|
||||
</div>
|
||||
);
|
||||
|
||||
return (
|
||||
<div key={key} style={sectionStyle}>
|
||||
<h2 style={headerStyle}>{Setting.sectionNameToLabel(section.name)}</h2>
|
||||
{noteComp}
|
||||
<div>
|
||||
{settingComps}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
settingToComponent(key, value) {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
@@ -56,6 +100,15 @@ class ConfigScreenComponent extends React.Component {
|
||||
color: theme.color,
|
||||
});
|
||||
|
||||
const subLabel = Object.assign({}, labelStyle, {
|
||||
opacity: 0.7,
|
||||
marginBottom: Math.round(rowStyle.marginBottom * 0.7),
|
||||
});
|
||||
|
||||
const invisibleLabel = Object.assign({}, labelStyle, {
|
||||
opacity: 0,
|
||||
});
|
||||
|
||||
const controlStyle = {
|
||||
display: 'inline-block',
|
||||
color: theme.color,
|
||||
@@ -70,6 +123,7 @@ class ConfigScreenComponent extends React.Component {
|
||||
});
|
||||
|
||||
const updateSettingValue = (key, value) => {
|
||||
// console.info(key + ' = ' + value);
|
||||
return shared.updateSettingValue(this, key, value);
|
||||
}
|
||||
|
||||
@@ -119,23 +173,93 @@ class ConfigScreenComponent extends React.Component {
|
||||
</div>
|
||||
);
|
||||
} else if (md.type === Setting.TYPE_STRING) {
|
||||
const onTextChange = (event) => {
|
||||
updateSettingValue(key, event.target.value);
|
||||
}
|
||||
|
||||
const inputStyle = Object.assign({}, controlStyle, {
|
||||
width: '50%',
|
||||
minWidth: '20em',
|
||||
border: '1px solid' });
|
||||
const inputType = md.secure === true ? 'password' : 'text';
|
||||
|
||||
return (
|
||||
<div key={key} style={rowStyle}>
|
||||
<div style={labelStyle}><label>{md.label()}</label></div>
|
||||
<input type={inputType} style={inputStyle} value={this.state.settings[key]} onChange={(event) => {onTextChange(event)}} />
|
||||
{ descriptionComp }
|
||||
</div>
|
||||
);
|
||||
if (md.subType === 'file_path_and_args') {
|
||||
inputStyle.marginBottom = subLabel.marginBottom;
|
||||
|
||||
const splitCmd = cmdString => {
|
||||
const path = pathUtils.extractExecutablePath(cmdString);
|
||||
const args = cmdString.substr(path.length + 1);
|
||||
return [pathUtils.unquotePath(path), args];
|
||||
}
|
||||
|
||||
const joinCmd = cmdArray => {
|
||||
if (!cmdArray[0] && !cmdArray[1]) return '';
|
||||
let cmdString = pathUtils.quotePath(cmdArray[0]);
|
||||
if (!cmdString) cmdString = '""';
|
||||
if (cmdArray[1]) cmdString += ' ' + cmdArray[1];
|
||||
return cmdString;
|
||||
}
|
||||
|
||||
const onPathChange = event => {
|
||||
const cmd = splitCmd(this.state.settings[key]);
|
||||
cmd[0] = event.target.value;
|
||||
updateSettingValue(key, joinCmd(cmd));
|
||||
}
|
||||
|
||||
const onArgsChange = event => {
|
||||
const cmd = splitCmd(this.state.settings[key]);
|
||||
cmd[1] = event.target.value;
|
||||
updateSettingValue(key, joinCmd(cmd));
|
||||
}
|
||||
|
||||
const browseButtonClick = () => {
|
||||
const paths = bridge().showOpenDialog();
|
||||
if (!paths || !paths.length) return;
|
||||
const cmd = splitCmd(this.state.settings[key]);
|
||||
cmd[0] = paths[0]
|
||||
updateSettingValue(key, joinCmd(cmd));
|
||||
}
|
||||
|
||||
const cmd = splitCmd(this.state.settings[key]);
|
||||
|
||||
return (
|
||||
<div key={key} style={rowStyle}>
|
||||
<div style={{display:'flex'}}>
|
||||
<div style={{flex:0, whiteSpace: 'nowrap'}}>
|
||||
<div style={labelStyle}><label>{md.label()}</label></div>
|
||||
</div>
|
||||
<div style={{flex:0}}>
|
||||
<div style={subLabel}>Path:</div>
|
||||
<div style={subLabel}>Arguments:</div>
|
||||
</div>
|
||||
<div style={{flex:1}}>
|
||||
<div style={{display: 'flex', flexDirection: 'row', alignItems: 'center', marginBottom: inputStyle.marginBottom}}>
|
||||
<input type={inputType} style={Object.assign({}, inputStyle, {marginBottom:0})} onChange={(event) => {onPathChange(event)}} value={cmd[0]} />
|
||||
<button onClick={browseButtonClick} style={Object.assign({}, theme.buttonStyle, { marginLeft: 5, minHeight: 20, height: 20 })}>{_('Browse...')}</button>
|
||||
</div>
|
||||
<input type={inputType} style={inputStyle} onChange={(event) => {onArgsChange(event)}} value={cmd[1]}/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{display:'flex'}}>
|
||||
<div style={{flex:0, whiteSpace: 'nowrap'}}>
|
||||
<div style={invisibleLabel}><label>{md.label()}</label></div>
|
||||
</div>
|
||||
<div style={{flex:1}}>
|
||||
{ descriptionComp }
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
const onTextChange = (event) => {
|
||||
updateSettingValue(key, event.target.value);
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={key} style={rowStyle}>
|
||||
<div style={labelStyle}><label>{md.label()}</label></div>
|
||||
<input type={inputType} style={inputStyle} value={this.state.settings[key]} onChange={(event) => {onTextChange(event)}} />
|
||||
{ descriptionComp }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
} else if (md.type === Setting.TYPE_INT) {
|
||||
const onNumChange = (event) => {
|
||||
updateSettingValue(key, event.target.value);
|
||||
@@ -170,21 +294,31 @@ class ConfigScreenComponent extends React.Component {
|
||||
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const style = Object.assign({
|
||||
backgroundColor: theme.backgroundColor
|
||||
}, this.props.style, { overflow: 'auto' });
|
||||
const settings = this.state.settings;
|
||||
}, this.props.style, {
|
||||
overflow: 'hidden',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
});
|
||||
|
||||
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
|
||||
let settings = this.state.settings;
|
||||
|
||||
const containerStyle = Object.assign({}, theme.containerStyle, { padding: 10 });
|
||||
const containerStyle = Object.assign({}, theme.containerStyle, { padding: 10, paddingTop: 0 });
|
||||
|
||||
const hasChanges = !!this.state.changedSettingKeys.length;
|
||||
|
||||
const buttonStyle = Object.assign({}, theme.buttonStyle, {
|
||||
display: this.state.changedSettingKeys.length ? 'inline-block' : 'none',
|
||||
display: 'inline-block',
|
||||
marginRight: 10,
|
||||
});
|
||||
|
||||
const settingComps = shared.settingsToComponents(this, 'desktop', settings);
|
||||
const buttonStyleApprove = Object.assign({}, buttonStyle, {
|
||||
opacity: hasChanges ? 1 : theme.disabledOpacity,
|
||||
});
|
||||
|
||||
const settingComps = shared.settingsToComponents2(this, 'desktop', settings);
|
||||
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
|
||||
|
||||
@@ -199,22 +333,29 @@ class ConfigScreenComponent extends React.Component {
|
||||
|
||||
settingComps.push(
|
||||
<div key="check_sync_config_button" style={this.rowStyle_}>
|
||||
<button style={buttonStyle} disabled={this.state.checkSyncConfigResult === 'checking'} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
{ statusComp }
|
||||
</div>);
|
||||
}
|
||||
|
||||
const buttonBarStyle = {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
padding: 15,
|
||||
borderBottomWidth: 1,
|
||||
borderBottomStyle: 'solid',
|
||||
borderBottomColor: theme.dividerColor,
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={style}>
|
||||
<Header style={headerStyle} />
|
||||
<div style={buttonBarStyle}>
|
||||
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{'⬅ ' + _('Cancel')}</button>
|
||||
<button disabled={!hasChanges} onClick={() => {this.onSaveClick()}} style={buttonStyleApprove}>{_('OK')}</button>
|
||||
<button disabled={!hasChanges} onClick={() => {this.onApplyClick()}} style={buttonStyleApprove}>{_('Apply')}</button>
|
||||
</div>
|
||||
<div style={containerStyle}>
|
||||
<div style={Object.assign({}, theme.textStyle, {marginBottom: 20})}>
|
||||
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
|
||||
</div>
|
||||
{ settingComps }
|
||||
<button onClick={() => {this.onSaveClick()}} style={buttonStyle}>{_('OK')}</button>
|
||||
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{_('Cancel')}</button>
|
||||
<button onClick={() => {this.onApplyClick()}} style={buttonStyle}>{_('Apply')}</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@@ -3,6 +3,7 @@ const { connect } = require('react-redux');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
|
||||
class HeaderComponent extends React.Component {
|
||||
|
||||
@@ -10,6 +11,7 @@ class HeaderComponent extends React.Component {
|
||||
super();
|
||||
this.state = {
|
||||
searchQuery: '',
|
||||
showSearchUsageLink: false,
|
||||
};
|
||||
|
||||
this.scheduleSearchChangeEventIid_ = null;
|
||||
@@ -37,6 +39,27 @@ class HeaderComponent extends React.Component {
|
||||
triggerOnQuery('');
|
||||
if (this.searchElement_) this.searchElement_.focus();
|
||||
}
|
||||
|
||||
this.search_onFocus = event => {
|
||||
if (this.hideSearchUsageLinkIID_) {
|
||||
clearTimeout(this.hideSearchUsageLinkIID_);
|
||||
this.hideSearchUsageLinkIID_ = null;
|
||||
}
|
||||
|
||||
this.setState({ showSearchUsageLink: true });
|
||||
}
|
||||
|
||||
this.search_onBlur = event => {
|
||||
if (this.hideSearchUsageLinkIID_) return;
|
||||
|
||||
this.hideSearchUsageLinkIID_ = setTimeout(() => {
|
||||
this.setState({ showSearchUsageLink: false });
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
this.searchUsageLink_click = event => {
|
||||
bridge().openExternal('https://joplin.cozic.net/#searching');
|
||||
}
|
||||
}
|
||||
|
||||
async componentWillReceiveProps(nextProps) {
|
||||
@@ -45,6 +68,13 @@ class HeaderComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.hideSearchUsageLinkIID_) {
|
||||
clearTimeout(this.hideSearchUsageLinkIID_);
|
||||
this.hideSearchUsageLinkIID_ = null;
|
||||
}
|
||||
}
|
||||
|
||||
async doCommand(command) {
|
||||
if (!command) return;
|
||||
|
||||
@@ -100,6 +130,8 @@ class HeaderComponent extends React.Component {
|
||||
}
|
||||
|
||||
makeSearch(key, style, options, state) {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const inputStyle = {
|
||||
display: 'flex',
|
||||
flex: 1,
|
||||
@@ -137,6 +169,10 @@ class HeaderComponent extends React.Component {
|
||||
const icon = <i style={iconStyle} className={"fa " + iconName}></i>
|
||||
if (options.onQuery) this.searchOnQuery_ = options.onQuery;
|
||||
|
||||
const usageLink = !this.state.showSearchUsageLink ? null : (
|
||||
<a onClick={this.searchUsageLink_click} style={theme.urlStyle} href="#">{_('Usage')}</a>
|
||||
);
|
||||
|
||||
return (
|
||||
<div key={key} style={containerStyle}>
|
||||
<input
|
||||
@@ -146,12 +182,15 @@ class HeaderComponent extends React.Component {
|
||||
value={state.searchQuery}
|
||||
onChange={this.search_onChange}
|
||||
ref={elem => this.searchElement_ = elem}
|
||||
onFocus={this.search_onFocus}
|
||||
onBlur={this.search_onBlur}
|
||||
/>
|
||||
<a
|
||||
href="#"
|
||||
style={searchButton}
|
||||
onClick={this.search_onClear}
|
||||
>{icon}</a>
|
||||
{usageLink}
|
||||
</div>);
|
||||
}
|
||||
|
||||
|
@@ -6,13 +6,23 @@ class ItemList extends React.Component {
|
||||
super();
|
||||
|
||||
this.scrollTop_ = 0;
|
||||
|
||||
this.listRef = React.createRef();
|
||||
|
||||
this.onScroll = this.onScroll.bind(this);
|
||||
this.onKeyDown = this.onKeyDown.bind(this);
|
||||
}
|
||||
|
||||
visibleItemCount(props) {
|
||||
if (typeof props === 'undefined') props = this.props;
|
||||
return Math.ceil(props.style.height / props.itemHeight);
|
||||
}
|
||||
|
||||
updateStateItemIndexes(props) {
|
||||
if (typeof props === 'undefined') props = this.props;
|
||||
|
||||
const topItemIndex = Math.floor(this.scrollTop_ / props.itemHeight);
|
||||
const visibleItemCount = Math.ceil(props.style.height / props.itemHeight);
|
||||
const visibleItemCount = this.visibleItemCount(props);
|
||||
|
||||
let bottomItemIndex = topItemIndex + visibleItemCount;
|
||||
if (bottomItemIndex >= props.items.length) bottomItemIndex = props.items.length - 1;
|
||||
@@ -31,8 +41,33 @@ class ItemList extends React.Component {
|
||||
this.updateStateItemIndexes(newProps);
|
||||
}
|
||||
|
||||
onScroll(scrollTop) {
|
||||
onScroll(event) {
|
||||
this.scrollTop_ = event.target.scrollTop;
|
||||
this.updateStateItemIndexes();
|
||||
}
|
||||
|
||||
onKeyDown(event) {
|
||||
if (this.props.onKeyDown) this.props.onKeyDown(event);
|
||||
}
|
||||
|
||||
makeItemIndexVisible(itemIndex) {
|
||||
const top = Math.min(this.props.items.length - 1, this.state.topItemIndex + 1);
|
||||
const bottom = Math.max(0, this.state.bottomItemIndex - 1)
|
||||
|
||||
if (itemIndex >= top && itemIndex <= bottom) return;
|
||||
|
||||
let scrollTop = 0;
|
||||
if (itemIndex < top) {
|
||||
scrollTop = this.props.itemHeight * itemIndex;
|
||||
} else {
|
||||
scrollTop = this.props.itemHeight * itemIndex - (this.visibleItemCount() - 1) * this.props.itemHeight;
|
||||
}
|
||||
|
||||
if (scrollTop < 0) scrollTop = 0;
|
||||
|
||||
this.scrollTop_ = scrollTop;
|
||||
this.listRef.current.scrollTop = scrollTop;
|
||||
|
||||
this.updateStateItemIndexes();
|
||||
}
|
||||
|
||||
@@ -61,10 +96,8 @@ class ItemList extends React.Component {
|
||||
let classes = ['item-list'];
|
||||
if (this.props.className) classes.push(this.props.className);
|
||||
|
||||
const that = this;
|
||||
|
||||
return (
|
||||
<div className={classes.join(' ')} style={style} onScroll={ (event) => { this.onScroll(event.target.scrollTop) }}>
|
||||
<div ref={this.listRef} className={classes.join(' ')} style={style} onScroll={this.onScroll} onKeyDown={this.onKeyDown}>
|
||||
{ itemComps }
|
||||
</div>
|
||||
);
|
||||
|
@@ -295,7 +295,7 @@ class MainScreenComponent extends React.Component {
|
||||
height: rowHeight,
|
||||
display: 'inline-block',
|
||||
verticalAlign: 'top',
|
||||
};
|
||||
};
|
||||
|
||||
if (isSidebarVisible === false) {
|
||||
this.styles_.sideBar.width = 0;
|
||||
@@ -338,9 +338,9 @@ class MainScreenComponent extends React.Component {
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const style = Object.assign({
|
||||
color: theme.color,
|
||||
backgroundColor: theme.backgroundColor,
|
||||
}, this.props.style);
|
||||
color: theme.color,
|
||||
backgroundColor: theme.backgroundColor,
|
||||
}, this.props.style);
|
||||
const promptOptions = this.state.promptOptions;
|
||||
const folders = this.props.folders;
|
||||
const notes = this.props.notes;
|
||||
|
@@ -4,6 +4,7 @@ const { connect } = require('react-redux');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const markJsUtils = require('lib/markJsUtils');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
const Menu = bridge().Menu;
|
||||
@@ -12,15 +13,22 @@ const eventManager = require('../eventManager');
|
||||
const InteropService = require('lib/services/InteropService');
|
||||
const InteropServiceHelper = require('../InteropServiceHelper.js');
|
||||
const Search = require('lib/models/Search');
|
||||
const { stateUtils } = require('lib/reducer');
|
||||
const Mark = require('mark.js/dist/mark.min.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const NoteListUtils = require('./utils/NoteListUtils');
|
||||
const { replaceRegexDiacritics, pregQuote } = require('lib/string-utils');
|
||||
|
||||
class NoteListComponent extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.itemListRef = React.createRef();
|
||||
this.itemAnchorRefs_ = {};
|
||||
|
||||
this.itemRenderer = this.itemRenderer.bind(this);
|
||||
this.onKeyDown = this.onKeyDown.bind(this);
|
||||
}
|
||||
|
||||
style() {
|
||||
@@ -77,101 +85,10 @@ class NoteListComponent extends React.Component {
|
||||
|
||||
if (!noteIds.length) return;
|
||||
|
||||
const notes = noteIds.map((id) => BaseModel.byId(this.props.notes, id));
|
||||
|
||||
let hasEncrypted = false;
|
||||
for (let i = 0; i < notes.length; i++) {
|
||||
if (!!notes[i].encryption_applied) hasEncrypted = true;
|
||||
}
|
||||
|
||||
const menu = new Menu()
|
||||
|
||||
if (!hasEncrypted) {
|
||||
menu.append(new MenuItem({label: _('Add or remove tags'), enabled: noteIds.length === 1, click: async () => {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'setTags',
|
||||
noteId: noteIds[0],
|
||||
});
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Duplicate'), click: async () => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
await Note.duplicate(noteIds[i], {
|
||||
uniqueTitle: _('%s - Copy', note.title),
|
||||
});
|
||||
}
|
||||
}}));
|
||||
|
||||
if (noteIds.length <= 1) {
|
||||
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
|
||||
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
||||
}
|
||||
}}));
|
||||
} else {
|
||||
const switchNoteType = async (noteIds, type) => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
const newNote = Note.changeNoteType(note, type);
|
||||
if (newNote === note) continue;
|
||||
await Note.save(newNote, { userSideValidation: true });
|
||||
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
||||
}
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Switch to note type'), click: async () => {
|
||||
await switchNoteType(noteIds, 'note');
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Switch to to-do type'), click: async () => {
|
||||
await switchNoteType(noteIds, 'todo');
|
||||
}}));
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Copy Markdown link'), click: async () => {
|
||||
const { clipboard } = require('electron');
|
||||
const links = [];
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
links.push(Note.markdownTag(note));
|
||||
}
|
||||
clipboard.writeText(links.join(' '));
|
||||
}}));
|
||||
|
||||
const exportMenu = new Menu();
|
||||
|
||||
const ioService = new InteropService();
|
||||
const ioModules = ioService.modules();
|
||||
for (let i = 0; i < ioModules.length; i++) {
|
||||
const module = ioModules[i];
|
||||
if (module.type !== 'exporter') continue;
|
||||
|
||||
exportMenu.append(new MenuItem({ label: module.fullLabel() , click: async () => {
|
||||
await InteropServiceHelper.export(this.props.dispatch.bind(this), module, { sourceNoteIds: noteIds });
|
||||
}}));
|
||||
}
|
||||
|
||||
exportMenu.append(new MenuItem({ label: 'PDF - ' + _('PDF File') , click: () => {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'exportPdf',
|
||||
});
|
||||
}}));
|
||||
|
||||
const exportMenuItem = new MenuItem({label: _('Export'), submenu: exportMenu});
|
||||
|
||||
menu.append(exportMenuItem);
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Delete'), click: async () => {
|
||||
const ok = bridge().showConfirmMessageBox(noteIds.length > 1 ? _('Delete notes?') : _('Delete note?'));
|
||||
if (!ok) return;
|
||||
await Note.batchDelete(noteIds);
|
||||
}}));
|
||||
const menu = NoteListUtils.makeContextMenu(noteIds, {
|
||||
notes: this.props.notes,
|
||||
dispatch: this.props.dispatch,
|
||||
});
|
||||
|
||||
menu.popup(bridge().window());
|
||||
}
|
||||
@@ -181,7 +98,7 @@ class NoteListComponent extends React.Component {
|
||||
const width = this.props.style.width;
|
||||
|
||||
const onTitleClick = async (event, item) => {
|
||||
if (event.ctrlKey) {
|
||||
if (event.ctrlKey || event.metaKey) {
|
||||
event.preventDefault();
|
||||
this.props.dispatch({
|
||||
type: 'NOTE_SELECT_TOGGLE',
|
||||
@@ -276,11 +193,10 @@ class NoteListComponent extends React.Component {
|
||||
for (let i = 0; i < highlightedWords.length; i++) {
|
||||
const w = highlightedWords[i];
|
||||
|
||||
if (w.type === 'regex') {
|
||||
mark.markRegExp(new RegExp(w.value, 'gmi'), { acrossElements: true });
|
||||
} else {
|
||||
mark.mark([w]);
|
||||
}
|
||||
markJsUtils.markKeyword(mark, w, {
|
||||
pregQuote: pregQuote,
|
||||
replaceRegexDiacritics: replaceRegexDiacritics,
|
||||
});
|
||||
}
|
||||
|
||||
// Note: in this case it is safe to use dangerouslySetInnerHTML because titleElement
|
||||
@@ -301,11 +217,15 @@ class NoteListComponent extends React.Component {
|
||||
<i style={watchedIconStyle} className={"fa fa-external-link"}></i>
|
||||
);
|
||||
|
||||
if (!this.itemAnchorRefs_[item.id]) this.itemAnchorRefs_[item.id] = React.createRef();
|
||||
const ref = this.itemAnchorRefs_[item.id];
|
||||
|
||||
// Need to include "todo_completed" in key so that checkbox is updated when
|
||||
// item is changed via sync.
|
||||
return <div key={item.id + '_' + item.todo_completed} style={style}>
|
||||
{checkbox}
|
||||
<a
|
||||
ref={ref}
|
||||
className="list-item"
|
||||
onContextMenu={(event) => this.itemContextMenu(event)}
|
||||
href="#"
|
||||
@@ -321,6 +241,142 @@ class NoteListComponent extends React.Component {
|
||||
</div>
|
||||
}
|
||||
|
||||
itemAnchorRef(itemId) {
|
||||
if (this.itemAnchorRefs_[itemId] && this.itemAnchorRefs_[itemId].current) return this.itemAnchorRefs_[itemId].current;
|
||||
return null;
|
||||
}
|
||||
|
||||
doCommand(command) {
|
||||
if (!command) return;
|
||||
|
||||
let commandProcessed = true;
|
||||
|
||||
if (command.name === 'focusElement' && command.target === 'noteList') {
|
||||
if (this.props.selectedNoteIds.length) {
|
||||
const ref = this.itemAnchorRef(this.props.selectedNoteIds[0]);
|
||||
if (ref) ref.focus();
|
||||
}
|
||||
} else {
|
||||
commandProcessed = false;
|
||||
}
|
||||
|
||||
if (commandProcessed) {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: null,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||
if (prevProps.windowCommand !== this.props.windowCommand) {
|
||||
this.doCommand(this.props.windowCommand);
|
||||
}
|
||||
|
||||
if (prevProps.selectedNoteIds !== this.props.selectedNoteIds && this.props.selectedNoteIds.length === 1) {
|
||||
const id = this.props.selectedNoteIds[0];
|
||||
for (let i = 0; i < this.props.notes.length; i++) {
|
||||
if (this.props.notes[i].id === id) {
|
||||
this.itemListRef.current.makeItemIndexVisible(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async onKeyDown(event) {
|
||||
const keyCode = event.keyCode;
|
||||
const noteIds = this.props.selectedNoteIds;
|
||||
|
||||
if (noteIds.length === 1 && (keyCode === 40 || keyCode === 38)) { // DOWN / UP
|
||||
const noteId = noteIds[0];
|
||||
let noteIndex = BaseModel.modelIndexById(this.props.notes, noteId);
|
||||
const inc = keyCode === 38 ? -1 : +1;
|
||||
|
||||
noteIndex += inc;
|
||||
|
||||
if (noteIndex < 0) noteIndex = 0;
|
||||
if (noteIndex > this.props.notes.length - 1) noteIndex = this.props.notes.length - 1;
|
||||
|
||||
const newSelectedNote = this.props.notes[noteIndex];
|
||||
|
||||
this.props.dispatch({
|
||||
type: 'NOTE_SELECT',
|
||||
id: newSelectedNote.id,
|
||||
});
|
||||
|
||||
this.itemListRef.current.makeItemIndexVisible(noteIndex);
|
||||
|
||||
this.focusNoteId_(newSelectedNote.id);
|
||||
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
if (noteIds.length && keyCode === 46) { // DELETE
|
||||
event.preventDefault();
|
||||
await NoteListUtils.confirmDeleteNotes(noteIds);
|
||||
}
|
||||
|
||||
if (noteIds.length && keyCode === 32) { // SPACE
|
||||
event.preventDefault();
|
||||
|
||||
const notes = BaseModel.modelsByIds(this.props.notes, noteIds);
|
||||
const todos = notes.filter(n => !!n.is_todo);
|
||||
if (!todos.length) return;
|
||||
|
||||
for (let i = 0; i < todos.length; i++) {
|
||||
const toggledTodo = Note.toggleTodoCompleted(todos[i]);
|
||||
await Note.save(toggledTodo);
|
||||
}
|
||||
|
||||
this.focusNoteId_(todos[0].id);
|
||||
}
|
||||
|
||||
if (keyCode === 9) { // TAB
|
||||
event.preventDefault();
|
||||
|
||||
if (event.shiftKey) {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'sideBar',
|
||||
});
|
||||
} else {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'noteTitle',
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
focusNoteId_(noteId) {
|
||||
// - We need to focus the item manually otherwise focus might be lost when the
|
||||
// list is scrolled and items within it are being rebuilt.
|
||||
// - We need to use an interval because when leaving the arrow pressed, the rendering
|
||||
// of items might lag behind and so the ref is not yet available at this point.
|
||||
if (!this.itemAnchorRef(noteId)) {
|
||||
if (this.focusItemIID_) clearInterval(this.focusItemIID_);
|
||||
this.focusItemIID_ = setInterval(() => {
|
||||
if (this.itemAnchorRef(noteId)) {
|
||||
this.itemAnchorRef(noteId).focus();
|
||||
clearInterval(this.focusItemIID_)
|
||||
this.focusItemIID_ = null;
|
||||
}
|
||||
}, 10);
|
||||
} else {
|
||||
this.itemAnchorRef(noteId).focus();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.focusItemIID_) {
|
||||
clearInterval(this.focusItemIID_);
|
||||
this.focusItemIID_ = null;
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const style = this.props.style;
|
||||
@@ -342,11 +398,13 @@ class NoteListComponent extends React.Component {
|
||||
|
||||
return (
|
||||
<ItemList
|
||||
ref={this.itemListRef}
|
||||
itemHeight={this.style().listItem.height}
|
||||
style={style}
|
||||
className={"note-list"}
|
||||
items={notes}
|
||||
itemRenderer={this.itemRenderer}
|
||||
onKeyDown={this.onKeyDown}
|
||||
></ItemList>
|
||||
);
|
||||
}
|
||||
@@ -363,6 +421,7 @@ const mapStateToProps = (state) => {
|
||||
searches: state.searches,
|
||||
selectedSearchId: state.selectedSearchId,
|
||||
watchedNoteFiles: state.watchedNoteFiles,
|
||||
windowCommand: state.windowCommand,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -16,6 +16,8 @@ class NotePropertiesDialog extends React.Component {
|
||||
|
||||
this.okButton_click = this.okButton_click.bind(this);
|
||||
this.cancelButton_click = this.cancelButton_click.bind(this);
|
||||
this.onKeyDown = this.onKeyDown.bind(this);
|
||||
this.okButton = React.createRef();
|
||||
|
||||
this.state = {
|
||||
formNote: null,
|
||||
@@ -43,6 +45,12 @@ class NotePropertiesDialog extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
if (this.state.editedKey == null) {
|
||||
this.okButton.current.focus();
|
||||
}
|
||||
}
|
||||
|
||||
async loadNote(noteId) {
|
||||
if (!noteId) {
|
||||
this.setState({ formNote: null });
|
||||
@@ -184,6 +192,14 @@ class NotePropertiesDialog extends React.Component {
|
||||
this.closeDialog(false);
|
||||
}
|
||||
|
||||
onKeyDown(event) {
|
||||
if (event.keyCode === 13) {
|
||||
this.closeDialog(true);
|
||||
} else if (event.keyCode === 27) {
|
||||
this.closeDialog(false);
|
||||
}
|
||||
}
|
||||
|
||||
editPropertyButtonClick(key, initialValue) {
|
||||
this.setState({
|
||||
editedKey: key,
|
||||
@@ -222,6 +238,7 @@ class NotePropertiesDialog extends React.Component {
|
||||
|
||||
async cancelProperty() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.okButton.current.focus();
|
||||
this.setState({
|
||||
editedKey: null,
|
||||
editedValue: null
|
||||
@@ -347,7 +364,17 @@ class NotePropertiesDialog extends React.Component {
|
||||
const formNote = this.state.formNote;
|
||||
|
||||
const buttonComps = [];
|
||||
buttonComps.push(<button key="ok" style={styles.button} onClick={this.okButton_click}>{_('Apply')}</button>);
|
||||
buttonComps.push(
|
||||
<button
|
||||
key="ok"
|
||||
style={styles.button}
|
||||
onClick={this.okButton_click}
|
||||
ref={this.okButton}
|
||||
onKeyDown={this.onKeyDown}
|
||||
>
|
||||
{_('Apply')}
|
||||
</button>
|
||||
);
|
||||
buttonComps.push(<button key="cancel" style={styles.button} onClick={this.cancelButton_click}>{_('Cancel')}</button>);
|
||||
|
||||
const noteComps = [];
|
||||
|
@@ -13,6 +13,7 @@ class NoteSearchBarComponent extends React.Component {
|
||||
};
|
||||
|
||||
this.searchInput_change = this.searchInput_change.bind(this);
|
||||
this.searchInput_keyDown = this.searchInput_keyDown.bind(this);
|
||||
this.previousButton_click = this.previousButton_click.bind(this);
|
||||
this.nextButton_click = this.nextButton_click.bind(this);
|
||||
this.closeButton_click = this.closeButton_click.bind(this);
|
||||
@@ -70,6 +71,24 @@ class NoteSearchBarComponent extends React.Component {
|
||||
this.triggerOnChange(query);
|
||||
}
|
||||
|
||||
searchInput_keyDown(event) {
|
||||
if (event.keyCode === 13) { // ENTER
|
||||
event.preventDefault();
|
||||
|
||||
if (!event.shiftKey) {
|
||||
if (this.props.onNext) this.props.onNext();
|
||||
} else {
|
||||
if (this.props.onPrevious) this.props.onPrevious();
|
||||
}
|
||||
}
|
||||
|
||||
if (event.keyCode === 27) { // ESCAPE
|
||||
event.preventDefault();
|
||||
|
||||
if (this.props.onClose) this.props.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
previousButton_click(event) {
|
||||
if (this.props.onPrevious) this.props.onPrevious();
|
||||
}
|
||||
@@ -101,7 +120,7 @@ class NoteSearchBarComponent extends React.Component {
|
||||
<div style={this.props.style}>
|
||||
<div style={{display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
|
||||
{ closeButton }
|
||||
<input placeholder={_('Search...')} value={this.state.query} onChange={this.searchInput_change} ref="searchInput" type="text" style={{width: 200, marginRight: 5}}></input>
|
||||
<input placeholder={_('Search...')} value={this.state.query} onChange={this.searchInput_change} onKeyDown={this.searchInput_keyDown} ref="searchInput" type="text" style={{width: 200, marginRight: 5}}></input>
|
||||
{ nextButton }
|
||||
{ previousButton }
|
||||
</div>
|
||||
|
@@ -6,7 +6,7 @@ const Search = require('lib/models/Search.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { IconButton } = require('./IconButton.min.js');
|
||||
const { urlDecode, escapeHtml } = require('lib/string-utils');
|
||||
const { urlDecode, escapeHtml, pregQuote, scriptType } = require('lib/string-utils');
|
||||
const Toolbar = require('./Toolbar.min.js');
|
||||
const TagList = require('./TagList.min.js');
|
||||
const { connect } = require('react-redux');
|
||||
@@ -28,6 +28,7 @@ const ArrayUtils = require('lib/ArrayUtils');
|
||||
const ObjectUtils = require('lib/ObjectUtils');
|
||||
const urlUtils = require('lib/urlUtils');
|
||||
const dialogs = require('./dialogs');
|
||||
const NoteListUtils = require('./utils/NoteListUtils');
|
||||
const NoteSearchBar = require('./NoteSearchBar.min.js');
|
||||
const markdownUtils = require('lib/markdownUtils');
|
||||
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
|
||||
@@ -35,6 +36,7 @@ const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
|
||||
const { clipboard } = require('electron');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const NoteTextViewer = require('./NoteTextViewer.min');
|
||||
|
||||
require('brace/mode/markdown');
|
||||
// https://ace.c9.io/build/kitchen-sink.html
|
||||
@@ -78,6 +80,8 @@ class NoteTextComponent extends React.Component {
|
||||
localSearch: Object.assign({}, this.localSearchDefaultState),
|
||||
};
|
||||
|
||||
this.webviewRef_ = React.createRef();
|
||||
|
||||
this.lastLoadedNoteId_ = null;
|
||||
|
||||
this.webviewListeners_ = null;
|
||||
@@ -103,9 +107,9 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
this.onAlarmChange_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
|
||||
this.onNoteTypeToggle_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
|
||||
this.onTodoToggle_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
|
||||
this.onAlarmChange_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
|
||||
this.onNoteTypeToggle_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
|
||||
this.onTodoToggle_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
|
||||
|
||||
this.onEditorPaste_ = async (event = null) => {
|
||||
const formats = clipboard.availableFormats();
|
||||
@@ -214,7 +218,7 @@ class NoteTextComponent extends React.Component {
|
||||
this.externalEditWatcher_noteChange = (event) => {
|
||||
if (!this.state.note || !this.state.note.id) return;
|
||||
if (event.id === this.state.note.id) {
|
||||
this.reloadNote(this.props);
|
||||
this.scheduleReloadNote(this.props);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,6 +261,10 @@ class NoteTextComponent extends React.Component {
|
||||
showLocalSearch: false,
|
||||
});
|
||||
}
|
||||
|
||||
this.titleField_keyDown = this.titleField_keyDown.bind(this);
|
||||
this.webview_ipcMessage = this.webview_ipcMessage.bind(this);
|
||||
this.webview_domReady = this.webview_domReady.bind(this);
|
||||
}
|
||||
|
||||
// Note:
|
||||
@@ -357,7 +365,6 @@ class NoteTextComponent extends React.Component {
|
||||
this.saveIfNeeded();
|
||||
|
||||
this.mdToHtml_ = null;
|
||||
this.destroyWebview();
|
||||
|
||||
eventManager.removeListener('alarmChange', this.onAlarmChange_);
|
||||
eventManager.removeListener('noteTypeToggle', this.onNoteTypeToggle_);
|
||||
@@ -398,6 +405,20 @@ class NoteTextComponent extends React.Component {
|
||||
}, 500);
|
||||
}
|
||||
|
||||
scheduleReloadNote(props, options = null) {
|
||||
if (this.scheduleReloadNoteIID_) {
|
||||
clearTimeout(this.scheduleReloadNoteIID_);
|
||||
this.scheduleReloadNoteIID_ = null;
|
||||
}
|
||||
|
||||
this.scheduleReloadNoteIID_ = setTimeout(() => {
|
||||
this.reloadNote(props, options);
|
||||
}, 10);
|
||||
}
|
||||
|
||||
// Generally, reloadNote() should not be called directly so that it's not called multiple times
|
||||
// from multiple places within a short interval of time. Instead use scheduleReloadNote() to
|
||||
// delay reloading a bit and make sure that only one reload operation is performed.
|
||||
async reloadNote(props, options = null) {
|
||||
if (!options) options = {};
|
||||
if (!('noReloadIfLocalChanges' in options)) options.noReloadIfLocalChanges = false;
|
||||
@@ -412,12 +433,17 @@ class NoteTextComponent extends React.Component {
|
||||
let loadingNewNote = true;
|
||||
let parentFolder = null;
|
||||
let noteTags = [];
|
||||
let scrollPercent = 0;
|
||||
|
||||
if (props.newNote) {
|
||||
note = Object.assign({}, props.newNote);
|
||||
this.lastLoadedNoteId_ = null;
|
||||
} else {
|
||||
noteId = props.noteId;
|
||||
|
||||
scrollPercent = this.props.lastEditorScrollPercents[noteId];
|
||||
if (!scrollPercent) scrollPercent = 0;
|
||||
|
||||
loadingNewNote = stateNoteId !== noteId;
|
||||
noteTags = await Tag.tagsByNoteId(noteId);
|
||||
this.lastLoadedNoteId_ = noteId;
|
||||
@@ -438,7 +464,7 @@ class NoteTextComponent extends React.Component {
|
||||
// If we are loading nothing (noteId == null), make sure to
|
||||
// set webviewReady to false too because the webview component
|
||||
// is going to be removed in render().
|
||||
const webviewReady = this.webview_ && this.state.webviewReady && (noteId || props.newNote);
|
||||
const webviewReady = !!this.webviewRef_.current && this.state.webviewReady && (!!noteId || !!props.newNote);
|
||||
|
||||
// Scroll back to top when loading new note
|
||||
if (loadingNewNote) {
|
||||
@@ -481,6 +507,11 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
this.editor_.editor.clearSelection();
|
||||
this.editor_.editor.moveCursorTo(0,0);
|
||||
|
||||
setTimeout(() => {
|
||||
this.setEditorPercentScroll(scrollPercent ? scrollPercent : 0);
|
||||
this.setViewerPercentScroll(scrollPercent ? scrollPercent : 0);
|
||||
}, 10);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -534,18 +565,18 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
async componentWillReceiveProps(nextProps) {
|
||||
if (nextProps.newNote) {
|
||||
await this.reloadNote(nextProps);
|
||||
} else if ('noteId' in nextProps && nextProps.noteId !== this.props.noteId) {
|
||||
await this.reloadNote(nextProps);
|
||||
if (this.props.newNote !== nextProps.newNote && nextProps.newNote) {
|
||||
await this.scheduleReloadNote(nextProps);
|
||||
} else if (('noteId' in nextProps) && nextProps.noteId !== this.props.noteId) {
|
||||
await this.scheduleReloadNote(nextProps);
|
||||
} else if ('noteTags' in nextProps && this.areNoteTagsModified(nextProps.noteTags, this.state.noteTags)) {
|
||||
this.setState({
|
||||
noteTags: nextProps.noteTags
|
||||
});
|
||||
}
|
||||
|
||||
if ('syncStarted' in nextProps && !nextProps.syncStarted && !this.isModified()) {
|
||||
await this.reloadNote(nextProps, { noReloadIfLocalChanges: true });
|
||||
if ((nextProps.syncStarted !== this.props.syncStarted) && ('syncStarted' in nextProps) && !nextProps.syncStarted && !this.isModified()) {
|
||||
await this.scheduleReloadNote(nextProps, { noReloadIfLocalChanges: true });
|
||||
}
|
||||
|
||||
if (nextProps.windowCommand) {
|
||||
@@ -678,6 +709,10 @@ class NoteTextComponent extends React.Component {
|
||||
type: "FOLDER_AND_NOTE_SELECT",
|
||||
folderId: item.parent_id,
|
||||
noteId: item.id,
|
||||
historyNoteAction: {
|
||||
id: this.state.note.id,
|
||||
parent_id: this.state.note.parent_id,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
throw new Error('Unsupported item type: ' + item.type_);
|
||||
@@ -710,11 +745,31 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
setEditorPercentScroll(p) {
|
||||
const noteId = this.props.noteId;
|
||||
|
||||
if (noteId) {
|
||||
this.props.dispatch({
|
||||
type: 'EDITOR_SCROLL_PERCENT_SET',
|
||||
noteId: noteId,
|
||||
percent: p,
|
||||
});
|
||||
}
|
||||
|
||||
this.editorSetScrollTop(p * this.editorMaxScroll());
|
||||
}
|
||||
|
||||
setViewerPercentScroll(p) {
|
||||
this.webview_.send('setPercentScroll', p);
|
||||
const noteId = this.props.noteId;
|
||||
|
||||
if (noteId) {
|
||||
this.props.dispatch({
|
||||
type: 'EDITOR_SCROLL_PERCENT_SET',
|
||||
noteId: noteId,
|
||||
percent: p,
|
||||
});
|
||||
}
|
||||
|
||||
if (this.webviewRef_.current) this.webviewRef_.current.wrappedInstance.send('setPercentScroll', p);
|
||||
}
|
||||
|
||||
editor_scroll() {
|
||||
@@ -724,11 +779,13 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
const m = this.editorMaxScroll();
|
||||
this.setViewerPercentScroll(m ? this.editorScrollTop() / m : 0);
|
||||
const percent = m ? this.editorScrollTop() / m : 0;
|
||||
|
||||
this.setViewerPercentScroll(percent);
|
||||
}
|
||||
|
||||
webview_domReady() {
|
||||
if (!this.webview_) return;
|
||||
if (!this.webviewRef_.current) return;
|
||||
|
||||
this.setState({
|
||||
webviewReady: true,
|
||||
@@ -737,19 +794,6 @@ class NoteTextComponent extends React.Component {
|
||||
// if (Setting.value('env') === 'dev') this.webview_.openDevTools();
|
||||
}
|
||||
|
||||
webview_ref(element) {
|
||||
if (this.webview_) {
|
||||
if (this.webview_ === element) return;
|
||||
this.destroyWebview();
|
||||
}
|
||||
|
||||
if (!element) {
|
||||
this.destroyWebview();
|
||||
} else {
|
||||
this.initWebview(element);
|
||||
}
|
||||
}
|
||||
|
||||
editor_ref(element) {
|
||||
if (this.editor_ === element) return;
|
||||
|
||||
@@ -822,35 +866,6 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
initWebview(wv) {
|
||||
if (!this.webviewListeners_) {
|
||||
this.webviewListeners_ = {
|
||||
'dom-ready': this.webview_domReady.bind(this),
|
||||
'ipc-message': this.webview_ipcMessage.bind(this),
|
||||
};
|
||||
}
|
||||
|
||||
for (let n in this.webviewListeners_) {
|
||||
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
|
||||
const fn = this.webviewListeners_[n];
|
||||
wv.addEventListener(n, fn);
|
||||
}
|
||||
|
||||
this.webview_ = wv;
|
||||
}
|
||||
|
||||
destroyWebview() {
|
||||
if (!this.webview_) return;
|
||||
|
||||
for (let n in this.webviewListeners_) {
|
||||
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
|
||||
const fn = this.webviewListeners_[n];
|
||||
this.webview_.removeEventListener(n, fn);
|
||||
}
|
||||
|
||||
this.webview_ = null;
|
||||
}
|
||||
|
||||
aceEditor_change(body) {
|
||||
shared.noteComponent_change(this, 'body', body);
|
||||
this.scheduleHtmlUpdate();
|
||||
@@ -872,7 +887,10 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
updateHtml(body = null) {
|
||||
updateHtml(body = null, options = null) {
|
||||
if (!options) options = {};
|
||||
if (!('useCustomCss' in options)) options.useCustomCss = true;
|
||||
|
||||
const mdOptions = {
|
||||
onResourceLoaded: () => {
|
||||
if (this.resourceLoadedTimeoutId_) {
|
||||
@@ -893,7 +911,6 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
let bodyToRender = body;
|
||||
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
|
||||
bodyToRender = '<style>' + this.props.customCss + '</style>\n' + bodyToRender;
|
||||
let bodyHtml = '';
|
||||
|
||||
const visiblePanes = this.props.visiblePanes || ['editor', 'viewer'];
|
||||
@@ -903,30 +920,74 @@ class NoteTextComponent extends React.Component {
|
||||
bodyToRender = '*' + _('This note has no content. Click on "%s" to toggle the editor and edit the note.', _('Layout')) + '*';
|
||||
}
|
||||
|
||||
if (options.useCustomCss) bodyToRender = '<style>' + this.props.customCss + '</style>\n' + bodyToRender;
|
||||
|
||||
bodyHtml = this.mdToHtml().render(bodyToRender, theme, mdOptions);
|
||||
|
||||
this.setState({ bodyHtml: bodyHtml });
|
||||
}
|
||||
|
||||
titleField_keyDown(event) {
|
||||
const keyCode = event.keyCode;
|
||||
|
||||
if (keyCode === 9) { // TAB
|
||||
event.preventDefault();
|
||||
|
||||
if (event.shiftKey) {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'noteList',
|
||||
});
|
||||
} else {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'noteBody',
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async doCommand(command) {
|
||||
if (!command || !this.state.note) return;
|
||||
if (!command) return;
|
||||
|
||||
let fn = null;
|
||||
|
||||
if (command.name === 'exportPdf' && this.webview_) {
|
||||
if (command.name === 'exportPdf') {
|
||||
fn = this.commandSavePdf;
|
||||
} else if (command.name === 'print' && this.webview_) {
|
||||
} else if (command.name === 'print') {
|
||||
fn = this.commandPrint;
|
||||
} else if (command.name === 'textBold') {
|
||||
fn = this.commandTextBold;
|
||||
} else if (command.name === 'textItalic') {
|
||||
fn = this.commandTextItalic;
|
||||
} else if (command.name === 'insertDateTime' ) {
|
||||
fn = this.commandDateTime;
|
||||
} else if (command.name === 'commandStartExternalEditing') {
|
||||
fn = this.commandStartExternalEditing;
|
||||
} else if (command.name === 'showLocalSearch') {
|
||||
fn = this.commandShowLocalSearch;
|
||||
}
|
||||
|
||||
if (this.state.note) {
|
||||
if (command.name === 'textBold') {
|
||||
fn = this.commandTextBold;
|
||||
} else if (command.name === 'textItalic') {
|
||||
fn = this.commandTextItalic;
|
||||
} else if (command.name === 'textLink') {
|
||||
fn = this.commandTextLink;
|
||||
} else if (command.name === 'insertDateTime') {
|
||||
fn = this.commandDateTime;
|
||||
} else if (command.name === 'commandStartExternalEditing') {
|
||||
fn = this.commandStartExternalEditing;
|
||||
} else if (command.name === 'showLocalSearch') {
|
||||
fn = this.commandShowLocalSearch;
|
||||
}
|
||||
}
|
||||
|
||||
if (command.name === 'focusElement' && command.target === 'noteTitle') {
|
||||
fn = () => {
|
||||
if (!this.titleField_) return;
|
||||
this.titleField_.focus();
|
||||
}
|
||||
}
|
||||
|
||||
if (command.name === 'focusElement' && command.target === 'noteBody') {
|
||||
fn = () => {
|
||||
if (!this.editor_) return;
|
||||
this.editor_.editor.focus();
|
||||
}
|
||||
}
|
||||
|
||||
if (!fn) return;
|
||||
@@ -998,13 +1059,17 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
printTo_(target, options) {
|
||||
if (this.props.selectedNoteIds.length !== 1 || !this.webviewRef_.current) {
|
||||
throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
|
||||
}
|
||||
|
||||
const previousBody = this.state.note.body;
|
||||
const tempBody = "# " + this.state.note.title + "\n\n" + previousBody;
|
||||
|
||||
const previousTheme = Setting.value('theme');
|
||||
Setting.setValue('theme', Setting.THEME_LIGHT);
|
||||
this.lastSetHtml_ = '';
|
||||
this.updateHtml(tempBody);
|
||||
this.updateHtml(tempBody, { useCustomCss: false });
|
||||
this.forceUpdate();
|
||||
|
||||
const restoreSettings = () => {
|
||||
@@ -1016,7 +1081,7 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
setTimeout(() => {
|
||||
if (target === 'pdf') {
|
||||
this.webview_.printToPDF({}, (error, data) => {
|
||||
this.webviewRef_.current.wrappedInstance.printToPDF({}, (error, data) => {
|
||||
restoreSettings();
|
||||
|
||||
if (error) {
|
||||
@@ -1026,25 +1091,35 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
});
|
||||
} else if (target === 'printer') {
|
||||
this.webview_.print();
|
||||
this.webviewRef_.current.wrappedInstance.print();
|
||||
restoreSettings();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
commandSavePdf() {
|
||||
const path = bridge().showSaveDialog({
|
||||
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
|
||||
defaultPath: safeFilename(this.state.note.title),
|
||||
});
|
||||
try {
|
||||
if (!this.state.note) throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
|
||||
|
||||
const path = bridge().showSaveDialog({
|
||||
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
|
||||
defaultPath: safeFilename(this.state.note.title),
|
||||
});
|
||||
|
||||
if (!path) return;
|
||||
|
||||
if (path) {
|
||||
this.printTo_('pdf', { path: path });
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
commandPrint() {
|
||||
this.printTo_('printer');
|
||||
try {
|
||||
this.printTo_('printer');
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
async commandStartExternalEditing() {
|
||||
@@ -1300,6 +1375,25 @@ class NoteTextComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
if (this.props.historyNotes.length) {
|
||||
toolbarItems.push({
|
||||
tooltip: _('Back'),
|
||||
iconName: 'fa-arrow-left',
|
||||
onClick: () => {
|
||||
if (!this.props.historyNotes.length) return;
|
||||
|
||||
const lastItem = this.props.historyNotes[this.props.historyNotes.length - 1];
|
||||
|
||||
this.props.dispatch({
|
||||
type: "FOLDER_AND_NOTE_SELECT",
|
||||
folderId: lastItem.parent_id,
|
||||
noteId: lastItem.id,
|
||||
historyNoteAction: 'pop',
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Bold'),
|
||||
iconName: 'fa-bold',
|
||||
@@ -1435,6 +1529,61 @@ class NoteTextComponent extends React.Component {
|
||||
return toolbarItems;
|
||||
}
|
||||
|
||||
renderNoNotes(rootStyle) {
|
||||
const emptyDivStyle = Object.assign({
|
||||
backgroundColor: 'black',
|
||||
opacity: 0.1,
|
||||
}, rootStyle);
|
||||
return <div style={emptyDivStyle}></div>
|
||||
}
|
||||
|
||||
renderMultiNotes(rootStyle) {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const multiNotesButton_click = item => {
|
||||
if (item.submenu) {
|
||||
item.submenu.popup(bridge().window());
|
||||
} else {
|
||||
item.click();
|
||||
}
|
||||
}
|
||||
|
||||
const menu = NoteListUtils.makeContextMenu(this.props.selectedNoteIds, {
|
||||
notes: this.props.notes,
|
||||
dispatch: this.props.dispatch,
|
||||
});
|
||||
|
||||
const buttonStyle = Object.assign({}, theme.buttonStyle, {
|
||||
marginBottom: 10,
|
||||
});
|
||||
|
||||
const itemComps = [];
|
||||
const menuItems = menu.items;
|
||||
|
||||
for (let i = 0; i < menuItems.length; i++) {
|
||||
const item = menuItems[i];
|
||||
if (!item.enabled) continue;
|
||||
|
||||
itemComps.push(<button
|
||||
key={item.label}
|
||||
style={buttonStyle}
|
||||
onClick={() => multiNotesButton_click(item)}
|
||||
>{item.label}</button>);
|
||||
}
|
||||
|
||||
rootStyle = Object.assign({}, rootStyle, {
|
||||
paddingTop: rootStyle.paddingLeft,
|
||||
display: 'inline-flex',
|
||||
justifyContent: 'center',
|
||||
});
|
||||
|
||||
return (<div style={rootStyle}>
|
||||
<div style={{display: 'flex', flexDirection: 'column'}}>
|
||||
{itemComps}
|
||||
</div>
|
||||
</div>);
|
||||
}
|
||||
|
||||
render() {
|
||||
const style = this.props.style;
|
||||
const note = this.state.note;
|
||||
@@ -1454,12 +1603,10 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const innerWidth = rootStyle.width - rootStyle.paddingLeft - rootStyle.paddingRight - borderWidth;
|
||||
|
||||
if (!note || !!note.encryption_applied) {
|
||||
const emptyDivStyle = Object.assign({
|
||||
backgroundColor: 'black',
|
||||
opacity: 0.1,
|
||||
}, rootStyle);
|
||||
return <div style={emptyDivStyle}></div>
|
||||
if (this.props.selectedNoteIds.length > 1) {
|
||||
return this.renderMultiNotes(rootStyle);
|
||||
} else if (!note || !!note.encryption_applied) { //|| (note && !this.props.newNote && this.props.noteId && note.id !== this.props.noteId)) { // note.id !== props.noteId is when the note has not been loaded yet, and the previous one is still in the state
|
||||
return this.renderNoNotes(rootStyle);
|
||||
}
|
||||
|
||||
const titleBarStyle = {
|
||||
@@ -1562,7 +1709,7 @@ class NoteTextComponent extends React.Component {
|
||||
const htmlHasChanged = this.lastSetHtml_ !== html;
|
||||
if (htmlHasChanged) {
|
||||
let options = {codeTheme: theme.codeThemeCss};
|
||||
this.webview_.send('setHtml', html, options);
|
||||
this.webviewRef_.current.wrappedInstance.send('setHtml', html, options);
|
||||
this.lastSetHtml_ = html;
|
||||
}
|
||||
|
||||
@@ -1570,7 +1717,11 @@ class NoteTextComponent extends React.Component {
|
||||
const markerOptions = {};
|
||||
|
||||
if (this.state.showLocalSearch) {
|
||||
keywords = [this.state.localSearch.query];
|
||||
keywords = [{
|
||||
type: 'text',
|
||||
value: this.state.localSearch.query,
|
||||
accuracy: 'partially',
|
||||
}]
|
||||
markerOptions.selectedIndex = this.state.localSearch.selectedIndex;
|
||||
} else {
|
||||
const search = BaseModel.byId(this.props.searches, this.props.selectedSearchId);
|
||||
@@ -1584,7 +1735,7 @@ class NoteTextComponent extends React.Component {
|
||||
if (htmlHasChanged || keywordHash !== this.lastSetMarkers_ || !ObjectUtils.fieldsEqual(this.lastSetMarkersOptions_, markerOptions)) {
|
||||
this.lastSetMarkers_ = keywordHash;
|
||||
this.lastSetMarkersOptions_ = Object.assign({}, markerOptions);
|
||||
this.webview_.send('setMarkers', keywords, markerOptions);
|
||||
this.webviewRef_.current.wrappedInstance.send('setMarkers', keywords, markerOptions);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1601,6 +1752,7 @@ class NoteTextComponent extends React.Component {
|
||||
style={titleEditorStyle}
|
||||
value={note && note.title ? note.title : ''}
|
||||
onChange={(event) => { this.title_changeText(event); }}
|
||||
onKeyDown={this.titleField_keyDown}
|
||||
placeholder={ this.props.newNote ? _('Creating new %s...', isTodo ? _('to-do') : _('note')) : '' }
|
||||
/>
|
||||
|
||||
@@ -1615,32 +1767,13 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const titleBarDate = <span style={Object.assign({}, theme.textStyle, {color: theme.colorFaded})}>{time.formatMsToLocal(note.user_updated_time)}</span>
|
||||
|
||||
const viewer = <webview
|
||||
style={viewerStyle}
|
||||
preload="gui/note-viewer/preload.js"
|
||||
src="gui/note-viewer/index.html"
|
||||
webpreferences="contextIsolation"
|
||||
ref={(elem) => { this.webview_ref(elem); } }
|
||||
const viewer = <NoteTextViewer
|
||||
ref={this.webviewRef_}
|
||||
viewerStyle={viewerStyle}
|
||||
onDomReady={this.webview_domReady}
|
||||
onIpcMessage={this.webview_ipcMessage}
|
||||
/>
|
||||
|
||||
// const markers = [{
|
||||
// startRow: 2,
|
||||
// startCol: 3,
|
||||
// endRow: 2,
|
||||
// endCol: 6,
|
||||
// type: 'text',
|
||||
// className: 'test-marker'
|
||||
// }];
|
||||
|
||||
// markers={markers}
|
||||
// editorProps={{$useWorker: false}}
|
||||
|
||||
// #note-editor .test-marker {
|
||||
// background-color: red;
|
||||
// color: yellow;
|
||||
// position: absolute;
|
||||
// }
|
||||
|
||||
const editorRootStyle = Object.assign({}, editorStyle);
|
||||
delete editorRootStyle.width;
|
||||
delete editorRootStyle.height;
|
||||
@@ -1662,6 +1795,7 @@ class NoteTextComponent extends React.Component {
|
||||
showPrintMargin={false}
|
||||
onSelectionChange={this.aceEditor_selectionChange}
|
||||
onFocus={this.aceEditor_focus}
|
||||
readOnly={visiblePanes.indexOf('editor') < 0}
|
||||
|
||||
// Disable warning: "Automatically scrolling cursor into view after
|
||||
// selection change this will be disabled in the next version set
|
||||
@@ -1705,6 +1839,8 @@ class NoteTextComponent extends React.Component {
|
||||
const mapStateToProps = (state) => {
|
||||
return {
|
||||
noteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
|
||||
notes: state.notes,
|
||||
selectedNoteIds: state.selectedNoteIds,
|
||||
noteTags: state.selectedNoteTags,
|
||||
folderId: state.selectedFolderId,
|
||||
itemType: state.selectedItemType,
|
||||
@@ -1719,6 +1855,8 @@ const mapStateToProps = (state) => {
|
||||
selectedSearchId: state.selectedSearchId,
|
||||
watchedNoteFiles: state.watchedNoteFiles,
|
||||
customCss: state.customCss,
|
||||
lastEditorScrollPercents: state.lastEditorScrollPercents,
|
||||
historyNotes: state.historyNotes,
|
||||
};
|
||||
};
|
||||
|
||||
|
99
ElectronClient/app/gui/NoteTextViewer.jsx
Normal file
99
ElectronClient/app/gui/NoteTextViewer.jsx
Normal file
@@ -0,0 +1,99 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
|
||||
class NoteTextViewerComponent extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.initialized_ = false;
|
||||
|
||||
this.webviewRef_ = React.createRef();
|
||||
this.webviewListeners_ = null;
|
||||
|
||||
this.webview_domReady = this.webview_domReady.bind(this);
|
||||
this.webview_ipcMessage = this.webview_ipcMessage.bind(this);
|
||||
}
|
||||
|
||||
webview_domReady(event) {
|
||||
this.props.onDomReady(event);
|
||||
}
|
||||
|
||||
webview_ipcMessage(event) {
|
||||
this.props.onIpcMessage(event);
|
||||
}
|
||||
|
||||
initWebview() {
|
||||
const wv = this.webviewRef_.current;
|
||||
|
||||
if (!this.webviewListeners_) {
|
||||
this.webviewListeners_ = {
|
||||
'dom-ready': this.webview_domReady.bind(this),
|
||||
'ipc-message': this.webview_ipcMessage.bind(this),
|
||||
};
|
||||
}
|
||||
|
||||
for (let n in this.webviewListeners_) {
|
||||
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
|
||||
const fn = this.webviewListeners_[n];
|
||||
wv.addEventListener(n, fn);
|
||||
}
|
||||
}
|
||||
|
||||
destroyWebview() {
|
||||
const wv = this.webviewRef_.current;
|
||||
if (!wv || !this.initialized_) return;
|
||||
|
||||
for (let n in this.webviewListeners_) {
|
||||
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
|
||||
const fn = this.webviewListeners_[n];
|
||||
wv.removeEventListener(n, fn);
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
if (!this.initialized_ && this.webviewRef_.current) {
|
||||
this.initWebview();
|
||||
this.initialized_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.destroyWebview();
|
||||
}
|
||||
|
||||
send(channel, arg0 = null, arg1 = null, arg2 = null, arg3 = null) {
|
||||
return this.webviewRef_.current.send(channel, arg0, arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
printToPDF(options, callback) {
|
||||
return this.webviewRef_.current.printToPDF(options, callback);
|
||||
}
|
||||
|
||||
print(options = {}) {
|
||||
return this.webviewRef_.current.print(options);
|
||||
}
|
||||
|
||||
render() {
|
||||
return <webview
|
||||
ref={this.webviewRef_}
|
||||
style={this.props.viewerStyle}
|
||||
preload="gui/note-viewer/preload.js"
|
||||
src="gui/note-viewer/index.html"
|
||||
webpreferences="contextIsolation"
|
||||
/>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
return {
|
||||
theme: state.settings.theme,
|
||||
};
|
||||
};
|
||||
|
||||
const NoteTextViewer = connect(mapStateToProps, null, null, { withRef: true })(NoteTextViewerComponent);
|
||||
|
||||
module.exports = NoteTextViewer;
|
@@ -15,6 +15,7 @@ const { ConfigScreen } = require('./ConfigScreen.min.js');
|
||||
const { EncryptionConfigScreen } = require('./EncryptionConfigScreen.min.js');
|
||||
const { ClipperConfigScreen } = require('./ClipperConfigScreen.min.js');
|
||||
const { Navigator } = require('./Navigator.min.js');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
|
||||
const { app } = require('../app');
|
||||
|
||||
@@ -71,6 +72,8 @@ class RootComponent extends React.Component {
|
||||
state: 'ready',
|
||||
});
|
||||
}
|
||||
|
||||
await WelcomeUtils.install(this.props.dispatch);
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@@ -3,6 +3,7 @@ const { connect } = require("react-redux");
|
||||
const shared = require("lib/components/shared/side-menu-shared.js");
|
||||
const { Synchronizer } = require("lib/synchronizer.js");
|
||||
const BaseModel = require("lib/BaseModel.js");
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Folder = require("lib/models/Folder.js");
|
||||
const Note = require("lib/models/Note.js");
|
||||
const Tag = require("lib/models/Tag.js");
|
||||
@@ -23,7 +24,7 @@ class SideBarComponent extends React.Component {
|
||||
this.onFolderDragStart_ = (event) => {
|
||||
const folderId = event.currentTarget.getAttribute('folderid');
|
||||
if (!folderId) return;
|
||||
|
||||
|
||||
event.dataTransfer.setDragImage(new Image(), 1, 1);
|
||||
event.dataTransfer.clearData();
|
||||
event.dataTransfer.setData('text/x-jop-folder-ids', JSON.stringify([folderId]));
|
||||
@@ -39,9 +40,15 @@ class SideBarComponent extends React.Component {
|
||||
const dt = event.dataTransfer;
|
||||
if (!dt) return;
|
||||
|
||||
// folderId can be NULL when dropping on the sidebar Notebook header. In that case, it's used
|
||||
// to put the dropped folder at the root. But for notes, folderId needs to always be defined
|
||||
// since there's no such thing as a root note.
|
||||
|
||||
if (dt.types.indexOf("text/x-jop-note-ids") >= 0) {
|
||||
event.preventDefault();
|
||||
|
||||
if (!folderId) return;
|
||||
|
||||
const noteIds = JSON.parse(dt.getData("text/x-jop-note-ids"));
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
await Note.moveToFolder(noteIds[i], folderId);
|
||||
@@ -79,6 +86,20 @@ class SideBarComponent extends React.Component {
|
||||
id: folderId,
|
||||
});
|
||||
};
|
||||
|
||||
this.folderItemsOrder_ = [];
|
||||
this.tagItemsOrder_ = [];
|
||||
|
||||
this.onKeyDown = this.onKeyDown.bind(this);
|
||||
|
||||
this.rootRef = React.createRef();
|
||||
|
||||
this.anchorItemRefs = {};
|
||||
|
||||
this.state = {
|
||||
tagHeaderIsExpanded: Setting.value('tagHeaderIsExpanded'),
|
||||
folderHeaderIsExpanded: Setting.value('folderHeaderIsExpanded')
|
||||
};
|
||||
}
|
||||
|
||||
style() {
|
||||
@@ -166,9 +187,8 @@ class SideBarComponent extends React.Component {
|
||||
marginTop: 10,
|
||||
marginLeft: 5,
|
||||
marginRight: 5,
|
||||
minHeight: 70,
|
||||
marginBottom: 10,
|
||||
wordWrap: "break-word",
|
||||
//width: "100%",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -186,11 +206,36 @@ class SideBarComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
doCommand(command) {
|
||||
if (!command) return;
|
||||
|
||||
let commandProcessed = true;
|
||||
|
||||
if (command.name === 'focusElement' && command.target === 'sideBar') {
|
||||
if (this.props.sidebarVisibility) {
|
||||
const item = this.selectedItem();
|
||||
if (item) {
|
||||
const anchorRef = this.anchorItemRefs[item.type][item.id];
|
||||
if (anchorRef) anchorRef.current.focus();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
commandProcessed = false;
|
||||
}
|
||||
|
||||
if (commandProcessed) {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: null,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (shim.isLinux()) {
|
||||
// For some reason, the UI seems to sleep in some Linux distro during
|
||||
// sync. Cannot find the reason for it and cannot replicate, so here
|
||||
// as a test force the update at regular intervals.
|
||||
// as a test force the update at regular intervals.
|
||||
// https://github.com/laurent22/joplin/issues/312#issuecomment-429472193
|
||||
if (!prevProps.syncStarted && this.props.syncStarted) {
|
||||
this.clearForceUpdateDuringSync();
|
||||
@@ -201,13 +246,19 @@ class SideBarComponent extends React.Component {
|
||||
}
|
||||
|
||||
if (prevProps.syncStarted && !this.props.syncStarted) this.clearForceUpdateDuringSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.clearForceUpdateDuringSync();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||
if (prevProps.windowCommand !== this.props.windowCommand) {
|
||||
this.doCommand(this.props.windowCommand);
|
||||
}
|
||||
}
|
||||
|
||||
itemContextMenu(event) {
|
||||
const itemId = event.target.getAttribute("data-id");
|
||||
if (itemId === Folder.conflictFolderId()) return;
|
||||
@@ -303,7 +354,7 @@ class SideBarComponent extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (itemType === BaseModel.TYPE_TAG) {
|
||||
if (itemType === BaseModel.TYPE_TAG) {
|
||||
menu.append(
|
||||
new MenuItem({
|
||||
label: _('Rename'),
|
||||
@@ -335,17 +386,26 @@ class SideBarComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
searchItem_click(search) {
|
||||
this.props.dispatch({
|
||||
type: "SEARCH_SELECT",
|
||||
id: search ? search.id : null,
|
||||
});
|
||||
}
|
||||
// searchItem_click(search) {
|
||||
// this.props.dispatch({
|
||||
// type: "SEARCH_SELECT",
|
||||
// id: search ? search.id : null,
|
||||
// });
|
||||
// }
|
||||
|
||||
async sync_click() {
|
||||
await shared.synchronize_press(this);
|
||||
}
|
||||
|
||||
anchorItemRef(type, id) {
|
||||
let refs = null;
|
||||
|
||||
if (!this.anchorItemRefs[type]) this.anchorItemRefs[type] = {};
|
||||
if (this.anchorItemRefs[type][id]) return this.anchorItemRefs[type][id];
|
||||
this.anchorItemRefs[type][id] = React.createRef();
|
||||
return this.anchorItemRefs[type][id];
|
||||
}
|
||||
|
||||
folderItem(folder, selected, hasChildren, depth) {
|
||||
let style = Object.assign({}, this.style().listItem);
|
||||
if (folder.id === Folder.conflictFolderId()) style = Object.assign(style, this.style().conflictFolder);
|
||||
@@ -353,8 +413,6 @@ class SideBarComponent extends React.Component {
|
||||
const itemTitle = Folder.displayTitle(folder);
|
||||
|
||||
let containerStyle = Object.assign({}, this.style().listItemContainer);
|
||||
// containerStyle.paddingLeft = containerStyle.paddingLeft + depth * 10;
|
||||
|
||||
if (selected) containerStyle = Object.assign(containerStyle, this.style().listItemSelected);
|
||||
|
||||
let expandLinkStyle = Object.assign({}, this.style().listItemExpandIcon);
|
||||
@@ -367,10 +425,13 @@ class SideBarComponent extends React.Component {
|
||||
const expandIcon = <i style={expandIconStyle} className={"fa " + iconName}></i>
|
||||
const expandLink = hasChildren ? <a style={expandLinkStyle} href="#" folderid={folder.id} onClick={this.onFolderToggleClick_}>{expandIcon}</a> : <span style={expandLinkStyle}>{expandIcon}</span>
|
||||
|
||||
const anchorRef = this.anchorItemRef('folder', folder.id);
|
||||
|
||||
return (
|
||||
<div className="list-item-container" style={containerStyle} key={folder.id} onDragStart={this.onFolderDragStart_} onDragOver={this.onFolderDragOver_} onDrop={this.onFolderDrop_} draggable={true} folderid={folder.id}>
|
||||
{ expandLink }
|
||||
<a
|
||||
ref={anchorRef}
|
||||
className="list-item"
|
||||
href="#"
|
||||
data-id={folder.id}
|
||||
@@ -392,10 +453,14 @@ class SideBarComponent extends React.Component {
|
||||
tagItem(tag, selected) {
|
||||
let style = Object.assign({}, this.style().tagItem);
|
||||
if (selected) style = Object.assign(style, this.style().listItemSelected);
|
||||
|
||||
const anchorRef = this.anchorItemRef('tag', tag.id);
|
||||
|
||||
return (
|
||||
<a
|
||||
className="list-item"
|
||||
href="#"
|
||||
ref={anchorRef}
|
||||
data-id={tag.id}
|
||||
data-type={BaseModel.TYPE_TAG}
|
||||
onContextMenu={event => this.itemContextMenu(event)}
|
||||
@@ -412,26 +477,26 @@ class SideBarComponent extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
searchItem(search, selected) {
|
||||
let style = Object.assign({}, this.style().listItem);
|
||||
if (selected) style = Object.assign(style, this.style().listItemSelected);
|
||||
return (
|
||||
<a
|
||||
className="list-item"
|
||||
href="#"
|
||||
data-id={search.id}
|
||||
data-type={BaseModel.TYPE_SEARCH}
|
||||
onContextMenu={event => this.itemContextMenu(event)}
|
||||
key={search.id}
|
||||
style={style}
|
||||
onClick={() => {
|
||||
this.searchItem_click(search);
|
||||
}}
|
||||
>
|
||||
{search.title}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
// searchItem(search, selected) {
|
||||
// let style = Object.assign({}, this.style().listItem);
|
||||
// if (selected) style = Object.assign(style, this.style().listItemSelected);
|
||||
// return (
|
||||
// <a
|
||||
// className="list-item"
|
||||
// href="#"
|
||||
// data-id={search.id}
|
||||
// data-type={BaseModel.TYPE_SEARCH}
|
||||
// onContextMenu={event => this.itemContextMenu(event)}
|
||||
// key={search.id}
|
||||
// style={style}
|
||||
// onClick={() => {
|
||||
// this.searchItem_click(search);
|
||||
// }}
|
||||
// >
|
||||
// {search.title}
|
||||
// </a>
|
||||
// );
|
||||
// }
|
||||
|
||||
makeDivider(key) {
|
||||
return <div style={{ height: 2, backgroundColor: "blue" }} key={key} />;
|
||||
@@ -440,16 +505,138 @@ class SideBarComponent extends React.Component {
|
||||
makeHeader(key, label, iconName, extraProps = {}) {
|
||||
const style = this.style().header;
|
||||
const icon = <i style={{ fontSize: style.fontSize * 1.2, marginRight: 5 }} className={"fa " + iconName} />;
|
||||
|
||||
if (extraProps.toggleblock || extraProps.onClick) {
|
||||
style.cursor = "pointer";
|
||||
}
|
||||
|
||||
let headerClick = extraProps.onClick || null;
|
||||
delete extraProps.onClick;
|
||||
|
||||
// check if toggling option is set.
|
||||
let toggleIcon = null;
|
||||
const toggleKey = `${key}IsExpanded`;
|
||||
if (extraProps.toggleblock) {
|
||||
let isExpanded = this.state[toggleKey];
|
||||
toggleIcon = <i className={`fa ${isExpanded ? 'fa-chevron-down' : 'fa-chevron-left'}`} style={{ fontSize: style.fontSize * 0.75,
|
||||
marginRight: 12, marginLeft: 5, marginTop: style.fontSize * 0.125}}></i>;
|
||||
}
|
||||
|
||||
const ref = this.anchorItemRef('headers', key);
|
||||
|
||||
return (
|
||||
<div style={style} key={key} {...extraProps}>
|
||||
<div ref={ref} style={style} key={key} {...extraProps} onClick={(event) => {
|
||||
// if a custom click event is attached, trigger that.
|
||||
if (headerClick) {
|
||||
headerClick(key, event);
|
||||
}
|
||||
this.onHeaderClick_(key, event);
|
||||
}}>
|
||||
{icon}
|
||||
{label}
|
||||
<span style={{flex: 1 }}>{label}</span>
|
||||
{toggleIcon}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
selectedItem() {
|
||||
if (this.props.notesParentType === 'Folder' && this.props.selectedFolderId) {
|
||||
return { type: 'folder', id: this.props.selectedFolderId };
|
||||
} else if (this.props.notesParentType === 'Tag' && this.props.selectedTagId) {
|
||||
return { type: 'tag', id: this.props.selectedTagId };
|
||||
} else if (this.props.notesParentType === 'Search' && this.props.selectedSearchId) {
|
||||
return { type: 'search', id: this.props.selectedSearchId };
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
onKeyDown(event) {
|
||||
const keyCode = event.keyCode;
|
||||
const selectedItem = this.selectedItem();
|
||||
|
||||
if (keyCode === 40 || keyCode === 38) { // DOWN / UP
|
||||
event.preventDefault();
|
||||
|
||||
const focusItems = [];
|
||||
|
||||
for (let i = 0; i < this.folderItemsOrder_.length; i++) {
|
||||
const id = this.folderItemsOrder_[i];
|
||||
focusItems.push({ id: id, ref: this.anchorItemRefs['folder'][id], type: 'folder' });
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.tagItemsOrder_.length; i++) {
|
||||
const id = this.tagItemsOrder_[i];
|
||||
focusItems.push({ id: id, ref: this.anchorItemRefs['tag'][id], type: 'tag' });
|
||||
}
|
||||
|
||||
let currentIndex = 0;
|
||||
for (let i = 0; i < focusItems.length; i++) {
|
||||
if (!selectedItem || focusItems[i].id === selectedItem.id) {
|
||||
currentIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const inc = keyCode === 38 ? -1 : +1;
|
||||
let newIndex = currentIndex + inc;
|
||||
|
||||
if (newIndex < 0) newIndex = 0;
|
||||
if (newIndex > focusItems.length - 1) newIndex = focusItems.length - 1;
|
||||
|
||||
const focusItem = focusItems[newIndex];
|
||||
|
||||
let actionName = focusItem.type.toUpperCase() + '_SELECT';
|
||||
|
||||
this.props.dispatch({
|
||||
type: actionName,
|
||||
id: focusItem.id,
|
||||
});
|
||||
|
||||
focusItem.ref.current.focus();
|
||||
}
|
||||
|
||||
if (keyCode === 9) { // TAB
|
||||
event.preventDefault();
|
||||
|
||||
if (event.shiftKey) {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'noteBody',
|
||||
});
|
||||
} else {
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'focusElement',
|
||||
target: 'noteList',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedItem && selectedItem.type === 'folder' && keyCode === 32) { // SPACE
|
||||
event.preventDefault();
|
||||
|
||||
this.props.dispatch({
|
||||
type: 'FOLDER_TOGGLE',
|
||||
id: selectedItem.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onHeaderClick_(key, event) {
|
||||
const currentHeader = event.currentTarget;
|
||||
const toggleBlock = +currentHeader.getAttribute('toggleblock');
|
||||
if (toggleBlock) {
|
||||
const toggleKey = `${key}IsExpanded`;
|
||||
const isExpanded = this.state[toggleKey];
|
||||
this.setState({ [toggleKey]: !isExpanded });
|
||||
Setting.setValue(toggleKey, !isExpanded);
|
||||
}
|
||||
}
|
||||
|
||||
synchronizeButton(type) {
|
||||
const style = this.style().button;
|
||||
const style = Object.assign({}, this.style().button, { marginBottom: 5 });
|
||||
const iconName = type === "sync" ? "fa-refresh" : "fa-times";
|
||||
const label = type === "sync" ? _("Synchronise") : _("Cancel");
|
||||
const icon = <i style={{ fontSize: style.fontSize, marginRight: 5 }} className={"fa " + iconName} />;
|
||||
@@ -473,28 +660,37 @@ class SideBarComponent extends React.Component {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const style = Object.assign({}, this.style().root, this.props.style, {
|
||||
overflowX: "hidden",
|
||||
overflowY: "auto",
|
||||
overflowY: "hidden",
|
||||
display: 'inline-flex',
|
||||
flexDirection: 'column',
|
||||
});
|
||||
|
||||
let items = [];
|
||||
|
||||
items.push(this.makeHeader("folderHeader", _("Notebooks"), "fa-folder-o", {
|
||||
onDrop: this.onFolderDrop_,
|
||||
folderid: '',
|
||||
toggleblock: 1
|
||||
}));
|
||||
|
||||
if (this.props.folders.length) {
|
||||
const folderItems = shared.renderFolders(this.props, this.folderItem.bind(this));
|
||||
items = items.concat(folderItems);
|
||||
const result = shared.renderFolders(this.props, this.folderItem.bind(this));
|
||||
const folderItems = result.items;
|
||||
this.folderItemsOrder_ = result.order;
|
||||
items.push(<div className="folders" key="folder_items" style={{display: this.state.folderHeaderIsExpanded ? 'block': 'none'}}>
|
||||
{folderItems}</div>);
|
||||
}
|
||||
|
||||
items.push(this.makeHeader("tagHeader", _("Tags"), "fa-tags"));
|
||||
items.push(this.makeHeader("tagHeader", _("Tags"), "fa-tags", {
|
||||
toggleblock: 1
|
||||
}));
|
||||
|
||||
if (this.props.tags.length) {
|
||||
const tagItems = shared.renderTags(this.props, this.tagItem.bind(this));
|
||||
const result = shared.renderTags(this.props, this.tagItem.bind(this));
|
||||
const tagItems = result.items;
|
||||
this.tagItemsOrder_ = result.order;
|
||||
|
||||
items.push(
|
||||
<div className="tags" key="tag_items">
|
||||
<div className="tags" key="tag_items" style={{display: this.state.tagHeaderIsExpanded ? 'block': 'none'}}>
|
||||
{tagItems}
|
||||
</div>
|
||||
);
|
||||
@@ -522,17 +718,23 @@ class SideBarComponent extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
items.push(this.synchronizeButton(this.props.syncStarted ? "cancel" : "sync"));
|
||||
const syncButton = this.synchronizeButton(this.props.syncStarted ? "cancel" : "sync");
|
||||
|
||||
items.push(
|
||||
const syncReportComp = !syncReportText.length ? null : (
|
||||
<div style={this.style().syncReport} key="sync_report">
|
||||
{syncReportText}
|
||||
</div>
|
||||
);
|
||||
{syncReportText}
|
||||
</div>
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="side-bar" style={style}>
|
||||
{items}
|
||||
<div ref={this.rootRef} onKeyDown={this.onKeyDown} className="side-bar" style={style}>
|
||||
<div style={{flex:1, overflowY: 'auto'}}>
|
||||
{items}
|
||||
</div>
|
||||
<div style={{flex:0}}>
|
||||
{syncButton}
|
||||
{syncReportComp}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -554,6 +756,8 @@ const mapStateToProps = state => {
|
||||
collapsedFolderIds: state.collapsedFolderIds,
|
||||
decryptionWorker: state.decryptionWorker,
|
||||
resourceFetcher: state.resourceFetcher,
|
||||
windowCommand: state.windowCommand,
|
||||
sidebarVisibility: state.sidebarVisibility,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -37,6 +37,7 @@
|
||||
<div id="hlScriptContainer"></div>
|
||||
<div id="markScriptContainer"></div>
|
||||
<div id="content" ondragstart="return false;" ondrop="return false;"></div>
|
||||
<script src="./lib.js"></script>
|
||||
|
||||
<script>
|
||||
const contentElement = document.getElementById('content');
|
||||
@@ -226,6 +227,8 @@
|
||||
function setMarkers(keywords, options = null) {
|
||||
if (!options) options = {};
|
||||
|
||||
// TODO: Add support for scriptType on mobile and CLI
|
||||
|
||||
if (!mark_) {
|
||||
mark_ = new Mark(document.getElementById('content'), {
|
||||
exclude: ['img'],
|
||||
@@ -255,19 +258,14 @@
|
||||
}
|
||||
|
||||
for (let i = 0; i < keywords.length; i++) {
|
||||
const keyword = keywords[i];
|
||||
let keyword = keywords[i];
|
||||
|
||||
if (keyword.type === 'regex') {
|
||||
mark_.markRegExp(new RegExp(keyword.value, 'gmi'), {
|
||||
each: onEachElement,
|
||||
acrossElements: true,
|
||||
});
|
||||
} else {
|
||||
mark_.mark([keyword], {
|
||||
each: onEachElement,
|
||||
accuracy: 'exactly',
|
||||
});
|
||||
}
|
||||
markJsUtils.markKeyword(mark_, keyword, {
|
||||
pregQuote: pregQuote,
|
||||
replaceRegexDiacritics: replaceRegexDiacritics,
|
||||
}, {
|
||||
each: onEachElement,
|
||||
});
|
||||
}
|
||||
|
||||
ipcProxySendToHost('setMarkerCount', elementIndex);
|
||||
@@ -359,22 +357,38 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
function getParentAnchorElement(element) {
|
||||
let counter = 0;
|
||||
while (true) {
|
||||
|
||||
if (counter++ >= 10000) {
|
||||
console.warn('been looping for too long - exiting')
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!element) return null;
|
||||
if (element.nodeName === 'A') return element;
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
const t = event.target;
|
||||
const anchor = getParentAnchorElement(event.target);
|
||||
if (!anchor) return;
|
||||
|
||||
// Prevent URLs added via <a> tags from being opened within the application itself
|
||||
// otherwise it would open the whole website within the WebView.
|
||||
if (t && t.nodeName === 'A' && !t.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, t)) return;
|
||||
if (!anchor.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, anchor)) return;
|
||||
|
||||
event.preventDefault();
|
||||
ipcProxySendToHost(t.getAttribute('href'));
|
||||
ipcProxySendToHost(anchor.getAttribute('href'));
|
||||
return;
|
||||
}
|
||||
|
||||
// If this is an internal link, jump to the anchor directly
|
||||
if (t && t.nodeName === 'A' && t.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, t)) return;
|
||||
if (anchor.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, anchor)) return;
|
||||
}
|
||||
});
|
||||
|
||||
|
137
ElectronClient/app/gui/utils/NoteListUtils.js
Normal file
137
ElectronClient/app/gui/utils/NoteListUtils.js
Normal file
@@ -0,0 +1,137 @@
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const markJsUtils = require('lib/markJsUtils');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
const Menu = bridge().Menu;
|
||||
const MenuItem = bridge().MenuItem;
|
||||
const eventManager = require('../../eventManager');
|
||||
const InteropService = require('lib/services/InteropService');
|
||||
const InteropServiceHelper = require('../../InteropServiceHelper.js');
|
||||
const Search = require('lib/models/Search');
|
||||
const Note = require('lib/models/Note');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const { replaceRegexDiacritics, pregQuote, substrWithEllipsis } = require('lib/string-utils');
|
||||
|
||||
class NoteListUtils {
|
||||
|
||||
static makeContextMenu(noteIds, props) {
|
||||
const notes = noteIds.map((id) => BaseModel.byId(props.notes, id));
|
||||
|
||||
let hasEncrypted = false;
|
||||
for (let i = 0; i < notes.length; i++) {
|
||||
if (!!notes[i].encryption_applied) hasEncrypted = true;
|
||||
}
|
||||
|
||||
const menu = new Menu()
|
||||
|
||||
if (!hasEncrypted) {
|
||||
menu.append(new MenuItem({label: _('Add or remove tags'), enabled: noteIds.length === 1, click: async () => {
|
||||
props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'setTags',
|
||||
noteId: noteIds[0],
|
||||
});
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Duplicate'), click: async () => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
await Note.duplicate(noteIds[i], {
|
||||
uniqueTitle: _('%s - Copy', note.title),
|
||||
});
|
||||
}
|
||||
}}));
|
||||
|
||||
if (noteIds.length <= 1) {
|
||||
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
|
||||
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
||||
}
|
||||
}}));
|
||||
} else {
|
||||
const switchNoteType = async (noteIds, type) => {
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
const newNote = Note.changeNoteType(note, type);
|
||||
if (newNote === note) continue;
|
||||
await Note.save(newNote, { userSideValidation: true });
|
||||
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
||||
}
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Switch to note type'), click: async () => {
|
||||
await switchNoteType(noteIds, 'note');
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Switch to to-do type'), click: async () => {
|
||||
await switchNoteType(noteIds, 'todo');
|
||||
}}));
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Copy Markdown link'), click: async () => {
|
||||
const { clipboard } = require('electron');
|
||||
const links = [];
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
const note = await Note.load(noteIds[i]);
|
||||
links.push(Note.markdownTag(note));
|
||||
}
|
||||
clipboard.writeText(links.join(' '));
|
||||
}}));
|
||||
|
||||
const exportMenu = new Menu();
|
||||
|
||||
const ioService = new InteropService();
|
||||
const ioModules = ioService.modules();
|
||||
for (let i = 0; i < ioModules.length; i++) {
|
||||
const module = ioModules[i];
|
||||
if (module.type !== 'exporter') continue;
|
||||
|
||||
exportMenu.append(new MenuItem({ label: module.fullLabel() , click: async () => {
|
||||
await InteropServiceHelper.export(props.dispatch.bind(this), module, { sourceNoteIds: noteIds });
|
||||
}}));
|
||||
}
|
||||
|
||||
if (noteIds.length === 1) {
|
||||
exportMenu.append(new MenuItem({ label: 'PDF - ' + _('PDF File') , click: () => {
|
||||
props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'exportPdf',
|
||||
});
|
||||
}}));
|
||||
}
|
||||
|
||||
const exportMenuItem = new MenuItem({label: _('Export'), submenu: exportMenu});
|
||||
|
||||
menu.append(exportMenuItem);
|
||||
}
|
||||
|
||||
menu.append(new MenuItem({label: _('Delete'), click: async () => {
|
||||
await this.confirmDeleteNotes(noteIds);
|
||||
}}));
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
static async confirmDeleteNotes(noteIds) {
|
||||
if (!noteIds.length) return;
|
||||
|
||||
let msg = '';
|
||||
if (noteIds.length === 1) {
|
||||
const note = await Note.load(noteIds[0]);
|
||||
if (!note) return;
|
||||
msg = _('Delete note "%s"?', substrWithEllipsis(note.title, 0, 32));
|
||||
} else {
|
||||
msg = _('Delete these %d notes?', noteIds.length);
|
||||
}
|
||||
|
||||
const ok = bridge().showConfirmMessageBox(msg);
|
||||
if (!ok) return;
|
||||
await Note.batchDelete(noteIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = NoteListUtils;
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
966
ElectronClient/app/package-lock.json
generated
966
ElectronClient/app/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"version": "1.0.119",
|
||||
"version": "1.0.126",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -8,8 +8,8 @@
|
||||
"pack": "node_modules/.bin/electron-builder --dir",
|
||||
"dist": "node_modules/.bin/electron-builder",
|
||||
"publish": "build -p always",
|
||||
"postinstall": "node compile-jsx.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts && install-app-deps",
|
||||
"compile": "node compile-jsx.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts"
|
||||
"postinstall": "node compile.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts && install-app-deps",
|
||||
"compile": "node compile.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -58,6 +58,9 @@
|
||||
"linux": {
|
||||
"asar": false,
|
||||
"category": "Office",
|
||||
"desktop": {
|
||||
"Icon": "joplin"
|
||||
},
|
||||
"target": "AppImage"
|
||||
}
|
||||
},
|
||||
@@ -81,6 +84,7 @@
|
||||
"base-64": "^0.1.0",
|
||||
"chokidar": "^2.0.3",
|
||||
"compare-versions": "^3.2.1",
|
||||
"diacritics": "^1.3.0",
|
||||
"electron-context-menu": "^0.9.1",
|
||||
"electron-is-dev": "^0.3.0",
|
||||
"electron-window-state": "^4.1.1",
|
||||
@@ -92,7 +96,7 @@
|
||||
"highlight.js": "^9.12.0",
|
||||
"html-entities": "^1.2.1",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.9",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"jssha": "^2.3.1",
|
||||
"katex": "^0.10.0",
|
||||
|
@@ -1,12 +1,9 @@
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
|
||||
const zoomRatio = Setting.value('style.zoom') / 100;
|
||||
const editorFontSize = Setting.value('style.editor.fontSize');
|
||||
|
||||
// globalStyle should be used for properties that do not change across themes
|
||||
// i.e. should not be used for colors
|
||||
const globalStyle = {
|
||||
fontSize: Math.round(12 * zoomRatio),
|
||||
fontSize: 12,
|
||||
fontFamily: 'sans-serif',
|
||||
margin: 15, // No text and no interactive component should be within this margin
|
||||
itemMarginTop: 10,
|
||||
@@ -15,8 +12,8 @@ const globalStyle = {
|
||||
disabledOpacity: 0.3,
|
||||
buttonMinWidth: 50,
|
||||
buttonMinHeight: 30,
|
||||
editorFontSize: editorFontSize,
|
||||
textAreaLineHeight: Math.round(17 * editorFontSize / 12),
|
||||
editorFontSize: 12,
|
||||
textAreaLineHeight: 17,
|
||||
|
||||
headerHeight: 35,
|
||||
headerButtonHPadding: 6,
|
||||
@@ -25,10 +22,6 @@ const globalStyle = {
|
||||
tagItemPadding: 3,
|
||||
};
|
||||
|
||||
// For WebView - must correspond to the properties above
|
||||
globalStyle.htmlFontSize = globalStyle.fontSize + 'px';
|
||||
globalStyle.htmlLineHeight = Math.round(20 * zoomRatio) + 'px';
|
||||
|
||||
globalStyle.marginRight = globalStyle.margin;
|
||||
globalStyle.marginLeft = globalStyle.margin;
|
||||
globalStyle.marginTop = globalStyle.margin;
|
||||
@@ -43,41 +36,10 @@ globalStyle.lineInput = {
|
||||
fontFamily: globalStyle.fontFamily,
|
||||
};
|
||||
|
||||
globalStyle.textStyle = {
|
||||
globalStyle.headerStyle = {
|
||||
fontFamily: globalStyle.fontFamily,
|
||||
fontSize: globalStyle.fontSize,
|
||||
lineHeight: '1.6em',
|
||||
};
|
||||
|
||||
globalStyle.textStyle2 = Object.assign({}, globalStyle.textStyle, {});
|
||||
|
||||
globalStyle.urlStyle = Object.assign({}, globalStyle.textStyle, { textDecoration: 'underline' });
|
||||
|
||||
globalStyle.h1Style = Object.assign({}, globalStyle.textStyle);
|
||||
globalStyle.h1Style.fontSize *= 1.5;
|
||||
globalStyle.h1Style.fontWeight = 'bold';
|
||||
|
||||
globalStyle.h2Style = Object.assign({}, globalStyle.textStyle);
|
||||
globalStyle.h2Style.fontSize *= 1.3;
|
||||
globalStyle.h2Style.fontWeight = 'bold';
|
||||
|
||||
globalStyle.toolbarStyle = {
|
||||
height: globalStyle.toolbarHeight,
|
||||
minWidth: globalStyle.toolbarHeight,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
paddingLeft: globalStyle.headerButtonHPadding,
|
||||
paddingRight: globalStyle.headerButtonHPadding,
|
||||
textDecoration: 'none',
|
||||
fontFamily: globalStyle.fontFamily,
|
||||
fontSize: globalStyle.fontSize,
|
||||
boxSizing: 'border-box',
|
||||
cursor: 'default',
|
||||
justifyContent: 'center',
|
||||
};
|
||||
|
||||
globalStyle.headerStyle = {};
|
||||
|
||||
globalStyle.inputStyle = {
|
||||
border: '1px solid',
|
||||
};
|
||||
@@ -90,6 +52,11 @@ globalStyle.containerStyle = {
|
||||
globalStyle.buttonStyle = {
|
||||
marginRight: 10,
|
||||
border: '1px solid',
|
||||
minHeight: 30,
|
||||
minWidth: 80,
|
||||
maxWidth: 160,
|
||||
paddingLeft: 12,
|
||||
paddingRight: 12,
|
||||
};
|
||||
|
||||
const lightStyle = {
|
||||
@@ -114,15 +81,14 @@ const lightStyle = {
|
||||
|
||||
warningBackgroundColor: "#FFD08D",
|
||||
|
||||
codeColor: "#EFF0F1",
|
||||
codeBorderColor: '#CBCBCB',
|
||||
|
||||
htmlColor:'black', // Note: CSS in WebView component only supports named colors or rgb() notation
|
||||
htmlColor:'#222222',
|
||||
htmlBackgroundColor: 'white',
|
||||
htmlDividerColor: 'rgb(150,150,150)',
|
||||
htmlLinkColor: 'blue',
|
||||
htmlCodeColor: 'rgb(239, 240, 241)',
|
||||
htmlCodeBorderColor: 'rgb(203, 203, 203)',
|
||||
htmlDividerColor: 'rgb(230,230,230)',
|
||||
htmlLinkColor: 'rgb(80,130,190)',
|
||||
htmlTableBackgroundColor: 'rgb(247, 247, 247)',
|
||||
htmlCodeBackgroundColor: 'rgb(243, 243, 243)',
|
||||
htmlCodeBorderColor: 'rgb(220, 220, 220)',
|
||||
htmlCodeColor: 'rgb(0,0,0)',
|
||||
|
||||
editorTheme: "chrome",
|
||||
codeThemeCss: "atom-one-light.css",
|
||||
@@ -151,14 +117,13 @@ const darkStyle = {
|
||||
|
||||
warningBackgroundColor: "#CC6600",
|
||||
|
||||
codeColor: "#2F3031",
|
||||
codeBorderColor: '#464646',
|
||||
|
||||
htmlColor: 'rgb(220,220,220)', // Note: CSS in WebView component only supports named colors or rgb() notation
|
||||
htmlColor: 'rgb(220,220,220)',
|
||||
htmlBackgroundColor: 'rgb(29,32,36)',
|
||||
htmlDividerColor: 'rgb(150,150,150)',
|
||||
htmlDividerColor: '#3D444E',
|
||||
htmlCodeColor: '#ffffff',
|
||||
htmlLinkColor: 'rgb(166,166,255)',
|
||||
htmlCodeColor: 'rgb(47, 48, 49)',
|
||||
htmlTableBackgroundColor: 'rgb(40, 41, 42)',
|
||||
htmlCodeBackgroundColor: 'rgb(47, 48, 49)',
|
||||
htmlCodeBorderColor: 'rgb(70, 70, 70)',
|
||||
|
||||
editorTheme: 'twilight',
|
||||
@@ -180,6 +145,58 @@ function addExtraStyles(style) {
|
||||
color: style.raisedColor,
|
||||
};
|
||||
|
||||
style.toolbarStyle = {
|
||||
height: style.toolbarHeight,
|
||||
minWidth: style.toolbarHeight,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
paddingLeft: style.headerButtonHPadding,
|
||||
paddingRight: style.headerButtonHPadding,
|
||||
textDecoration: 'none',
|
||||
fontFamily: style.fontFamily,
|
||||
fontSize: style.fontSize,
|
||||
boxSizing: 'border-box',
|
||||
cursor: 'default',
|
||||
justifyContent: 'center',
|
||||
color: style.color,
|
||||
};
|
||||
|
||||
style.textStyle = {
|
||||
fontFamily: globalStyle.fontFamily,
|
||||
fontSize: style.fontSize,
|
||||
lineHeight: '1.6em',
|
||||
color: style.color
|
||||
};
|
||||
|
||||
style.textStyle2 = Object.assign({}, style.textStyle,
|
||||
{ color: style.color2, }
|
||||
);
|
||||
|
||||
style.urlStyle = Object.assign({}, style.textStyle,
|
||||
{
|
||||
textDecoration: 'underline',
|
||||
color: style.urlColor
|
||||
}
|
||||
);
|
||||
|
||||
style.h1Style = Object.assign({},
|
||||
style.textStyle,
|
||||
{
|
||||
color: style.color,
|
||||
fontSize: style.textStyle.fontSize * 1.5,
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
);
|
||||
|
||||
style.h2Style = Object.assign({},
|
||||
style.textStyle,
|
||||
{
|
||||
color: style.color,
|
||||
fontSize: style.textStyle.fontSize * 1.3,
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
);
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
@@ -187,26 +204,40 @@ let themeCache_ = {};
|
||||
|
||||
function themeStyle(theme) {
|
||||
if (!theme) throw new Error('Theme must be specified');
|
||||
if (themeCache_[theme]) return themeCache_[theme];
|
||||
|
||||
var zoomRatio = Setting.value('style.zoom') / 100;
|
||||
var editorFontSize = Setting.value('style.editor.fontSize');
|
||||
|
||||
const cacheKey = [theme, zoomRatio, editorFontSize].join('-');
|
||||
if (themeCache_[cacheKey]) return themeCache_[cacheKey];
|
||||
|
||||
let fontSizes = {
|
||||
fontSize: Math.round(12 * zoomRatio),
|
||||
editorFontSize: editorFontSize,
|
||||
textAreaLineHeight: Math.round(17 * editorFontSize / 12),
|
||||
|
||||
// For WebView - must correspond to the properties above
|
||||
htmlFontSize: Math.round(15 * zoomRatio) + 'px',
|
||||
htmlLineHeight: '1.6em', //Math.round(20 * zoomRatio) + 'px'
|
||||
|
||||
htmlCodeFontSize: '.9em',
|
||||
}
|
||||
|
||||
let output = {};
|
||||
output.zoomRatio = zoomRatio;
|
||||
output.editorFontSize = editorFontSize;
|
||||
if (theme == Setting.THEME_LIGHT) {
|
||||
output = Object.assign({}, globalStyle, lightStyle);
|
||||
output = Object.assign({}, globalStyle, fontSizes, lightStyle);
|
||||
}
|
||||
else if (theme == Setting.THEME_DARK) {
|
||||
output = Object.assign({}, globalStyle, darkStyle);
|
||||
output = Object.assign({}, globalStyle, fontSizes, darkStyle);
|
||||
}
|
||||
|
||||
// TODO: All the theme specific things should go in addExtraStyles
|
||||
// Note: All the theme specific things should go in addExtraStyles
|
||||
// so that their definition is not split between here and the
|
||||
// beginning of the file. At least new styles should go in
|
||||
// addExtraStyles.
|
||||
|
||||
output.textStyle = Object.assign({},
|
||||
output.textStyle,
|
||||
{ color: output.color }
|
||||
);
|
||||
|
||||
output.icon = Object.assign({},
|
||||
output.icon,
|
||||
{ color: output.color }
|
||||
@@ -220,31 +251,6 @@ function themeStyle(theme) {
|
||||
}
|
||||
);
|
||||
|
||||
output.textStyle2 = Object.assign({},
|
||||
output.textStyle2,
|
||||
{ color: output.color2, }
|
||||
);
|
||||
|
||||
output.urlStyle = Object.assign({},
|
||||
output.urlStyle,
|
||||
{ color: output.urlColor }
|
||||
);
|
||||
|
||||
output.h1Style = Object.assign({},
|
||||
output.h1Style,
|
||||
{ color: output.color }
|
||||
);
|
||||
|
||||
output.h2Style = Object.assign({},
|
||||
output.h2Style,
|
||||
{ color: output.color }
|
||||
);
|
||||
|
||||
output.toolbarStyle = Object.assign({},
|
||||
output.toolbarStyle,
|
||||
{ color: output.color }
|
||||
);
|
||||
|
||||
output.headerStyle = Object.assign({},
|
||||
output.headerStyle,
|
||||
{
|
||||
@@ -281,8 +287,8 @@ function themeStyle(theme) {
|
||||
|
||||
output = addExtraStyles(output);
|
||||
|
||||
themeCache_[theme] = output;
|
||||
return themeCache_[theme];
|
||||
themeCache_[cacheKey] = output;
|
||||
return themeCache_[cacheKey];
|
||||
}
|
||||
|
||||
module.exports = { themeStyle };
|
||||
|
11
ElectronClient/package-lock.json
generated
Normal file
11
ElectronClient/package-lock.json
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"requires": true,
|
||||
"lockfileVersion": 1,
|
||||
"dependencies": {
|
||||
"diacritics": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
|
||||
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user