You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-27 20:29:45 +02:00
Compare commits
234 Commits
v1.0.96
...
android-v1
Author | SHA1 | Date | |
---|---|---|---|
|
fdb8706a5f | ||
|
4c0262bd82 | ||
|
3b2dcb37a6 | ||
|
46a3b020a6 | ||
|
8373392e99 | ||
|
695c2623c2 | ||
|
979e7f2486 | ||
|
e7a9f630ec | ||
|
4e8372174b | ||
|
1b8912d7e9 | ||
|
8c3669588b | ||
|
1b784fe3b0 | ||
|
5ab1d8dfd6 | ||
|
cda8b95bfa | ||
|
9664842b1a | ||
|
09836e1d34 | ||
|
8974e20c7f | ||
|
761a49803e | ||
|
a40028f0c0 | ||
|
d4fca7e313 | ||
|
6748d4d825 | ||
|
0a5ad1d628 | ||
|
4080958e10 | ||
|
95c4a717e3 | ||
|
c5b9353105 | ||
|
17595f7ceb | ||
|
dcf78e8a06 | ||
|
de0c54c3c3 | ||
|
38970e9a52 | ||
|
563f43168b | ||
|
6e235605ed | ||
|
0749e0b675 | ||
|
756f3e627c | ||
|
4b39ed42b1 | ||
|
abe85ca4bd | ||
|
a559565ace | ||
|
d35e3163ca | ||
|
f22ad85681 | ||
|
727bdaeea4 | ||
|
42f7764eed | ||
|
1fbc1073ca | ||
|
66b683e5e7 | ||
|
7d1f61e47b | ||
|
643e5a6a2a | ||
|
a1e7e29279 | ||
|
abf6c3f3f1 | ||
|
32c81ad8c2 | ||
|
0f461c4caa | ||
|
57ed718993 | ||
|
ef1ae63233 | ||
|
81ac200cc0 | ||
|
3a2d62f6c7 | ||
|
7f80f67fd6 | ||
|
cebd8de77a | ||
|
417218fc34 | ||
|
29586437c2 | ||
|
f51d0ad914 | ||
|
35294b5f97 | ||
|
758562cff9 | ||
|
da0678c6fe | ||
|
afe4fd70cc | ||
|
4cef383fe7 | ||
|
b58c30889e | ||
|
1561c0e4d7 | ||
|
32b11c15a4 | ||
|
5e06efc1b9 | ||
|
43bd88703c | ||
|
cdd70230af | ||
|
eaf3eef2d3 | ||
|
81ec8eaf83 | ||
|
23f7e350c6 | ||
|
cea368cd3f | ||
|
50c8f2ae61 | ||
|
ed0ecababb | ||
|
72aa4c40a5 | ||
|
4f6784e2e5 | ||
|
01f015a54f | ||
|
806acad22a | ||
|
1d322d8a39 | ||
|
aef94e6950 | ||
|
456fcec334 | ||
|
3b6937c2f0 | ||
|
7cdd1d41c1 | ||
|
1fc535a740 | ||
|
033b37077a | ||
|
07f6a4a08b | ||
|
8c1b592a51 | ||
|
9460f7a17a | ||
|
106260ed69 | ||
|
123162e946 | ||
|
54e81966e5 | ||
|
9bf6ab60bb | ||
|
4f0ff3cdfc | ||
|
47cfaaa5ab | ||
|
1f49788f21 | ||
|
7e4cf9aeda | ||
|
4b6964b683 | ||
|
3caf398021 | ||
|
8840631266 | ||
|
c4411bb895 | ||
|
f63668350b | ||
|
3fc54d7ffd | ||
|
2c6c20f44f | ||
|
08ee939951 | ||
|
463b1441d3 | ||
|
6754d4ee89 | ||
|
d5d0732bf3 | ||
|
d27cbaa663 | ||
|
70adf10f2e | ||
|
e75417d26e | ||
|
2ded983828 | ||
|
0c708f766b | ||
|
a801f8d8ed | ||
|
26fc26c9fe | ||
|
df4c07d204 | ||
|
cf565d1563 | ||
|
6b425cf543 | ||
|
6188e7a0fa | ||
|
310afb0ad6 | ||
|
7d7e1e1637 | ||
|
424c8a2723 | ||
|
187fb1b85d | ||
|
595fd7a9aa | ||
|
0027cb9036 | ||
|
db6878b978 | ||
|
1c78722573 | ||
|
fea83e28c4 | ||
|
84adf64271 | ||
|
74e2b0d15d | ||
|
df302206dd | ||
|
6d8941c005 | ||
|
971b20062f | ||
|
936f334b61 | ||
|
7e3a290939 | ||
|
c6466a780e | ||
|
43774ad3fb | ||
|
b3ba5b7747 | ||
|
599f4ccef4 | ||
|
a67600d264 | ||
|
ebf4c89ef0 | ||
|
aa7da784fc | ||
|
617ed42d8c | ||
|
5848e7d90d | ||
|
01d032261c | ||
|
54d06646aa | ||
|
81da46035a | ||
|
74d0f75802 | ||
|
f25a352dcb | ||
|
21ef8da45f | ||
|
1f3a1c49df | ||
|
a8b58aaec3 | ||
|
44f9b35d93 | ||
|
711af9beed | ||
|
971339ca9a | ||
|
f5a72ffbaf | ||
|
cf4331c5af | ||
|
07b85388fc | ||
|
553b086ba2 | ||
|
ff89537899 | ||
|
f20792889a | ||
|
ee22a7ff73 | ||
|
4fc4353859 | ||
|
f4f9e25e6b | ||
|
e54f9934b5 | ||
|
f599ae065a | ||
|
5bd9bf6a4e | ||
|
cb9e8d4f76 | ||
|
f64596672e | ||
|
961150b2d3 | ||
|
0cd8e1cbc0 | ||
|
b503aff5e9 | ||
|
54bde47c67 | ||
|
d345f8dc13 | ||
|
979b0c0e78 | ||
|
13525f3327 | ||
|
5d9c2c0904 | ||
|
c748281d86 | ||
|
fa619eba7c | ||
|
17a75f7cf5 | ||
|
a74cfbfb25 | ||
|
af01fed950 | ||
|
218b446915 | ||
|
a68df18cd5 | ||
|
f79326b2d5 | ||
|
b08dcdfd90 | ||
|
ced14e578f | ||
|
0528c6e970 | ||
|
df9c1e0aeb | ||
|
b6619b41df | ||
|
ab9675544c | ||
|
0d9f703c75 | ||
|
f6ee5dd0e7 | ||
|
423d880b92 | ||
|
41017b9ab8 | ||
|
e3314c859f | ||
|
8f794fdbc6 | ||
|
80b0773618 | ||
|
ac848241b9 | ||
|
b4432e2efc | ||
|
52f60a2cf6 | ||
|
03c8438050 | ||
|
0e1c36ccf1 | ||
|
1b2b68c485 | ||
|
5c36f3e78a | ||
|
d4ec8ae823 | ||
|
449a70d840 | ||
|
8375030135 | ||
|
e9f938b0fb | ||
|
b0e57a5990 | ||
|
f47610e6fd | ||
|
c131cb9bb8 | ||
|
023f775bd2 | ||
|
1127eb6e09 | ||
|
0d7437c7d2 | ||
|
6dbc691973 | ||
|
fe53200a3a | ||
|
c7f61271a0 | ||
|
b826e2d97b | ||
|
d8ad42b04a | ||
|
b3ca30b8b6 | ||
|
bdd9da3d22 | ||
|
eb43ddc701 | ||
|
f9c65a148f | ||
|
bd0b9dff51 | ||
|
3822309657 | ||
|
ac2ec65c81 | ||
|
c0943f1776 | ||
|
5a2ab5fae7 | ||
|
281e36fde7 | ||
|
1af1c445c6 | ||
|
e6d2e028ad | ||
|
8d25b8075d | ||
|
58201fd6c3 | ||
|
8dc14516d6 |
6
BUILD.md
6
BUILD.md
@@ -9,8 +9,6 @@
|
||||
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile
|
||||
source ~/.bash_profile
|
||||
|
||||
If you get a node-gyp related error you might need to manually install it: `npm install -g node-gyp`
|
||||
|
||||
## Linux and Windows (WSL) dependencies
|
||||
|
||||
- Install yarn - https://yarnpkg.com/lang/en/docs/install/
|
||||
@@ -37,6 +35,10 @@ yarn dist
|
||||
|
||||
If there's an error `while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory`, run `sudo apt-get install libgconf-2-4`
|
||||
|
||||
If you get a node-gyp related error you might need to manually install it: `npm install -g node-gyp`.
|
||||
|
||||
If you get the error `libtool: unrecognized option '-static'`, follow the instructions [in this post](https://stackoverflow.com/a/38552393/561309) to use the correct libtool version.
|
||||
|
||||
That will create the executable file in the `dist` directory.
|
||||
|
||||
From `/ElectronClient` you can also run `run.sh` to run the app for testing.
|
||||
|
@@ -17,3 +17,10 @@ Again, please check that it has not already been requested. If it has, simply **
|
||||
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.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
|
||||
# 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):
|
||||
|
||||
- **Please use tabs, NOT spaces.**
|
||||
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
|
@@ -47,12 +47,48 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
if (args.command === 'decrypt') {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
await DecryptionWorker.instance().start();
|
||||
break;
|
||||
if (args.path) {
|
||||
const plainText = await EncryptionService.instance().decryptString(args.path);
|
||||
this.stdout(plainText);
|
||||
return;
|
||||
} else {
|
||||
if (process.stdin.isTTY) {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
await DecryptionWorker.instance().start();
|
||||
this.stdout(_('Completed decryption.'));
|
||||
return;
|
||||
} else {
|
||||
// var repl = require("repl");
|
||||
// var r = repl.start("node> ");
|
||||
|
||||
const text = await new Promise((accept, reject) => {
|
||||
var buffer = '';
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('data', function(chunk) {
|
||||
buffer += chunk;
|
||||
// process.stdout.write(chunk);
|
||||
});
|
||||
process.stdin.on('end', function() {
|
||||
accept(buffer.trim());
|
||||
});
|
||||
});
|
||||
|
||||
if (text.length > 0) {
|
||||
var cipherText = text;
|
||||
try {
|
||||
var item = await BaseItem.unserialize(text);
|
||||
cipherText = item.encryption_cipher_text;
|
||||
} catch (error) {
|
||||
// we already got the pure cipher text
|
||||
}
|
||||
const plainText = await EncryptionService.instance().decryptString(cipherText);
|
||||
this.stdout(plainText);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
@@ -70,8 +106,6 @@ class Command extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout(_('Completed decryption.'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -181,4 +215,4 @@ class Command extends BaseCommand {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -22,7 +22,7 @@ class Command extends BaseCommand {
|
||||
enabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
|
||||
@@ -93,7 +93,7 @@ class Command extends BaseCommand {
|
||||
row.push(await Folder.noteCount(item.id));
|
||||
}
|
||||
|
||||
row.push(time.unixMsToLocalDateTime(item.user_updated_time));
|
||||
row.push(time.formatMsToLocal(item.user_updated_time));
|
||||
}
|
||||
|
||||
let title = item.title;
|
||||
@@ -123,4 +123,4 @@ class Command extends BaseCommand {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -3,6 +3,7 @@ const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -11,11 +12,19 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
description() {
|
||||
return _('<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 `tag list` can be used to list all the tags.');
|
||||
return _('<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 `tag list` can be used to list all the tags (use -l for long option).');
|
||||
}
|
||||
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
|
||||
];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let tag = null;
|
||||
let options = args.options;
|
||||
|
||||
if (args.tag) tag = await app().loadItem(BaseModel.TYPE_TAG, args.tag);
|
||||
let notes = [];
|
||||
if (args.note) {
|
||||
@@ -41,7 +50,28 @@ class Command extends BaseCommand {
|
||||
} else if (command == 'list') {
|
||||
if (tag) {
|
||||
let notes = await Tag.notes(tag.id);
|
||||
notes.map((note) => { this.stdout(note.title); });
|
||||
notes.map((note) => {
|
||||
let line = '';
|
||||
if (options.long) {
|
||||
line += BaseModel.shortId(note.id);
|
||||
line += ' ';
|
||||
line += time.formatMsToLocal(note.user_updated_time);
|
||||
line += ' ';
|
||||
}
|
||||
if (note.is_todo) {
|
||||
line += '[';
|
||||
if (note.todo_completed) {
|
||||
line += 'X';
|
||||
} else {
|
||||
line += ' ';
|
||||
}
|
||||
line += '] ';
|
||||
} else {
|
||||
line += ' ';
|
||||
}
|
||||
line += note.title;
|
||||
this.stdout(line);
|
||||
});
|
||||
} else {
|
||||
let tags = await Tag.all();
|
||||
tags.map((tag) => { this.stdout(tag.title); });
|
||||
|
1677
CliClient/locales/ca.po
Normal file
1677
CliClient/locales/ca.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -451,10 +451,11 @@ msgstr "Zahajuji synchronizaci..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Zastavuji, chvíli strpení."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> může být \"add\", \"remove\" nebo \"list\" - přidat (add) či "
|
||||
"odebrat (remove) [tag] k [poznámce], nebo vypsat (list) seznam poznámek "
|
||||
@@ -614,6 +615,18 @@ msgstr "Vyjmout"
|
||||
msgid "Paste"
|
||||
msgstr "Vložit"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Hledat ve všech poznámkách"
|
||||
|
||||
@@ -685,7 +698,7 @@ msgstr "Ano"
|
||||
msgid "No"
|
||||
msgstr "Ne"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -735,12 +748,15 @@ msgstr "Zkontrolujte nastavení synchronizace"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Poznámky a nastavení uloženo v: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Uložit"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Uložit"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -876,6 +892,13 @@ 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"
|
||||
|
||||
@@ -896,15 +919,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na \"Nový zápisník\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Otevřít..."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Nebylo možné uložit zápisník: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Uložit jako..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodporovaný link či zpráva: %s"
|
||||
@@ -915,6 +951,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr "Tato poznámka je prázdný. Klikněte na \"%s\" pro otevření editoru."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Přiložit soubor"
|
||||
|
||||
@@ -924,6 +972,41 @@ msgstr "Tagy"
|
||||
msgid "Set alarm"
|
||||
msgstr "Nastavit alarm"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Zastavuji..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "to-do"
|
||||
|
||||
@@ -1103,14 +1186,22 @@ msgstr "Konflikty"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Poznámku nelze přesunout do zápisníku \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Zápisník s tímto názvem již existuje: \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Zápisník se nemůže jmenovat \"%s\", tento název je rezervován."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Bez názvu"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Upraveno: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Vytvořeno: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Bez názvu"
|
||||
|
||||
@@ -1125,16 +1216,6 @@ msgstr "Poznámku \"%s\" nelze zkopírovat do zápisníku"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Poznámku nelze přesunout do zápisníku \"%s\""
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Textový editor"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor ve kterém budou otvírány poznámky. Pokud není specifikováno, aplikace "
|
||||
"se pokusí o autodetekci defaultního editoru."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jazyk"
|
||||
|
||||
@@ -1187,6 +1268,9 @@ msgstr "Zobrazovat ikonu v panelu"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Globální zoom"
|
||||
|
||||
@@ -1219,6 +1303,18 @@ msgstr "%d hodina"
|
||||
msgid "%d hours"
|
||||
msgstr "%d hodin"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Textový editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor ve kterém budou otvírány poznámky. Pokud není specifikováno, aplikace "
|
||||
"se pokusí o autodetekci defaultního editoru."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Ukázat pokročilé volby"
|
||||
|
||||
@@ -1245,6 +1341,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uživatelské jméno"
|
||||
|
||||
@@ -1260,10 +1363,27 @@ msgstr "WebDAV uživatelské jméno"
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV heslo"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Neplatná hodnota: \"%s\". Přípustné hodnoty jsou: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Soubor Joplin Export"
|
||||
|
||||
@@ -1378,6 +1498,10 @@ msgstr "Přesunout poznámky %d do zápisníku \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Stiskněte pro zadání hesla k dešifrování."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Nastavit alarm"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Vybrat datum"
|
||||
|
||||
@@ -1387,6 +1511,10 @@ msgstr "Potvrdit"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Zrušit synchronizaci"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Získané položky: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nové tagy:"
|
||||
|
||||
@@ -1513,5 +1641,8 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
|
||||
msgid "Welcome"
|
||||
msgstr "Vítejte"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Zápisník s tímto názvem již existuje: \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Hledané výrazy"
|
||||
|
@@ -455,10 +455,11 @@ msgstr "Starter synkronisering."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annullerer... Vent venligst."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> (mærke-kommando) kan enten være \"add\" (tilføj), \"remove"
|
||||
"\" (slet) eller \"list\" (liste) for at tilføje eller fjerne mærke [tag] fra "
|
||||
@@ -619,6 +620,18 @@ msgstr "Klip"
|
||||
msgid "Paste"
|
||||
msgstr "Indsæt"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Søg i alle noter"
|
||||
|
||||
@@ -690,7 +703,7 @@ msgstr "Ja"
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -740,12 +753,15 @@ msgstr "Check synkroniserings Indstillinger"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Noter og indstillinger er gemt i: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gem"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Gem"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gem"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -885,6 +901,13 @@ 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"
|
||||
|
||||
@@ -905,15 +928,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Der er ingen notesbog. Opret en ved at klikke på \"Ny Notesbog\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Åben..."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Gem som..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Ugyldigt- eller ulovligt link eller besked: %s"
|
||||
@@ -924,6 +960,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr "Denne note er tom. Klik på \"%s\" for at starte editor og rette noten."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Vedhæft fil"
|
||||
|
||||
@@ -933,6 +981,41 @@ msgstr "Mærker"
|
||||
msgid "Set alarm"
|
||||
msgstr "Indstil alarm"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Annullerer..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "opgave"
|
||||
|
||||
@@ -1112,14 +1195,22 @@ msgstr "Konflikter"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "En notesbog bruger allerede dette navn: \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notesbøger kan ikke få navnet \"%s\", da det er en beskyttet titel."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Samlet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Opdateret %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Oprettet: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Samlet"
|
||||
|
||||
@@ -1134,16 +1225,6 @@ msgstr "Kan ikke kopiere note til \"%s\" notesbog"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Tekst editor"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor der bruges til at åbne note. Hvis ingen valgt/udfyldt, vil auto-"
|
||||
"funktion søge efter standard editor."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprog"
|
||||
|
||||
@@ -1196,6 +1277,9 @@ msgstr "Vis ikon på bundbjælke"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global zoom procent"
|
||||
|
||||
@@ -1228,6 +1312,18 @@ msgstr "%d time"
|
||||
msgid "%d hours"
|
||||
msgstr "%d timer"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Tekst editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor der bruges til at åbne note. Hvis ingen valgt/udfyldt, vil auto-"
|
||||
"funktion søge efter standard editor."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Vis avancerede indstillinger"
|
||||
|
||||
@@ -1254,6 +1350,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud brugernavn"
|
||||
|
||||
@@ -1269,10 +1372,27 @@ msgstr "WebDAV brugernavn"
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV kodeord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Joplin eksport fil"
|
||||
|
||||
@@ -1387,6 +1507,10 @@ msgstr "Flyt %d noter til notesbogen \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klik for at gemme dekrypterings kodeord."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Indstil alarm"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Vælg dato"
|
||||
|
||||
@@ -1396,6 +1520,10 @@ msgstr "Bekræft"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Afbryd synkronisering"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Hentede emner: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nye tags:"
|
||||
|
||||
@@ -1522,6 +1650,9 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "En notesbog bruger allerede dette navn: \"%s\""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For more information about End-To-End Encryption (E2EE) and advices on "
|
||||
#~ "how to enable it please check the documentation"
|
||||
|
@@ -7,18 +7,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Joplin-CLI 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Philipp Zumstein <zuphilip@gmail.com>\n"
|
||||
"Last-Translator: Michael Sonntag <ms@editorei.de>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"X-Generator: Poedit 2.0.8\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr ""
|
||||
"Um eine Markierung zu löschen, entferne diese bei allen damit verbundenen "
|
||||
"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen "
|
||||
"Notizen."
|
||||
|
||||
msgid "Please select the note or notebook to be deleted first."
|
||||
@@ -53,7 +53,7 @@ msgid "y"
|
||||
msgstr "j"
|
||||
|
||||
msgid "Cancelling background synchronisation... Please wait."
|
||||
msgstr "Breche Hintergrund-Synchronisation ab... Bitte warten."
|
||||
msgstr "Breche Hintergrundsynchronisation ab… Bitte warten."
|
||||
|
||||
#, javascript-format
|
||||
msgid "No such command: %s"
|
||||
@@ -271,8 +271,8 @@ msgstr "Um den Kommandozeilen Modus zu beenden, drücke ESCAPE"
|
||||
msgid ""
|
||||
"For the list of keyboard shortcuts and config options, type `help keymap`"
|
||||
msgstr ""
|
||||
"Um die komplette Liste aller verfügbaren Tastenkürzeln anzuzeigen, tippe "
|
||||
"`help keymap` ein"
|
||||
"Um die komplette Liste aller verfügbaren Tastenkürzeln und "
|
||||
"Konfigurationseinstellungen anzuzeigen, tippe `help keymap` ein"
|
||||
|
||||
msgid "Imports data into Joplin."
|
||||
msgstr "Importiert Daten in Joplin."
|
||||
@@ -379,12 +379,12 @@ msgstr "Löscht das ausgewählte Notizbuch."
|
||||
msgid "Deletes the notebook without asking for confirmation."
|
||||
msgstr "Löscht das Notizbuch, ohne nach einer Bestätigung zu fragen."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Delete notebook? All notes and sub-notebooks within this notebook will also "
|
||||
"be deleted."
|
||||
msgstr ""
|
||||
"Notizbuch wirklich löschen? Alle Notizen darin werden ebenfalls gelöscht."
|
||||
"Notizbuch wirklich löschen? Alle Notizen und Unternotizen darin werden "
|
||||
"ebenfalls gelöscht."
|
||||
|
||||
msgid "Deletes the notes matching <note-pattern>."
|
||||
msgstr "Löscht die Notizen, die mit <note-pattern> übereinstimmen."
|
||||
@@ -475,15 +475,16 @@ msgstr "Starte Synchronisation..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Abbrechen… Bitte warten."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> kann \"add\", \"remove\" or \"list\" sein, um eine "
|
||||
"[Markierung] zu [Notiz] zuzuweisen oder zu entfernen, oder um mit "
|
||||
"[Markierung] markierte Notizen anzuzeigen. Mit dem Befehl `tag list` können "
|
||||
"alle Markierungen angezeigt werden."
|
||||
"<tag-command> kann \"add\", \"remove\" or \"list\" sein, um ein [Schlagwort] "
|
||||
"zu [Notiz] zuzuweisen oder zu entfernen, oder um mit [Schlagwort] markierte "
|
||||
"Notizen anzuzeigen. Mit dem Befehl `tag list` können alle Schlagwörter "
|
||||
"angezeigt werden."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -643,6 +644,18 @@ msgstr "Ausschneiden"
|
||||
msgid "Paste"
|
||||
msgstr "Einfügen"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Fett"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Datum / Uhrzeit einfügen"
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "Im externen Editor bearbeiten"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Alle Notizen durchsuchen"
|
||||
|
||||
@@ -662,10 +675,10 @@ msgid "Synchronisation status"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
msgstr "Web Clipper Optionen"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Verschlüsselung"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
@@ -680,7 +693,7 @@ msgid "Make a donation"
|
||||
msgstr "Spenden"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Updates..."
|
||||
msgstr "Überprüfe auf Updates…"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
@@ -706,7 +719,7 @@ msgid "Current version is up-to-date."
|
||||
msgstr "Die aktuelle Version ist up-to-date."
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Es ist ein Update verfügbar! Soll dies jetzt heruntergeladen werden?"
|
||||
msgstr "Es ist ein Update verfügbar! Soll es jetzt heruntergeladen werden?"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -714,48 +727,56 @@ msgstr "Ja"
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"Der Webclipperservice ist bereits aktiviert und auf Autostart eingestellt."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
msgstr ""
|
||||
msgstr "Status: Gestartet auf Port %d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Status: %s"
|
||||
msgstr "Status: %s."
|
||||
msgstr "Status: %s"
|
||||
|
||||
msgid "Disable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Web Clipper Service deaktivieren"
|
||||
|
||||
msgid "The web clipper service is not enabled."
|
||||
msgstr ""
|
||||
msgstr "Der Web Clipper Service ist nicht aktiviert."
|
||||
|
||||
msgid "Enable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Web Clipper Service aktivieren"
|
||||
|
||||
msgid ""
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
|
||||
"to Joplin."
|
||||
msgstr ""
|
||||
"Joplin Web Clipper erlaubt im Browser das Speichern von Webseiten und "
|
||||
"Screenshots nach Joplin."
|
||||
|
||||
msgid "In order to use the web clipper, you need to do the following:"
|
||||
msgstr ""
|
||||
msgstr "Um den Web Clipper zu benutzen, musst du folgendes machen:"
|
||||
|
||||
msgid "Step 1: Enable the clipper service"
|
||||
msgstr ""
|
||||
msgstr "Schritt 1: Clipper Service aktivieren"
|
||||
|
||||
msgid ""
|
||||
"This service allows the browser extension to communicate with Joplin. When "
|
||||
"enabling it your firewall may ask you to give permission to Joplin to listen "
|
||||
"to a particular port."
|
||||
msgstr ""
|
||||
"Dieser Service erlaubt es der Browser-Erweiterung mit Joplin zu "
|
||||
"kommunizieren. Beim Aktivieren kann deine Firewall dich nach der Erlaubnis "
|
||||
"bitten, dass Joplin auf einen bestimmten Port mithört."
|
||||
|
||||
msgid "Step 2: Install the extension"
|
||||
msgstr ""
|
||||
msgstr "Schritt 2: Erweiterung installieren"
|
||||
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
"Lade die entsprechende Erweiterung für deinen Browser herunter und "
|
||||
"installiere sie:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Überprüfen der Synchronisationseinstellungen"
|
||||
@@ -764,12 +785,15 @@ msgstr "Überprüfen der Synchronisationseinstellungen"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
msgid "Apply"
|
||||
msgstr "Anwenden"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Absenden"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -873,17 +897,16 @@ msgid "Notebook title:"
|
||||
msgstr "Notizbuch Titel:"
|
||||
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Füge hinzu oder entferne Markierungen:"
|
||||
msgstr "Füge hinzu oder entferne Schlagwörter:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Trenne jede Markierung mit einem Komma."
|
||||
msgstr "Trenne jedes Schlagwort mit einem Komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Notizbuch umbenennen:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Rename tag:"
|
||||
msgstr "Umbenennen"
|
||||
msgstr "Schlagwort umbenennen:"
|
||||
|
||||
msgid "Set alarm:"
|
||||
msgstr "Alarm erstellen:"
|
||||
@@ -907,14 +930,20 @@ msgid "Set the password"
|
||||
msgstr "Setze ein Passwort"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Markierungen hinzufügen oder entfernen"
|
||||
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"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
msgstr "Markdown-Link kopieren"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
@@ -933,14 +962,27 @@ msgstr ""
|
||||
"Momentan existieren noch keine Notizbücher. Erstelle eines, indem du auf "
|
||||
"\"Neues Notizbuch\" drückst."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Öffne..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Sichern unter..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
msgstr "Pfad in Zwischenablage kopieren"
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Link-Adresse kopieren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -954,6 +996,18 @@ msgstr ""
|
||||
"Diese Notiz hat keinen Inhalt. Klicke auf „%s“ um den Editor zu aktivieren "
|
||||
"und die Notiz zu bearbeiten."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "Fetter Text"
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr "hervorgehobener Text"
|
||||
|
||||
msgid "List item"
|
||||
msgstr "Listeneintrag"
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr "Weblink einfügen"
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Datei anhängen"
|
||||
|
||||
@@ -963,6 +1017,41 @@ msgstr "Markierungen"
|
||||
msgid "Set alarm"
|
||||
msgstr "Alarm erstellen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "In: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Weblink"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "Nummerierte Liste"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Aufzählung"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Kontrollkästchen"
|
||||
|
||||
msgid "Heading"
|
||||
msgstr "Überschrift"
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr "Horizontale Linie"
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr "Klicken Sie hier, um die externe Bearbeitung anzuhalten"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Ansehen…"
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "To-Do"
|
||||
|
||||
@@ -980,7 +1069,7 @@ msgid "Clear"
|
||||
msgstr "Leeren"
|
||||
|
||||
msgid "OneDrive Login"
|
||||
msgstr "OneDrive Login"
|
||||
msgstr "OneDrive Anmeldung"
|
||||
|
||||
msgid "Dropbox Login"
|
||||
msgstr "Dropbox Anmeldung"
|
||||
@@ -994,12 +1083,11 @@ msgstr "Synchronisations Status"
|
||||
msgid "Encryption Options"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clipper Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
msgstr "Clipper Einstellungen"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Diese Markierung von allen Notizen entfernen?"
|
||||
msgstr "Dieses Schlagwort von allen Notizen entfernen?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Diese Suche von der Seitenleiste entfernen?"
|
||||
@@ -1110,7 +1198,7 @@ msgid "State: %s."
|
||||
msgstr "Status: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Abbrechen..."
|
||||
msgstr "Abbrechen…"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Completed: %s"
|
||||
@@ -1121,7 +1209,7 @@ msgid "Last error: %s"
|
||||
msgstr "Letzte Fehlermeldung: %s"
|
||||
|
||||
msgid "Idle"
|
||||
msgstr "wartend"
|
||||
msgstr "Wartend"
|
||||
|
||||
msgid "In progress"
|
||||
msgstr "In Bearbeitung"
|
||||
@@ -1139,19 +1227,23 @@ msgstr "Verschlüsselte Objekte können nicht verändert werden"
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikte"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Kann Notiz nicht zu Notizbuch \"%s\" verschieben"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Ein Notizbuch mit diesem Titel existiert bereits : \"%s\""
|
||||
msgstr "Kann Notizbuch nicht an diesen Ort verschieben"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Notizbuch kann nicht \"%s\" genannt werden. Dies ist ein reservierter Titel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Aktualsierungsdatum"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Erstelldatum"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Unbenannt"
|
||||
|
||||
@@ -1166,17 +1258,6 @@ msgstr "Kann Notiz nicht zu Notizbuch \"%s\" kopieren"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kann Notiz nicht zu Notizbuch \"%s\" verschieben"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Textverarbeitungsprogramm"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Das Textverarbeitungsprogramm, mit dem Notizen geöffnet werden. Wenn keines "
|
||||
"ausgewählt wurde, wird Joplin versuchen das standard-"
|
||||
"Textverarbeitungsprogramm zu erkennen."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
@@ -1198,9 +1279,8 @@ msgstr "Dunkel"
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "Zeige unvollständige To-Dos an oberster Stelle"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show completed to-dos"
|
||||
msgstr "Zeige unvollständige To-Dos an oberster Stelle"
|
||||
msgstr "Abgeschlossene ToDos anzeigen"
|
||||
|
||||
msgid "Sort notes by"
|
||||
msgstr "Sortiere Notizen nach"
|
||||
@@ -1229,19 +1309,22 @@ msgstr "Zeige Tray Icon"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Hinweis: Funktioniert nicht in allen Desktopumgebungen."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Zoomstufe der Benutzeroberfläche"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor Schriftenfamilie"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
"incorrect or empty, it will default to a generic monospace font."
|
||||
msgstr ""
|
||||
"Der Name der Schrift wird nicht überprüft. Ist dieser inkorrekt oder leer "
|
||||
"wird eine generische Monospace Schrift verwendet."
|
||||
"Dies muss eine *Monospace* Schriftart sein, sonst funktioniert es nicht "
|
||||
"richtig. Wenn die Schriftart falsch oder leer ist, wird eine "
|
||||
"voreingestellte, generische Monospace-Schriftart verwendet."
|
||||
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Die Applikation automatisch aktualisieren"
|
||||
@@ -1261,6 +1344,16 @@ msgstr "%d Stunde"
|
||||
msgid "%d hours"
|
||||
msgstr "%d Stunden"
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr "Editoraufruf"
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Der Editor, mit dem Notizen geöffnet werden. Wenn keiner ausgewählt wurde, "
|
||||
"wird Joplin versuchen den Standardeditor zu erkennen."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Erweiterte Optionen anzeigen"
|
||||
|
||||
@@ -1288,6 +1381,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud Benutzername"
|
||||
|
||||
@@ -1303,10 +1403,32 @@ msgstr "WebDAV Benutzername"
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV Passwort"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Benutzerdefinierte TLS-Zertifikate"
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
"Kommagetrennte Liste von Pfaden zu Verzeichnissen, aus denen die Zertifikate "
|
||||
"geladen werden, oder Pfad zu einzelnen Zertifikatsdateien. Zum Beispiel: / "
|
||||
"my / cert_dir, /other/custom.pem. Wenn Sie Änderungen an den TLS-"
|
||||
"Einstellungen vornehmen, müssen Sie Ihre Änderungen speichern, bevor Sie auf "
|
||||
"\"Synchronisierungskonfiguration prüfen\" klicken."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignoriere TLS-Zertifikatfehler"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ungültiger Optionswert: \"%s\". Mögliche Werte sind: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Joplin Export Datei"
|
||||
|
||||
@@ -1324,7 +1446,7 @@ msgstr "Verzeichnis"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Cannot load \"%s\" module for format \"%s\""
|
||||
msgstr "Das Modul „%s“ für das Format „%s“ kann nicht geladen werden"
|
||||
msgstr "Das Modul \"%s\" für das Format \"%s\" kann nicht geladen werden"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Please specify import format for %s"
|
||||
@@ -1424,6 +1546,9 @@ msgstr "%d Notizen in das Notizbuch \"%s\" verschieben?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Tippe hier, um das Entschlüsselungspasswort festzulegen."
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Alarm speichern"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Datum auswählen"
|
||||
|
||||
@@ -1433,27 +1558,37 @@ msgstr "Bestätigen"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Synchronisation abbrechen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Entschlüsselte Objekte: %d/%d"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Neue Markierungen:"
|
||||
msgstr "Neue Schlagwörter:"
|
||||
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Neue Markierungen eingeben oder aus der Liste auswählen"
|
||||
msgstr "Neues Schlagwort eingeben oder aus der Liste auswählen"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
msgstr ""
|
||||
"Um korrekt arbeiten zu können, benötigt die Anwendung die folgenden "
|
||||
"Berechtigungen. Bitte aktiviere diese in deinen Telefoneinstellungen, unter "
|
||||
"Apps > Joplin > Berechtigungen"
|
||||
|
||||
msgid ""
|
||||
"- Storage: to allow attaching files to notes and to enable filesystem "
|
||||
"synchronisation."
|
||||
msgstr ""
|
||||
"- Speicher: um das Anhängen von Dateien an Notizen und die Synchronisation "
|
||||
"des Dateisystems zu ermöglichen."
|
||||
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
msgstr ""
|
||||
msgstr "- Kamera: um ein Bild aufzunehmen und an eine Notiz anzuhängen."
|
||||
|
||||
msgid "- Location: to allow attaching geo-location information to a note."
|
||||
msgstr ""
|
||||
"- Standort: zum Anhängen von Geolokalisierungsinformationen an eine Notiz."
|
||||
|
||||
msgid "Joplin website"
|
||||
msgstr "Website von Joplin"
|
||||
@@ -1502,11 +1637,12 @@ msgstr "Änderungen verwerfen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "No item with ID %s"
|
||||
msgstr ""
|
||||
msgstr "Kein Element mit ID %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
"Die Joplin Handy-Applikation unterstützt derzeit diese Art von Link nicht: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
@@ -1519,7 +1655,7 @@ msgid "Attach any file"
|
||||
msgstr "Beliebige Datei anhängen"
|
||||
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
msgstr "Teilen"
|
||||
|
||||
msgid "Convert to note"
|
||||
msgstr "In eine Notiz umwandeln"
|
||||
@@ -1549,8 +1685,8 @@ msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"Drücke auf den (+) Knopf, um eine neue Notiz oder ein neues Notizbuch zu "
|
||||
"erstellen. Tippe auf die Seitenleiste, um auf deine existierenden "
|
||||
"Drücke auf die (+)-Schaltfläche, um eine neue Notiz oder ein neues Notizbuch "
|
||||
"zu erstellen. Tippe auf die Seitenleiste, um auf deine existierenden "
|
||||
"Notizbücher zuzugreifen."
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
@@ -1561,6 +1697,9 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Ein Notizbuch mit diesem Titel existiert bereits : \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Suchen"
|
||||
|
||||
|
@@ -414,7 +414,7 @@ msgstr ""
|
||||
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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -552,6 +552,18 @@ msgstr ""
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -623,7 +635,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -673,12 +685,15 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -801,6 +816,13 @@ 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 ""
|
||||
|
||||
@@ -820,15 +842,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -839,6 +874,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr ""
|
||||
|
||||
@@ -848,6 +895,40 @@ msgstr ""
|
||||
msgid "Set alarm"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr ""
|
||||
|
||||
msgid "to-do"
|
||||
msgstr ""
|
||||
|
||||
@@ -1018,11 +1099,16 @@ msgid "Cannot move notebook to this location"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
@@ -1039,14 +1125,6 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1098,6 +1176,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1127,6 +1208,14 @@ msgstr ""
|
||||
msgid "%d hours"
|
||||
msgstr ""
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr ""
|
||||
|
||||
@@ -1149,6 +1238,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
@@ -1164,10 +1260,27 @@ msgstr ""
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr ""
|
||||
|
||||
@@ -1277,6 +1390,9 @@ msgstr ""
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1286,6 +1402,10 @@ msgstr ""
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -460,10 +460,11 @@ msgstr "Iniciando sincronización..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Por favor espere."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> puede ser \"add\", \"remove\" o \"list\" para asignar o "
|
||||
"eliminar [tag] de [note], o para listar las notas asociadas con [tag]. El "
|
||||
@@ -628,6 +629,18 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Negrita"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Cursiva"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Introduce fecha"
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "Editar con un editor externo"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas las notas"
|
||||
|
||||
@@ -647,7 +660,7 @@ msgid "Synchronisation status"
|
||||
msgstr "Estado de la sincronización"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
msgstr "Opciones de recorte web"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opciones de cifrado"
|
||||
@@ -699,48 +712,55 @@ msgstr "Sí"
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"El servicio de recorte web está habilitado y configurado para que inicie "
|
||||
"automáticamente."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
msgstr ""
|
||||
msgstr "Estado: Iniciado en el puerto %d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Status: %s"
|
||||
msgstr "Estado: «%s»."
|
||||
msgstr "Estado: %s"
|
||||
|
||||
msgid "Disable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Deshabilitar el servicio de recorte web"
|
||||
|
||||
msgid "The web clipper service is not enabled."
|
||||
msgstr ""
|
||||
msgstr "El servicio de recorte web no está habilitado."
|
||||
|
||||
msgid "Enable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Habilitar el servicio de recorte web"
|
||||
|
||||
msgid ""
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
|
||||
"to Joplin."
|
||||
msgstr ""
|
||||
"El recorte web de Joplin permite guardar páginas web y capturas de pantalla "
|
||||
"desde su navegador."
|
||||
|
||||
msgid "In order to use the web clipper, you need to do the following:"
|
||||
msgstr ""
|
||||
msgstr "Para utilizar el recorte web, necesita hacer lo siguiente:"
|
||||
|
||||
msgid "Step 1: Enable the clipper service"
|
||||
msgstr ""
|
||||
msgstr "Paso 1: Habilitar el servicio de recorte"
|
||||
|
||||
msgid ""
|
||||
"This service allows the browser extension to communicate with Joplin. When "
|
||||
"enabling it your firewall may ask you to give permission to Joplin to listen "
|
||||
"to a particular port."
|
||||
msgstr ""
|
||||
"Este servicio permite a la extensión del navegador comunicarse con Joplin. "
|
||||
"Cuando la habilite su cortafuegos puede solicitar permisos para que Joplin "
|
||||
"escuche en un puerto concreto."
|
||||
|
||||
msgid "Step 2: Install the extension"
|
||||
msgstr ""
|
||||
msgstr "Paso 2: Instalar la extensión"
|
||||
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
msgstr "Descargar e instalar para su navegador:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar sincronización"
|
||||
@@ -749,12 +769,15 @@ msgstr "Comprobar sincronización"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Las notas y los ajustes se guardan en: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Aceptar"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -865,9 +888,8 @@ msgstr "Separar cada etiqueta por una coma."
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renombrar libreta:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Rename tag:"
|
||||
msgstr "Renombrar"
|
||||
msgstr "Renombrar etiqueta:"
|
||||
|
||||
msgid "Set alarm:"
|
||||
msgstr "Ajustar alarma:"
|
||||
@@ -893,6 +915,13 @@ 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"
|
||||
|
||||
@@ -912,14 +941,27 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "No hay ninguna libreta. Cree una pulsando en «Libreta nueva»."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "No se ha podido abrir este archivo: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Guardar como..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
msgstr "Copiar la ruta en el portapapeles"
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copiar enlace"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -933,6 +975,18 @@ msgstr ""
|
||||
"Esta nota no tiene contenido. Pulse en \"%s\" para cambiar al editor y "
|
||||
"editar la nota."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto destacado"
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr "texto resaltado"
|
||||
|
||||
msgid "List item"
|
||||
msgstr "Listar elementos"
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr "Insertar hipervínculo"
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Adjuntar archivo"
|
||||
|
||||
@@ -942,6 +996,40 @@ msgstr "Etiquetas"
|
||||
msgid "Set alarm"
|
||||
msgstr "Establecer alarma"
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "En: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hipervínculo"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "Lista numerada"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Lista con viñetas"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Casilla"
|
||||
|
||||
msgid "Heading"
|
||||
msgstr "Título"
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr "Regla horizontal"
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr "Pulsa para detener la edición externa"
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr "Mirando..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "lista de tareas"
|
||||
|
||||
@@ -973,9 +1061,8 @@ msgstr "Estado de la sincronización"
|
||||
msgid "Encryption Options"
|
||||
msgstr "Opciones de cifrado"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opciones generales"
|
||||
msgstr "Opciones de recorte"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "¿Desea eliminar esta etiqueta de todas las notas?"
|
||||
@@ -1120,15 +1207,20 @@ msgstr "Conflictos"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "No se puede mover la libreta a este lugar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Ya existe una libreta con este nombre: «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"No se puede usar el nombre «%s» para una libreta; es un título reservado."
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "fecha de actualización"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "fecha de creación"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sin título"
|
||||
|
||||
@@ -1143,16 +1235,6 @@ msgstr "No se ha podido copiar la nota a la libreta «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "No se ha podido mover la nota a la libreta «%s»"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Editor de texto"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"El editor que se usará para abrir una nota. Se intentará auto-detectar el "
|
||||
"editor predeterminado si no se proporciona ninguno."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1174,9 +1256,8 @@ msgstr "Oscuro"
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "Mostrar tareas incompletas al inicio de las listas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show completed to-dos"
|
||||
msgstr "Mostrar tareas incompletas al inicio de las listas"
|
||||
msgstr "Mostrar tareas completadas"
|
||||
|
||||
msgid "Sort notes by"
|
||||
msgstr "Ordenar notas por"
|
||||
@@ -1205,19 +1286,22 @@ msgstr "Mostrar icono en la bandeja"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: No funciona en todos los entornos de escritorio."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Establecer el porcentaje de aumento de la aplicación"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Fuente del editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
"incorrect or empty, it will default to a generic monospace font."
|
||||
msgstr ""
|
||||
"El nombre de la fuente no se comprobado. Si es incorrecto o está vacío, se "
|
||||
"utilizará una fuente genérica monoespaciada."
|
||||
"Esta debe ser una fuente *monoespaciada* o no funcionará correctamente. Si "
|
||||
"la fuente es incorrecta o vacía, se configurará una fuente monoespaciada "
|
||||
"genérica."
|
||||
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizar la aplicación automáticamente"
|
||||
@@ -1237,6 +1321,17 @@ msgstr "%d hora"
|
||||
msgid "%d hours"
|
||||
msgstr "%d horas"
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr "Editor de texto"
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"El comando del editor (puede incluir argumentos) que se utilizará para abrir "
|
||||
"una nota. Si no se provee ninguno se intentará auto detectar el editor por "
|
||||
"defecto."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opciones avanzadas"
|
||||
|
||||
@@ -1264,6 +1359,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Servidor WebDAV de Nextcloud"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
@@ -1279,10 +1381,32 @@ msgstr "Usuario de WebDAV"
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contraseña de WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificados TLS personalizados"
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
"Lista de rutas de los directorios de dónde cargar los certificados separados "
|
||||
"por comas, o la ruta individual de los certificados. Por ejemplo: /mi/"
|
||||
"cert_dir, /otro/personalizado.pem. Tenga en cuenta que si realiza cambios en "
|
||||
"la configuración de los certificados debe guardar los cambios antes de "
|
||||
"pulsar en \"Comprobar la configuración de sincronización\"."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar errores en certificados TLS"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Opción inválida: «%s». Los valores posibles son: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Archivo de exportación de Joplin"
|
||||
|
||||
@@ -1397,6 +1521,9 @@ msgstr "¿Desea mover %d notas a libreta «%s»?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Presione para establecer la contraseña de descifrado."
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Establecer alarma"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Seleccione fecha"
|
||||
|
||||
@@ -1406,6 +1533,10 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Descifrando elementos: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nuevas etiquetas:"
|
||||
|
||||
@@ -1416,17 +1547,24 @@ msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
msgstr ""
|
||||
"Para funcionar correctamente, la aplicación necesita los siguientes "
|
||||
"permisos. Por favor habilitelos en su teléfono, en Aplicaciones > Joplin > "
|
||||
"Permisos"
|
||||
|
||||
msgid ""
|
||||
"- Storage: to allow attaching files to notes and to enable filesystem "
|
||||
"synchronisation."
|
||||
msgstr ""
|
||||
"- Almacenamiento: Permite adjuntar archivos a las notas y habilitar la "
|
||||
"sincronización del sistema de ficheros."
|
||||
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
msgstr ""
|
||||
msgstr "- Cámara: permite tomar fotografías y adjuntarlas en una nota."
|
||||
|
||||
msgid "- Location: to allow attaching geo-location information to a note."
|
||||
msgstr ""
|
||||
"- Localización: permite adjuntar la información de geolocalización en la "
|
||||
"nota."
|
||||
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
@@ -1493,7 +1631,7 @@ msgid "Attach any file"
|
||||
msgstr "Adjuntar cualquier archivo"
|
||||
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
msgstr "Compartir"
|
||||
|
||||
msgid "Convert to note"
|
||||
msgstr "Convertir a nota"
|
||||
@@ -1533,6 +1671,9 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenido"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Ya existe una libreta con este nombre: «%s»"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For more information about End-To-End Encryption (E2EE) and advices on "
|
||||
#~ "how to enable it please check the documentation"
|
||||
|
@@ -458,10 +458,11 @@ msgstr "Sinkronizazioa hasten..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Bertan behera uzten... itxaron, mesedez."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> izan daiteke \"add\", \"remove\" edo \"list\" [oharra]tik "
|
||||
"[etiketa] esleitu edo kentzeko, edo [etiketa]rekin elkartutako oharrak "
|
||||
@@ -627,6 +628,18 @@ msgstr "Moztu"
|
||||
msgid "Paste"
|
||||
msgstr "Itsatsi"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Bilatu ohar guztietan"
|
||||
|
||||
@@ -700,7 +713,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "E"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -751,12 +764,15 @@ msgstr "Sinkronizazioa utzi"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gorde"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gorde"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -895,6 +911,13 @@ 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."
|
||||
|
||||
@@ -914,9 +937,19 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Momentuz ez dago koadernorik. Sortu bat \"Koaderno berria\" sakatuta."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save as..."
|
||||
msgstr "Gorde aldaketak"
|
||||
@@ -924,6 +957,9 @@ msgstr "Gorde aldaketak"
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Esteka edo mezu ez dago onartua: %s"
|
||||
@@ -934,6 +970,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Erantsi fitxategia"
|
||||
|
||||
@@ -943,6 +991,41 @@ msgstr "Etiketak"
|
||||
msgid "Set alarm"
|
||||
msgstr "Ezarri alarma"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Bertan behera uzten..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "to-do"
|
||||
msgstr "Zeregin berria"
|
||||
@@ -1127,15 +1210,23 @@ msgstr "Gatazkak"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Dagoeneko bada koaderno bat izen horrekin: \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Koadernoak ezin izendatu daitezke \"%s\", izen hori Joplinek gordeta dauka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Eguneratuta: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Sortuta: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
@@ -1150,16 +1241,6 @@ msgstr "Ezin kopia daiteke oharra \"%s\" koadernora"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Testu editorea"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editorea erabiliko da oharra zabaltzeko. Ez badago zehaztutakorik lehenetsia "
|
||||
"igartzen ahaleginduko da."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Hizkuntza"
|
||||
|
||||
@@ -1216,6 +1297,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Ezarri aplikazioaren zoomaren ehunekoa"
|
||||
@@ -1246,6 +1330,18 @@ msgstr "% ordua"
|
||||
msgid "%d hours"
|
||||
msgstr "% orduak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Testu editorea"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editorea erabiliko da oharra zabaltzeko. Ez badago zehaztutakorik lehenetsia "
|
||||
"igartzen ahaleginduko da."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Erakutsi aukera aurreratuak"
|
||||
|
||||
@@ -1272,6 +1368,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
@@ -1290,10 +1393,27 @@ msgstr "Nextcloud erabiltzaile-izena"
|
||||
msgid "WebDAV password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Evernotetik esportatutako fitxategiak"
|
||||
@@ -1408,6 +1528,10 @@ msgstr "Mugitu %d oharrak \"%s\" koadernora?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Sakatu deszifratze pasahitza ezartzeko."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Ezarri alarma"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Data aukeratu"
|
||||
|
||||
@@ -1417,6 +1541,10 @@ msgstr "Baieztatu"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Itemak eskuratuta: %d%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1543,6 +1671,9 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Dagoeneko bada koaderno bat izen horrekin: \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Bilaketak"
|
||||
|
||||
|
@@ -59,7 +59,7 @@ msgstr ""
|
||||
"La commande \"%s\" est disponible uniquement en mode d'interface graphique"
|
||||
|
||||
msgid "Cannot change encrypted item"
|
||||
msgstr "Un objet crypté ne peut pas être modifié"
|
||||
msgstr "Un objet chiffré ne peut pas être modifié"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Missing required argument: %s"
|
||||
@@ -127,7 +127,7 @@ msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
msgstr ""
|
||||
"Gérer la configuration E2EE (Cryptage de bout à bout). Les commandes sont "
|
||||
"Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont "
|
||||
"`enable`, `disable`, `decrypt` et `status` et `target-status`."
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -140,11 +140,11 @@ msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
msgstr ""
|
||||
"Démarrage du décryptage... Veuillez patienter car cela pourrait prendre "
|
||||
"plusieurs minutes selon le nombre d'objets à décrypter."
|
||||
"Démarrage du déchiffrement... Veuillez patienter car cela pourrait prendre "
|
||||
"plusieurs minutes selon le nombre d'objets à déchiffrer."
|
||||
|
||||
msgid "Completed decryption."
|
||||
msgstr "Décryptage complété."
|
||||
msgstr "Déchiffrement complété."
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
@@ -154,7 +154,7 @@ msgstr "Désactivé"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Encryption is: %s"
|
||||
msgstr "Le cryptage est : %s"
|
||||
msgstr "Le chiffrement est : %s"
|
||||
|
||||
msgid "Edit note."
|
||||
msgstr "Éditer la note."
|
||||
@@ -461,10 +461,11 @@ msgstr "Commencement de la synchronisation..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annulation... Veuillez attendre."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> peut être \"add\", \"remove\" ou \"list\" pour assigner ou "
|
||||
"enlever l'étiquette [tag] de la [note], our pour lister les notes associées "
|
||||
@@ -571,10 +572,10 @@ msgid ""
|
||||
"supplied the password, the encrypted items are being decrypted in the "
|
||||
"background and will be available soon."
|
||||
msgstr ""
|
||||
"Au moins un objet est actuellement crypté et il se peut que vous deviez "
|
||||
"Au moins un objet est actuellement chiffré et il se peut que vous deviez "
|
||||
"fournir votre mot de passe maître. Pour se faire, veuillez taper `e2ee "
|
||||
"decrypt`. Si vous avez déjà fourni ce mot de passe, les objets cryptés vont "
|
||||
"être décrypté en tâche de fond et seront disponible prochainement."
|
||||
"decrypt`. Si vous avez déjà fourni ce mot de passe, les objets chiffrés vont "
|
||||
"être déchiffré en tâche de fond et seront disponible prochainement."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -627,6 +628,18 @@ msgstr "Couper"
|
||||
msgid "Paste"
|
||||
msgstr "Coller"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Gras"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Italique"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Insérer la date et l'heure"
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "Ouvrir dans un éditeur externe"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Chercher dans toutes les notes"
|
||||
|
||||
@@ -649,7 +662,7 @@ msgid "Web clipper options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Options de cryptage"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Options générales"
|
||||
@@ -699,12 +712,12 @@ msgstr "Oui"
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "Le service du Web Clipper est activé et démarrera automatiquement."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
msgstr "État : Commencé sur le port %d"
|
||||
msgstr "État : Démarré sur le port %d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: %s"
|
||||
@@ -723,8 +736,8 @@ msgid ""
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
|
||||
"to Joplin."
|
||||
msgstr ""
|
||||
"Le Web Clipper permet de sauver des pages web et des captures d'écran depuis "
|
||||
"votre navigateur vers Joplin."
|
||||
"Le Web Clipper permet d'enregistrer des pages web et des captures d'écran "
|
||||
"depuis votre navigateur vers Joplin."
|
||||
|
||||
msgid "In order to use the web clipper, you need to do the following:"
|
||||
msgstr "Pour utiliser le Web Clipper, veuillez suivre ces instructions :"
|
||||
@@ -756,20 +769,23 @@ msgstr "Vérifier config synchronisation"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes et paramètres se trouve dans : %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
msgid "Apply"
|
||||
msgstr "Appliquer"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Envoyer"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
"continue?"
|
||||
msgstr ""
|
||||
"Désactiver le cryptage signifie que *toutes* les notes et fichiers vont être "
|
||||
"re-synchronisés et envoyés décryptés sur la cible de la synchronisation. "
|
||||
"Souhaitez vous continuer ?"
|
||||
"Désactiver le chiffrement signifie que *toutes* les notes et fichiers vont "
|
||||
"être re-synchronisés et envoyés déchiffrés sur la cible de la "
|
||||
"synchronisation. Souhaitez vous continuer ?"
|
||||
|
||||
msgid ""
|
||||
"Enabling encryption means *all* your notes and attachments are going to be "
|
||||
@@ -777,17 +793,17 @@ msgid ""
|
||||
"password as, for security purposes, this will be the *only* way to decrypt "
|
||||
"the data! To enable encryption, please enter your password below."
|
||||
msgstr ""
|
||||
"Activer le cryptage signifie que *toutes* les notes et fichiers vont être re-"
|
||||
"synchronisés et envoyés cryptés vers la cible de la synchronisation. Ne "
|
||||
"Activer le chiffrement signifie que *toutes* les notes et fichiers vont être "
|
||||
"re-synchronisés et envoyés chiffrés vers la cible de la synchronisation. Ne "
|
||||
"perdez pas votre mot de passe car, pour des raisons de sécurité, ce sera la "
|
||||
"*seule* façon de décrypter les données ! Pour activer le cryptage, veuillez "
|
||||
"entrer votre mot de passe ci-dessous."
|
||||
"*seule* façon de déchiffrer les données ! Pour activer le chiffrement, "
|
||||
"veuillez entrer votre mot de passe ci-dessous."
|
||||
|
||||
msgid "Disable encryption"
|
||||
msgstr "Désactiver le cryptage"
|
||||
msgstr "Désactiver le chiffrement"
|
||||
|
||||
msgid "Enable encryption"
|
||||
msgstr "Activer le cryptage"
|
||||
msgstr "Activer le chiffrement"
|
||||
|
||||
msgid "Master Keys"
|
||||
msgstr "Clefs maître"
|
||||
@@ -818,10 +834,10 @@ msgid ""
|
||||
"as \"active\"). Any of the keys might be used for decryption, depending on "
|
||||
"how the notes or notebooks were originally encrypted."
|
||||
msgstr ""
|
||||
"Note : seule une clef maître va être utilisée pour le cryptage (celle "
|
||||
"Note : seule une clef maître va être utilisée pour le chiffrement (celle "
|
||||
"marquée comme \"actif\" ci-dessus). N'importe quelle clef peut être utilisée "
|
||||
"pour le décryptage, selon la façon dont les notes ou carnets étaient cryptés "
|
||||
"à l'origine."
|
||||
"pour le déchiffrement, selon la façon dont les notes ou carnets étaient "
|
||||
"chiffrés à l'origine."
|
||||
|
||||
msgid "Missing Master Keys"
|
||||
msgstr "Clefs maître manquantes"
|
||||
@@ -831,7 +847,7 @@ msgid ""
|
||||
"however the application does not currently have access to them. It is likely "
|
||||
"they will eventually be downloaded via synchronisation."
|
||||
msgstr ""
|
||||
"Les clefs maître avec ces identifiants sont utilisées pour crypter certains "
|
||||
"Les clefs maître avec ces identifiants sont utilisées pour chiffrer certains "
|
||||
"de vos objets, cependant le logiciel n'y a pour l'instant pas accès. Il est "
|
||||
"probable qu'elle vont être prochainement disponible via la synchronisation."
|
||||
|
||||
@@ -839,14 +855,14 @@ msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
msgstr ""
|
||||
"Pour plus d'informations sur l'encryption de bout en bout, ainsi que des "
|
||||
"Pour plus d'informations sur le chiffrement de bout en bout, ainsi que des "
|
||||
"conseils pour l'activer, veuillez consulter la documentation :"
|
||||
|
||||
msgid "Status"
|
||||
msgstr "État"
|
||||
|
||||
msgid "Encryption is:"
|
||||
msgstr "Le cryptage est :"
|
||||
msgstr "Le chiffrement est :"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
@@ -895,7 +911,7 @@ msgid "View them now"
|
||||
msgstr "Les voir maintenant"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Certains objets ne peuvent être décryptés."
|
||||
msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Définir le mot de passe"
|
||||
@@ -903,6 +919,13 @@ 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"
|
||||
|
||||
@@ -925,15 +948,28 @@ msgstr ""
|
||||
"Il n'y a pour l'instant aucun carnet. Créez-en un en cliquant sur \"Nouveau "
|
||||
"carnet\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Ouvrir..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Ce fichier n'a pas pu être ouvert : %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Enregistrer sous..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr "Copier le chemin"
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copier l'adresse du lien"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Lien ou message non géré : %s"
|
||||
@@ -946,6 +982,18 @@ msgstr ""
|
||||
"Cette note n'a pas de contenu. Cliquer sur \"%s\" pour basculer vers "
|
||||
"l'éditeur et éditer cette note."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texte en gras"
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr "texte en italique"
|
||||
|
||||
msgid "List item"
|
||||
msgstr "Élément de liste"
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr "Insérer lien"
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Attacher un fichier"
|
||||
|
||||
@@ -955,6 +1003,40 @@ msgstr "Étiquettes"
|
||||
msgid "Set alarm"
|
||||
msgstr "Régler alarme"
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "Dans : %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Lien"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "Liste numérotée"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Liste à puces"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Case à cocher"
|
||||
|
||||
msgid "Heading"
|
||||
msgstr "Titre"
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr "Règle horizontale"
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr "Cliquez pour arrêter l'édition externe"
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr "En cours..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "tâche"
|
||||
|
||||
@@ -984,7 +1066,7 @@ msgid "Synchronisation Status"
|
||||
msgstr "État de la synchronisation"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr "Options de cryptage"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgstr "Options du Web Clipper"
|
||||
@@ -1122,25 +1204,30 @@ msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "La synchronisation est déjà en cours. État : %s"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Crypté"
|
||||
msgstr "Chiffré"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Les objets cryptés ne peuvent être modifiés"
|
||||
msgstr "Les objets chiffrés ne peuvent être modifiés"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflits"
|
||||
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Impossible de déplacer le carnet vers le carnet \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Un carnet avec ce titre existe déjà : \"%s\""
|
||||
msgstr "Impossible de déplacer le carnet à cet endroit"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Les carnets ne peuvent être nommés \"%s\" car c'est un nom réservé."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "date de modification"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "date de création"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sans titre"
|
||||
|
||||
@@ -1155,16 +1242,6 @@ msgstr "Impossible de copier la note vers le carnet \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Impossible de déplacer la note vers le carnet \"%s\""
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Éditeur de texte"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"L'éditeur de texte pour ouvrir et modifier les notes. Si aucun n'est "
|
||||
"spécifié, il sera détecté automatiquement."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
@@ -1211,11 +1288,14 @@ msgid "When creating a new note:"
|
||||
msgstr "Lors de la création d'une note :"
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afficher icône dans la zone de notifications"
|
||||
msgstr "Afficher l'icône dans la zone de notifications"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Note : Ne fonctionne pas dans tous les environnements de bureau."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Niveau de zoom"
|
||||
|
||||
@@ -1248,6 +1328,16 @@ msgstr "%d heure"
|
||||
msgid "%d hours"
|
||||
msgstr "%d heures"
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr "Commande de l'éditeur de texte"
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"La commande de l'éditeur de texte (peut inclure des options) pour ouvrir et "
|
||||
"modifier les notes. Si non-spécifiée, elle sera détectée automatiquement."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Montrer les options avancées"
|
||||
|
||||
@@ -1275,6 +1365,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud : URL WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
@@ -1290,10 +1387,32 @@ msgstr "WebDAV : Nom utilisateur"
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV : Mot de passe"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificats TLS personnalisés"
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
"Liste séparée par des virgules contenant les chemins des répertoires "
|
||||
"contenants des certificats, ou les chemins de certificats individuels. Par "
|
||||
"exemple : /my/cert_dir, /other/custom.pem. Remarquez que si vous changez les "
|
||||
"paramètres TLS, vous devez enregistrer vos changements avant de cliquer sur "
|
||||
"\"Vérifier config synchronisation\"."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer les erreurs de certificats TLS"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Fichier d'export Joplin"
|
||||
|
||||
@@ -1322,7 +1441,7 @@ msgid ""
|
||||
"This item is currently encrypted: %s \"%s\". Please wait for all items to be "
|
||||
"decrypted and try again."
|
||||
msgstr ""
|
||||
"Cet objet est crypté : %s \"%s\". Veuillez attendre que tout soit décrypté "
|
||||
"Cet objet est chiffré : %s \"%s\". Veuillez attendre que tout soit déchiffré "
|
||||
"et réessayez."
|
||||
|
||||
msgid "There is no data to export."
|
||||
@@ -1395,7 +1514,7 @@ msgid "Export Debug Report"
|
||||
msgstr "Exporter rapport de débogage"
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr "Config cryptage"
|
||||
msgstr "Config chiffrement"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configuration"
|
||||
@@ -1410,6 +1529,9 @@ msgstr "Déplacer %d notes vers carnet \"%s\" ?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Définir mot de passe de synchronisation."
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Enregistrer alarme"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Sélectionner date"
|
||||
|
||||
@@ -1419,6 +1541,10 @@ msgstr "Confirmer"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Annuler synchronisation"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Déchiffrement des objets : %d/%d"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nouvelles étiquettes :"
|
||||
|
||||
@@ -1553,12 +1679,15 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Un carnet avec ce titre existe déjà : \"%s\""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For more information about End-To-End Encryption (E2EE) and advices on "
|
||||
#~ "how to enable it please check the documentation"
|
||||
#~ msgstr ""
|
||||
#~ "Pour plus d'informations sur l'encryption de bout en bout, ainsi que des "
|
||||
#~ "conseils pour l'activer, veuillez consulter la documentation"
|
||||
#~ "Pour plus d'informations sur le chiffrement de bout en bout, ainsi que "
|
||||
#~ "des conseils pour l'activer, veuillez consulter la documentation"
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Recherches"
|
||||
|
@@ -455,10 +455,11 @@ msgstr "Iniciando sincronización..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Agarde."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> pode ser «add», «remove» ou «list» para asignar ou eliminar "
|
||||
"[tag] da [note] ou para listar as notas asociadas con [tag]. A orde «list» "
|
||||
@@ -619,6 +620,18 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas as notas"
|
||||
|
||||
@@ -690,7 +703,7 @@ msgstr "Si"
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -740,12 +753,15 @@ msgstr "Comprobar a configuración da sincronización"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "As notas e axustes gardáronse en: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gardar"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Gardar"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -882,6 +898,13 @@ 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"
|
||||
|
||||
@@ -902,15 +925,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Este no é un caderno. Cree un, premendo en «Novo caderno»."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir…"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Gardar como…"
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Ligazón ou mensaxe incompatíbeis: %s"
|
||||
@@ -923,6 +959,18 @@ msgstr ""
|
||||
"Esta nota non ten contido. Prema en «%s» para ir ao editor e modificar a "
|
||||
"nota."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Anexar un ficheiro"
|
||||
|
||||
@@ -932,6 +980,41 @@ msgstr "Etiquetas"
|
||||
msgid "Set alarm"
|
||||
msgstr "Estabelecer alarma"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Cancelando..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "tarefas pendentes"
|
||||
|
||||
@@ -1111,14 +1194,22 @@ msgstr "Conflitos"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Non é posíbel mover a nota ao caderno «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Xa existe un caderno con ese título: «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Os cadernos non poden levar o nome «%s» porque é un título reservado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Sen título"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Actualizado: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Creado: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sen título"
|
||||
|
||||
@@ -1133,16 +1224,6 @@ msgstr "Non é posíbel copiar a nota ao caderno «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Non é posíbel mover a nota ao caderno «%s»"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Editor de texto"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
|
||||
"automaticamente o editor predeterminado."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1195,6 +1276,9 @@ msgstr "Mostrar a icona na bandexa"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Porcentaxe de ampliación"
|
||||
|
||||
@@ -1227,6 +1311,18 @@ msgstr "%d hora"
|
||||
msgid "%d hours"
|
||||
msgstr "%d horas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Editor de texto"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
|
||||
"automaticamente o editor predeterminado."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opcións avanzadas"
|
||||
|
||||
@@ -1253,6 +1349,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
@@ -1268,10 +1371,27 @@ msgstr "Usuario de WebDAV"
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Ficheiro de exportación do Joplin"
|
||||
|
||||
@@ -1386,6 +1506,10 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Prema para estabelecer o contrasinal de descifrado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Estabelecer alarma"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Seleccionar data"
|
||||
|
||||
@@ -1395,6 +1519,10 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Etiquetas novas:"
|
||||
|
||||
@@ -1520,3 +1648,6 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Xa existe un caderno con ese título: «%s»"
|
||||
|
@@ -462,7 +462,7 @@ msgstr "Prekidam... Pričekaj."
|
||||
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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<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 "
|
||||
@@ -625,6 +625,18 @@ msgstr "Izreži"
|
||||
msgid "Paste"
|
||||
msgstr "Zalijepi"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pretraži u svim bilješkama"
|
||||
|
||||
@@ -699,7 +711,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "N"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -750,12 +762,15 @@ msgstr "Prekini sinkronizaciju"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Bilješke i postavke su pohranjene u: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Spremi"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Spremi"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -883,6 +898,13 @@ 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"
|
||||
|
||||
@@ -902,9 +924,19 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Ovdje nema bilježnica. Stvori novu pritiskom na \"Nova bilježnica\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save as..."
|
||||
msgstr "Spremi promjene"
|
||||
@@ -912,6 +944,9 @@ msgstr "Spremi promjene"
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodržana poveznica ili poruka: %s"
|
||||
@@ -922,6 +957,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Priloži datoteku"
|
||||
|
||||
@@ -931,6 +978,41 @@ msgstr "Oznake"
|
||||
msgid "Set alarm"
|
||||
msgstr "Postavi upozorenje"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Prekidam..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "to-do"
|
||||
msgstr "Novi zadatak"
|
||||
@@ -1111,14 +1193,22 @@ msgstr "Sukobi"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Bilježnica s ovim naslovom već postoji: \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Naslov \"%s\" je rezerviran i ne može se koristiti."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Ažurirano: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Stvoreno: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
@@ -1133,16 +1223,6 @@ msgstr "Ne mogu kopirati bilješku u bilježnicu %s"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Uređivač teksta"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
|
||||
"jedan nije odabran, pokušati će se sa default programom."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1200,6 +1280,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1229,6 +1312,18 @@ msgstr "%d sat"
|
||||
msgid "%d hours"
|
||||
msgstr "%d sati"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Uređivač teksta"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
|
||||
"jedan nije odabran, pokušati će se sa default programom."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Prikaži napredne opcije"
|
||||
|
||||
@@ -1253,6 +1348,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
@@ -1268,10 +1370,27 @@ msgstr ""
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
@@ -1384,6 +1503,10 @@ msgstr "Premjesti %d bilješke u bilježnicu \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Postavi upozorenje"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Odaberi datum"
|
||||
|
||||
@@ -1393,6 +1516,10 @@ msgstr "Potvrdi"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1520,6 +1647,9 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Bilježnica s ovim naslovom već postoji: \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Pretraživanja"
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -447,10 +447,11 @@ 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> は\"add\", \"remove\", \"list\"のいずれかで、指定したノートから"
|
||||
"タグをつけたり外したり出来ます。`tag list`で、すべてのタグを見ることが出来ま"
|
||||
@@ -612,6 +613,18 @@ msgstr "切り取り"
|
||||
msgid "Paste"
|
||||
msgstr "貼り付け"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "すべてのノートを検索"
|
||||
|
||||
@@ -685,7 +698,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -736,12 +749,15 @@ msgstr "同期の中止"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "ノートと設定は、%sに保存されます。"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -873,6 +889,13 @@ 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 "ノートとToDoを切り替え"
|
||||
|
||||
@@ -892,9 +915,19 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "ノートブックがありません。新しいノートブックを作成してください。"
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "ノートブックは保存できませんでした:%s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save as..."
|
||||
msgstr "変更を保存"
|
||||
@@ -902,6 +935,9 @@ msgstr "変更を保存"
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -912,6 +948,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "ファイルを添付"
|
||||
|
||||
@@ -921,6 +969,41 @@ msgstr "タグ"
|
||||
msgid "Set alarm"
|
||||
msgstr "アラームをセット"
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "中止中..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "to-do"
|
||||
msgstr "新しいToDo"
|
||||
@@ -1103,16 +1186,24 @@ msgstr "衝突"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "ノートをノートブック \"%s\"に移動できませんでした。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "\"%s\"という名前のノートブックはすでに存在しています。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"\"%s\"と言う名前はシステムで使用するために予約済みです。名前の変更が出来ませ"
|
||||
"ん。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "名称未設定"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "アップデートしました:%d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "作成しました:%d"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "名称未設定"
|
||||
|
||||
@@ -1127,16 +1218,6 @@ msgstr "ノートをノートブック \"%s\"にコピーできませんでし
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "ノートをノートブック \"%s\"に移動できませんでした。"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "テキストエディタ"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"ノートを開くために使用されるエディタです。特に指定がなければ、デフォルトのエ"
|
||||
"ディタの検出を試みます。"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "言語"
|
||||
|
||||
@@ -1194,6 +1275,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1223,6 +1307,18 @@ msgstr "%d 時間"
|
||||
msgid "%d hours"
|
||||
msgstr "%d 時間"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "テキストエディタ"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"ノートを開くために使用されるエディタです。特に指定がなければ、デフォルトのエ"
|
||||
"ディタの検出を試みます。"
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "詳細な設定の表示"
|
||||
|
||||
@@ -1247,6 +1343,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
@@ -1262,10 +1365,27 @@ msgstr ""
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Evernote Exportファイル"
|
||||
@@ -1378,6 +1498,10 @@ msgstr "%d個のノートを\"%s\"に移動しますか?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "アラームをセット"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "日付の選択"
|
||||
|
||||
@@ -1387,6 +1511,10 @@ msgstr "確認"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "同期の中止"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "ローカルアイテムの作成: %d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1516,6 +1644,9 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "ようこそ"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "\"%s\"という名前のノートブックはすでに存在しています。"
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "検索"
|
||||
|
||||
|
@@ -414,7 +414,7 @@ msgstr ""
|
||||
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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -552,6 +552,18 @@ msgstr ""
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -623,7 +635,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -673,12 +685,15 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -801,6 +816,13 @@ 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 ""
|
||||
|
||||
@@ -820,15 +842,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -839,6 +874,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr ""
|
||||
|
||||
@@ -848,6 +895,40 @@ msgstr ""
|
||||
msgid "Set alarm"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr ""
|
||||
|
||||
msgid "to-do"
|
||||
msgstr ""
|
||||
|
||||
@@ -1018,11 +1099,16 @@ msgid "Cannot move notebook to this location"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
@@ -1039,14 +1125,6 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1098,6 +1176,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1127,6 +1208,14 @@ msgstr ""
|
||||
msgid "%d hours"
|
||||
msgstr ""
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr ""
|
||||
|
||||
@@ -1149,6 +1238,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
@@ -1164,10 +1260,27 @@ msgstr ""
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr ""
|
||||
|
||||
@@ -1277,6 +1390,9 @@ msgstr ""
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1286,6 +1402,10 @@ msgstr ""
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
|
1644
CliClient/locales/ko.po
Normal file
1644
CliClient/locales/ko.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -459,10 +459,11 @@ msgstr "Synchronisatie starten..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annuleren.. Even geduld."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> kan \"add\", \"remove\" of \"list\" zijn om een [tag] toe te "
|
||||
"voegen aan een [note] of te verwijderen, of om alle notities geassocieerd "
|
||||
@@ -629,6 +630,18 @@ msgstr "Knip"
|
||||
msgid "Paste"
|
||||
msgstr "Plak"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Zoek in alle notities"
|
||||
|
||||
@@ -702,7 +715,7 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "N"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -753,12 +766,15 @@ msgstr "Annuleer synchronisatie"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen zijn opgeslaan in %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Sla op"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Sla op"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -897,6 +913,13 @@ 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"
|
||||
|
||||
@@ -918,9 +941,19 @@ msgstr ""
|
||||
"U heeft momenteel geen notitieboek. Maak een notitieboek door op \"Nieuw "
|
||||
"notitieboek\" te klikken."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save as..."
|
||||
msgstr "Sla wijzigingen op"
|
||||
@@ -928,6 +961,9 @@ msgstr "Sla wijzigingen op"
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Link of bericht \"%s\" wordt niet ondersteund"
|
||||
@@ -938,6 +974,18 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Voeg bestand toe"
|
||||
|
||||
@@ -947,6 +995,41 @@ msgstr "Tags"
|
||||
msgid "Set alarm"
|
||||
msgstr "Zet melding"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Annuleren..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "to-do"
|
||||
msgstr "Nieuwe to-do"
|
||||
@@ -1129,16 +1212,24 @@ msgstr "Conflicten"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Er bestaat al een notitieboek met \"%s\" als titel"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Notitieboeken kunnen niet \"%s\" genoemd worden, dit is een gereserveerd "
|
||||
"woord."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Untitled"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Bijgewerkt: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Aangemaakt: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Untitled"
|
||||
|
||||
@@ -1153,17 +1244,6 @@ msgstr "Kan notitie niet naar notitieboek \"%s\" kopiëren."
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Tekst editor"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"De editor die zal gebruikt worden bij het openen van een notitie. Als er "
|
||||
"geen meegegeven wordt, zal het programma de standaard editor proberen te "
|
||||
"detecteren. "
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1220,6 +1300,9 @@ msgstr ""
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1332,19 @@ msgstr "%d uur"
|
||||
msgid "%d hours"
|
||||
msgstr "%d uren"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Tekst editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"De editor die zal gebruikt worden bij het openen van een notitie. Als er "
|
||||
"geen meegegeven wordt, zal het programma de standaard editor proberen te "
|
||||
"detecteren. "
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Toon geavanceerde opties"
|
||||
|
||||
@@ -1273,6 +1369,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
@@ -1290,10 +1393,27 @@ msgstr ""
|
||||
msgid "WebDAV password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Exporteer Evernote bestanden"
|
||||
@@ -1410,6 +1530,10 @@ msgstr "Verplaats %d notities naar notitieboek \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klik om het decryptie wachtwoord in te stellen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Zet melding"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Selecteer datum"
|
||||
|
||||
@@ -1419,6 +1543,10 @@ msgstr "Bevestig"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Opgehaalde items: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1547,6 +1675,9 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Er bestaat al een notitieboek met \"%s\" als titel"
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Zoekopdrachten"
|
||||
|
||||
|
1682
CliClient/locales/nl_NL.po
Normal file
1682
CliClient/locales/nl_NL.po
Normal file
File diff suppressed because it is too large
Load Diff
1662
CliClient/locales/no.po
Normal file
1662
CliClient/locales/no.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -246,9 +246,8 @@ msgstr ""
|
||||
"Use as setas e a Page Up/Page Down para rolar as listas e áreas de texto "
|
||||
"(incluindo este console)."
|
||||
|
||||
#, fuzzy
|
||||
msgid "To maximise/minimise the console, press \"tc\"."
|
||||
msgstr "Para maximizar / minimizar o console, pressione \"TC\"."
|
||||
msgstr "Para maximizar / minimizar o console, pressione \"tc\"."
|
||||
|
||||
msgid "To enter command line mode, press \":\""
|
||||
msgstr "Para entrar no modo de linha de comando, pressione \":\""
|
||||
@@ -363,12 +362,11 @@ msgstr "Exclui o caderno informado."
|
||||
msgid "Deletes the notebook without asking for confirmation."
|
||||
msgstr "Exclui o caderno sem pedir confirmação."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Delete notebook? All notes and sub-notebooks within this notebook will also "
|
||||
"be deleted."
|
||||
msgstr ""
|
||||
"Excluir o caderno? Todas as notas deste caderno notebook também serão "
|
||||
"Excluir o caderno? Todas as notas e sub-cadernos dentro deste também serão "
|
||||
"excluídas."
|
||||
|
||||
msgid "Deletes the notes matching <note-pattern>."
|
||||
@@ -459,10 +457,11 @@ msgstr "Iniciando sincronização..."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Aguarde."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> pode ser \"add\", \"remove\" ou \"list\" para atribuir ou "
|
||||
"remover [tag] de [nota], ou para listar as notas associadas a [tag]. O "
|
||||
@@ -626,6 +625,18 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Colar"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Negrito"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Itálico"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserir Data e Hora"
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "Editar com editor externo"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pesquisar em todas as notas"
|
||||
|
||||
@@ -633,7 +644,7 @@ msgid "View"
|
||||
msgstr "Visualizar"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
msgstr "Alternar barra lateral"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Alternar layout do editor"
|
||||
@@ -645,7 +656,7 @@ msgid "Synchronisation status"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
msgstr "Opções do Web clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opções de Encriptação"
|
||||
@@ -697,48 +708,54 @@ msgstr "Sim"
|
||||
msgid "No"
|
||||
msgstr "Não"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"O serviço de web clipper está habilitado e configurado para auto-start."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
msgstr ""
|
||||
msgstr "Status: Iniciado, na porta %d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Status: %s"
|
||||
msgstr "Estado: \"%s\"."
|
||||
msgstr "Status: \"%s\"."
|
||||
|
||||
msgid "Disable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Desabilitar serviço Web Clipper"
|
||||
|
||||
msgid "The web clipper service is not enabled."
|
||||
msgstr ""
|
||||
msgstr "O serviço de web clipper não está habilitado."
|
||||
|
||||
msgid "Enable Web Clipper Service"
|
||||
msgstr ""
|
||||
msgstr "Habilitar serviço Web Clipper"
|
||||
|
||||
msgid ""
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
|
||||
"to Joplin."
|
||||
msgstr ""
|
||||
"O serviço de Web Clipper do Joplin permite salvar páginas da web e "
|
||||
"screenshots do seu browser, no Joplin."
|
||||
|
||||
msgid "In order to use the web clipper, you need to do the following:"
|
||||
msgstr ""
|
||||
msgstr "Para usar o web clipper, você precisa fazer o seguinte:"
|
||||
|
||||
msgid "Step 1: Enable the clipper service"
|
||||
msgstr ""
|
||||
msgstr "Passo 1: Habilitar o serviço do clipper"
|
||||
|
||||
msgid ""
|
||||
"This service allows the browser extension to communicate with Joplin. When "
|
||||
"enabling it your firewall may ask you to give permission to Joplin to listen "
|
||||
"to a particular port."
|
||||
msgstr ""
|
||||
"Este serviço permite a extensão do browser se comunicat com o Joplin. Quando "
|
||||
"habilitar, talvez seu firewall peça que você conceda permissão ao Joplin "
|
||||
"para escutar determinada porta."
|
||||
|
||||
msgid "Step 2: Install the extension"
|
||||
msgstr ""
|
||||
msgstr "Passo 2: Instalar a extensão"
|
||||
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
msgstr "Baixe e instale a extensão relevante para seu browser:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
@@ -747,12 +764,15 @@ msgstr "Verificar a configuração da sincronização"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notas e configurações estão armazenadas em: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -864,9 +884,8 @@ msgstr "Separe cada tag por vírgula."
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Rename tag:"
|
||||
msgstr "Renomear"
|
||||
msgstr "Renomear tag:"
|
||||
|
||||
msgid "Set alarm:"
|
||||
msgstr "Definir alarme:"
|
||||
@@ -892,12 +911,18 @@ 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"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
@@ -912,14 +937,27 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Atualmente, não há cadernos. Crie um, clicando em \"Novo caderno\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Este arquivo não pôde ser aberto: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Salvar como..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
msgstr "Copiar caminho para a área de transferência"
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copiar endereço do link"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -933,6 +971,18 @@ msgstr ""
|
||||
"Esta nota não possui conteúdo. Clique em \"%s\" para alternar para o editor, "
|
||||
"e edite a nota."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto forte"
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr "texto enfatizado"
|
||||
|
||||
msgid "List item"
|
||||
msgstr "Listar item"
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr "Inserir Hiperlink"
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Anexar arquivo"
|
||||
|
||||
@@ -942,6 +992,40 @@ msgstr "Tags"
|
||||
msgid "Set alarm"
|
||||
msgstr "Definir alarme"
|
||||
|
||||
#, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "Em: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hiperlink"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "Lista numerada"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Lista com bullets"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Checkbox"
|
||||
|
||||
msgid "Heading"
|
||||
msgstr "Cabeçalho"
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr "Régua horizontal"
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr "Clique para encerrar edição externa"
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr "Verificando..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "tarefa"
|
||||
|
||||
@@ -973,9 +1057,8 @@ msgstr "Status de sincronização"
|
||||
msgid "Encryption Options"
|
||||
msgstr "Opções de Encriptação"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opções Gerais"
|
||||
msgstr "Opções do clipper"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Remover esta tag de todas as notas?"
|
||||
@@ -1119,19 +1202,23 @@ msgstr "Itens encriptados não podem ser modificados"
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitos"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Não é possível mover a nota para o caderno \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Já existe caderno com este título: \"%s\""
|
||||
msgstr "Não é possível mover a nota para este local"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Os cadernos não podem ser nomeados como\"%s\", que é um título reservado."
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data de ataualização"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de criação"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sem título"
|
||||
|
||||
@@ -1146,16 +1233,6 @@ msgstr "Não é possível copiar a nota para o caderno \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Não é possível mover a nota para o caderno \"%s\""
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Editor de texto"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"O editor que será usado para abrir uma nota. Se nenhum for indicado, ele "
|
||||
"tentará detectar automaticamente o editor padrão."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1177,9 +1254,8 @@ msgstr "Dark"
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "Mostrar tarefas incompletas no topo"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show completed to-dos"
|
||||
msgstr "Mostrar tarefas incompletas no topo"
|
||||
msgstr "Mostrar tarefas completas"
|
||||
|
||||
msgid "Sort notes by"
|
||||
msgstr "Ordenar notas por"
|
||||
@@ -1206,6 +1282,9 @@ msgid "Show tray icon"
|
||||
msgstr "Exibir tray icon"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: não funciona em todos os ambientes de desktop"
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
@@ -1214,13 +1293,12 @@ msgstr "Porcentagem global do zoom"
|
||||
msgid "Editor font family"
|
||||
msgstr "Família de fontes do editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
"incorrect or empty, it will default to a generic monospace font."
|
||||
msgstr ""
|
||||
"O nomes da fonte não será verificado. Se estiver incorreto ou vazio, será "
|
||||
"usado por default uma fonte genérica monospace."
|
||||
"Deve ser uma fonte *monospace\" ou não vai funcionar direito. Se a fonte "
|
||||
"estiver incorreta ou vazia, será usada uma fonte genérica monospace default."
|
||||
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Atualizar automaticamente o aplicativo"
|
||||
@@ -1240,6 +1318,17 @@ msgstr "%d hora"
|
||||
msgid "%d hours"
|
||||
msgstr "%d horas"
|
||||
|
||||
msgid "Text editor command"
|
||||
msgstr "Comando do editor de texto"
|
||||
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"O comando do editor (pode incluir argumentos) que será usado para abrir uma "
|
||||
"nota. Se nenhum for indicado, ele tentará detectar automaticamente o editor "
|
||||
"padrão."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opções avançadas"
|
||||
|
||||
@@ -1266,6 +1355,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuário da Nextcloud"
|
||||
|
||||
@@ -1281,10 +1377,32 @@ msgstr "Usuário do WebDAV"
|
||||
msgid "WebDAV password"
|
||||
msgstr "Senha do WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificados TLS customizados"
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
"Lista de caminhos para diretórios, separados por vírgula, de onde carregar "
|
||||
"os certificados, ou caminhos para arquivos cert. Por exemplo, /my/cert_dir, /"
|
||||
"other/custom.pem. Note que se você fizer mudanças nas configurações de TLS, "
|
||||
"você tem que salvar as mudanças antes de clicar em \"Verificar a "
|
||||
"configuração da sincronização\""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar erros de certificados TLS"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Arquivo de Exportação do Joplin"
|
||||
|
||||
@@ -1400,6 +1518,9 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Pressione para configurar a senha de decriptação."
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Salvar alarme"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Selecionar data"
|
||||
|
||||
@@ -1409,6 +1530,10 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronização"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Decriptando itens: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Novas tags:"
|
||||
|
||||
@@ -1419,17 +1544,24 @@ msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
msgstr ""
|
||||
"Para funcionar corretamente, o app precisa das seguintes permissões. Por "
|
||||
"favor, habilite-as nas configurações do seu telefone, em Apps >Joplin > "
|
||||
"Permissões"
|
||||
|
||||
msgid ""
|
||||
"- Storage: to allow attaching files to notes and to enable filesystem "
|
||||
"synchronisation."
|
||||
msgstr ""
|
||||
"- Armazenamento: para permitir anexar arquivos a notas, e para permitir a "
|
||||
"sincronização do sistema de arquivos "
|
||||
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
msgstr ""
|
||||
msgstr "- Câmera: para permitir tirar fotos e anexar a uma nota."
|
||||
|
||||
msgid "- Location: to allow attaching geo-location information to a note."
|
||||
msgstr ""
|
||||
"- Localização: para permitir anexar informações de geo-localização a uma "
|
||||
"nota."
|
||||
|
||||
msgid "Joplin website"
|
||||
msgstr "Site do Joplin"
|
||||
@@ -1478,11 +1610,11 @@ msgstr "Descartar alterações"
|
||||
|
||||
#, javascript-format
|
||||
msgid "No item with ID %s"
|
||||
msgstr ""
|
||||
msgstr "Nenhum item com ID %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
msgstr "O app mobile do Joplin não suporta, atualmente, esse tipo de link: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
@@ -1495,7 +1627,7 @@ msgid "Attach any file"
|
||||
msgstr "Anexar qualquer arquivo"
|
||||
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
msgstr "Compartilhar"
|
||||
|
||||
msgid "Convert to note"
|
||||
msgstr "Converter para nota"
|
||||
@@ -1534,6 +1666,9 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Já existe caderno com este título: \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Pesquisas"
|
||||
|
||||
|
1549
CliClient/locales/ro.po
Normal file
1549
CliClient/locales/ro.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -459,10 +459,11 @@ 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> может быть «add», «remove» или «list», чтобы назначить или "
|
||||
"убрать [tag] с [note], или чтобы вывести список заметок, ассоциированых с "
|
||||
@@ -626,6 +627,18 @@ msgstr "Вырезать"
|
||||
msgid "Paste"
|
||||
msgstr "Вставить"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Поиск во всех заметках"
|
||||
|
||||
@@ -697,7 +710,7 @@ msgstr "Да"
|
||||
msgid "No"
|
||||
msgstr "Нет"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -747,12 +760,15 @@ msgstr "Проверить настройки синхронизации"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Заметки и настройки сохранены в: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -892,6 +908,13 @@ 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 "Переключить тип между заметкой и задачей"
|
||||
|
||||
@@ -912,15 +935,28 @@ msgid ""
|
||||
"There is currently no notebook. Create one by clicking on \"New notebook\"."
|
||||
msgstr "Сейчас здесь нет блокнотов. Создайте новый нажав «Новый блокнот»."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Открыть..."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Не удалось сохранить блокнот: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Сохранить как..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Неподдерживаемая ссыка или сообщение: %s"
|
||||
@@ -933,6 +969,18 @@ msgstr ""
|
||||
"Заметка пуста. Нажмите на «%s», чтобы переключиться в редактор и "
|
||||
"отредактировать её."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Прикрепить файл"
|
||||
|
||||
@@ -942,6 +990,41 @@ msgstr "Теги"
|
||||
msgid "Set alarm"
|
||||
msgstr "Установить напоминание"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "Отмена..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "задача"
|
||||
|
||||
@@ -1121,14 +1204,22 @@ msgstr "Конфликты"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Не удалось переместить заметку в блокнот «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Блокнот с таким названием уже существует: «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Блокнот не может быть назван «%s», это зарезервированное название."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Без имени"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Обновлено: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Создано: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Без имени"
|
||||
|
||||
@@ -1143,16 +1234,6 @@ msgstr "Не удалось скопировать заметку в блокн
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Не удалось переместить заметку в блокнот «%s»"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Текстовый редактор"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Редактор, в котором будут открываться заметки. Если не задан, будет "
|
||||
"произведена попытка автоматического определения редактора по умолчанию."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
@@ -1205,6 +1286,9 @@ msgstr "Показывать иконку в панели задач"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Глобальный масштаб в процентах"
|
||||
|
||||
@@ -1237,6 +1321,18 @@ msgstr "%d час"
|
||||
msgid "%d hours"
|
||||
msgstr "%d часов"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Текстовый редактор"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Редактор, в котором будут открываться заметки. Если не задан, будет "
|
||||
"произведена попытка автоматического определения редактора по умолчанию."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Показывать расширенные настройки"
|
||||
|
||||
@@ -1263,6 +1359,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Имя пользователя Nextcloud"
|
||||
|
||||
@@ -1278,10 +1381,27 @@ msgstr "Имя пользователя WebDAV"
|
||||
msgid "WebDAV password"
|
||||
msgstr "Пароль WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Неверное значение параметра: «%s». Доступные значения: %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Файл экспорта Joplin"
|
||||
|
||||
@@ -1397,6 +1517,10 @@ msgstr "Переместить %d заметок в блокнот «%s»?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Нажмите, чтобы установить пароль для расшифровки."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Установить напоминание"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Выбрать дату"
|
||||
|
||||
@@ -1406,6 +1530,10 @@ msgstr "Подтвердить"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Отменить синхронизацию"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Получено элементов: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1532,6 +1660,9 @@ msgstr "У вас сейчас нет блокнота. Создайте его
|
||||
msgid "Welcome"
|
||||
msgstr "Добро пожаловать"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Блокнот с таким названием уже существует: «%s»"
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Запросы"
|
||||
|
||||
|
@@ -458,10 +458,11 @@ msgstr "Sinhronizacija se začenja."
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "V preklicu...Prosim počakajte."
|
||||
|
||||
#, 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 "
|
||||
"`tag list` can be used to list all the tags."
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> je lahko \"dodaj\", \"odstrani\" ali \"naštej\", da dodeliš "
|
||||
"ali odstraniš [tag] from [note] ali našteje zabeležke povezane z oznako "
|
||||
@@ -625,6 +626,18 @@ msgstr "Izreži"
|
||||
msgid "Paste"
|
||||
msgstr "Prilepi"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Išči znotraj vseh zabeležk"
|
||||
|
||||
@@ -696,7 +709,7 @@ msgstr "Da"
|
||||
msgid "No"
|
||||
msgstr "Ne"
|
||||
|
||||
msgid "The web clipper service is already enabled and set to auto-start."
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -746,12 +759,15 @@ msgstr "Preveri nastavitve sinhronizacije"
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Zabeležke in nastavitve so shranjene v: %s"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Shrani"
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Shrani"
|
||||
|
||||
msgid ""
|
||||
"Disabling encryption means *all* your notes and attachments are going to be "
|
||||
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
|
||||
@@ -892,6 +908,13 @@ 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"
|
||||
|
||||
@@ -916,15 +939,28 @@ msgstr ""
|
||||
"Trenutno ni tukaj nobene beležnice. Ustvarite jo z klikom na \"Nova beležnica"
|
||||
"\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Odpri..."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
msgid "Save as..."
|
||||
msgstr "Shrani kot..."
|
||||
|
||||
msgid "Copy path to clipboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodprta povezava ali sporočilo: %s"
|
||||
@@ -937,6 +973,18 @@ msgstr ""
|
||||
"Ta zabeležka nima vsebine. Kliknite na \"%s\" da menjate med urejevalnikom "
|
||||
"in urejanje zabeležke."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
msgid "emphasized text"
|
||||
msgstr ""
|
||||
|
||||
msgid "List item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach file"
|
||||
msgstr "Pripni datoteko"
|
||||
|
||||
@@ -946,6 +994,41 @@ msgstr "Oznake"
|
||||
msgid "Set alarm"
|
||||
msgstr "Nastavi alarm"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Heading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Click to stop external editing"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Watching..."
|
||||
msgstr "V preklicu..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "seznam opravil"
|
||||
|
||||
@@ -1125,14 +1208,22 @@ msgstr "Konfikti"
|
||||
msgid "Cannot move notebook to this location"
|
||||
msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
|
||||
|
||||
#, javascript-format
|
||||
msgid "A notebook with this title already exists: \"%s\""
|
||||
msgstr "Beležnica s tem naslovom že obstaja: \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Beležnica ne more biti imenovana \"%s\", ker je to rezerviran naslov."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Posodobljeno: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Ustvarjeno: %d."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
@@ -1147,16 +1238,6 @@ msgstr "Ni moč kopirati zabeležke v \"%s\" beležnico"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
|
||||
|
||||
msgid "Text editor"
|
||||
msgstr "Urejevalnik besedila"
|
||||
|
||||
msgid ""
|
||||
"The editor that will be used to open a note. If none is provided it will try "
|
||||
"to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Urejevalnik, ki bo uporabljen za odpiranje zabeležk. Če noben ni izbran, bo "
|
||||
"avtomatsko zaznan privzeti urejevalnik."
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1209,6 +1290,9 @@ msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Celokupen procent povečave"
|
||||
|
||||
@@ -1241,6 +1325,18 @@ msgstr "Števil ur: %d"
|
||||
msgid "%d hours"
|
||||
msgstr "Število ur: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Text editor command"
|
||||
msgstr "Urejevalnik besedila"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The editor command (may include arguments) that will be used to open a note. "
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
"Urejevalnik, ki bo uporabljen za odpiranje zabeležk. Če noben ni izbran, bo "
|
||||
"avtomatsko zaznan privzeti urejevalnik."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Pokaži napredne možnosti"
|
||||
|
||||
@@ -1267,6 +1363,13 @@ msgstr ""
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uporabniško ime"
|
||||
|
||||
@@ -1282,10 +1385,27 @@ msgstr "WebDAV uporabniško ime"
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV geslo"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Comma-separated list of paths to directories to load the certificates from, "
|
||||
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
|
||||
"pem. Note that if you make changes to the TLS settings, you must save your "
|
||||
"changes before clicking on \"Check synchronisation configuration\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Joplin izvozna datoteka"
|
||||
|
||||
@@ -1400,6 +1520,10 @@ msgstr "Premakni %d zabeležk v beležnico \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klikni za nastavitev dekripcijskega gesla."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Nastavi alarm"
|
||||
|
||||
msgid "Select date"
|
||||
msgstr "Izberi datum"
|
||||
|
||||
@@ -1409,6 +1533,10 @@ msgstr "Potrdi"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Prekliči sinhronizacijo"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Preneseni predmeti: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1535,5 +1663,8 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Beležnica s tem naslovom že obstaja: \"%s\""
|
||||
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Iskalni niz"
|
||||
|
1686
CliClient/locales/sv.po
Normal file
1686
CliClient/locales/sv.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1602
CliClient/locales/zh_TW.po
Normal file
1602
CliClient/locales/zh_TW.po
Normal file
File diff suppressed because it is too large
Load Diff
1046
CliClient/package-lock.json
generated
1046
CliClient/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.107",
|
||||
"version": "1.0.114",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@@ -38,8 +38,8 @@
|
||||
"html-entities": "^1.2.1",
|
||||
"html-minifier": "^3.5.15",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.3",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.2",
|
||||
"joplin-turndown": "^4.0.8",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"jssha": "^2.3.0",
|
||||
"levenshtein": "^1.0.5",
|
||||
"lodash": "^4.17.4",
|
||||
@@ -58,10 +58,11 @@
|
||||
"server-destroy": "^1.0.1",
|
||||
"sharp": "^0.18.4",
|
||||
"sprintf-js": "^1.1.1",
|
||||
"sqlite3": "^3.1.8",
|
||||
"sqlite3": "^4.0.1",
|
||||
"string-padding": "^1.0.2",
|
||||
"string-to-stream": "^1.1.0",
|
||||
"strip-ansi": "^4.0.0",
|
||||
"syswide-cas": "^5.2.0",
|
||||
"tar": "^4.4.0",
|
||||
"tcp-port-used": "^0.1.2",
|
||||
"tkwidgets": "^0.5.26",
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
START_DIR="$(pwd)"
|
||||
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
BUILD_DIR="$ROOT_DIR/tests-build"
|
||||
TEST_FILE="$1"
|
||||
@@ -13,15 +14,23 @@ if [[ $TEST_FILE != "" ]]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
(cd "$ROOT_DIR" && npm test tests-build/ArrayUtils.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/encryption.js
|
||||
(cd "$ROOT_DIR" && npm test tests-build/EnexToMd.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/HtmlToMd.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/markdownUtils.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/models_Folder.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/models_Note.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/models_Setting.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/services_InteropService.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/services_ResourceService.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/synchronizer.js)
|
||||
(cd "$ROOT_DIR" && npm test tests-build/urlUtils.js)
|
||||
function finish {
|
||||
cd "$START_DIR"
|
||||
}
|
||||
|
||||
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_Folder.js
|
||||
npm test tests-build/models_Note.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/models_Setting.js
|
||||
npm test tests-build/services_InteropService.js
|
||||
npm test tests-build/services_ResourceService.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
@@ -36,7 +36,7 @@ describe('HtmlToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'table_with_colspan.html') continue;
|
||||
// if (htmlFilename !== 'code_1.html') continue;
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
const expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
8
CliClient/tests/html_to_md/code_1.html
Normal file
8
CliClient/tests/html_to_md/code_1.html
Normal file
@@ -0,0 +1,8 @@
|
||||
<div>
|
||||
<table><tbody><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> ma_fonction<span style="color: black;">(</span><span style="color: black;">)</span>:
|
||||
<span style="color: #483d8b;">"""
|
||||
C'est une super fonction
|
||||
"""</span>
|
||||
<span style="color: #ff7700;font-weight:bold;">pass</span></pre></td></tr></tbody></table>
|
||||
|
||||
</div>
|
5
CliClient/tests/html_to_md/code_1.md
Normal file
5
CliClient/tests/html_to_md/code_1.md
Normal file
@@ -0,0 +1,5 @@
|
||||
def ma_fonction():
|
||||
"""
|
||||
C'est une super fonction
|
||||
"""
|
||||
pass
|
5
CliClient/tests/html_to_md/text_with_escaped_html.html
Normal file
5
CliClient/tests/html_to_md/text_with_escaped_html.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<p>Some text, not an image, so it should remain escaped:</p>
|
||||
<p><img src="http://test.com/image.png" /></p>
|
||||
<p><p class="testing">Paragraph example</p>
|
||||
<p>But this is code so it can be unescaped:</p>
|
||||
<pre><code><img src="http://test.com/image.png" /></code></pre>
|
9
CliClient/tests/html_to_md/text_with_escaped_html.md
Normal file
9
CliClient/tests/html_to_md/text_with_escaped_html.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Some text, not an image, so it should remain escaped:
|
||||
|
||||
<img src="http://test.com/image.png" />
|
||||
|
||||
<p class="testing">Paragraph example</p>
|
||||
|
||||
But this is code so it can be unescaped:
|
||||
|
||||
<img src="http://test.com/image.png" />
|
45
CliClient/tests/models_Tag.js
Normal file
45
CliClient/tests/models_Tag.js
Normal file
@@ -0,0 +1,45 @@
|
||||
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 Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('models_Tag', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should add tags by title', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
|
||||
await Tag.setNoteTagsByTitles(note1.id, ['un', 'deux']);
|
||||
|
||||
const noteTags = await Tag.tagsByNoteId(note1.id);
|
||||
expect(noteTags.length).toBe(2);
|
||||
}));
|
||||
|
||||
it('should not allow renaming tag to existing tag names', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
|
||||
await Tag.setNoteTagsByTitles(note1.id, ['un', 'deux']);
|
||||
|
||||
const tagUn = await Tag.loadByTitle('un');
|
||||
const hasThrown = await checkThrowAsync(async () => await Tag.save({ id: tagUn.id, title: 'deux' }, { userSideValidation: true }));
|
||||
|
||||
expect(hasThrown).toBe(true);
|
||||
}));
|
||||
|
||||
});
|
@@ -13,6 +13,8 @@ const ArrayUtils = require('lib/ArrayUtils');
|
||||
const ObjectUtils = require('lib/ObjectUtils');
|
||||
const { shim } = require('lib/shim.js');
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
@@ -249,6 +251,41 @@ describe('services_InteropService', function() {
|
||||
expect(folder2.title).toBe('folder1');
|
||||
}));
|
||||
|
||||
it('should export and import folder and its sub-folders', asyncTest(async () => {
|
||||
|
||||
const service = new InteropService();
|
||||
const filePath = exportDir() + '/test.jex';
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let folder2 = await Folder.save({ title: "folder2", parent_id: folder1.id });
|
||||
let folder3 = await Folder.save({ title: "folder3", parent_id: folder2.id });
|
||||
let folder4 = await Folder.save({ title: "folder4", parent_id: folder2.id });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder4.id });
|
||||
|
||||
await service.export({ path: filePath, sourceFolderIds: [folder1.id] });
|
||||
|
||||
await Note.delete(note1.id);
|
||||
await Folder.delete(folder1.id);
|
||||
await Folder.delete(folder2.id);
|
||||
await Folder.delete(folder3.id);
|
||||
await Folder.delete(folder4.id);
|
||||
|
||||
await service.import({ path: filePath });
|
||||
|
||||
expect(await Note.count()).toBe(1);
|
||||
expect(await Folder.count()).toBe(4);
|
||||
|
||||
let folder1_2 = await Folder.loadByTitle('folder1');
|
||||
let folder2_2 = await Folder.loadByTitle('folder2');
|
||||
let folder3_2 = await Folder.loadByTitle('folder3');
|
||||
let folder4_2 = await Folder.loadByTitle('folder4');
|
||||
let note1_2 = await Note.loadByTitle('ma note');
|
||||
|
||||
expect(folder2_2.parent_id).toBe(folder1_2.id);
|
||||
expect(folder3_2.parent_id).toBe(folder2_2.id);
|
||||
expect(folder4_2.parent_id).toBe(folder2_2.id);
|
||||
expect(note1_2.parent_id).toBe(folder4_2.id);
|
||||
}));
|
||||
|
||||
it('should export and import links to notes', asyncTest(async () => {
|
||||
const service = new InteropService();
|
||||
const filePath = exportDir() + '/test.jex';
|
||||
|
@@ -96,4 +96,14 @@ describe('services_ResourceService', function() {
|
||||
expect(!!(await Resource.load(resource1.id))).toBe(true);
|
||||
}));
|
||||
|
||||
it('should not delete a resource that has never been associated with any note, because it probably means the resource came via sync, and associated note has not arrived yet', asyncTest(async () => {
|
||||
const service = new ResourceService();
|
||||
const resource = await shim.createResourceFromPath(__dirname + '/../tests/support/photo.jpg');
|
||||
|
||||
await service.indexNoteResources();
|
||||
await service.deleteOrphanResources(0);
|
||||
|
||||
expect((await Resource.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
});
|
@@ -56,8 +56,8 @@ SyncTargetRegistry.addClass(SyncTargetOneDrive);
|
||||
SyncTargetRegistry.addClass(SyncTargetNextcloud);
|
||||
SyncTargetRegistry.addClass(SyncTargetDropbox);
|
||||
|
||||
const syncTargetId_ = SyncTargetRegistry.nameToId("nextcloud");
|
||||
// const syncTargetId_ = SyncTargetRegistry.nameToId("memory");
|
||||
// const syncTargetId_ = SyncTargetRegistry.nameToId("nextcloud");
|
||||
const syncTargetId_ = SyncTargetRegistry.nameToId("memory");
|
||||
//const syncTargetId_ = SyncTargetRegistry.nameToId('filesystem');
|
||||
// const syncTargetId_ = SyncTargetRegistry.nameToId('dropbox');
|
||||
const syncDir = __dirname + '/../tests/sync';
|
||||
|
@@ -1,14 +1,26 @@
|
||||
let browser_ = null;
|
||||
let browserName_ = null;
|
||||
if (typeof browser !== 'undefined') {
|
||||
browser_ = browser;
|
||||
browserSupportsPromises_ = true;
|
||||
browserName_ = 'firefox';
|
||||
} else if (typeof chrome !== 'undefined') {
|
||||
browser_ = chrome;
|
||||
browserSupportsPromises_ = false;
|
||||
browserName_ = 'chrome';
|
||||
}
|
||||
|
||||
function env() {
|
||||
return !('update_url' in browser_.runtime.getManifest()) ? 'dev' : 'prod';
|
||||
let env_ = null;
|
||||
|
||||
// Make this function global so that it can be accessed
|
||||
// from the popup too.
|
||||
// https://stackoverflow.com/questions/6323184/communication-between-background-page-and-popup-page-in-a-chrome-extension
|
||||
window.joplinEnv = function() {
|
||||
if (env_) return env_;
|
||||
|
||||
const manifest = browser_.runtime.getManifest();
|
||||
env_ = manifest.name.indexOf('[DEV]') >= 0 ? 'dev' : 'prod';
|
||||
return env_;
|
||||
}
|
||||
|
||||
async function browserCaptureVisibleTabs(windowId, options) {
|
||||
@@ -21,28 +33,47 @@ async function browserCaptureVisibleTabs(windowId, options) {
|
||||
});
|
||||
}
|
||||
|
||||
browser_.runtime.onInstalled.addListener(function() {
|
||||
if (env() === 'dev') {
|
||||
async function browserGetZoom(tabId) {
|
||||
if (browserSupportsPromises_) return browser_.tabs.getZoom(tabId);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
browser_.tabs.getZoom(tabId, (zoom) => {
|
||||
resolve(zoom);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
browser_.runtime.onInstalled.addListener(function(details) {
|
||||
if (window.joplinEnv() === 'dev') {
|
||||
browser_.browserAction.setIcon({
|
||||
path: 'icons/32-dev.png',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
browser_.runtime.onMessage.addListener((command) => {
|
||||
browser_.runtime.onMessage.addListener(async (command) => {
|
||||
if (command.name === 'screenshotArea') {
|
||||
browserCaptureVisibleTabs(null, { format: 'jpeg' }).then((imageDataUrl) => {
|
||||
content = Object.assign({}, command.content);
|
||||
content.imageDataUrl = imageDataUrl;
|
||||
|
||||
fetch(command.apiBaseUrl + "/notes", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(content)
|
||||
});
|
||||
const zoom = await browserGetZoom();
|
||||
|
||||
const imageDataUrl = await browserCaptureVisibleTabs(null, { format: 'jpeg' });
|
||||
content = Object.assign({}, command.content);
|
||||
content.image_data_url = imageDataUrl;
|
||||
|
||||
const newArea = Object.assign({}, command.content.crop_rect);
|
||||
newArea.x *= zoom;
|
||||
newArea.y *= zoom;
|
||||
newArea.width *= zoom;
|
||||
newArea.height *= zoom;
|
||||
content.crop_rect = newArea;
|
||||
|
||||
fetch(command.api_base_url + "/notes", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(content)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@@ -38,7 +38,7 @@
|
||||
const node = childNodes[i];
|
||||
|
||||
let isVisible = node.nodeType === 1 ? window.getComputedStyle(node).display !== 'none' : true;
|
||||
if (isVisible && ['input', 'textarea', 'script', 'style', 'select', 'option', 'button'].indexOf(node.nodeName.toLowerCase()) >= 0) isVisible = false;
|
||||
if (isVisible && ['input', 'textarea', 'script', 'noscript', 'style', 'select', 'option', 'button'].indexOf(node.nodeName.toLowerCase()) >= 0) isVisible = false;
|
||||
|
||||
if (!isVisible) {
|
||||
element.removeChild(node);
|
||||
@@ -74,6 +74,17 @@
|
||||
async function prepareCommandResponse(command) {
|
||||
console.info('Got command: ' + command.name);
|
||||
|
||||
const clippedContentResponse = (title, html) => {
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
title: title,
|
||||
html: html,
|
||||
base_url: baseUrl(),
|
||||
url: location.origin + location.pathname,
|
||||
parent_id: command.parent_id,
|
||||
};
|
||||
}
|
||||
|
||||
if (command.name === "simplifiedPageHtml") {
|
||||
|
||||
let article = null;
|
||||
@@ -87,29 +98,20 @@
|
||||
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
|
||||
return response;
|
||||
}
|
||||
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
html: article.body,
|
||||
title: article.title,
|
||||
baseUrl: baseUrl(),
|
||||
url: location.origin + location.pathname,
|
||||
parentId: command.parentId,
|
||||
};
|
||||
return clippedContentResponse(article.title, article.body);
|
||||
|
||||
} else if (command.name === "completePageHtml") {
|
||||
|
||||
const cleanDocument = document.body.cloneNode(true);
|
||||
cleanUpElement(cleanDocument);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML);
|
||||
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
html: cleanDocument.innerHTML,
|
||||
title: pageTitle(),
|
||||
baseUrl: baseUrl(),
|
||||
url: location.origin + location.pathname,
|
||||
parentId: command.parentId,
|
||||
};
|
||||
} 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);
|
||||
|
||||
} else if (command.name === 'screenshot') {
|
||||
|
||||
@@ -199,6 +201,8 @@
|
||||
document.body.removeChild(selection);
|
||||
document.body.removeChild(messageComp);
|
||||
|
||||
console.info('jopext: selectionArea:', selectionArea);
|
||||
|
||||
if (!selectionArea || !selectionArea.width || !selectionArea.height) return;
|
||||
|
||||
// Need to wait a bit before taking the screenshot to make sure
|
||||
@@ -207,15 +211,15 @@
|
||||
setTimeout(() => {
|
||||
const content = {
|
||||
title: pageTitle(),
|
||||
cropRect: selectionArea,
|
||||
crop_rect: selectionArea,
|
||||
url: location.origin + location.pathname,
|
||||
parentId: command.parentId,
|
||||
parent_id: command.parent_id,
|
||||
};
|
||||
|
||||
browser_.runtime.sendMessage({
|
||||
name: 'screenshotArea',
|
||||
content: content,
|
||||
apiBaseUrl: command.apiBaseUrl,
|
||||
api_base_url: command.api_base_url,
|
||||
});
|
||||
}, 100);
|
||||
}
|
||||
|
@@ -1,47 +1,45 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper",
|
||||
"version": "1.0.2",
|
||||
|
||||
"description": "Gets and saves content from your browser to Joplin.",
|
||||
|
||||
"homepage_url": "https://joplin.cozic.net",
|
||||
|
||||
"icons": {
|
||||
"48": "icons/48.png",
|
||||
"96": "icons/96.png"
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"tabs",
|
||||
"http://*/",
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper [DEV]",
|
||||
"version": "1.0.6",
|
||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||
"homepage_url": "https://joplin.cozic.net",
|
||||
"icons": {
|
||||
"48": "icons/48.png",
|
||||
"96": "icons/96.png"
|
||||
},
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"tabs",
|
||||
"http://*/",
|
||||
"https://*/",
|
||||
"<all_urls>",
|
||||
"storage"
|
||||
],
|
||||
|
||||
"browser_action": {
|
||||
"default_icon": "icons/32.png",
|
||||
"default_title": "Joplin Web Clipper",
|
||||
"default_popup": "popup/build/index.html"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["*://*/"],
|
||||
"js": ["main.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["background.js"],
|
||||
"persistent": false
|
||||
},
|
||||
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "{8419486a-54e9-11e8-9401-ac9e17909436}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"browser_action": {
|
||||
"default_icon": "icons/32.png",
|
||||
"default_title": "Joplin Web Clipper",
|
||||
"default_popup": "popup/build/index.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"*://*/"
|
||||
],
|
||||
"js": [
|
||||
"main.js"
|
||||
]
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"scripts": [
|
||||
"background.js"
|
||||
],
|
||||
"persistent": false
|
||||
},
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "{8419486a-54e9-11e8-9401-ac9e17909436}"
|
||||
}
|
||||
}
|
||||
}
|
@@ -30,14 +30,21 @@ class AppComponent extends Component {
|
||||
this.clipSimplified_click = () => {
|
||||
bridge().sendCommandToActiveTab({
|
||||
name: 'simplifiedPageHtml',
|
||||
parentId: this.props.selectedFolderId,
|
||||
parent_id: this.props.selectedFolderId,
|
||||
});
|
||||
}
|
||||
|
||||
this.clipComplete_click = () => {
|
||||
bridge().sendCommandToActiveTab({
|
||||
name: 'completePageHtml',
|
||||
parentId: this.props.selectedFolderId,
|
||||
parent_id: this.props.selectedFolderId,
|
||||
});
|
||||
}
|
||||
|
||||
this.clipSelection_click = () => {
|
||||
bridge().sendCommandToActiveTab({
|
||||
name: 'selectedHtml',
|
||||
parent_id: this.props.selectedFolderId,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -47,8 +54,8 @@ class AppComponent extends Component {
|
||||
|
||||
await bridge().sendCommandToActiveTab({
|
||||
name: 'screenshot',
|
||||
apiBaseUrl: baseUrl,
|
||||
parentId: this.props.selectedFolderId,
|
||||
api_base_url: baseUrl,
|
||||
parent_id: this.props.selectedFolderId,
|
||||
});
|
||||
|
||||
window.close();
|
||||
@@ -118,7 +125,7 @@ class AppComponent extends Component {
|
||||
<div className="Preview">
|
||||
<input className={"Title"} value={content.title} onChange={this.contentTitle_change}/>
|
||||
<div className={"BodyWrapper"}>
|
||||
<div className={"Body"} dangerouslySetInnerHTML={{__html: content.bodyHtml}}></div>
|
||||
<div className={"Body"} dangerouslySetInnerHTML={{__html: content.body_html}}></div>
|
||||
</div>
|
||||
<a className={"Confirm Button"} onClick={this.confirm_click}>Confirm</a>
|
||||
</div>
|
||||
@@ -151,12 +158,12 @@ class AppComponent extends Component {
|
||||
} else {
|
||||
msg = stateToString(foundState)
|
||||
led = foundState === 'searching' ? led_orange : led_red
|
||||
if (foundState === 'not_found') helpLink = <a className="Help" onClick={this.clipperServerHelpLink_click} href="#">[Help]</a>
|
||||
if (foundState === 'not_found') helpLink = <a className="Help" onClick={this.clipperServerHelpLink_click} href="help">[Help]</a>
|
||||
}
|
||||
|
||||
msg = "Service status: " + msg
|
||||
|
||||
return <div className="StatusBar"><img className="Led" src={led}/><span className="ServerStatus">{ msg }{ helpLink }</span></div>
|
||||
return <div className="StatusBar"><img alt={foundState} className="Led" src={led}/><span className="ServerStatus">{ msg }{ helpLink }</span></div>
|
||||
}
|
||||
|
||||
console.info(this.props.selectedFolderId);
|
||||
@@ -182,7 +189,7 @@ class AppComponent extends Component {
|
||||
return (
|
||||
<div className="Folders">
|
||||
<label>In notebook: </label>
|
||||
<select value={this.props.selectedFolderId} onChange={this.folderSelect_change}>
|
||||
<select value={this.props.selectedFolderId || ''} onChange={this.folderSelect_change}>
|
||||
{ optionComps }
|
||||
</select>
|
||||
</div>
|
||||
@@ -195,6 +202,7 @@ class AppComponent extends Component {
|
||||
<ul>
|
||||
<li><a className="Button" onClick={this.clipSimplified_click}>Clip simplified page</a></li>
|
||||
<li><a className="Button" onClick={this.clipComplete_click}>Clip complete page</a></li>
|
||||
<li><a className="Button" onClick={this.clipSelection_click}>Clip selection</a></li>
|
||||
<li><a className="Button" onClick={this.clipScreenshot_click}>Clip screenshot</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -12,7 +12,7 @@ class Bridge {
|
||||
this.clipperServerPortStatus_ = 'searching';
|
||||
|
||||
this.browser_notify = async (command) => {
|
||||
console.info('Popup: Got command: ' + command.name);
|
||||
console.info('Popup: Got command:', command);
|
||||
|
||||
if (command.warning) {
|
||||
console.warn('Popup: Got warning: ' + command.warning);
|
||||
@@ -24,10 +24,10 @@ class Bridge {
|
||||
if (command.name === 'clippedContent') {
|
||||
const content = {
|
||||
title: command.title,
|
||||
bodyHtml: command.html,
|
||||
baseUrl: command.baseUrl,
|
||||
url: command.url,
|
||||
parentId: command.parentId,
|
||||
body_html: command.html,
|
||||
base_url: command.base_url,
|
||||
source_url: command.url,
|
||||
parent_id: command.parent_id,
|
||||
};
|
||||
|
||||
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });
|
||||
@@ -36,13 +36,25 @@ class Bridge {
|
||||
|
||||
this.browser_.runtime.onMessage.addListener(this.browser_notify);
|
||||
|
||||
console.info('Popup: Env: ', this.env());
|
||||
const backgroundPage = this.browser_.extension.getBackgroundPage();
|
||||
|
||||
// Not sure why the getBackgroundPage() sometimes returns null, so
|
||||
// in that case default to "prod" environment, which means the live
|
||||
// extension won't be affected by this bug.
|
||||
this.env_ = backgroundPage ? backgroundPage.joplinEnv() : 'prod';
|
||||
|
||||
console.info('Popup: Env:', this.env());
|
||||
|
||||
this.dispatch({
|
||||
type: 'ENV_SET',
|
||||
env: this.env(),
|
||||
});
|
||||
|
||||
this.findClipperServerPort();
|
||||
}
|
||||
|
||||
env() {
|
||||
return !('update_url' in this.browser().runtime.getManifest()) ? 'dev' : 'prod';
|
||||
return this.env_;
|
||||
}
|
||||
|
||||
browser() {
|
||||
@@ -148,6 +160,12 @@ class Bridge {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
this.browser().tabs.executeScript(options, () => {
|
||||
const e = this.browser().runtime.lastError;
|
||||
if (e) {
|
||||
const msg = ['tabsExecuteScript: Cannot load ' + JSON.stringify(options)]
|
||||
if (e.message) msg.push(e.message);
|
||||
reject(new Error(msg.join(': ')));
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
})
|
||||
@@ -260,8 +278,6 @@ class Bridge {
|
||||
|
||||
if (!content) throw new Error('Cannot send empty content');
|
||||
|
||||
const baseUrl = await this.clipperServerBaseUrl();
|
||||
|
||||
await this.clipperApiExec('POST', 'notes', content);
|
||||
|
||||
this.dispatch({ type: 'CONTENT_UPLOAD', operation: { uploading: false, success: true } });
|
||||
|
@@ -17,6 +17,7 @@ const defaultState = {
|
||||
},
|
||||
folders: [],
|
||||
selectedFolderId: null,
|
||||
env: 'prod',
|
||||
};
|
||||
|
||||
const reduxMiddleware = store => next => async (action) => {
|
||||
@@ -60,6 +61,10 @@ function reducer(state = defaultState, action) {
|
||||
newState = Object.assign({}, state);
|
||||
newState.folders = action.folders;
|
||||
|
||||
if (!newState.selectedFolderId && action.folders.length) {
|
||||
newState.selectedFolderId = action.folders[0].id;
|
||||
}
|
||||
|
||||
} else if (action.type === 'SELECTED_FOLDER_SET') {
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
@@ -73,6 +78,11 @@ function reducer(state = defaultState, action) {
|
||||
if ('port' in action) clipperServer.port = action.port;
|
||||
newState.clipperServer = clipperServer;
|
||||
|
||||
} else if (action.type === 'ENV_SET') {
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
newState.env = action.env;
|
||||
|
||||
}
|
||||
|
||||
return newState;
|
||||
|
@@ -1,166 +1,20 @@
|
||||
const reservedPorts = [1024, 1027, 1028, 1029, 1058, 1059, 1080, 1085, 1098, 1099, 1109, 1119, 1167, 1194, 1198, 1214, 1220, 1234, 1241, 1270, 1293, 1311, 1314, 1337, 1341, 1344,
|
||||
1352, 1360, 1414, 1417, 1418, 1419, 1420, 1431, 1433, 1434, 1492, 1494, 1500, 1501, 1503, 1512, 1513, 1521, 1524, 1527, 1533, 1547, 1550, 1581, 1582, 1583, 1589, 1604, 1626, 1627,
|
||||
1628, 1629, 1645, 1646, 1666, 1677, 1688, 1701, 1707, 1716, 1719, 1720, 1723, 1755, 1761, 1783, 1801, 1812, 1813, 1863, 1880, 1883, 1900, 1935, 1967, 1970, 1972, 1984, 1985, 1998,
|
||||
2000, 2010, 2033, 2049, 2056, 2080, 2082, 2083, 2086, 2087, 2095, 2096, 2100, 2101, 2102, 2103, 2104, 2123, 2142, 2152, 2159, 2181, 2195, 2196, 2210, 2211, 2221, 2222, 2261, 2262,
|
||||
2266, 2305, 2351, 2368, 2369, 2370, 2372, 2375, 2376, 2377, 2379, 2380, 2399, 2401, 2404, 2424, 2427, 2447, 2480, 2483, 2484, 2535, 2541, 2546, 2593, 2598, 2599, 2638, 2710, 2727,
|
||||
2809, 2811, 2827, 2944, 2945, 2947, 2948, 2949, 2967, 3000, 3004, 3020, 3050, 3052, 3074, 3101, 3128, 3225, 3233, 3260, 3268, 3269, 3283, 3290, 3305, 3306, 3313, 3316, 3323, 3332,
|
||||
3333, 3351, 3386, 3389, 3396, 3412, 3423, 3424, 3455, 3478, 3479, 3480, 3483, 3493, 3516, 3527, 3535, 3544, 3632, 3645, 3659, 3667, 3689, 3690, 3702, 3724, 3725, 3768, 3784, 3785,
|
||||
3799, 3804, 3825, 3826, 3830, 3835, 3856, 3868, 3872, 3880, 3900, 3960, 3962, 3978, 3979, 3999, 4000, 4001, 4018, 4035, 4045, 4050, 4069, 4089, 4090, 4093, 4096, 4105, 4111, 4116,
|
||||
4125, 4172, 4190, 4198, 4201, 4222, 4226, 4242, 4243, 4244, 4303, 4321, 4352, 4444, 4486, 4488, 4500, 4502, 4505, 4534, 4560, 4567, 4569, 4604, 4605, 4610, 4662, 4664, 4672, 4711,
|
||||
4713, 4728, 4730, 4739, 4747, 4750, 4753, 4840, 4843, 4847, 4848, 4894, 4949, 4950, 5000, 5001, 5002, 5003, 5004, 5005, 5010, 5011, 5031, 5037, 5048, 5050, 5051, 5060, 5061, 5062,
|
||||
5064, 5065, 5070, 5084, 5085, 5093, 5099, 5104, 5121, 5124, 5125, 5150, 5151, 5154, 5190, 5201, 5222, 5223, 5228, 5242, 5243, 5246, 5247, 5269, 5280, 5281, 5298, 5310, 5349, 5351,
|
||||
5353, 5355, 5357, 5358, 5394, 5402, 5405, 5412, 5413, 5417, 5421, 5432, 5433, 5445, 5480, 5481, 5495, 5498, 5499, 5500, 5501, 5517, 5550, 5554, 5555, 5556, 5568, 5601, 5631, 5632,
|
||||
5656, 5666, 5667, 5670, 5672, 5678, 5683, 5701, 5718, 5719, 5722, 5723, 5724, 5741, 5742, 5800, 5900, 5931, 5938, 5984, 5985, 5986, 5988, 6000, 6001, 6002, 6003, 6004, 6005, 6006,
|
||||
6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036,
|
||||
6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6086, 6100, 6101,
|
||||
6110, 6111, 6112, 6113, 6136, 6159, 6200, 6201, 6225, 6227, 6240, 6244, 6255, 6257, 6260, 6262, 6343, 6346, 6347, 6350, 6379, 6389, 6432, 6436, 6437, 6444, 6445, 6463, 6502, 6513,
|
||||
6514, 6515, 6543, 6556, 6560, 6566, 6571, 6600, 6601, 6602, 6619, 6622, 6653, 6660, 6665, 6679, 6690, 6697, 6699, 6715, 6771, 6783, 6789, 6869, 6881, 6888, 6889, 6891, 6901, 6902,
|
||||
6969, 6970, 7000, 7001, 7002, 7005, 7006, 7010, 7022, 7023, 7025, 7047, 7070, 7133, 7144, 7145, 7171, 7262, 7272, 7306, 7307, 7312, 7396, 7400, 7401, 7402, 7471, 7473, 7474, 7478,
|
||||
7542, 7547, 7575, 7624, 7631, 7634, 7652, 7655, 7656, 7670, 7687, 7707, 7717, 7777, 7831, 7880, 7890, 7915, 7935, 7946, 7990, 8000, 8005, 8006, 8007, 8008, 8009, 8042, 8069, 8070,
|
||||
8074, 8075, 8080, 8088, 8089, 8090, 8091, 8092, 8111, 8112, 8116, 8118, 8123, 8139, 8140, 8172, 8184, 8194, 8200, 8222, 8243, 8245, 8280, 8281, 8291, 8303, 8332, 8333, 8337, 8384,
|
||||
8388, 8443, 8444, 8484, 8500, 8530, 8531, 8580, 8629, 8642, 8691, 8767, 8834, 8840, 8880, 8883, 8887, 8888, 8889, 8983, 8997, 8998, 8999, 9000, 9001, 9002, 9006, 9030, 9042, 9043,
|
||||
9050, 9060, 9080, 9090, 9091, 9092, 9100, 9101, 9102, 9103, 9119, 9150, 9191, 9199, 9200, 9217, 9293, 9300, 9303, 9306, 9309, 9312, 9332, 9333, 9339, 9389, 9418, 9419, 9420, 9421,
|
||||
9422, 9425, 9443, 9535, 9536, 9600, 9675, 9676, 9695, 9785, 9800, 9875, 9898, 9899, 9981, 9982, 9987, 9993, 9997, 9999, 10000, 10001, 10009, 10010, 10024, 10025, 10042, 10050, 10051,
|
||||
10080, 10110, 10172, 10200, 10201, 10212, 10308, 10480, 10505, 10514, 10823, 10891, 10933, 11001, 11111, 11112, 11211, 11214, 11215, 11235, 11311, 11371, 11753, 12012, 12013, 12035,
|
||||
12043, 12046, 12201, 12222, 12223, 12345, 12443, 12489, 12975, 13000, 13008, 13075, 13720, 13721, 13724, 13782, 13783, 13785, 13786, 14550, 14567, 15000, 15345, 15441, 15567, 15672,
|
||||
16000, 16080, 16200, 16225, 16250, 16261, 16300, 16384, 16385, 16386, 16387, 16393, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407,
|
||||
16408, 16409, 16410, 16411, 16412, 16413, 16414, 16415, 16416, 16417, 16418, 16419, 16420, 16421, 16422, 16423, 16424, 16425, 16426, 16427, 16428, 16429, 16430, 16431, 16432, 16433,
|
||||
16434, 16435, 16436, 16437, 16438, 16439, 16440, 16441, 16442, 16443, 16444, 16445, 16446, 16447, 16448, 16449, 16450, 16451, 16452, 16453, 16454, 16455, 16456, 16457, 16458, 16459,
|
||||
16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16482, 16567, 17011, 17500, 18091, 18092, 18104, 18200, 18201, 18206, 18300, 18301, 18306,
|
||||
18333, 18400, 18401, 18505, 18506, 18605, 18606, 19000, 19001, 19132, 19150, 19226, 19294, 19295, 19302, 19812, 19813, 19814, 19999, 20000, 20560, 20595, 20808, 21025, 22000, 22136,
|
||||
22222, 23073, 23399, 23513, 24441, 24444, 24465, 24554, 24800, 24842, 25565, 25575, 25826, 26000, 26900, 27000, 27016, 27017, 27031, 27036, 27037, 27374, 27500, 27888, 27901, 27950,
|
||||
27960, 28001, 28015, 28770, 28785, 28852, 28910, 28960, 29000, 29070, 29900, 29920, 30564, 31337, 31416, 31438, 31457, 32137, 32400, 32764, 32887, 32976, 33434, 33848, 34000, 34197,
|
||||
35357, 37008, 40000, 43110, 43594, 44405, 44818, 47001, 47808, 49151];
|
||||
|
||||
// From https://github.com/coverslide/node-alea
|
||||
const AleaModule = function () {
|
||||
// importState to sync generator states
|
||||
Alea.importState = function(i){
|
||||
var random = new Alea();
|
||||
random.importState(i);
|
||||
return random;
|
||||
function randomClipperPort(state, env) {
|
||||
const startPorts = {
|
||||
prod: 41184,
|
||||
dev: 27583,
|
||||
};
|
||||
|
||||
return Alea;
|
||||
const startPort = env === 'prod' ? startPorts.prod : startPorts.dev;
|
||||
|
||||
function Alea() {
|
||||
return (function(args) {
|
||||
// Johannes Baagøe <baagoe@baagoe.com>, 2010
|
||||
var s0 = 0;
|
||||
var s1 = 0;
|
||||
var s2 = 0;
|
||||
var c = 1;
|
||||
|
||||
if (args.length === 0) {
|
||||
args = [+new Date()];
|
||||
}
|
||||
var mash = Mash();
|
||||
s0 = mash(' ');
|
||||
s1 = mash(' ');
|
||||
s2 = mash(' ');
|
||||
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
s0 -= mash(args[i]);
|
||||
if (s0 < 0) {
|
||||
s0 += 1;
|
||||
}
|
||||
s1 -= mash(args[i]);
|
||||
if (s1 < 0) {
|
||||
s1 += 1;
|
||||
}
|
||||
s2 -= mash(args[i]);
|
||||
if (s2 < 0) {
|
||||
s2 += 1;
|
||||
}
|
||||
}
|
||||
mash = null;
|
||||
|
||||
var random = function() {
|
||||
var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32
|
||||
s0 = s1;
|
||||
s1 = s2;
|
||||
return s2 = t - (c = t | 0);
|
||||
};
|
||||
random.uint32 = function() {
|
||||
return random() * 0x100000000; // 2^32
|
||||
};
|
||||
random.fract53 = function() {
|
||||
return random() +
|
||||
(random() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
|
||||
};
|
||||
random.version = 'Alea 0.9';
|
||||
random.args = args;
|
||||
|
||||
// my own additions to sync state between two generators
|
||||
random.exportState = function(){
|
||||
return [s0, s1, s2, c];
|
||||
};
|
||||
random.importState = function(i){
|
||||
s0 = +i[0] || 0;
|
||||
s1 = +i[1] || 0;
|
||||
s2 = +i[2] || 0;
|
||||
c = +i[3] || 0;
|
||||
};
|
||||
|
||||
return random;
|
||||
|
||||
} (Array.prototype.slice.call(arguments)));
|
||||
if (!state) {
|
||||
state = { offset: 0 };
|
||||
} else {
|
||||
state.offset++;
|
||||
}
|
||||
|
||||
function Mash() {
|
||||
var n = 0xefc8249d;
|
||||
state.port = startPort + state.offset;
|
||||
|
||||
var mash = function(data) {
|
||||
data = data.toString();
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
n += data.charCodeAt(i);
|
||||
var h = 0.02519603282416938 * n;
|
||||
n = h >>> 0;
|
||||
h -= n;
|
||||
h *= n;
|
||||
n = h >>> 0;
|
||||
h -= n;
|
||||
n += h * 0x100000000; // 2^32
|
||||
}
|
||||
return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
|
||||
};
|
||||
|
||||
mash.version = 'Mash 0.9';
|
||||
return mash;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
const Alea = AleaModule()
|
||||
|
||||
function findClipperPort(state, mode = 'prod') {
|
||||
const seed = mode === 'prod' ? 1867 : 2001;
|
||||
|
||||
const minPort = 1024
|
||||
const maxPort = 49151
|
||||
|
||||
let prng = null;
|
||||
if (!state) {
|
||||
prng = new Alea(seed)
|
||||
state = { prng: prng }
|
||||
} else {
|
||||
prng = state.prng;
|
||||
}
|
||||
|
||||
const randomPort = () => {
|
||||
return minPort + Math.floor(prng() * ((maxPort + 1) - minPort));
|
||||
}
|
||||
|
||||
let port = null;
|
||||
for (let i = 0; i < maxPort; i++) {
|
||||
port = randomPort();
|
||||
if (reservedPorts.indexOf(port) < 0) break;
|
||||
}
|
||||
|
||||
if (!port) throw new Error('Cannot find a non-reserved port');
|
||||
|
||||
state.port = port;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
module.exports = findClipperPort;
|
||||
module.exports = randomClipperPort;
|
@@ -60,6 +60,14 @@ class ElectronAppWrapper {
|
||||
// Fix: https://github.com/electron-userland/electron-builder/issues/2269
|
||||
if (shim.isLinux()) windowOptions.icon = __dirname + '/build/icons/128x128.png';
|
||||
|
||||
require('electron-context-menu')({
|
||||
shouldShowMenu: (event, params) => {
|
||||
// params.inputFieldType === 'none' when right-clicking the text editor. This is a bit of a hack to detect it because in this
|
||||
// case we don't want to use the built-in context menu but a custom one.
|
||||
return params.isEditable && params.inputFieldType !== 'none';
|
||||
},
|
||||
});
|
||||
|
||||
this.win_ = new BrowserWindow(windowOptions)
|
||||
|
||||
this.win_.loadURL(url.format({
|
||||
|
@@ -11,7 +11,7 @@ class InteropServiceHelper {
|
||||
|
||||
if (module.target === 'file') {
|
||||
path = bridge().showSaveDialog({
|
||||
filters: [{ name: module.description, extensions: [module.fileExtension]}]
|
||||
filters: [{ name: module.description, extensions: module.fileExtensions}]
|
||||
});
|
||||
} else {
|
||||
path = bridge().showOpenDialog({
|
||||
|
@@ -41,6 +41,7 @@ const appDefaultState = Object.assign({}, defaultState, {
|
||||
noteVisiblePanes: ['editor', 'viewer'],
|
||||
sidebarVisibility: true,
|
||||
windowContentSize: bridge().windowContentSize(),
|
||||
watchedNoteFiles: [],
|
||||
});
|
||||
|
||||
class Application extends BaseApplication {
|
||||
@@ -48,6 +49,7 @@ class Application extends BaseApplication {
|
||||
constructor() {
|
||||
super();
|
||||
this.lastMenuScreen_ = null;
|
||||
this.powerSaveBlockerId_ = null;
|
||||
}
|
||||
|
||||
hasGui() {
|
||||
@@ -141,6 +143,33 @@ class Application extends BaseApplication {
|
||||
newState.sidebarVisibility = action.visibility;
|
||||
break;
|
||||
|
||||
case 'NOTE_FILE_WATCHER_ADD':
|
||||
|
||||
if (newState.watchedNoteFiles.indexOf(action.id) < 0) {
|
||||
newState = Object.assign({}, state);
|
||||
const watchedNoteFiles = newState.watchedNoteFiles.slice();
|
||||
watchedNoteFiles.push(action.id);
|
||||
newState.watchedNoteFiles = watchedNoteFiles;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'NOTE_FILE_WATCHER_REMOVE':
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
const idx = newState.watchedNoteFiles.indexOf(action.id);
|
||||
if (idx >= 0) {
|
||||
const watchedNoteFiles = newState.watchedNoteFiles.slice();
|
||||
watchedNoteFiles.splice(idx, 1);
|
||||
newState.watchedNoteFiles = watchedNoteFiles;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'NOTE_FILE_WATCHER_CLEAR':
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
newState.watchedNoteFiles = [];
|
||||
break;
|
||||
|
||||
}
|
||||
} catch (error) {
|
||||
error.message = 'In reducer: ' + error.message + ' Action: ' + JSON.stringify(action);
|
||||
@@ -154,7 +183,7 @@ class Application extends BaseApplication {
|
||||
if (action.type == 'SETTING_UPDATE_ONE' && action.key == 'locale' || action.type == 'SETTING_UPDATE_ALL') {
|
||||
setLocale(Setting.value('locale'));
|
||||
// The bridge runs within the main process, with its own instance of locale.js
|
||||
// so it needs to be set too here.
|
||||
// so it needs to be set too here.
|
||||
bridge().setLocale(Setting.value('locale'));
|
||||
this.refreshMenu();
|
||||
}
|
||||
@@ -190,6 +219,17 @@ class Application extends BaseApplication {
|
||||
Setting.setValue('sidebarVisibility', newState.sidebarVisibility);
|
||||
}
|
||||
|
||||
if (action.type === 'SYNC_STARTED') {
|
||||
if (!this.powerSaveBlockerId_) this.powerSaveBlockerId_ = bridge().powerSaveBlockerStart('prevent-app-suspension');
|
||||
}
|
||||
|
||||
if (action.type === 'SYNC_COMPLETED') {
|
||||
if (this.powerSaveBlockerId_) {
|
||||
bridge().powerSaveBlockerStop(this.powerSaveBlockerId_);
|
||||
this.powerSaveBlockerId_ = null;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -245,7 +285,7 @@ class Application extends BaseApplication {
|
||||
|
||||
if (moduleSource === 'file') {
|
||||
path = bridge().showOpenDialog({
|
||||
filters: [{ name: module.description, extensions: [module.fileExtension]}]
|
||||
filters: [{ name: module.description, extensions: module.fileExtensions}]
|
||||
});
|
||||
} else {
|
||||
path = bridge().showOpenDialog({
|
||||
@@ -322,7 +362,6 @@ class Application extends BaseApplication {
|
||||
}
|
||||
}, {
|
||||
label: _('New notebook'),
|
||||
accelerator: 'CommandOrControl+B',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
@@ -369,22 +408,63 @@ class Application extends BaseApplication {
|
||||
label: _('Edit'),
|
||||
submenu: [{
|
||||
label: _('Copy'),
|
||||
//screens: ['Main', 'OneDriveLogin', 'Config', 'EncryptionConfig'],
|
||||
role: 'copy',
|
||||
accelerator: 'CommandOrControl+C',
|
||||
}, {
|
||||
label: _('Cut'),
|
||||
//screens: ['Main', 'OneDriveLogin', 'Config', 'EncryptionConfig'],
|
||||
role: 'cut',
|
||||
accelerator: 'CommandOrControl+X',
|
||||
}, {
|
||||
label: _('Paste'),
|
||||
//screens: ['Main', 'OneDriveLogin', 'Config', 'EncryptionConfig'],
|
||||
role: 'paste',
|
||||
accelerator: 'CommandOrControl+V',
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('Bold'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+B',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'textBold',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Italic'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+I',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'textItalic',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Insert Date Time'),
|
||||
screens: ['Main'],
|
||||
visible: false,
|
||||
accelerator: 'CommandOrControl+Shift+T',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'insertDateTime',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('Edit in external editor'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+E',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'commandStartExternalEditing',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Search in all the notes'),
|
||||
screens: ['Main'],
|
||||
@@ -655,6 +735,8 @@ class Application extends BaseApplication {
|
||||
ids: Setting.value('collapsedFolderIds'),
|
||||
});
|
||||
|
||||
if (shim.isLinux()) bridge().setAllowPowerSaveBlockerToggle(true);
|
||||
|
||||
// Note: Auto-update currently doesn't work in Linux: it downloads the update
|
||||
// but then doesn't install it on exit.
|
||||
if (shim.isWindows() || shim.isMac()) {
|
||||
@@ -676,6 +758,10 @@ class Application extends BaseApplication {
|
||||
AlarmService.garbageCollect();
|
||||
}, 1000 * 60 * 60);
|
||||
|
||||
if (Setting.value('startMinimized') && Setting.value('showTrayIcon')) {
|
||||
bridge().window().hide();
|
||||
}
|
||||
|
||||
ResourceService.runInBackground();
|
||||
|
||||
if (Setting.value('env') === 'dev') {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
const { _, setLocale } = require('lib/locale.js');
|
||||
const { dirname } = require('lib/path-utils.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { powerSaveBlocker } = require('electron');
|
||||
|
||||
class Bridge {
|
||||
|
||||
@@ -8,6 +9,7 @@ class Bridge {
|
||||
this.electronWrapper_ = electronWrapper;
|
||||
this.autoUpdateLogger_ = null;
|
||||
this.lastSelectedPath_ = null;
|
||||
this.allowPowerSaveBlockerToggle_ = false;
|
||||
}
|
||||
|
||||
electronApp() {
|
||||
@@ -22,6 +24,10 @@ class Bridge {
|
||||
return this.electronWrapper_.window();
|
||||
}
|
||||
|
||||
setAllowPowerSaveBlockerToggle(v) {
|
||||
this.allowPowerSaveBlockerToggle_ = v;
|
||||
}
|
||||
|
||||
windowContentSize() {
|
||||
if (!this.window()) return { width: 0, height: 0 };
|
||||
const s = this.window().getContentSize();
|
||||
@@ -81,6 +87,7 @@ class Bridge {
|
||||
const result = this.showMessageBox_(this.window(), {
|
||||
type: 'question',
|
||||
message: message,
|
||||
cancelId: 1,
|
||||
buttons: [_('OK'), _('Cancel')],
|
||||
});
|
||||
return result === 0;
|
||||
@@ -120,6 +127,18 @@ class Bridge {
|
||||
checkForUpdates(inBackground, window, logFilePath);
|
||||
}
|
||||
|
||||
powerSaveBlockerStart(type) {
|
||||
if (!this.allowPowerSaveBlockerToggle_) return null;
|
||||
console.info('Enable powerSaveBlockerStart: ' + type);
|
||||
return powerSaveBlocker.start(type);
|
||||
}
|
||||
|
||||
powerSaveBlockerStop(id) {
|
||||
if (!this.allowPowerSaveBlockerToggle_) return null;
|
||||
console.info('Disable powerSaveBlocker: ' + id);
|
||||
return powerSaveBlocker.stop(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let bridge_ = null;
|
||||
|
4
ElectronClient/app/css/font-awesome.min.css
vendored
4
ElectronClient/app/css/font-awesome.min.css
vendored
File diff suppressed because one or more lines are too long
4
ElectronClient/app/css/fork-awesome.min.css
vendored
Normal file
4
ElectronClient/app/css/fork-awesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
ElectronClient/app/fonts/forkawesome-webfont.woff2
Normal file
BIN
ElectronClient/app/fonts/forkawesome-webfont.woff2
Normal file
Binary file not shown.
@@ -63,6 +63,7 @@ class ConfigScreenComponent extends React.Component {
|
||||
color: theme.colorFaded,
|
||||
marginTop: 5,
|
||||
fontStyle: 'italic',
|
||||
maxWidth: '70em',
|
||||
});
|
||||
|
||||
const updateSettingValue = (key, value) => {
|
||||
@@ -148,6 +149,10 @@ class ConfigScreenComponent extends React.Component {
|
||||
return output;
|
||||
}
|
||||
|
||||
onApplyClick() {
|
||||
shared.saveSettings(this);
|
||||
}
|
||||
|
||||
onSaveClick() {
|
||||
shared.saveSettings(this);
|
||||
this.props.dispatch({ type: 'NAV_BACK' });
|
||||
@@ -203,8 +208,9 @@ class ConfigScreenComponent extends React.Component {
|
||||
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
|
||||
</div>
|
||||
{ settingComps }
|
||||
<button onClick={() => {this.onSaveClick()}} style={buttonStyle}>{_('Save')}</button>
|
||||
<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>
|
||||
);
|
||||
|
@@ -35,6 +35,7 @@ class HeaderComponent extends React.Component {
|
||||
this.search_onClear = (event) => {
|
||||
this.setState({ searchQuery: '' });
|
||||
triggerOnQuery('');
|
||||
if (this.searchElement_) this.searchElement_.focus();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -59,7 +59,7 @@ class ImportScreenComponent extends React.Component {
|
||||
|
||||
async doImport() {
|
||||
const filePath = this.props.filePath;
|
||||
const folderTitle = await Folder.findUniqueFolderTitle(filename(filePath));
|
||||
const folderTitle = await Folder.findUniqueItemTitle(filename(filePath));
|
||||
const messages = this.state.messages.slice();
|
||||
|
||||
this.addMessage('start', _('New notebook "%s" will be created and file "%s" will be imported into it', folderTitle, basename(filePath)));
|
||||
|
@@ -5,6 +5,7 @@ const { SideBar } = require('./SideBar.min.js');
|
||||
const { NoteList } = require('./NoteList.min.js');
|
||||
const { NoteText } = require('./NoteText.min.js');
|
||||
const { PromptDialog } = require('./PromptDialog.min.js');
|
||||
const NotePropertiesDialog = require('./NotePropertiesDialog.min.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
@@ -19,13 +20,24 @@ const eventManager = require('../eventManager');
|
||||
|
||||
class MainScreenComponent extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.notePropertiesDialog_close = this.notePropertiesDialog_close.bind(this);
|
||||
}
|
||||
|
||||
notePropertiesDialog_close() {
|
||||
this.setState({ notePropertiesDialogOptions: {} });
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.setState({
|
||||
promptOptions: null,
|
||||
modalLayer: {
|
||||
visible: false,
|
||||
message: '',
|
||||
}
|
||||
},
|
||||
notePropertiesDialogOptions: {},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -189,6 +201,13 @@ class MainScreenComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
} else if (command.name === 'commandNoteProperties') {
|
||||
this.setState({
|
||||
notePropertiesDialogOptions: {
|
||||
noteId: command.noteId,
|
||||
visible: true,
|
||||
},
|
||||
});
|
||||
} else if (command.name === 'toggleVisiblePanes') {
|
||||
this.toggleVisiblePanes();
|
||||
} else if (command.name === 'toggleSidebar') {
|
||||
@@ -412,10 +431,19 @@ class MainScreenComponent extends React.Component {
|
||||
|
||||
const modalLayerStyle = Object.assign({}, styles.modalLayer, { display: this.state.modalLayer.visible ? 'block' : 'none' });
|
||||
|
||||
const notePropertiesDialogOptions = this.state.notePropertiesDialogOptions;
|
||||
|
||||
return (
|
||||
<div style={style}>
|
||||
<div style={modalLayerStyle}>{this.state.modalLayer.message}</div>
|
||||
|
||||
<NotePropertiesDialog
|
||||
theme={this.props.theme}
|
||||
noteId={notePropertiesDialogOptions.noteId}
|
||||
visible={!!notePropertiesDialogOptions.visible}
|
||||
onClose={this.notePropertiesDialog_close}
|
||||
/>
|
||||
|
||||
<PromptDialog
|
||||
autocomplete={promptOptions && ('autocomplete' in promptOptions) ? promptOptions.autocomplete : null}
|
||||
defaultValue={promptOptions && promptOptions.value ? promptOptions.value : ''}
|
||||
@@ -427,6 +455,7 @@ class MainScreenComponent extends React.Component {
|
||||
visible={!!this.state.promptOptions}
|
||||
buttons={promptOptions && ('buttons' in promptOptions) ? promptOptions.buttons : null}
|
||||
inputType={promptOptions && ('inputType' in promptOptions) ? promptOptions.inputType : null} />
|
||||
|
||||
<Header style={styles.header} showBackButton={false} items={headerItems} />
|
||||
{messageComp}
|
||||
<SideBar style={styles.sideBar} />
|
||||
|
@@ -88,6 +88,15 @@ class NoteListComponent extends React.Component {
|
||||
});
|
||||
}}));
|
||||
|
||||
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),
|
||||
});
|
||||
}
|
||||
}}));
|
||||
|
||||
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]);
|
||||
@@ -119,6 +128,13 @@ class NoteListComponent extends React.Component {
|
||||
}}));
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -156,7 +172,18 @@ class NoteListComponent extends React.Component {
|
||||
}
|
||||
|
||||
const onDragStart = (event) => {
|
||||
const noteIds = this.props.selectedNoteIds;
|
||||
let noteIds = [];
|
||||
|
||||
// Here there is two cases:
|
||||
// - If multiple notes are selected, we drag the group
|
||||
// - If only one note is selected, we drag the note that was clicked on (which might be different from the currently selected note)
|
||||
if (this.props.selectedNoteIds.length >= 2) {
|
||||
noteIds = this.props.selectedNoteIds;
|
||||
} else {
|
||||
const clickedNoteId = event.currentTarget.getAttribute('data-id');
|
||||
if (clickedNoteId) noteIds.push(clickedNoteId);
|
||||
}
|
||||
|
||||
if (!noteIds.length) return;
|
||||
|
||||
event.dataTransfer.setDragImage(new Image(), 1, 1);
|
||||
|
364
ElectronClient/app/gui/NotePropertiesDialog.jsx
Normal file
364
ElectronClient/app/gui/NotePropertiesDialog.jsx
Normal file
@@ -0,0 +1,364 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const moment = require('moment');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const Datetime = require('react-datetime');
|
||||
const Note = require('lib/models/Note');
|
||||
const formatcoords = require('formatcoords');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
|
||||
class NotePropertiesDialog extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.okButton_click = this.okButton_click.bind(this);
|
||||
this.cancelButton_click = this.cancelButton_click.bind(this);
|
||||
|
||||
this.state = {
|
||||
formNote: null,
|
||||
editedKey: null,
|
||||
editedValue: null,
|
||||
visible: false,
|
||||
};
|
||||
|
||||
this.keyToLabel_ = {
|
||||
id: _('ID'),
|
||||
user_created_time: _('Created'),
|
||||
user_updated_time: _('Updated'),
|
||||
location: _('Location'),
|
||||
source_url: _('URL'),
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(newProps) {
|
||||
if ('visible' in newProps && newProps.visible !== this.state.visible) {
|
||||
this.setState({ visible: newProps.visible });
|
||||
}
|
||||
|
||||
if ('noteId' in newProps) {
|
||||
this.loadNote(newProps.noteId);
|
||||
}
|
||||
}
|
||||
|
||||
async loadNote(noteId) {
|
||||
if (!noteId) {
|
||||
this.setState({ formNote: null });
|
||||
} else {
|
||||
const note = await Note.load(noteId);
|
||||
const formNote = this.noteToFormNote(note);
|
||||
this.setState({ formNote: formNote });
|
||||
}
|
||||
}
|
||||
|
||||
latLongFromLocation(location) {
|
||||
const o = {};
|
||||
const l = location.split(',');
|
||||
if (l.length == 2) {
|
||||
o.latitude = l[0].trim();
|
||||
o.longitude = l[1].trim();
|
||||
} else {
|
||||
o.latitude = '';
|
||||
o.longitude = '';
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
noteToFormNote(note) {
|
||||
const formNote = {};
|
||||
|
||||
formNote.user_updated_time = time.formatMsToLocal(note.user_updated_time);
|
||||
formNote.user_created_time = time.formatMsToLocal(note.user_created_time);
|
||||
formNote.source_url = note.source_url;
|
||||
|
||||
formNote.location = '';
|
||||
if (Number(note.latitude) || Number(note.longitude)) {
|
||||
formNote.location = note.latitude + ', ' + note.longitude;
|
||||
}
|
||||
|
||||
formNote.id = note.id;
|
||||
|
||||
return formNote;
|
||||
}
|
||||
|
||||
formNoteToNote(formNote) {
|
||||
const note = Object.assign({ id: formNote.id }, this.latLongFromLocation(formNote.location));
|
||||
note.user_created_time = time.formatLocalToMs(formNote.user_created_time);
|
||||
note.user_updated_time = time.formatLocalToMs(formNote.user_updated_time);
|
||||
note.source_url = formNote.source_url;
|
||||
|
||||
return note;
|
||||
}
|
||||
|
||||
styles(themeId) {
|
||||
const styleKey = themeId;
|
||||
if (styleKey === this.styleKey_) return this.styles_;
|
||||
|
||||
const theme = themeStyle(themeId);
|
||||
|
||||
this.styles_ = {};
|
||||
this.styleKey_ = styleKey;
|
||||
|
||||
this.styles_.modalLayer = {
|
||||
zIndex: 9999,
|
||||
display: 'flex',
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
backgroundColor: 'rgba(0,0,0,0.6)',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'center',
|
||||
};
|
||||
|
||||
this.styles_.dialogBox = {
|
||||
backgroundColor: 'white',
|
||||
padding: 16,
|
||||
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
|
||||
marginTop: 20,
|
||||
}
|
||||
|
||||
this.styles_.controlBox = {
|
||||
marginBottom: '1em',
|
||||
};
|
||||
|
||||
this.styles_.button = {
|
||||
minWidth: theme.buttonMinWidth,
|
||||
minHeight: theme.buttonMinHeight,
|
||||
marginLeft: 5,
|
||||
};
|
||||
|
||||
this.styles_.editPropertyButton = {
|
||||
color: theme.color,
|
||||
textDecoration: 'none',
|
||||
};
|
||||
|
||||
this.styles_.dialogTitle = Object.assign({}, theme.h1Style, { marginBottom: '1.2em' });
|
||||
|
||||
return this.styles_;
|
||||
}
|
||||
|
||||
async closeDialog(applyChanges) {
|
||||
if (applyChanges) {
|
||||
await this.saveProperty();
|
||||
const note = this.formNoteToNote(this.state.formNote);
|
||||
note.updated_time = Date.now();
|
||||
await Note.save(note, { autoTimestamp: false });
|
||||
} else {
|
||||
await this.cancelProperty();
|
||||
}
|
||||
|
||||
this.setState({
|
||||
visible: false,
|
||||
});
|
||||
|
||||
if (this.props.onClose) {
|
||||
this.props.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
okButton_click() {
|
||||
this.closeDialog(true);
|
||||
}
|
||||
|
||||
cancelButton_click() {
|
||||
this.closeDialog(false);
|
||||
}
|
||||
|
||||
editPropertyButtonClick(key, initialValue) {
|
||||
this.setState({
|
||||
editedKey: key,
|
||||
editedValue: initialValue,
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
if (this.refs.editField.openCalendar) {
|
||||
this.refs.editField.openCalendar();
|
||||
} else {
|
||||
this.refs.editField.focus();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
async saveProperty() {
|
||||
if (!this.state.editedKey) return;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const newFormNote = Object.assign({}, this.state.formNote);
|
||||
|
||||
if (this.state.editedKey.indexOf('_time') >= 0) {
|
||||
const dt = time.anythingToDateTime(this.state.editedValue, new Date());
|
||||
newFormNote[this.state.editedKey] = time.formatMsToLocal(dt.getTime());
|
||||
} else {
|
||||
newFormNote[this.state.editedKey] = this.state.editedValue;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
formNote: newFormNote,
|
||||
editedKey: null,
|
||||
editedValue: null
|
||||
}, () => { resolve() });
|
||||
});
|
||||
}
|
||||
|
||||
async cancelProperty() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.setState({
|
||||
editedKey: null,
|
||||
editedValue: null
|
||||
}, () => { resolve() });
|
||||
});
|
||||
}
|
||||
|
||||
createNoteField(key, value) {
|
||||
const styles = this.styles(this.props.theme);
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const labelComp = <label style={Object.assign({}, theme.textStyle, {marginRight: '1em', width: '6em', display:'inline-block', fontWeight: 'bold'})}>{this.formatLabel(key)}</label>;
|
||||
let controlComp = null;
|
||||
let editComp = null;
|
||||
let editCompHandler = null;
|
||||
let editCompIcon = null;
|
||||
|
||||
const onKeyDown = (event) => {
|
||||
if (event.keyCode === 13) {
|
||||
this.saveProperty();
|
||||
} else if (event.keyCode === 27) {
|
||||
this.cancelProperty();
|
||||
}
|
||||
}
|
||||
|
||||
if (this.state.editedKey === key) {
|
||||
if (key.indexOf('_time') >= 0) {
|
||||
|
||||
controlComp = <Datetime
|
||||
ref="editField"
|
||||
defaultValue={value}
|
||||
dateFormat={time.dateFormat()}
|
||||
timeFormat={time.timeFormat()}
|
||||
inputProps={{
|
||||
onKeyDown: (event) => onKeyDown(event, key)
|
||||
}}
|
||||
onChange={(momentObject) => {this.setState({ editedValue: momentObject })}}
|
||||
/>
|
||||
|
||||
editCompHandler = () => {this.saveProperty()};
|
||||
editCompIcon = 'fa-save';
|
||||
} else {
|
||||
|
||||
controlComp = <input
|
||||
defaultValue={value}
|
||||
type="text"
|
||||
ref="editField"
|
||||
onChange={(event) => {this.setState({ editedValue: event.target.value })}}
|
||||
onKeyDown={(event) => onKeyDown(event)}
|
||||
style={{display:'inline-block'}}
|
||||
/>
|
||||
}
|
||||
} else {
|
||||
let displayedValue = value;
|
||||
|
||||
if (key === 'location') {
|
||||
try {
|
||||
const dms = formatcoords(value);
|
||||
displayedValue = dms.format('DDMMss', { decimalPlaces: 0 });
|
||||
} catch (error) {
|
||||
displayedValue = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (['source_url', 'location'].indexOf(key) >= 0) {
|
||||
let url = '';
|
||||
if (key === 'source_url') url = value;
|
||||
if (key === 'location') {
|
||||
const ll = this.latLongFromLocation(value);
|
||||
url = Note.geoLocationUrlFromLatLong(ll.latitude, ll.longitude);
|
||||
}
|
||||
controlComp = <a href="#" onClick={() => bridge().openExternal(url)} style={theme.urlStyle}>{displayedValue}</a>
|
||||
} else {
|
||||
controlComp = <div style={Object.assign({}, theme.textStyle, {display: 'inline-block'})}>{displayedValue}</div>
|
||||
}
|
||||
|
||||
if (key !== 'id') {
|
||||
editCompHandler = () => {this.editPropertyButtonClick(key, value)};
|
||||
editCompIcon = 'fa-edit';
|
||||
}
|
||||
}
|
||||
|
||||
if (editCompHandler) {
|
||||
editComp = (
|
||||
<a href="#" onClick={editCompHandler} style={styles.editPropertyButton}>
|
||||
<i className={'fa ' + editCompIcon} aria-hidden="true" style={{ marginLeft: '.5em'}}></i>
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={key} style={this.styles_.controlBox} className="note-property-box">
|
||||
{ labelComp }
|
||||
{ controlComp }
|
||||
{ editComp }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
formatLabel(key) {
|
||||
if (this.keyToLabel_[key]) return this.keyToLabel_[key];
|
||||
return key;
|
||||
}
|
||||
|
||||
formatValue(key, note) {
|
||||
if (key === 'location') {
|
||||
if (!Number(note.latitude) && !Number(note.longitude)) return null;
|
||||
const dms = formatcoords(Number(note.latitude), Number(note.longitude))
|
||||
return dms.format('DDMMss', { decimalPlaces: 0 });
|
||||
}
|
||||
|
||||
if (['user_updated_time', 'user_created_time'].indexOf(key) >= 0) {
|
||||
return time.formatMsToLocal(note[key]);
|
||||
}
|
||||
|
||||
return note[key];
|
||||
}
|
||||
|
||||
render() {
|
||||
const style = this.props.style;
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const styles = this.styles(this.props.theme);
|
||||
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="cancel" style={styles.button} onClick={this.cancelButton_click}>{_('Cancel')}</button>);
|
||||
|
||||
const noteComps = [];
|
||||
|
||||
const modalLayerStyle = Object.assign({}, styles.modalLayer);
|
||||
if (!this.state.visible) modalLayerStyle.display = 'none';
|
||||
|
||||
if (formNote) {
|
||||
for (let key in formNote) {
|
||||
if (!formNote.hasOwnProperty(key)) continue;
|
||||
const comp = this.createNoteField(key, formNote[key]);
|
||||
noteComps.push(comp);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div style={modalLayerStyle}>
|
||||
<div style={styles.dialogBox}>
|
||||
<div style={styles.dialogTitle}>Note properties</div>
|
||||
<div>{noteComps}</div>
|
||||
<div style={{ textAlign: 'right', marginTop: 10 }}>
|
||||
{buttonComps}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = NotePropertiesDialog;
|
@@ -20,10 +20,15 @@ const MenuItem = bridge().MenuItem;
|
||||
const { shim } = require('lib/shim.js');
|
||||
const eventManager = require('../eventManager');
|
||||
const fs = require('fs-extra');
|
||||
const {clipboard} = require('electron')
|
||||
const md5 = require('md5');
|
||||
const mimeUtils = require('lib/mime-utils.js').mime;
|
||||
const ArrayUtils = require('lib/ArrayUtils');
|
||||
const urlUtils = require('lib/urlUtils');
|
||||
const dialogs = require('./dialogs');
|
||||
const markdownUtils = require('lib/markdownUtils');
|
||||
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
|
||||
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
|
||||
const { clipboard } = require('electron');
|
||||
|
||||
require('brace/mode/markdown');
|
||||
// https://ace.c9.io/build/kitchen-sink.html
|
||||
@@ -52,6 +57,7 @@ class NoteTextComponent extends React.Component {
|
||||
// to automatically set the title.
|
||||
newAndNoTitleChangeNoteId: null,
|
||||
bodyHtml: '',
|
||||
lastKeys: [],
|
||||
};
|
||||
|
||||
this.lastLoadedNoteId_ = null;
|
||||
@@ -62,6 +68,7 @@ class NoteTextComponent extends React.Component {
|
||||
this.restoreScrollTop_ = null;
|
||||
this.lastSetHtml_ = '';
|
||||
this.lastSetMarkers_ = [];
|
||||
this.selectionRange_ = null;
|
||||
|
||||
// Complicated but reliable method to get editor content height
|
||||
// https://github.com/ajaxorg/ace/issues/2046
|
||||
@@ -80,13 +87,14 @@ class NoteTextComponent extends React.Component {
|
||||
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.onEditorPaste_ = async (event) => {
|
||||
this.onEditorPaste_ = async (event = null) => {
|
||||
const formats = clipboard.availableFormats();
|
||||
for (let i = 0; i < formats.length; i++) {
|
||||
const format = formats[i].toLowerCase();
|
||||
const formatType = format.split('/')[0]
|
||||
|
||||
if (formatType === 'image') {
|
||||
event.preventDefault();
|
||||
if (event) event.preventDefault();
|
||||
|
||||
const image = clipboard.readImage();
|
||||
|
||||
@@ -100,6 +108,39 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
this.onEditorKeyDown_ = (event) => {
|
||||
const lastKeys = this.state.lastKeys.slice();
|
||||
lastKeys.push(event.key);
|
||||
while (lastKeys.length > 2) lastKeys.splice(0, 1);
|
||||
this.setState({ lastKeys: lastKeys });
|
||||
}
|
||||
|
||||
this.onEditorContextMenu_ = (event) => {
|
||||
const menu = new Menu();
|
||||
|
||||
const selectedText = this.selectedText();
|
||||
const clipboardText = clipboard.readText();
|
||||
|
||||
menu.append(new MenuItem({label: _('Cut'), enabled: !!selectedText, click: async () => {
|
||||
this.editorCutText();
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Copy'), enabled: !!selectedText, click: async () => {
|
||||
this.editorCopyText();
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Paste'), enabled: true, click: async () => {
|
||||
if (clipboardText) {
|
||||
this.editorPasteText();
|
||||
} else {
|
||||
// To handle pasting images
|
||||
this.onEditorPaste_();
|
||||
}
|
||||
}}));
|
||||
|
||||
menu.popup(bridge().window());
|
||||
}
|
||||
|
||||
this.onDrop_ = async (event) => {
|
||||
const files = event.dataTransfer.files;
|
||||
if (!files || !files.length) return;
|
||||
@@ -114,13 +155,53 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
await this.commandAttachFile(filesToAttach);
|
||||
}
|
||||
|
||||
const updateSelectionRange = () => {
|
||||
|
||||
const ranges = this.rawEditor().getSelection().getAllRanges();
|
||||
if (!ranges || !ranges.length || !this.state.note) {
|
||||
this.selectionRange_ = null;
|
||||
} else {
|
||||
this.selectionRange_ = ranges[0];
|
||||
}
|
||||
}
|
||||
|
||||
this.aceEditor_selectionChange = (selection) => {
|
||||
updateSelectionRange();
|
||||
}
|
||||
|
||||
this.aceEditor_focus = (event) => {
|
||||
updateSelectionRange();
|
||||
}
|
||||
|
||||
this.externalEditWatcher_noteChange = (event) => {
|
||||
if (!this.state.note || !this.state.note.id) return;
|
||||
if (event.id === this.state.note.id) {
|
||||
this.reloadNote(this.props);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cursorPosition() {
|
||||
// Note:
|
||||
// - What's called "cursor position" is expressed as { row: x, column: y } and is how Ace Editor get/set the cursor position
|
||||
// - A "range" defines a selection with a start and end cusor position, expressed as { start: <CursorPos>, end: <CursorPos> }
|
||||
// - A "text offset" below is the absolute position of the cursor in the string, as would be used in the indexOf() function.
|
||||
// The functions below are used to convert between the different types.
|
||||
rangeToTextOffsets(range, body) {
|
||||
return {
|
||||
start: this.cursorPositionToTextOffset(range.start, body),
|
||||
end: this.cursorPositionToTextOffset(range.end, body),
|
||||
};
|
||||
}
|
||||
|
||||
currentTextOffset() {
|
||||
return this.cursorPositionToTextOffset(this.editor_.editor.getCursorPosition(), this.state.note.body);
|
||||
}
|
||||
|
||||
cursorPositionToTextOffset(cursorPos, body) {
|
||||
if (!this.editor_ || !this.editor_.editor || !this.state.note || !this.state.note.body) return 0;
|
||||
|
||||
const cursorPos = this.editor_.editor.getCursorPosition();
|
||||
const noteLines = this.state.note.body.split('\n');
|
||||
const noteLines = body.split('\n');
|
||||
|
||||
let pos = 0;
|
||||
for (let i = 0; i < noteLines.length; i++) {
|
||||
@@ -137,6 +218,24 @@ class NoteTextComponent extends React.Component {
|
||||
return pos;
|
||||
}
|
||||
|
||||
textOffsetToCursorPosition(offset, body) {
|
||||
const lines = body.split('\n');
|
||||
let row = 0;
|
||||
let currentOffset = 0;
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
const line = lines[i];
|
||||
if (currentOffset + line.length >= offset) {
|
||||
return {
|
||||
row: row,
|
||||
column: offset - currentOffset,
|
||||
}
|
||||
}
|
||||
|
||||
row++;
|
||||
currentOffset += line.length + 1;
|
||||
}
|
||||
}
|
||||
|
||||
mdToHtml() {
|
||||
if (this.mdToHtml_) return this.mdToHtml_;
|
||||
this.mdToHtml_ = new MdToHtml({
|
||||
@@ -181,6 +280,8 @@ class NoteTextComponent extends React.Component {
|
||||
eventManager.removeListener('alarmChange', this.onAlarmChange_);
|
||||
eventManager.removeListener('noteTypeToggle', this.onNoteTypeToggle_);
|
||||
eventManager.removeListener('todoToggle', this.onTodoToggle_);
|
||||
|
||||
this.destroyExternalEditWatcher();
|
||||
}
|
||||
|
||||
async saveIfNeeded(saveIfNewNote = false) {
|
||||
@@ -192,6 +293,8 @@ class NoteTextComponent extends React.Component {
|
||||
if (!shared.isModified(this)) return;
|
||||
}
|
||||
await shared.saveNoteButton_press(this);
|
||||
|
||||
this.externalEditWatcherUpdateNoteFile(this.state.note);
|
||||
}
|
||||
|
||||
async saveOneProperty(name, value) {
|
||||
@@ -224,10 +327,12 @@ class NoteTextComponent extends React.Component {
|
||||
let noteId = null;
|
||||
let note = null;
|
||||
let loadingNewNote = true;
|
||||
let parentFolder = null;
|
||||
|
||||
if (props.newNote) {
|
||||
note = Object.assign({}, props.newNote);
|
||||
this.lastLoadedNoteId_ = null;
|
||||
this.externalEditWatcherStopWatchingAll();
|
||||
} else {
|
||||
noteId = props.noteId;
|
||||
loadingNewNote = stateNoteId !== noteId;
|
||||
@@ -253,6 +358,8 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
// Scroll back to top when loading new note
|
||||
if (loadingNewNote) {
|
||||
this.externalEditWatcherStopWatchingAll();
|
||||
|
||||
this.editorMaxScrollTop_ = 0;
|
||||
|
||||
// HACK: To go around a bug in Ace editor, we first set the scroll position to 1
|
||||
@@ -262,9 +369,8 @@ class NoteTextComponent extends React.Component {
|
||||
this.editorSetScrollTop(1);
|
||||
this.restoreScrollTop_ = 0;
|
||||
|
||||
// If a search is in progress we don't focus any field otherwise it will
|
||||
// take the focus out of the search box.
|
||||
if (note && this.props.notesParentType !== 'Search') {
|
||||
// Only force focus on notes when creating a new note/todo
|
||||
if (this.props.newNote) {
|
||||
const focusSettingName = !!note.is_todo ? 'newTodoFocus' : 'newNoteFocus';
|
||||
|
||||
if (Setting.value(focusSettingName) === 'title') {
|
||||
@@ -296,10 +402,17 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
if (note)
|
||||
{
|
||||
parentFolder = Folder.byId(props.folders, note.parent_id);
|
||||
}
|
||||
|
||||
let newState = {
|
||||
note: note,
|
||||
lastSavedNote: Object.assign({}, note),
|
||||
webviewReady: webviewReady,
|
||||
folder: parentFolder,
|
||||
lastKeys: [],
|
||||
};
|
||||
|
||||
if (!note) {
|
||||
@@ -372,8 +485,6 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const newBody = this.mdToHtml_.handleCheckboxClick(msg, this.state.note.body);
|
||||
this.saveOneProperty('body', newBody);
|
||||
} else if (msg.toLowerCase().indexOf('http') === 0) {
|
||||
require('electron').shell.openExternal(msg);
|
||||
} else if (msg === 'percentScroll') {
|
||||
this.ignoreNextEditorScroll_ = true;
|
||||
this.setEditorPercentScroll(arg0);
|
||||
@@ -382,12 +493,13 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const menu = new Menu()
|
||||
|
||||
if (itemType === "image" || itemType === "link") {
|
||||
if (itemType === "image" || itemType === "resource") {
|
||||
const resource = await Resource.load(arg0.resourceId);
|
||||
const resourcePath = Resource.fullPath(resource);
|
||||
|
||||
menu.append(new MenuItem({label: _('Open...'), click: async () => {
|
||||
bridge().openExternal(resourcePath);
|
||||
const ok = bridge().openExternal('file://' + resourcePath);
|
||||
if (!ok) bridge().showErrorMessageBox(_('This file could not be opened: %s', resourcePath));
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Save as...'), click: async () => {
|
||||
@@ -399,10 +511,16 @@ class NoteTextComponent extends React.Component {
|
||||
}}));
|
||||
|
||||
menu.append(new MenuItem({label: _('Copy path to clipboard'), click: async () => {
|
||||
const { clipboard } = require('electron');
|
||||
const { toSystemSlashes } = require('lib/path-utils.js');
|
||||
clipboard.writeText(toSystemSlashes(resourcePath));
|
||||
}}));
|
||||
} else if (itemType === "text") {
|
||||
menu.append(new MenuItem({label: _('Copy'), click: async () => {
|
||||
clipboard.writeText(arg0.textToCopy);
|
||||
}}));
|
||||
} else if (itemType === "link") {
|
||||
menu.append(new MenuItem({label: _('Copy Link Address'), click: async () => {
|
||||
clipboard.writeText(arg0.textToCopy);
|
||||
}}));
|
||||
} else {
|
||||
reg.logger().error('Unhandled item type: ' + itemType);
|
||||
return;
|
||||
@@ -433,6 +551,8 @@ class NoteTextComponent extends React.Component {
|
||||
} else {
|
||||
throw new Error('Unsupported item type: ' + item.type_);
|
||||
}
|
||||
} else if (urlUtils.urlProtocol(msg)) {
|
||||
require('electron').shell.openExternal(msg);
|
||||
} else {
|
||||
bridge().showErrorMessageBox(_('Unsupported link or message: %s', msg));
|
||||
}
|
||||
@@ -498,6 +618,8 @@ class NoteTextComponent extends React.Component {
|
||||
if (this.editor_) {
|
||||
this.editor_.editor.renderer.off('afterRender', this.onAfterEditorRender_);
|
||||
document.querySelector('#note-editor').removeEventListener('paste', this.onEditorPaste_, true);
|
||||
document.querySelector('#note-editor').removeEventListener('keydown', this.onEditorKeyDown_);
|
||||
document.querySelector('#note-editor').removeEventListener('contextmenu', this.onEditorContextMenu_);
|
||||
}
|
||||
|
||||
this.editor_ = element;
|
||||
@@ -509,8 +631,8 @@ class NoteTextComponent extends React.Component {
|
||||
const letters = ['F', 'T', 'P', 'Q', 'L', ','];
|
||||
for (let i = 0; i < letters.length; i++) {
|
||||
const l = letters[i];
|
||||
cancelledKeys.push('Ctrl+' + l);
|
||||
cancelledKeys.push('Command+' + l);
|
||||
cancelledKeys.push('Ctrl+' + l);
|
||||
cancelledKeys.push('Command+' + l);
|
||||
}
|
||||
|
||||
for (let i = 0; i < cancelledKeys.length; i++) {
|
||||
@@ -525,6 +647,40 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
document.querySelector('#note-editor').addEventListener('paste', this.onEditorPaste_, true);
|
||||
document.querySelector('#note-editor').addEventListener('keydown', this.onEditorKeyDown_);
|
||||
document.querySelector('#note-editor').addEventListener('contextmenu', this.onEditorContextMenu_);
|
||||
|
||||
const lineLeftSpaces = function(line) {
|
||||
let output = '';
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
if ([' ', '\t'].indexOf(line[i]) >= 0) {
|
||||
output += line[i];
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// Disable Markdown auto-completion (eg. auto-adding a dash after a line with a dash.
|
||||
// https://github.com/ajaxorg/ace/issues/2754
|
||||
const that = this; // The "this" within the function below refers to something else
|
||||
this.editor_.editor.getSession().getMode().getNextLineIndent = function(state, line) {
|
||||
const ls = that.state.lastKeys;
|
||||
if (ls.length >= 2 && ls[ls.length - 1] === 'Enter' && ls[ls.length - 2] === 'Enter') return this.$getIndent(line);
|
||||
|
||||
const leftSpaces = lineLeftSpaces(line);
|
||||
const lineNoLeftSpaces = line.trimLeft();
|
||||
|
||||
if (lineNoLeftSpaces.indexOf('- [ ] ') === 0 || lineNoLeftSpaces.indexOf('- [x] ') === 0 || lineNoLeftSpaces.indexOf('- [X] ') === 0) return leftSpaces + '- [ ] ';
|
||||
if (lineNoLeftSpaces.indexOf('- ') === 0) return leftSpaces + '- ';
|
||||
if (lineNoLeftSpaces.indexOf('* ') === 0 && line.trim() !== '* * *') return leftSpaces + '* ';
|
||||
|
||||
const bulletNumber = markdownUtils.olLineNumber(lineNoLeftSpaces);
|
||||
if (bulletNumber) return leftSpaces + (bulletNumber + 1) + '. ';
|
||||
|
||||
return this.$getIndent(line);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -581,8 +737,16 @@ class NoteTextComponent extends React.Component {
|
||||
updateHtml(body = null) {
|
||||
const mdOptions = {
|
||||
onResourceLoaded: () => {
|
||||
this.updateHtml();
|
||||
this.forceUpdate();
|
||||
if (this.resourceLoadedTimeoutId_) {
|
||||
clearTimeout(this.resourceLoadedTimeoutId_);
|
||||
this.resourceLoadedTimeoutId_ = null;
|
||||
}
|
||||
|
||||
this.resourceLoadedTimeoutId_ = setTimeout(() => {
|
||||
this.resourceLoadedTimeoutId_ = null;
|
||||
this.updateHtml();
|
||||
this.forceUpdate();
|
||||
}, 100);
|
||||
},
|
||||
postMessageSyntax: 'ipcRenderer.sendToHost',
|
||||
};
|
||||
@@ -606,13 +770,14 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
|
||||
async doCommand(command) {
|
||||
if (!command) return;
|
||||
if (!command || !this.state.note) return;
|
||||
|
||||
let commandProcessed = true;
|
||||
|
||||
if (command.name === 'exportPdf' && this.webview_) {
|
||||
const path = bridge().showSaveDialog({
|
||||
filters: [{ name: _('PDF File'), extensions: ['pdf']}]
|
||||
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
|
||||
defaultPath: safeFilename(this.state.note.title),
|
||||
});
|
||||
|
||||
if (path) {
|
||||
@@ -626,6 +791,14 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
} else if (command.name === 'print' && this.webview_) {
|
||||
this.webview_.print();
|
||||
} else if (command.name === 'textBold') {
|
||||
this.commandTextBold();
|
||||
} else if (command.name === 'textItalic') {
|
||||
this.commandTextItalic();
|
||||
} else if (command.name === 'insertDateTime' ) {
|
||||
this.commandDateTime();
|
||||
} else if (command.name === 'commandStartExternalEditing') {
|
||||
this.commandStartExternalEditing();
|
||||
} else {
|
||||
commandProcessed = false;
|
||||
}
|
||||
@@ -649,7 +822,7 @@ class NoteTextComponent extends React.Component {
|
||||
await this.saveIfNeeded(true);
|
||||
let note = await Note.load(this.state.note.id);
|
||||
|
||||
const position = this.cursorPosition();
|
||||
const position = this.currentTextOffset();
|
||||
|
||||
for (let i = 0; i < filePaths.length; i++) {
|
||||
const filePath = filePaths[i];
|
||||
@@ -680,6 +853,44 @@ class NoteTextComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
externalEditWatcher() {
|
||||
if (!this.externalEditWatcher_) {
|
||||
this.externalEditWatcher_ = new ExternalEditWatcher((action) => { return this.props.dispatch(action) });
|
||||
this.externalEditWatcher_.setLogger(reg.logger());
|
||||
this.externalEditWatcher_.on('noteChange', this.externalEditWatcher_noteChange);
|
||||
}
|
||||
|
||||
return this.externalEditWatcher_;
|
||||
}
|
||||
|
||||
externalEditWatcherUpdateNoteFile(note) {
|
||||
if (this.externalEditWatcher_) this.externalEditWatcher().updateNoteFile(note);
|
||||
}
|
||||
|
||||
externalEditWatcherStopWatchingAll() {
|
||||
if (this.externalEditWatcher_) this.externalEditWatcher().stopWatchingAll();
|
||||
}
|
||||
|
||||
destroyExternalEditWatcher() {
|
||||
if (!this.externalEditWatcher_) return;
|
||||
|
||||
this.externalEditWatcher_.off('noteChange', this.externalEditWatcher_noteChange);
|
||||
this.externalEditWatcher_.stopWatchingAll();
|
||||
this.externalEditWatcher_ = null;
|
||||
}
|
||||
|
||||
async commandStartExternalEditing() {
|
||||
try {
|
||||
await this.externalEditWatcher().openAndWatch(this.state.note);
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(_('Error opening note in editor: %s', error.message));
|
||||
}
|
||||
}
|
||||
|
||||
async commandStopExternalEditing() {
|
||||
this.externalEditWatcherStopWatchingAll();
|
||||
}
|
||||
|
||||
async commandSetTags() {
|
||||
await this.saveIfNeeded(true);
|
||||
|
||||
@@ -690,6 +901,201 @@ class NoteTextComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
// Returns the actual Ace Editor instance (not the React wrapper)
|
||||
rawEditor() {
|
||||
return this.editor_ && this.editor_.editor ? this.editor_.editor : null;
|
||||
}
|
||||
|
||||
updateEditorWithDelay(fn) {
|
||||
setTimeout(() => {
|
||||
if (!this.rawEditor()) return;
|
||||
fn(this.rawEditor());
|
||||
}, 10);
|
||||
}
|
||||
|
||||
lineAtRow(row) {
|
||||
if (!this.state.note) return '';
|
||||
const body = this.state.note.body
|
||||
const lines = body.split('\n');
|
||||
if (row < 0 || row >= lines.length) return '';
|
||||
return lines[row];
|
||||
}
|
||||
|
||||
selectedText() {
|
||||
if (!this.state.note || !this.state.note.body) return '';
|
||||
|
||||
const selection = this.textOffsetSelection();
|
||||
if (!selection || selection.start === selection.end) return '';
|
||||
|
||||
return this.state.note.body.substr(selection.start, selection.end - selection.start);
|
||||
}
|
||||
|
||||
editorCopyText() {
|
||||
clipboard.writeText(this.selectedText());
|
||||
}
|
||||
|
||||
editorCutText() {
|
||||
const selectedText = this.selectedText();
|
||||
if (!selectedText) return;
|
||||
|
||||
clipboard.writeText(selectedText);
|
||||
|
||||
const s = this.textOffsetSelection();
|
||||
if (!s || s.start === s.end) return '';
|
||||
|
||||
const s1 = this.state.note.body.substr(0, s.start);
|
||||
const s2 = this.state.note.body.substr(s.end);
|
||||
|
||||
shared.noteComponent_change(this, 'body', s1 + s2);
|
||||
|
||||
this.updateEditorWithDelay((editor) => {
|
||||
const range = this.selectionRange_;
|
||||
range.setStart(range.start.row, range.start.column);
|
||||
range.setEnd(range.start.row, range.start.column);
|
||||
editor.getSession().getSelection().setSelectionRange(range, false);
|
||||
editor.focus();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
editorPasteText() {
|
||||
const s = this.textOffsetSelection();
|
||||
const s1 = this.state.note.body.substr(0, s.start);
|
||||
const s2 = this.state.note.body.substr(s.end);
|
||||
this.wrapSelectionWithStrings("", "", '', clipboard.readText());
|
||||
}
|
||||
|
||||
selectionRangePreviousLine() {
|
||||
if (!this.selectionRange_) return '';
|
||||
const row = this.selectionRange_.start.row;
|
||||
return this.lineAtRow(row - 1);
|
||||
}
|
||||
|
||||
selectionRangeCurrentLine() {
|
||||
if (!this.selectionRange_) return '';
|
||||
const row = this.selectionRange_.start.row;
|
||||
return this.lineAtRow(row);
|
||||
}
|
||||
|
||||
textOffsetSelection() {
|
||||
return this.selectionRange_ ? this.rangeToTextOffsets(this.selectionRange_, this.state.note.body) : null;
|
||||
}
|
||||
|
||||
wrapSelectionWithStrings(string1, string2 = '', defaultText = '', replacementText = '') {
|
||||
if (!this.rawEditor() || !this.state.note) return;
|
||||
|
||||
const selection = this.textOffsetSelection();
|
||||
|
||||
let newBody = this.state.note.body;
|
||||
|
||||
if (selection && selection.start !== selection.end) {
|
||||
const s1 = this.state.note.body.substr(0, selection.start);
|
||||
const s2 = replacementText ? replacementText : this.state.note.body.substr(selection.start, selection.end - selection.start);
|
||||
const s3 = this.state.note.body.substr(selection.end);
|
||||
newBody = s1 + string1 + s2 + string2 + s3;
|
||||
|
||||
const r = this.selectionRange_;
|
||||
|
||||
const newRange = {
|
||||
start: { row: r.start.row, column: r.start.column + string1.length},
|
||||
end: { row: r.end.row, column: r.end.column + string1.length},
|
||||
};
|
||||
|
||||
if (replacementText) {
|
||||
const diff = replacementText.length - (selection.end - selection.start);
|
||||
newRange.end.column += diff;
|
||||
}
|
||||
|
||||
this.updateEditorWithDelay((editor) => {
|
||||
const range = this.selectionRange_;
|
||||
range.setStart(newRange.start.row, newRange.start.column);
|
||||
range.setEnd(newRange.end.row, newRange.end.column);
|
||||
editor.getSession().getSelection().setSelectionRange(range, false);
|
||||
editor.focus();
|
||||
});
|
||||
} else {
|
||||
let middleText = replacementText ? replacementText : defaultText;
|
||||
const textOffset = this.currentTextOffset();
|
||||
const s1 = this.state.note.body.substr(0, textOffset);
|
||||
const s2 = this.state.note.body.substr(textOffset);
|
||||
newBody = s1 + string1 + middleText + string2 + s2;
|
||||
|
||||
const p = this.textOffsetToCursorPosition(textOffset + string1.length, newBody);
|
||||
const newRange = {
|
||||
start: { row: p.row, column: p.column },
|
||||
end: { row: p.row, column: p.column + middleText.length },
|
||||
};
|
||||
|
||||
this.updateEditorWithDelay((editor) => {
|
||||
if (middleText && newRange) {
|
||||
const range = this.selectionRange_;
|
||||
range.setStart(newRange.start.row, newRange.start.column);
|
||||
range.setEnd(newRange.end.row, newRange.end.column);
|
||||
editor.getSession().getSelection().setSelectionRange(range, false);
|
||||
} else {
|
||||
for (let i = 0; i < string1.length; i++) {
|
||||
editor.getSession().getSelection().moveCursorRight();
|
||||
}
|
||||
}
|
||||
editor.focus();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
shared.noteComponent_change(this, 'body', newBody);
|
||||
this.scheduleHtmlUpdate();
|
||||
this.scheduleSave();
|
||||
}
|
||||
|
||||
commandTextBold() {
|
||||
this.wrapSelectionWithStrings('**', '**', _('strong text'));
|
||||
}
|
||||
|
||||
commandTextItalic() {
|
||||
this.wrapSelectionWithStrings('*', '*', _('emphasized text'));
|
||||
}
|
||||
|
||||
commandDateTime() {
|
||||
this.wrapSelectionWithStrings(time.formatMsToLocal(new Date().getTime()));
|
||||
}
|
||||
|
||||
commandTextCode() {
|
||||
this.wrapSelectionWithStrings('`', '`');
|
||||
}
|
||||
|
||||
addListItem(string1, string2 = '', defaultText = '') {
|
||||
const currentLine = this.selectionRangeCurrentLine();
|
||||
let newLine = '\n'
|
||||
if (!currentLine) newLine = '';
|
||||
this.wrapSelectionWithStrings(newLine + string1, string2, defaultText);
|
||||
}
|
||||
|
||||
commandTextCheckbox() {
|
||||
this.addListItem('- [ ] ', '', _('List item'));
|
||||
}
|
||||
|
||||
commandTextListUl() {
|
||||
this.addListItem('- ', '', _('List item'));
|
||||
}
|
||||
|
||||
commandTextListOl() {
|
||||
let bulletNumber = markdownUtils.olLineNumber(this.selectionRangeCurrentLine());
|
||||
if (!bulletNumber) bulletNumber = markdownUtils.olLineNumber(this.selectionRangePreviousLine());
|
||||
if (!bulletNumber) bulletNumber = 0;
|
||||
this.addListItem((bulletNumber + 1) + '. ', '', _('List item'));
|
||||
}
|
||||
|
||||
commandTextHeading() {
|
||||
this.addListItem('## ');
|
||||
}
|
||||
|
||||
commandTextHorizontalRule() {
|
||||
this.addListItem('* * *');
|
||||
}
|
||||
|
||||
async commandTextLink() {
|
||||
const url = await dialogs.prompt(_('Insert Hyperlink'));
|
||||
this.wrapSelectionWithStrings('[', '](' + url + ')');
|
||||
}
|
||||
|
||||
itemContextMenu(event) {
|
||||
const note = this.state.note;
|
||||
if (!note) return;
|
||||
@@ -713,6 +1119,151 @@ class NoteTextComponent extends React.Component {
|
||||
menu.popup(bridge().window());
|
||||
}
|
||||
|
||||
createToolbarItems(note) {
|
||||
const toolbarItems = [];
|
||||
if (note && this.state.folder && ['Search', 'Tag'].includes(this.props.notesParentType)) {
|
||||
toolbarItems.push({
|
||||
title: _('In: %s', this.state.folder.title),
|
||||
iconName: 'fa-folder-o',
|
||||
enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Bold'),
|
||||
iconName: 'fa-bold',
|
||||
onClick: () => { return this.commandTextBold(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Italic'),
|
||||
iconName: 'fa-italic',
|
||||
onClick: () => { return this.commandTextItalic(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
type: 'separator',
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Note properties'),
|
||||
iconName: 'fa-info-circle',
|
||||
onClick: () => {
|
||||
const n = this.state.note;
|
||||
if (!n || !n.id) return;
|
||||
|
||||
this.props.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'commandNoteProperties',
|
||||
noteId: n.id,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
type: 'separator',
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Hyperlink'),
|
||||
iconName: 'fa-link',
|
||||
onClick: () => { return this.commandTextLink(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Code'),
|
||||
iconName: 'fa-code',
|
||||
onClick: () => { return this.commandTextCode(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Attach file'),
|
||||
iconName: 'fa-paperclip',
|
||||
onClick: () => { return this.commandAttachFile(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
type: 'separator',
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Numbered List'),
|
||||
iconName: 'fa-list-ol',
|
||||
onClick: () => { return this.commandTextListOl(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Bulleted List'),
|
||||
iconName: 'fa-list-ul',
|
||||
onClick: () => { return this.commandTextListUl(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Checkbox'),
|
||||
iconName: 'fa-check-square',
|
||||
onClick: () => { return this.commandTextCheckbox(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Heading'),
|
||||
iconName: 'fa-header',
|
||||
onClick: () => { return this.commandTextHeading(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Horizontal Rule'),
|
||||
iconName: 'fa-ellipsis-h',
|
||||
onClick: () => { return this.commandTextHorizontalRule(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Insert Date Time'),
|
||||
iconName: 'fa-calendar-plus-o',
|
||||
onClick: () => { return this.commandDateTime(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
type: 'separator',
|
||||
});
|
||||
|
||||
if (note && this.props.watchedNoteFiles.indexOf(note.id) >= 0) {
|
||||
toolbarItems.push({
|
||||
tooltip: _('Click to stop external editing'),
|
||||
title: _('Watching...'),
|
||||
iconName: 'fa-external-link',
|
||||
onClick: () => { return this.commandStopExternalEditing(); },
|
||||
});
|
||||
} else {
|
||||
toolbarItems.push({
|
||||
tooltip: _('Edit in external editor'),
|
||||
iconName: 'fa-external-link',
|
||||
onClick: () => { return this.commandStartExternalEditing(); },
|
||||
});
|
||||
}
|
||||
|
||||
toolbarItems.push({
|
||||
tooltip: _('Tags'),
|
||||
iconName: 'fa-tags',
|
||||
onClick: () => { return this.commandSetTags(); },
|
||||
});
|
||||
|
||||
if (note.is_todo) {
|
||||
const item = {
|
||||
iconName: 'fa-clock-o',
|
||||
enabled: !note.todo_completed,
|
||||
onClick: () => { return this.commandSetAlarm(); },
|
||||
}
|
||||
if (Note.needAlarm(note)) {
|
||||
item.title = time.formatMsToLocal(note.todo_due);
|
||||
} else {
|
||||
item.tooltip = _('Set alarm');
|
||||
}
|
||||
toolbarItems.push(item);
|
||||
}
|
||||
|
||||
return toolbarItems;
|
||||
}
|
||||
|
||||
render() {
|
||||
const style = this.props.style;
|
||||
const note = this.state.note;
|
||||
@@ -827,28 +1378,7 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
const toolbarItems = [];
|
||||
|
||||
toolbarItems.push({
|
||||
title: _('Attach file'),
|
||||
iconName: 'fa-paperclip',
|
||||
onClick: () => { return this.commandAttachFile(); },
|
||||
});
|
||||
|
||||
toolbarItems.push({
|
||||
title: _('Tags'),
|
||||
iconName: 'fa-tags',
|
||||
onClick: () => { return this.commandSetTags(); },
|
||||
});
|
||||
|
||||
if (note.is_todo) {
|
||||
toolbarItems.push({
|
||||
title: Note.needAlarm(note) ? time.formatMsToLocal(note.todo_due) : _('Set alarm'),
|
||||
iconName: 'fa-clock-o',
|
||||
enabled: !note.todo_completed,
|
||||
onClick: () => { return this.commandSetAlarm(); },
|
||||
});
|
||||
}
|
||||
const toolbarItems = this.createToolbarItems(note);
|
||||
|
||||
const toolbar = <Toolbar
|
||||
style={toolbarStyle}
|
||||
@@ -872,7 +1402,7 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const viewer = <webview
|
||||
style={viewerStyle}
|
||||
nodeintegration="1"
|
||||
preload="gui/note-viewer/preload.js"
|
||||
src="gui/note-viewer/index.html"
|
||||
ref={(elem) => { this.webview_ref(elem); } }
|
||||
/>
|
||||
@@ -914,6 +1444,8 @@ class NoteTextComponent extends React.Component {
|
||||
ref={(elem) => { this.editor_ref(elem); } }
|
||||
onChange={(body) => { this.aceEditor_change(body) }}
|
||||
showPrintMargin={false}
|
||||
onSelectionChange={this.aceEditor_selectionChange}
|
||||
onFocus={this.aceEditor_focus}
|
||||
|
||||
// Disable warning: "Automatically scrolling cursor into view after
|
||||
// selection change this will be disabled in the next version set
|
||||
@@ -921,7 +1453,7 @@ class NoteTextComponent extends React.Component {
|
||||
editorProps={{$blockScrolling: true}}
|
||||
|
||||
// This is buggy (gets outside the container)
|
||||
highlightActiveLine={false}
|
||||
highlightActiveLine={false}
|
||||
/>
|
||||
|
||||
return (
|
||||
@@ -954,6 +1486,7 @@ const mapStateToProps = (state) => {
|
||||
notesParentType: state.notesParentType,
|
||||
searches: state.searches,
|
||||
selectedSearchId: state.selectedSearchId,
|
||||
watchedNoteFiles: state.watchedNoteFiles,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -102,7 +102,8 @@ class PromptDialog extends React.Component {
|
||||
if (this.props.onClose) {
|
||||
let outputAnswer = this.state.answer;
|
||||
if (this.props.inputType === 'datetime') {
|
||||
outputAnswer = anythingToDate(outputAnswer);
|
||||
// outputAnswer = anythingToDate(outputAnswer);
|
||||
outputAnswer = time.anythingToDateTime(outputAnswer);
|
||||
}
|
||||
this.props.onClose(accept ? outputAnswer : null, buttonType);
|
||||
}
|
||||
@@ -113,14 +114,14 @@ class PromptDialog extends React.Component {
|
||||
this.setState({ answer: event.target.value });
|
||||
}
|
||||
|
||||
const anythingToDate = (o) => {
|
||||
if (o && o.toDate) return o.toDate();
|
||||
if (!o) return null;
|
||||
let m = moment(o, time.dateTimeFormat());
|
||||
if (m.isValid()) return m.toDate();
|
||||
m = moment(o, time.dateFormat());
|
||||
return m.isValid() ? m.toDate() : null;
|
||||
}
|
||||
// const anythingToDate = (o) => {
|
||||
// if (o && o.toDate) return o.toDate();
|
||||
// if (!o) return null;
|
||||
// let m = moment(o, time.dateTimeFormat());
|
||||
// if (m.isValid()) return m.toDate();
|
||||
// m = moment(o, time.dateFormat());
|
||||
// return m.isValid() ? m.toDate() : null;
|
||||
// }
|
||||
|
||||
const onDateTimeChange = (momentObject) => {
|
||||
this.setState({ answer: momentObject });
|
||||
|
@@ -55,6 +55,21 @@ class SideBarComponent extends React.Component {
|
||||
}
|
||||
};
|
||||
|
||||
this.onTagDrop_ = async (event) => {
|
||||
const tagId = event.currentTarget.getAttribute('tagid');
|
||||
const dt = event.dataTransfer;
|
||||
if (!dt) return;
|
||||
|
||||
if (dt.types.indexOf("text/x-jop-note-ids") >= 0) {
|
||||
event.preventDefault();
|
||||
|
||||
const noteIds = JSON.parse(dt.getData("text/x-jop-note-ids"));
|
||||
for (let i = 0; i < noteIds.length; i++) {
|
||||
await Tag.addNote(tagId, noteIds[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.onFolderToggleClick_ = async (event) => {
|
||||
const folderId = event.currentTarget.getAttribute('folderid');
|
||||
|
||||
@@ -152,7 +167,7 @@ class SideBarComponent extends React.Component {
|
||||
marginRight: 5,
|
||||
minHeight: 70,
|
||||
wordWrap: "break-word",
|
||||
width: "100%",
|
||||
//width: "100%",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -238,14 +253,22 @@ class SideBarComponent extends React.Component {
|
||||
|
||||
const InteropService = require("lib/services/InteropService.js");
|
||||
|
||||
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, { sourceFolderIds: [itemId] });
|
||||
}}));
|
||||
}
|
||||
|
||||
menu.append(
|
||||
new MenuItem({
|
||||
label: _("Export"),
|
||||
click: async () => {
|
||||
const ioService = new InteropService();
|
||||
const module = ioService.moduleByFormat_("exporter", "jex");
|
||||
await InteropServiceHelper.export(this.props.dispatch.bind(this), module, { sourceFolderIds: [itemId] });
|
||||
},
|
||||
submenu: exportMenu,
|
||||
})
|
||||
);
|
||||
}
|
||||
@@ -346,8 +369,10 @@ class SideBarComponent extends React.Component {
|
||||
data-id={tag.id}
|
||||
data-type={BaseModel.TYPE_TAG}
|
||||
onContextMenu={event => this.itemContextMenu(event)}
|
||||
tagid={tag.id}
|
||||
key={tag.id}
|
||||
style={style}
|
||||
onDrop={this.onTagDrop_}
|
||||
onClick={() => {
|
||||
this.tagItem_click(tag);
|
||||
}}
|
||||
|
@@ -4,6 +4,7 @@ const { reg } = require('lib/registry.js');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const ToolbarButton = require('./ToolbarButton.min.js');
|
||||
const ToolbarSpace = require('./ToolbarSpace.min.js');
|
||||
|
||||
class ToolbarComponent extends React.Component {
|
||||
|
||||
@@ -25,17 +26,17 @@ class ToolbarComponent extends React.Component {
|
||||
key += o.title ? o.title : '';
|
||||
const itemType = !('type' in o) ? 'button' : o.type;
|
||||
|
||||
if (!key) key = o.type + '_' + i;
|
||||
|
||||
const props = Object.assign({
|
||||
key: key,
|
||||
theme: this.props.theme,
|
||||
}, o);
|
||||
|
||||
if (itemType === 'button') {
|
||||
itemComps.push(<ToolbarButton
|
||||
{...props}
|
||||
/>);
|
||||
} else if (itemType === 'text') {
|
||||
|
||||
itemComps.push(<ToolbarButton {...props} />);
|
||||
} else if (itemType === 'separator') {
|
||||
itemComps.push(<ToolbarSpace {...props} />);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -5,32 +5,20 @@ const { themeStyle } = require('../theme.js');
|
||||
class ToolbarButton extends React.Component {
|
||||
|
||||
render() {
|
||||
//const style = this.props.style;
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const style = {
|
||||
height: theme.toolbarHeight,
|
||||
minWidth: theme.toolbarHeight,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
paddingLeft: theme.headerButtonHPadding,
|
||||
paddingRight: theme.headerButtonHPadding,
|
||||
color: theme.color,
|
||||
textDecoration: 'none',
|
||||
fontFamily: theme.fontFamily,
|
||||
fontSize: theme.fontSize,
|
||||
boxSizing: 'border-box',
|
||||
cursor: 'default',
|
||||
justifyContent: 'center',
|
||||
};
|
||||
const style = Object.assign({}, theme.toolbarStyle);
|
||||
|
||||
const title = this.props.title ? this.props.title : '';
|
||||
const tooltip = this.props.tooltip ? this.props.tooltip : title;
|
||||
|
||||
let icon = null;
|
||||
if (this.props.iconName) {
|
||||
const iconStyle = {
|
||||
fontSize: Math.round(theme.fontSize * 1.4),
|
||||
fontSize: Math.round(theme.fontSize * 1.5),
|
||||
color: theme.color
|
||||
};
|
||||
if (this.props.title) iconStyle.marginRight = 5;
|
||||
if (title) iconStyle.marginRight = 5;
|
||||
icon = <i style={iconStyle} className={"fa " + this.props.iconName}></i>
|
||||
}
|
||||
|
||||
@@ -46,10 +34,11 @@ class ToolbarButton extends React.Component {
|
||||
<a
|
||||
className={classes.join(' ')}
|
||||
style={finalStyle}
|
||||
title={tooltip}
|
||||
href="#"
|
||||
onClick={() => { if (isEnabled && this.props.onClick) this.props.onClick() }}
|
||||
>
|
||||
{icon}{this.props.title ? this.props.title : ''}
|
||||
{icon}{title}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
22
ElectronClient/app/gui/ToolbarSpace.jsx
Normal file
22
ElectronClient/app/gui/ToolbarSpace.jsx
Normal file
@@ -0,0 +1,22 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
|
||||
class ToolbarSpace extends React.Component {
|
||||
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const style = Object.assign({}, theme.toolbarStyle);
|
||||
style.minWidth = style.height / 2;
|
||||
|
||||
return (
|
||||
<span
|
||||
style={style}
|
||||
>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ToolbarSpace;
|
@@ -34,7 +34,6 @@
|
||||
<div id="content" ondragstart="return false;" ondrop="return false;"></div>
|
||||
|
||||
<script>
|
||||
const { ipcRenderer } = require('electron');
|
||||
const contentElement = document.getElementById('content');
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -230,9 +229,23 @@
|
||||
|
||||
if (element && element.getAttribute('data-resource-id')) {
|
||||
ipcRenderer.sendToHost('contextMenu', {
|
||||
type: element.getAttribute('src') ? 'image' : 'link',
|
||||
type: element.getAttribute('src') ? 'image' : 'resource',
|
||||
resourceId: element.getAttribute('data-resource-id'),
|
||||
});
|
||||
} else {
|
||||
const selectedText = window.getSelection().toString();
|
||||
|
||||
if (selectedText) {
|
||||
ipcRenderer.sendToHost('contextMenu', {
|
||||
type: 'text',
|
||||
textToCopy: selectedText,
|
||||
});
|
||||
} else if (event.target.getAttribute('href')) {
|
||||
ipcRenderer.sendToHost('contextMenu', {
|
||||
type: 'link',
|
||||
textToCopy: event.target.getAttribute('href'),
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
4
ElectronClient/app/gui/note-viewer/preload.js
Normal file
4
ElectronClient/app/gui/note-viewer/preload.js
Normal file
@@ -0,0 +1,4 @@
|
||||
// Define here Electron objects that need to be accessed from the WebView
|
||||
// https://github.com/electron/electron/blob/master/docs/tutorial/security.md#2-disable-nodejs-integration-for-remote-content
|
||||
|
||||
window.ipcRenderer = require('electron').ipcRenderer;
|
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>Joplin</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="stylesheet" href="css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="css/fork-awesome.min.css">
|
||||
<link rel="stylesheet" href="node_modules/react-datetime/css/react-datetime.css">
|
||||
<link rel="stylesheet" href="node_modules/smalltalk/css/smalltalk.css">
|
||||
<style>
|
||||
|
1
ElectronClient/app/locales/ca.json
Normal file
1
ElectronClient/app/locales/ca.json
Normal file
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
@@ -1,5 +1,6 @@
|
||||
var locales = {};
|
||||
locales['en_GB'] = require('./en_GB.json');
|
||||
locales['ca'] = require('./ca.json');
|
||||
locales['cs_CZ'] = require('./cs_CZ.json');
|
||||
locales['da_DK'] = require('./da_DK.json');
|
||||
locales['de_DE'] = require('./de_DE.json');
|
||||
@@ -10,9 +11,15 @@ locales['gl_ES'] = require('./gl_ES.json');
|
||||
locales['hr_HR'] = require('./hr_HR.json');
|
||||
locales['it_IT'] = require('./it_IT.json');
|
||||
locales['ja_JP'] = require('./ja_JP.json');
|
||||
locales['ko'] = require('./ko.json');
|
||||
locales['nl_BE'] = require('./nl_BE.json');
|
||||
locales['nl_NL'] = require('./nl_NL.json');
|
||||
locales['no'] = require('./no.json');
|
||||
locales['pt_BR'] = require('./pt_BR.json');
|
||||
locales['ro'] = require('./ro.json');
|
||||
locales['ru_RU'] = require('./ru_RU.json');
|
||||
locales['sl_SI'] = require('./sl_SI.json');
|
||||
locales['sv'] = require('./sv.json');
|
||||
locales['zh_CN'] = require('./zh_CN.json');
|
||||
locales['zh_TW'] = require('./zh_TW.json');
|
||||
module.exports = { locales: locales };
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/ko.json
Normal file
1
ElectronClient/app/locales/ko.json
Normal file
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/nb.json
Normal file
1
ElectronClient/app/locales/nb.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/nl_NL.json
Normal file
1
ElectronClient/app/locales/nl_NL.json
Normal file
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/no.json
Normal file
1
ElectronClient/app/locales/no.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/ro.json
Normal file
1
ElectronClient/app/locales/ro.json
Normal file
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
1
ElectronClient/app/locales/sv.json
Normal file
1
ElectronClient/app/locales/sv.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
ElectronClient/app/locales/zh_TW.json
Normal file
1
ElectronClient/app/locales/zh_TW.json
Normal file
File diff suppressed because one or more lines are too long
5180
ElectronClient/app/package-lock.json
generated
5180
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.96",
|
||||
"version": "1.0.107",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -57,17 +57,18 @@
|
||||
},
|
||||
"linux": {
|
||||
"asar": false,
|
||||
"category": "Office"
|
||||
"category": "Office",
|
||||
"target": "AppImage"
|
||||
}
|
||||
},
|
||||
"homepage": "https://github.com/laurent22/joplin#readme",
|
||||
"devDependencies": {
|
||||
"ajv": "^6.2.0",
|
||||
"app-builder-bin": "^1.5.0",
|
||||
"ajv": "^6.5.0",
|
||||
"app-builder-bin": "^1.9.11",
|
||||
"babel-cli": "^6.26.0",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"electron": "^1.7.11",
|
||||
"electron-builder": "^20.10.0"
|
||||
"electron": "^1.8.7",
|
||||
"electron-builder": "20.14.7"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"7zip-bin-mac": "^1.0.1",
|
||||
@@ -78,39 +79,41 @@
|
||||
"app-module-path": "^2.2.0",
|
||||
"async-mutex": "^0.1.3",
|
||||
"base-64": "^0.1.0",
|
||||
"compare-versions": "^3.1.0",
|
||||
"chokidar": "^2.0.3",
|
||||
"compare-versions": "^3.2.1",
|
||||
"electron-context-menu": "^0.9.1",
|
||||
"electron-is-dev": "^0.3.0",
|
||||
"electron-window-state": "^4.1.1",
|
||||
"es6-promise-pool": "^2.5.0",
|
||||
"follow-redirects": "^1.2.5",
|
||||
"form-data": "^2.3.1",
|
||||
"follow-redirects": "^1.5.0",
|
||||
"form-data": "^2.3.2",
|
||||
"formatcoords": "^1.1.3",
|
||||
"fs-extra": "^5.0.0",
|
||||
"highlight.js": "^9.12.0",
|
||||
"html-entities": "^1.2.1",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.5",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.6",
|
||||
"joplin-turndown": "^4.0.8",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"jssha": "^2.3.1",
|
||||
"katex": "^0.9.0-beta1",
|
||||
"katex": "^0.10.0-rc.1",
|
||||
"levenshtein": "^1.0.5",
|
||||
"lodash": "^4.17.4",
|
||||
"lodash": "^4.17.10",
|
||||
"mark.js": "^8.11.1",
|
||||
"markdown-it": "^8.4.0",
|
||||
"markdown-it": "^8.4.1",
|
||||
"markdown-it-katex": "^2.0.3",
|
||||
"md5": "^2.2.1",
|
||||
"mermaid": "^8.0.0-rc.8",
|
||||
"mime": "^2.0.3",
|
||||
"moment": "^2.19.1",
|
||||
"mime": "^2.3.1",
|
||||
"moment": "^2.22.2",
|
||||
"node-fetch": "^1.7.3",
|
||||
"node-notifier": "^5.1.2",
|
||||
"node-notifier": "^5.2.1",
|
||||
"promise": "^8.0.1",
|
||||
"query-string": "^5.0.1",
|
||||
"react": "^16.0.0",
|
||||
"react-ace": "^5.5.0",
|
||||
"react-datetime": "^2.11.0",
|
||||
"react-dom": "^16.0.0",
|
||||
"react-redux": "^5.0.6",
|
||||
"query-string": "^5.1.1",
|
||||
"react": "^16.4.0",
|
||||
"react-ace": "^6.1.4",
|
||||
"react-datetime": "^2.14.0",
|
||||
"react-dom": "^16.4.0",
|
||||
"react-redux": "^5.0.7",
|
||||
"read-chunk": "^2.1.0",
|
||||
"readability-node": "^0.1.0",
|
||||
"redux": "^3.7.2",
|
||||
@@ -119,11 +122,12 @@
|
||||
"sprintf-js": "^1.1.1",
|
||||
"sqlite3": "^3.1.13",
|
||||
"string-padding": "^1.0.2",
|
||||
"string-to-stream": "^1.1.0",
|
||||
"tar": "^4.4.0",
|
||||
"string-to-stream": "^1.1.1",
|
||||
"syswide-cas": "^5.1.0",
|
||||
"tar": "^4.4.4",
|
||||
"tcp-port-used": "^0.1.2",
|
||||
"url-parse": "^1.2.0",
|
||||
"uuid": "^3.1.0",
|
||||
"url-parse": "^1.4.1",
|
||||
"uuid": "^3.2.1",
|
||||
"valid-url": "^1.0.9",
|
||||
"xml2js": "^0.4.19"
|
||||
}
|
||||
|
@@ -73,4 +73,12 @@ table td, table th {
|
||||
background-color: rgba(0,0,0,0.10) !important;
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.smalltalk {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.note-property-box .rdt {
|
||||
display: inline-block;
|
||||
}
|
@@ -76,11 +76,31 @@ globalStyle.textStyle2 = Object.assign({}, globalStyle.textStyle, {
|
||||
color: globalStyle.color2,
|
||||
});
|
||||
|
||||
globalStyle.urlStyle = Object.assign({}, globalStyle.textStyle, { color: "#155BDA", 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,
|
||||
color: globalStyle.color,
|
||||
textDecoration: 'none',
|
||||
fontFamily: globalStyle.fontFamily,
|
||||
fontSize: globalStyle.fontSize,
|
||||
boxSizing: 'border-box',
|
||||
cursor: 'default',
|
||||
justifyContent: 'center',
|
||||
};
|
||||
|
||||
let themeCache_ = {};
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user