You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-24 20:19:10 +02:00
Compare commits
206 Commits
android-v1
...
android-v1
Author | SHA1 | Date | |
---|---|---|---|
|
beb428b246 | ||
|
4d81caff0b | ||
|
78372c9bac | ||
|
a4db1bc671 | ||
|
8ea1c373ed | ||
|
8ef27dfcdc | ||
|
23e43c7bc1 | ||
|
edb8f4c79f | ||
|
e115fa4bb3 | ||
|
52a2daddbf | ||
|
c400142996 | ||
|
219171a18c | ||
|
d7d573d9dd | ||
|
c4b17f8919 | ||
|
da2f4b96c7 | ||
|
08af9de190 | ||
|
9e2982992a | ||
|
c03ac5c5f1 | ||
|
5934f2f08e | ||
|
f136f40fdc | ||
|
d213e4ab57 | ||
|
782aae4ddf | ||
|
4f47bd7bcd | ||
|
4f76946140 | ||
|
aa60923cbd | ||
|
7670ce32b1 | ||
|
0b98632336 | ||
|
49c998de83 | ||
|
da69d6b2c9 | ||
|
a757aefce0 | ||
|
b2129cb8c4 | ||
|
27f14c175f | ||
|
aad49c520b | ||
|
af794a16d6 | ||
|
ca7266cd69 | ||
|
fb758afc81 | ||
|
b806f0da49 | ||
|
4e3b1f3e13 | ||
|
475467c41c | ||
|
28e5039873 | ||
|
1efc6e6151 | ||
|
e280a02643 | ||
|
788dc42684 | ||
|
01f2759a62 | ||
|
9419e3af9c | ||
|
6d220005cc | ||
|
6d68e61bbd | ||
|
29582623b0 | ||
|
4571e7853a | ||
|
d6e59c5238 | ||
|
6335cbedb8 | ||
|
f3344ce05d | ||
|
155d38d24a | ||
|
412f6d8316 | ||
|
d0f3ed80e0 | ||
|
b86f3b74bd | ||
|
60054d1d8b | ||
|
c40c6428d7 | ||
|
e708ecccee | ||
|
04f991d3bf | ||
|
d5d7368ba0 | ||
|
abff929d4e | ||
|
49edc82594 | ||
|
7dd7d0ec17 | ||
|
61aaf64f95 | ||
|
da35785951 | ||
|
e394034678 | ||
|
edf002ab32 | ||
|
50f2076981 | ||
|
a9ae78bcde | ||
|
0d7f9a2ab3 | ||
|
a5ee120281 | ||
|
12ebf44e22 | ||
|
220f5d0967 | ||
|
4ef05272c4 | ||
|
c3262aa5f8 | ||
|
42119c8f42 | ||
|
27cce03968 | ||
|
776aba1e49 | ||
|
9356841cfc | ||
|
7fc233e808 | ||
|
7b2eac3abd | ||
|
93323deea5 | ||
|
e8fa399e9e | ||
|
a974eb5d9f | ||
|
6a3f04274d | ||
|
f8e1395087 | ||
|
82b5af51e5 | ||
|
cf40c14a86 | ||
|
be2b2b7836 | ||
|
0cebae8032 | ||
|
6ebc77cbba | ||
|
542a5e88b7 | ||
|
72b36522e8 | ||
|
252d937405 | ||
|
a73b0309b9 | ||
|
c22283e799 | ||
|
1e51ab4a59 | ||
|
0c2f2667d3 | ||
|
496c9ddb91 | ||
|
5ad0b2eed9 | ||
|
577d62e783 | ||
|
dcb73c9916 | ||
|
6b2910c3c7 | ||
|
db04906416 | ||
|
54fceeb07d | ||
|
fa32678645 | ||
|
ee1df1a396 | ||
|
729be8767c | ||
|
8471f0d86d | ||
|
390b818d71 | ||
|
1a1c190ea3 | ||
|
40d82b80f1 | ||
|
7647ecbbc7 | ||
|
b2a5cf9dd0 | ||
|
cbf3ab2ec2 | ||
|
c4a37ff0ba | ||
|
bdc7ea4346 | ||
|
d4c4b9b10a | ||
|
4b9105edff | ||
|
c0980a5a9e | ||
|
272055fc1d | ||
|
cbb1851b12 | ||
|
45d758d52e | ||
|
49936ef095 | ||
|
986d4be601 | ||
|
b6ad9719ad | ||
|
96a1546da1 | ||
|
6884dd2b9e | ||
|
9c027e59c4 | ||
|
9e16ff3644 | ||
|
4000cb5d1c | ||
|
1030b412ff | ||
|
54f0fbcf6b | ||
|
1602182085 | ||
|
20bb1238c5 | ||
|
68fbe8125e | ||
|
23e6e6e69d | ||
|
ade5af2559 | ||
|
0a993dc012 | ||
|
4baa46507f | ||
|
0d8878abd3 | ||
|
f962084591 | ||
|
921b45286b | ||
|
301bfed05e | ||
|
62e7d6fa86 | ||
|
7e34cd4452 | ||
|
b35cb9a7ab | ||
|
18b836525c | ||
|
e34e49b88d | ||
|
5bf879c2d9 | ||
|
61d6309c0e | ||
|
17c9c0f9ef | ||
|
9bd62fd3d4 | ||
|
de73d4baa7 | ||
|
379ff5163b | ||
|
d9538ccb08 | ||
|
9289dbdf77 | ||
|
5719ae495a | ||
|
a89e3b7924 | ||
|
e576d09712 | ||
|
43600a7824 | ||
|
921f01d9dc | ||
|
dec5668582 | ||
|
e30bc12354 | ||
|
fca4fa666d | ||
|
59478160c8 | ||
|
8110fe89ef | ||
|
c7ed1b5eae | ||
|
25951e7097 | ||
|
687b9d1bef | ||
|
630e77b9eb | ||
|
68ff2e17b3 | ||
|
945d83608a | ||
|
833d473268 | ||
|
2256b0c5ec | ||
|
677aa7d59b | ||
|
4363005e92 | ||
|
2e3ef618db | ||
|
1adbbd14c6 | ||
|
4dfd7db729 | ||
|
e70562a102 | ||
|
a0e5947ba4 | ||
|
e841ea8a91 | ||
|
770a435029 | ||
|
49b56e84a7 | ||
|
ff1a6fdbbd | ||
|
2168090b96 | ||
|
33f7b680bc | ||
|
0957298cb8 | ||
|
08f2f982cf | ||
|
3376fbfa55 | ||
|
4a31e5fe73 | ||
|
baacec5ba6 | ||
|
95188b71b8 | ||
|
cf57be6e98 | ||
|
b691092d7a | ||
|
03e60fc028 | ||
|
2e25ec318f | ||
|
7236e5e9ae | ||
|
6f7dd51a98 | ||
|
db1dab9293 | ||
|
06f1b9e4d7 | ||
|
8f958ac931 | ||
|
eae63bfb79 | ||
|
8adfc81c30 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -39,6 +39,7 @@ node_modules
|
||||
Tools/github_oauth_token.txt
|
||||
_releases
|
||||
ReactNativeClient/lib/csstojs/
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
ElectronClient/app/gui/note-viewer/fonts/
|
||||
ElectronClient/app/gui/note-viewer/lib.js
|
||||
Tools/commit_hook.txt
|
Binary file not shown.
Before Width: | Height: | Size: 335 KiB After Width: | Height: | Size: 336 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 244 KiB |
Binary file not shown.
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.png
Normal file
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 249 KiB |
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.psd
Normal file
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.psd
Normal file
Binary file not shown.
3
BUILD.md
3
BUILD.md
@@ -1,7 +1,8 @@
|
||||
[](https://travis-ci.org/laurent22/joplin) [](https://ci.appveyor.com/project/laurent22/joplin)
|
||||
|
||||
# General information
|
||||
|
||||
- All the applications share the same library, which, for historical reasons, is in ReactNativeClient/lib. This library is copied to the relevant directories when building each app.
|
||||
- The translations are built by running CliClient/build-translation.sh. You normally don't need to run this if you haven't updated the translation since the compiled files are on the repository.
|
||||
|
||||
## macOS dependencies
|
||||
|
||||
|
@@ -1,7 +1,3 @@
|
||||
**IMPORTANT:** At the moment pull requests for new features are no longer being accepted. More info there: https://github.com/laurent22/joplin/issues/1112
|
||||
|
||||
* * *
|
||||
|
||||
# User support
|
||||
|
||||
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
|
||||
@@ -18,11 +14,9 @@ Again, please check that it has not already been requested. If it has, simply **
|
||||
|
||||
# Creating a pull request
|
||||
|
||||
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. That scope, due to limited resources, might be narrower than you think. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't waste your time implementing something that might not be accepted.
|
||||
- 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. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't spend too much time implementing something that might not be accepted.
|
||||
|
||||
- Bug fixes have a very high change of being accepted.
|
||||
|
||||
- A pull request that is relevant to the current roadmap has a very high change of being accepted.
|
||||
- Bug fixes are always welcome.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
|
||||
|
@@ -23,6 +23,7 @@ const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const Cache = require('lib/Cache');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
|
||||
class Application extends BaseApplication {
|
||||
|
||||
@@ -422,6 +423,8 @@ class Application extends BaseApplication {
|
||||
const tags = await Tag.allWithNotes();
|
||||
|
||||
ResourceService.runInBackground();
|
||||
|
||||
RevisionService.instance().runInBackground();
|
||||
|
||||
this.dispatch({
|
||||
type: 'TAG_UPDATE_ALL',
|
||||
|
@@ -102,7 +102,7 @@ function getFooter() {
|
||||
|
||||
output.push('WEBSITE');
|
||||
output.push('');
|
||||
output.push(INDENT + 'https://joplin.cozic.net');
|
||||
output.push(INDENT + 'https://joplinapp.org');
|
||||
|
||||
output.push('');
|
||||
|
||||
|
@@ -132,7 +132,7 @@ class Command extends BaseCommand {
|
||||
|
||||
lines.push('# Searching');
|
||||
lines.push('');
|
||||
lines.push('Call **GET /search?query=YOUR_QUERY** to search for notes. This end-point supports the `field` parameter which is recommended to use so that you only get the data that you need. The query syntax is as described in the main documentation: https://joplin.cozic.net/#searching');
|
||||
lines.push('Call **GET /search?query=YOUR_QUERY** to search for notes. This end-point supports the `field` parameter which is recommended to use so that you only get the data that you need. The query syntax is as described in the main documentation: https://joplinapp.org/#searching');
|
||||
lines.push('');
|
||||
|
||||
for (let i = 0; i < models.length; i++) {
|
||||
|
@@ -6,6 +6,10 @@ const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { shim } = require('lib/shim');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
const imageType = require('image-type');
|
||||
const readChunk = require('read-chunk');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -14,7 +18,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
description() {
|
||||
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status` and `target-status`.');
|
||||
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.');
|
||||
}
|
||||
|
||||
options() {
|
||||
@@ -22,6 +26,7 @@ class Command extends BaseCommand {
|
||||
// This is here mostly for testing - shouldn't be used
|
||||
['-p, --password <password>', 'Use this password as master password (For security reasons, it is not recommended to use this option).'],
|
||||
['-v, --verbose', 'More verbose output for the `target-status` command'],
|
||||
['-o, --output <directory>', 'Output directory'],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -30,6 +35,18 @@ class Command extends BaseCommand {
|
||||
|
||||
const options = args.options;
|
||||
|
||||
const askForMasterKey = async (error) => {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return false;
|
||||
}
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.command === 'enable') {
|
||||
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
@@ -59,14 +76,8 @@ class Command extends BaseCommand {
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return;
|
||||
}
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -85,6 +96,36 @@ class Command extends BaseCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.command === 'decrypt-file') {
|
||||
while (true) {
|
||||
try {
|
||||
const outputDir = options.output ? options.output : require('os').tmpdir();
|
||||
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
|
||||
await EncryptionService.instance().decryptFile(args.path, outFile);
|
||||
const buffer = await readChunk(outFile, 0, 64);
|
||||
const detectedType = imageType(buffer);
|
||||
|
||||
if (detectedType) {
|
||||
const newOutFile = outFile + '.' + detectedType.ext;
|
||||
await shim.fsDriver().move(outFile, newOutFile);
|
||||
outFile = newOutFile;
|
||||
}
|
||||
|
||||
this.stdout(outFile);
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.command === 'target-status') {
|
||||
const fs = require('fs-extra');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
|
@@ -37,7 +37,7 @@ class Command extends BaseCommand {
|
||||
const stdoutWidth = app().commandStdoutMaxWidth();
|
||||
|
||||
if (args.command === 'shortcuts' || args.command === 'keymap') {
|
||||
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplin.cozic.net/terminal/#shortcuts'));
|
||||
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
|
||||
this.stdout('');
|
||||
|
||||
if (app().gui().isDummy()) {
|
||||
|
@@ -22,6 +22,7 @@ const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { FsDriverNode } = require('lib/fs-driver-node.js');
|
||||
const { shimInit } = require('lib/shim-init-node.js');
|
||||
@@ -43,6 +44,7 @@ BaseItem.loadClass('Resource', Resource);
|
||||
BaseItem.loadClass('Tag', Tag);
|
||||
BaseItem.loadClass('NoteTag', NoteTag);
|
||||
BaseItem.loadClass('MasterKey', MasterKey);
|
||||
BaseItem.loadClass('Revision', Revision);
|
||||
|
||||
Setting.setConstant('appId', 'net.cozic.joplin-cli');
|
||||
Setting.setConstant('appType', 'cli');
|
||||
|
1898
CliClient/locales/ar.po
Normal file
1898
CliClient/locales/ar.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -125,9 +125,10 @@ msgstr "Marca un llistat de tasques pendents com a fet."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota no és un llistat de tasques pendents: «%s»"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gestiona la configuració E2EE. Les ordres són «enable», «disable», "
|
||||
"«decrypt», «status» i «target-status»"
|
||||
@@ -610,9 +611,8 @@ msgstr "S'està important des de «%s» com a format «%s». Espereu..."
|
||||
msgid "PDF File"
|
||||
msgstr "Fitxer PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxer"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nota nova"
|
||||
@@ -623,6 +623,35 @@ msgstr "Llistat de tasques pendents nou"
|
||||
msgid "New notebook"
|
||||
msgstr "Bloc de notes nou"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimeix"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcions del xifratge"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opcions del desa-retalls de webs"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Quant al Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprova les actualitzacions..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importació"
|
||||
|
||||
@@ -632,9 +661,6 @@ msgstr "Exportació"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronitza"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimeix"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Amaga %s"
|
||||
@@ -699,18 +725,6 @@ msgstr "Vés al cos"
|
||||
msgid "&Tools"
|
||||
msgstr "Eines"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opcions del desa-retalls de webs"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcions del xifratge"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajuda"
|
||||
@@ -721,16 +735,6 @@ msgstr "Lloc web i documentació"
|
||||
msgid "Make a donation"
|
||||
msgstr "Donatius"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprova les actualitzacions..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Quant al Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Obre %s"
|
||||
@@ -755,11 +759,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hi ha disponible una actualització. Voleu baixar-la ara?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -964,6 +968,9 @@ msgstr "Títol del bloc de notes:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Afegeix o suprimeix etiquetes:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separeu les etiquetes amb comes."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Canvia el nom del bloc de notes:"
|
||||
|
||||
@@ -1166,9 +1173,6 @@ msgstr "Recursos: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
@@ -1202,6 +1206,14 @@ msgstr "Voleu suprimir les notes?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Voleu suprimir aquestes notes?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Ús: %s"
|
||||
@@ -1320,6 +1332,12 @@ msgstr "Xifrat"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Els elements xifrats no es poden modificar"
|
||||
|
||||
msgid "title"
|
||||
msgstr "títol"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data d'actualització"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflictes"
|
||||
|
||||
@@ -1330,12 +1348,6 @@ msgstr "No es pot moure el bloc de notes a aquesta ubicació"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Els blocs de notes no poden tenir el nom «%s», és un títol reservat."
|
||||
|
||||
msgid "title"
|
||||
msgstr "títol"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data d'actualització"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de creació"
|
||||
|
||||
@@ -1350,6 +1362,13 @@ msgstr "No es pot copiar la nota al bloc de notes «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "No es pot moure la nota al bloc de notes «%s»"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Llengua"
|
||||
|
||||
@@ -1380,6 +1399,10 @@ msgstr "Ordena les notes per"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Ordre invers"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordena les notes per"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Desa la geolocalització a les notes"
|
||||
|
||||
@@ -1395,6 +1418,43 @@ msgstr "Vés al cos"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "En crear una nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activa el xifratge"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostra la icona a la safata"
|
||||
|
||||
@@ -1481,23 +1541,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directori on es farà la sincronització (camí absolut)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
|
||||
"«sync.target»."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL del 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 "Nom d'usuari del Nextcloud"
|
||||
|
||||
@@ -1545,6 +1591,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Surt de l'aplicació"
|
||||
@@ -1758,10 +1807,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1885,8 +1930,20 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvingut"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separeu les etiquetes amb comes."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Aquesta nota s'ha modificat:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
|
||||
#~ "«sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Lloc web del Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estat: %s"
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -123,9 +123,10 @@ msgstr "Markerer en opgave som udført."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Noten er ikke en opgave: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Udfører E2EE konfiguration. Kommandoer er `enable`(aktiver), "
|
||||
"`disable`(sluk), `decrypt`(dekrypter), `status` og `target-status` (modtager-"
|
||||
@@ -597,9 +598,8 @@ msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF fil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ny note"
|
||||
@@ -610,6 +610,35 @@ msgstr "Ny opgave"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny notesbog"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Udskriv"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypterings muligheder"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Checker om der er opdateringer.."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
@@ -619,9 +648,6 @@ msgstr "Eksporter"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Udskriv"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Skjul %s"
|
||||
@@ -686,18 +712,6 @@ msgstr "Fokuser på brødtekst"
|
||||
msgid "&Tools"
|
||||
msgstr "Værktøjer"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypterings muligheder"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hjælp"
|
||||
@@ -708,16 +722,6 @@ msgstr "Joplins hjemmeside og dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Giv en donation"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Checker om der er opdateringer.."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Åben %s"
|
||||
@@ -742,11 +746,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Opdatering er til rådighed, vil du hente den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -943,6 +947,9 @@ msgstr "Notesbogs titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Tilføj eller slet mærker:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Adskil hver mærke med komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Omdøb notesbog:"
|
||||
|
||||
@@ -1142,9 +1149,6 @@ msgstr "Ressourcer: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Vælg hvor sync status skal eksporteres til"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Tilføj eller slet mærker"
|
||||
|
||||
@@ -1179,6 +1183,14 @@ msgstr "Slet noter?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Slet disse noter?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Forbrug: %s"
|
||||
@@ -1297,6 +1309,14 @@ msgstr "Krypteret"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypteret emner kan ikke rettes"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Samlet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Opdateret %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1308,14 +1328,6 @@ msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
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."
|
||||
@@ -1331,6 +1343,13 @@ msgstr "Kan ikke kopiere note til \"%s\" notesbog"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Sprog"
|
||||
|
||||
@@ -1362,6 +1381,10 @@ msgstr "Sorter noter efter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Modsat sorterings orden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sorter noter efter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gem geo-lokation i noter"
|
||||
|
||||
@@ -1377,6 +1400,43 @@ msgstr "Fokuser på brødtekst"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ved oprettelse af ny note:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Start kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Vis ikon på bundbjælke"
|
||||
|
||||
@@ -1463,23 +1523,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mappe der skal synkroniseres med (absolut sti)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sti til synkronisering, når filsystem synkronisering er slået til. Se `sync."
|
||||
"target`."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1527,6 +1573,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Forlad/luk program."
|
||||
@@ -1734,10 +1783,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1860,8 +1905,20 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Adskil hver mærke med komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Denne note er ændret:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sti til synkronisering, når filsystem synkronisering er slået til. Se "
|
||||
#~ "`sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin hjemmeside"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tilstand: %s."
|
||||
|
@@ -18,7 +18,8 @@ msgstr ""
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr ""
|
||||
"Um ein Tag zu löschen, entferne es bei allen damit verbundenen Notizen."
|
||||
"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen "
|
||||
"Notizen."
|
||||
|
||||
msgid "Please select the note or notebook to be deleted first."
|
||||
msgstr ""
|
||||
@@ -130,7 +131,7 @@ msgstr "Notiz ist kein To-Do: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Verwaltet die E2EE-Konfiguration. Die Befehle lauten `enable`, `disable`, "
|
||||
"`decrypt`, `status` und `target-status`."
|
||||
@@ -617,9 +618,8 @@ msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-Datei"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datei"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Neue Notiz"
|
||||
@@ -630,6 +630,34 @@ msgstr "Neues To-Do"
|
||||
msgid "New notebook"
|
||||
msgstr "Neues Notizbuch"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Drucken"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web-Clipper Optionen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Datei"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Einstellungen..."
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Aktualisierungen..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importieren"
|
||||
|
||||
@@ -639,9 +667,6 @@ msgstr "Exportieren"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchronisieren"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Drucken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "%s ausblenden"
|
||||
@@ -649,9 +674,8 @@ msgstr "%s ausblenden"
|
||||
msgid "Quit"
|
||||
msgstr "Verlassen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Bearbeiten"
|
||||
msgstr "&Bearbeiten"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
@@ -686,9 +710,8 @@ msgstr "Alle Notizen durchsuchen"
|
||||
msgid "Search in current note"
|
||||
msgstr "Aktuelle Notiz durchsuchen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Ansicht"
|
||||
msgstr "&Ansicht"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Seitenleiste umschalten"
|
||||
@@ -699,25 +722,11 @@ msgstr "Editor-Layout umschalten"
|
||||
msgid "Focus"
|
||||
msgstr "Fokus"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Werkzeuge"
|
||||
msgstr "&Werkzeuge"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web-Clipper Optionen"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hilfe"
|
||||
msgstr "&Hilfe"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Webseite und Dokumentation"
|
||||
@@ -725,16 +734,6 @@ msgstr "Webseite und Dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Spenden"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Aktualisierungen..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Öffne %s"
|
||||
@@ -760,12 +759,12 @@ msgstr ""
|
||||
"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Deine Version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Deine Version: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Neue Version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Neue Version: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -972,6 +971,9 @@ msgstr "Notizbuch-Titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Trenne jedes Schlagwort mit einem Komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Notizbuch umbenennen:"
|
||||
|
||||
@@ -1140,18 +1142,19 @@ msgstr "Verschlüsselungsoptionen"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper-Einstellungen"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Notizbuch wirklich löschen? Alle Notizen und Unternotizen darin werden "
|
||||
"ebenfalls gelöscht."
|
||||
"Notizbuch \"%s\" wirklich löschen?\n"
|
||||
"\n"
|
||||
"Alle Notizen und Unternotizen darin werden ebenfalls gelöscht."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Dieses Schlagwort von allen Notizen entfernen?"
|
||||
msgstr "Schlagwort \"%s\" von allen Notizen entfernen?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Diese Suche von der Seitenleiste entfernen?"
|
||||
@@ -1177,9 +1180,6 @@ msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen"
|
||||
|
||||
@@ -1210,6 +1210,16 @@ msgstr "Notiz \"%s\" löschen?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Sollen diese %d Notizen gelöscht werden?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
"Tippe einen Notiz Titel um hinzuspringen. Oder tippe # gefolgt von einem "
|
||||
"Schlagwort, oder @ gefolgt von einem Notizbuch-Namen."
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr "Gehe zu..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Nutzung: %s"
|
||||
@@ -1328,6 +1338,12 @@ msgstr "Verschlüsselt"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Verschlüsselte Objekte können nicht verändert werden"
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Aktualisierungsdatum"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikte"
|
||||
|
||||
@@ -1339,12 +1355,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Notizbuch kann nicht \"%s\" genannt werden. Dieser Name ist reserviert.."
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Aktualisierungsdatum"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Erstelldatum"
|
||||
|
||||
@@ -1359,6 +1369,16 @@ msgstr "Kann Notiz nicht zu Notizbuch \"%s\" kopieren"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kann Notiz nicht zu Notizbuch \"%s\" verschieben"
|
||||
|
||||
#, 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 ""
|
||||
"Achtung: Stelle sicher, dass Du vor der Synchronisation alle Inhalte an den "
|
||||
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
|
||||
"die FAQs hierzu: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
@@ -1389,6 +1409,9 @@ msgstr "Sortiere Notizen nach"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Sortierreihenfolge umdrehen"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortiere Notizbücher nach"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Momentanen Standort zusammen mit Notizen speichern"
|
||||
|
||||
@@ -1404,6 +1427,42 @@ msgstr "Fokussiere Inhalt"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Wenn eine neue Notiz erstellt wird:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Aktiviere weiche Zeilenumbrüche"
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktiviere mathematische Ausdrücke"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr "Aktiviere ==mark== Syntax"
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Aktiviere Fußnoten"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Aktiviere Inhaltsverzeichnis Erweiterung"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr "Aktiviere ~sub~ Syntax"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr "Aktiviere ^sup^ Syntax"
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr "Aktiviere deflist Syntax"
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr "Aktiviere abbreviation Syntax"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr "Aktiviere markdown emoji"
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr "Aktiviere ++insert++ Syntax"
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr "Aktiviere multimarkdown Tabellen Erweiterung"
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Zeige Tray-Icon"
|
||||
|
||||
@@ -1491,26 +1550,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Der Pfad, mit dem synchronisiert werden soll, wenn die Dateisystem-"
|
||||
"Synchronisation aktiviert ist. Siehe `sync.target`."
|
||||
|
||||
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 ""
|
||||
"Achtung: Stelle sicher, dass Du vor der Synchronisation alle Inhalte an den "
|
||||
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
|
||||
"die FAQs hierzu: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-Benutzername"
|
||||
|
||||
@@ -1560,6 +1602,9 @@ msgstr "Erscheinungsbild"
|
||||
msgid "Note"
|
||||
msgstr "Notiz"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Zusatzprogramme"
|
||||
|
||||
# 'Applikation' or 'Anwendung' - both translations are correct.
|
||||
msgid "Application"
|
||||
msgstr "Applikation"
|
||||
@@ -1779,10 +1824,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website von Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Datenbank v%s"
|
||||
@@ -1907,8 +1948,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Trenne jedes Schlagwort mit einem Komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Diese Notiz wurde verändert:"
|
||||
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Inhaltsverzeichnis"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Der Pfad, mit dem synchronisiert werden soll, wenn die Dateisystem-"
|
||||
#~ "Synchronisation aktiviert ist. Siehe `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "Löschen?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notizen löschen?"
|
||||
|
@@ -119,7 +119,7 @@ msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -527,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -539,6 +539,34 @@ msgstr ""
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -548,9 +576,6 @@ msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr ""
|
||||
@@ -609,18 +634,6 @@ msgstr ""
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
@@ -630,16 +643,6 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -664,11 +667,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -848,6 +851,9 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1043,9 +1049,6 @@ msgstr ""
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1076,6 +1079,14 @@ msgstr ""
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr ""
|
||||
@@ -1186,6 +1197,12 @@ msgstr ""
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr ""
|
||||
|
||||
@@ -1196,12 +1213,6 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1216,6 +1227,13 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
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 "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1246,6 +1264,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1261,6 +1282,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1337,21 +1394,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
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 ""
|
||||
|
||||
@@ -1396,6 +1441,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
@@ -1591,10 +1639,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
1790
CliClient/locales/en_US.po
Normal file
1790
CliClient/locales/en_US.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,21 @@
|
||||
# Joplin translation to Spanish (Spain)
|
||||
# Copyright (C) 2017 Lucas Vieites
|
||||
# Copyright (C) 2019 Andros Fenollosa
|
||||
# This file is distributed under the same license as the Joplin-CLI package.
|
||||
# Lucas Vieites <lucas.vieites@gmail.com>, 2017.
|
||||
# Andros Fenollosa <andros@fenollosa.email>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Joplin-CLI 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Fernando Martín <f@mrtn.es>\n"
|
||||
"Last-Translator: Andros Fenollosa <andros@fenollosa.email>\n"
|
||||
"Language-Team: Spanish <lucas.vieites@gmail.com>\n"
|
||||
"Language: es_ES\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.11\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
|
||||
@@ -35,7 +37,7 @@ msgid "No notebook selected."
|
||||
msgstr "No se ha seleccionado ninguna libreta."
|
||||
|
||||
msgid "No notebook has been specified."
|
||||
msgstr "Ninguna libreta fue especificada"
|
||||
msgstr "Ninguna libreta fue especificada."
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
@@ -125,9 +127,10 @@ msgstr "Marca una tarea como hecha."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota no es una tarea: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Maneja la configuración E2EE. Comandos disponibles `enable`, `disable`, "
|
||||
"`decrypt`, `status` y `target-status`."
|
||||
@@ -463,7 +466,6 @@ msgstr "Descargando recursos..."
|
||||
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 "
|
||||
@@ -591,13 +593,11 @@ msgstr "Barra lateral"
|
||||
msgid "Note list"
|
||||
msgstr "Lista de notas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título de libreta:"
|
||||
msgstr "Titulo de nota"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Libretas"
|
||||
msgstr "Cuerpo de nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -606,9 +606,8 @@ msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
msgid "PDF File"
|
||||
msgstr "Archivo PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Archivo"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado de la sincronización"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nueva nota"
|
||||
@@ -619,6 +618,34 @@ msgstr "Nueva lista de tareas"
|
||||
msgid "New notebook"
|
||||
msgstr "Nueva libreta"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opciones generales"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opciones de cifrado"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opciones de recorte web"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Archivo"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Acerca de Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprobar actualizaciones..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -628,9 +655,6 @@ msgstr "Exportar"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Oculta %s"
|
||||
@@ -638,9 +662,8 @@ msgstr "Oculta %s"
|
||||
msgid "Quit"
|
||||
msgstr "Salir"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editar"
|
||||
msgstr "&Editar"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
@@ -651,9 +674,8 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Seleccione fecha"
|
||||
msgstr "Seleccionar todo"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Negrita"
|
||||
@@ -673,13 +695,11 @@ msgstr "Editar con un editor externo"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas las notas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Buscar en todas las notas"
|
||||
msgstr "Buscar en nota actual"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Ver"
|
||||
msgstr "&Ver"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Cambia la barra lateral"
|
||||
@@ -687,29 +707,14 @@ msgstr "Cambia la barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambia el diseño del editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Foco en el cuerpo"
|
||||
msgstr "Foco"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Herramientas"
|
||||
msgstr "&Herramientas"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado de la sincronización"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opciones de recorte web"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opciones de cifrado"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opciones generales"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ayuda"
|
||||
msgstr "&Ayuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Sitio web y documentación"
|
||||
@@ -717,16 +722,6 @@ msgstr "Sitio web y documentación"
|
||||
msgid "Make a donation"
|
||||
msgstr "Hacer una donación"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprobar actualizaciones..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Acerca de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -751,12 +746,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hay disponible una actualización. ¿Quiere descargarla ahora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Tu versión: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Tu versión: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
msgid "New version: %s"
|
||||
msgstr "Nueva versión: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
@@ -765,7 +760,7 @@ msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "El token ha sido copiado al portapapeles"
|
||||
msgstr "¡El token ha sido copiado al portapapeles!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
@@ -817,9 +812,8 @@ msgstr "Paso 2: Instalar la extensión"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Descargar e instalar para su navegador:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostrar opciones avanzadas"
|
||||
msgstr "Opciones avanzadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Token de autorización:"
|
||||
@@ -935,9 +929,8 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "El cifrado está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
@@ -957,7 +950,10 @@ msgid "Notebook title:"
|
||||
msgstr "Título de libreta:"
|
||||
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Agregar o borrar etiquetas: "
|
||||
msgstr "Agregar o borrar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por una coma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renombrar libreta:"
|
||||
@@ -994,13 +990,13 @@ msgid ""
|
||||
msgstr "No hay ninguna libreta. Cree una pulsando en «Libreta nueva»."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Localización"
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
msgstr "Propiedades de nota"
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
@@ -1019,7 +1015,7 @@ msgid "Copy Link Address"
|
||||
msgstr "Copiar enlace"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
msgstr "El adjunto no ha sido descargado o desencriptado todavía."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1034,7 +1030,7 @@ msgstr ""
|
||||
"editar la nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
msgstr "Solo una nota puede ser impresa o exportada a PDF a la vez."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto destacado"
|
||||
@@ -1122,18 +1118,19 @@ msgstr "Opciones de cifrado"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opciones de recorte"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"¿Desea eliminar la libreta? Todas las notas y sublibretas dentro de esta "
|
||||
"libreta también serán eliminadas."
|
||||
"Borrar Libreta \"%s\"?\n"
|
||||
"\n"
|
||||
"Todas las notas y sublibretas de esta libreta serán borradas."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "¿Desea eliminar esta etiqueta de todas las notas?"
|
||||
msgstr "Desea borrar las etiquetas pertenecientes a \"%s\" de todas las notas?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "¿Desea eliminar esta búsqueda de la barra lateral?"
|
||||
@@ -1149,18 +1146,15 @@ msgstr "Libretas"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Descifrando elementos: %d/%d."
|
||||
msgstr "Descifrando elementos: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgstr "Obteniendo refuersos: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione a dónde se debería exportar el estado de sincronización"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
@@ -1174,24 +1168,30 @@ msgstr "%s - Copiar"
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
msgstr "Cambiar a nota"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
msgstr "Cambiar a lista de tareas"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar el enlace de Markdown"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Elimina una libreta \"%s\"?"
|
||||
msgstr "¿Borrar nota \"%s\"?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "¿Desea borrar estas notas?"
|
||||
msgstr "Borrar %d notas?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
@@ -1311,6 +1311,12 @@ msgstr "Cifrado"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Los elementos cifrados no pueden ser modificados"
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "fecha de actualización"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflictos"
|
||||
|
||||
@@ -1322,12 +1328,6 @@ 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"
|
||||
|
||||
@@ -1342,6 +1342,16 @@ 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»"
|
||||
|
||||
#, 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 ""
|
||||
"Atención: Si cambias esta ubicación, asegúrate de copiar todo tu contenido "
|
||||
"antes de sincronizarlo, de lo contrario todos los archivos serán eliminados. "
|
||||
"Consulte las preguntas frecuentes para obtener más detalles: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1372,6 +1382,10 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Invierte el orden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Guardar geolocalización en las notas"
|
||||
|
||||
@@ -1387,6 +1401,43 @@ msgstr "Foco en el cuerpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Cuando se crear una nota nueva:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar cifrado"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostrar icono en la bandeja"
|
||||
|
||||
@@ -1398,16 +1449,18 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Esto permitirá que Joplin se ejecute en segundo plano. Se recomienda "
|
||||
"habilitar esta configuración para que sus notas estén sincronizadas "
|
||||
"constantemente, reduciendo así el número de conflictos."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
msgstr "Iniciar aplicación minimizada en el icono de la bandeja"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Establecer el porcentaje de aumento de la aplicación"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Fuente del editor"
|
||||
msgstr "Editar tamaño de fuente"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Fuente del editor"
|
||||
@@ -1424,11 +1477,11 @@ msgid "Automatically update the application"
|
||||
msgstr "Actualizar la aplicación automáticamente"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
msgstr "Obtenga pre-lanzamientos cuando busque actualizaciones"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
msgstr "Ver la página de pre-lanzamiento para más detalles: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronización"
|
||||
@@ -1473,23 +1526,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directorio con el que sincronizarse (ruta completa)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"La ruta a la que sincronizar cuando se activa la sincronización con sistema "
|
||||
"de archivos. Vea «sync.target»."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1527,28 +1566,27 @@ msgstr "Ignorar errores en certificados TLS"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Opción inválida: «%s». Los valores posibles son: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opciones generales"
|
||||
msgstr "General"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estado de la sincronización"
|
||||
msgstr "Sincronización"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Apariencia"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Libretas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Salir de la aplicación."
|
||||
msgstr "Aplicación"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "La etiqueta \"%s\" ya existe. Por favor, busque un nuevo nombre."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Archivo de exportación de Joplin"
|
||||
@@ -1562,9 +1600,8 @@ msgstr "Directorio para exportar de Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Archivo exportado de Evernote"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Directorio para exportar de Joplin"
|
||||
msgstr "Directorio para exportar JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
@@ -1644,10 +1681,10 @@ msgid "On %s: %s"
|
||||
msgstr "En %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "Permiso para usar tu cámara"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
msgstr "El permiso para usar tu cámara es necesario."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "No hay notas. Cree una pulsando en el botón (+)."
|
||||
@@ -1677,9 +1714,8 @@ msgstr "¿Desea mover %d notas a libreta «%s»?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Presione para establecer la contraseña de descifrado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Establecer alarma"
|
||||
msgstr "Quitar alarma"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Establecer alarma"
|
||||
@@ -1693,22 +1729,21 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Cancelando... Por favor espere."
|
||||
msgstr "Comprobando... Por favor espere."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Comprobar sincronización"
|
||||
msgstr "¡Éxito! La configuración de sincronización es correcta."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Error. Por favor comprueba URL, nombre de usuario, contraseña, etc. son "
|
||||
"correctos y el servicio a sincronizar este accesible. El código de error fue:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "La aplicacion ha sido autorizada éxitosamente."
|
||||
msgstr "¡La aplicacion ha sido autorizada!"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1718,10 +1753,15 @@ msgid ""
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"No se pudo autorizar aplicación:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Por favor, vuelva a intentarlo."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Descifrando elementos: %d/%d."
|
||||
msgstr "Descifrando elementos: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nuevas etiquetas:"
|
||||
@@ -1755,24 +1795,19 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
msgstr "Base de datos v%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Borrar: %d"
|
||||
msgstr "FTS activado: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Acceder con Dropbox"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrar en modo línea de comandos"
|
||||
msgstr "Introduce código aquí"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
@@ -1826,9 +1861,8 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imagen no soportado: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Adjuntar foto"
|
||||
msgstr "Tomar foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Adjuntar foto"
|
||||
@@ -1855,7 +1889,7 @@ msgid "View on map"
|
||||
msgstr "Ver en un mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
msgstr "Ir a origen URL"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
@@ -1883,8 +1917,22 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenido"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separar cada etiqueta por una coma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Esta nota ha sido modificada:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "La ruta a la que sincronizar cuando se activa la sincronización con "
|
||||
#~ "sistema de archivos. Vea «sync.target»."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "¿Borrar?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "¿Desea eliminar notas?"
|
||||
|
@@ -125,9 +125,10 @@ msgstr "Markatu zeregina egindakotzat."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Oharra ez da zeregina: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EEren konfigurazioa erabiltzen du. Komandoak dira `enable`, `disable`, "
|
||||
"`decrypt`, `status` eta `target-status`."
|
||||
@@ -604,9 +605,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxategia"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ohar berria"
|
||||
@@ -617,6 +617,35 @@ msgstr "Zeregin berria"
|
||||
msgid "New notebook"
|
||||
msgstr "Koaderno berria"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Zifratzeko aukerak"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin-i buruz"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Inportatu"
|
||||
|
||||
@@ -627,9 +656,6 @@ msgstr "Inportatu"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkronizatu"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr ""
|
||||
@@ -692,18 +718,6 @@ msgstr ""
|
||||
msgid "&Tools"
|
||||
msgstr "Tresnak"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Zifratzeko aukerak"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Laguntza"
|
||||
@@ -715,16 +729,6 @@ msgstr "Web orria eta dokumentazioa (en)"
|
||||
msgid "Make a donation"
|
||||
msgstr "Web orria eta dokumentazioa (en)"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin-i buruz"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "On %s: %s"
|
||||
@@ -749,11 +753,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -951,6 +955,9 @@ msgstr "Koadernoaren izenburua: "
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Gehitu edo ezabatu etiketak:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Banatu etiketak koma erabiliaz."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Berrizendatu koadernoa:"
|
||||
|
||||
@@ -1155,9 +1162,6 @@ msgstr "Baliabideak: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
@@ -1191,6 +1195,14 @@ msgstr "Oharrak ezabatu?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Oharrok ezabatu?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Erabili: %s"
|
||||
@@ -1310,6 +1322,14 @@ msgstr "Zifratuta"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Zifratutako itemak ezin aldatu daitezke"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Eguneratuta: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Gatazkak"
|
||||
|
||||
@@ -1322,14 +1342,6 @@ 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."
|
||||
@@ -1345,6 +1357,13 @@ msgstr "Ezin kopia daiteke oharra \"%s\" koadernora"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Hizkuntza"
|
||||
|
||||
@@ -1378,6 +1397,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Alderantziz antolatzen du."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Editatu koadernoa"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gore geokokapena oharrekin"
|
||||
|
||||
@@ -1395,6 +1418,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ohar berria sortzen du."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Zifratua gaitu"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1480,22 +1540,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1546,6 +1593,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Irten aplikaziotik"
|
||||
@@ -1753,10 +1803,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1880,8 +1926,15 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Banatu etiketak koma erabiliaz."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Ohar hau mugitua izan da:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
@@ -125,10 +125,11 @@ msgstr "La note n'est pas une tâche : \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont "
|
||||
"`enable`, `disable`, `decrypt` et `status` et `target-status`."
|
||||
"`enable`, `disable`, `decrypt` et `status`, `decrypt-file` et `target-"
|
||||
"status`."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Entrer le mot de passe maître :"
|
||||
@@ -602,8 +603,8 @@ msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
msgid "PDF File"
|
||||
msgstr "Fichier PDF"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Fichier"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "État de la synchronisation"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nouvelle note"
|
||||
@@ -614,6 +615,34 @@ msgstr "Nouvelle tâche"
|
||||
msgid "New notebook"
|
||||
msgstr "Nouveau carnet"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimer"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Options générales"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Fichier"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "A propos de Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Préférences…"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Vérifier les mises à jour..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
@@ -623,9 +652,6 @@ msgstr "Exporter"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniser"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Cacher %s"
|
||||
@@ -684,18 +710,6 @@ msgstr "Naviguer"
|
||||
msgid "&Tools"
|
||||
msgstr "&Outils"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "État de la synchronisation"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Options générales"
|
||||
|
||||
msgid "&Help"
|
||||
msgstr "&Aide"
|
||||
|
||||
@@ -705,16 +719,6 @@ msgstr "Documentation en ligne"
|
||||
msgid "Make a donation"
|
||||
msgstr "Faire un don"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Vérifier les mises à jour..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "A propos de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Ouvrir %s"
|
||||
@@ -740,12 +744,12 @@ msgstr ""
|
||||
"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Votre version : v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Votre version : %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Nouvelle version : v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Nouvelle version : %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
@@ -952,6 +956,9 @@ msgstr "Titre du carnet :"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Modifier les étiquettes :"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Séparez chaque étiquette par une virgule."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renommer le carnet :"
|
||||
|
||||
@@ -1158,9 +1165,6 @@ msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Veuillez sélectionner un répertoire ou exporter l'état de la synchronisation"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr "Supprimer ?"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gérer les étiquettes"
|
||||
|
||||
@@ -1191,6 +1195,16 @@ msgstr "Supprimer note \"%s\" ?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Supprimer ces %d notes ?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
"Entrez le titre d’une note, ou entrez # suivit du nom d’une étiquette, ou @ "
|
||||
"suivit du nom d’un carnet."
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr "Navigation rapide…"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Utilisation : %s"
|
||||
@@ -1309,6 +1323,12 @@ msgstr "Chiffré"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Les objets chiffrés ne peuvent être modifiés"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "date de modification"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflits"
|
||||
|
||||
@@ -1319,12 +1339,6 @@ msgstr "Impossible de déplacer le carnet à cet endroit"
|
||||
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"
|
||||
|
||||
@@ -1339,6 +1353,16 @@ 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\""
|
||||
|
||||
#, 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 ""
|
||||
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
|
||||
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
|
||||
"pour plus de détails : %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
@@ -1369,6 +1393,9 @@ msgstr "Trier les notes par"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverser l'ordre"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Trier les carnets par"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Enregistrer l'emplacement avec les notes"
|
||||
|
||||
@@ -1384,6 +1411,42 @@ msgstr "Curseur sur corps du message"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Lors de la création d'une note :"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Activer retours à la ligne \"doux\""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activer les expressions mathématiques"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr "Activer la syntaxe pour ==surligner=="
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Activer les notes de bas de page"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Activer la table des matières"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr "Activer la syntaxe ~indice~"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr "Activer la syntaxe ^exposant^"
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr "Activer les listes de définitions"
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr "Activer la syntaxe pour abréviations"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr "Activer la syntaxe émoji"
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr "Activer la syntaxe ++insertion++"
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr "Activer les tables multi-markdown"
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afficher l'icône dans la zone de notifications"
|
||||
|
||||
@@ -1471,26 +1534,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Le chemin du répertoire avec lequel synchroniser lorsque la synchronisation "
|
||||
"par système de fichier est activée. Voir `sync.target`."
|
||||
|
||||
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 ""
|
||||
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
|
||||
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
|
||||
"pour plus de détails : %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
@@ -1540,6 +1586,9 @@ msgstr "Apparence"
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Modules"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Application"
|
||||
|
||||
@@ -1755,10 +1804,6 @@ msgstr "- Position : Pour attacher à une note les coordonnées GPS."
|
||||
msgid "Joplin website"
|
||||
msgstr "Site web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Base de données v%s"
|
||||
@@ -1882,8 +1927,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Séparez chaque étiquette par une virgule."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Cette note a été modifiée :"
|
||||
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Table des matières"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Le chemin du répertoire avec lequel synchroniser lorsque la "
|
||||
#~ "synchronisation par système de fichier est activée. Voir `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "Supprimer ?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Supprimer les notes ?"
|
||||
|
@@ -122,9 +122,10 @@ msgstr "Marca unha tarefa como feita."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "A nota non é unha tarefa: «%s»"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Xestiona a configuración E2EE. As orde son «enable», «disable», «decrypt», "
|
||||
"«status» e «target-status»."
|
||||
@@ -597,9 +598,8 @@ msgstr "Importando de «%s» como formato «%s». Agarde..."
|
||||
msgid "PDF File"
|
||||
msgstr "Ficheiro PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Ficheiro"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
@@ -610,6 +610,35 @@ msgstr "Nova tarefa"
|
||||
msgid "New notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcións de cifrado"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Ficheiro"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Buscar actualizacións…"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -619,9 +648,6 @@ msgstr "Exportar"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Ocultar %s"
|
||||
@@ -686,18 +712,6 @@ msgstr "Focar no corpo"
|
||||
msgid "&Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcións de cifrado"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Axuda"
|
||||
@@ -708,16 +722,6 @@ msgstr "Sitio web e documentación"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doar"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Buscar actualizacións…"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -742,11 +746,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hai unha actualización dispoñíbel, desexa descargala agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -941,6 +945,9 @@ msgstr "Título do caderno:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Engadir ou eliminar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por unha coma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
@@ -1142,9 +1149,6 @@ msgstr "Recursos: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione onde exportar o estado da sincronización"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
@@ -1179,6 +1183,14 @@ msgstr "Desexa eliminar as notas?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Desexa eliminar estas notas?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1297,6 +1309,14 @@ msgstr "Cifrado"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Non é posíbel modificar elementos cifrados"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Sen título"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Actualizado: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitos"
|
||||
|
||||
@@ -1308,14 +1328,6 @@ msgstr "Non é posíbel mover a nota ao caderno «%s»"
|
||||
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."
|
||||
@@ -1331,6 +1343,13 @@ 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»"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1362,6 +1381,10 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Orde inversa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gardar xeolocalización coas notas"
|
||||
|
||||
@@ -1377,6 +1400,43 @@ msgstr "Focar no corpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Cando se crea unha nova nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activar cifrado"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostrar a icona na bandexa"
|
||||
|
||||
@@ -1463,23 +1523,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Ruta para sincronizar cando estea activada a sincronización do sistema de "
|
||||
"ficheiros. Vexa «sync.target»."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1527,6 +1573,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sae do aplicativo."
|
||||
@@ -1734,10 +1783,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1860,8 +1905,20 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separar cada etiqueta por unha coma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Esta nota foi modificada:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Ruta para sincronizar cando estea activada a sincronización do sistema de "
|
||||
#~ "ficheiros. Vexa «sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Sitio web de Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: %s."
|
||||
|
@@ -128,7 +128,7 @@ msgstr "Bilješka nije zadatak: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -601,9 +601,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova bilješka"
|
||||
@@ -614,6 +613,36 @@ msgstr "Novi zadatak"
|
||||
msgid "New notebook"
|
||||
msgstr "Nova bilježnica"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Uvoz"
|
||||
|
||||
@@ -624,9 +653,6 @@ msgstr "Uvoz"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkroniziraj"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr ""
|
||||
@@ -690,19 +716,6 @@ msgstr "Naslov bilješke:"
|
||||
msgid "&Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Pomoć"
|
||||
@@ -714,16 +727,6 @@ msgstr "Website i dokumentacija"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website i dokumentacija"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "On %s: %s"
|
||||
@@ -748,11 +751,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -938,6 +941,9 @@ msgstr "Naslov bilježnice:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Dodaj ili makni oznake:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Odvoji oznake zarezom."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Preimenuj bilježnicu:"
|
||||
|
||||
@@ -1142,9 +1148,6 @@ msgstr "Resursi: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
@@ -1178,6 +1181,14 @@ msgstr "Obriši bilješke?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Obriši ove bilješke?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Korištenje: %s"
|
||||
@@ -1295,6 +1306,14 @@ msgstr ""
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Ažurirano: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Sukobi"
|
||||
|
||||
@@ -1306,14 +1325,6 @@ msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
|
||||
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."
|
||||
@@ -1329,6 +1340,13 @@ 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"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1362,6 +1380,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Mijenja redoslijed."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Uredi bilježnicu"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Spremi geolokacijske podatke sa bilješkama"
|
||||
|
||||
@@ -1380,6 +1402,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Stvara novu bilješku."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1461,23 +1519,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija sa "
|
||||
"datotečnim sustavom omogućena. Vidi `sync.target`."
|
||||
|
||||
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 ""
|
||||
|
||||
@@ -1525,6 +1569,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
@@ -1730,10 +1777,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1858,8 +1901,16 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Odvoji oznake zarezom."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Bilješka je promijenjena:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija "
|
||||
#~ "sa datotečnim sustavom omogućena. Vidi `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
@@ -124,9 +124,10 @@ msgstr "Segna un \"Cose-da-fare\" come completato."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota non è un \"Cose-da-fare\": \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gestisci la configurazione E2EE. I comandi sono `abilita`, `disabilita`, "
|
||||
"`decripta`, `stato` e `stato-target`."
|
||||
@@ -610,9 +611,8 @@ msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF File"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nuova nota"
|
||||
@@ -623,6 +623,35 @@ msgstr "Nuovo \"Cose-da-fare\""
|
||||
msgid "New notebook"
|
||||
msgstr "Nuovo taccuino"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Stampa"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opzioni Crittografia"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opzioni Web Clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "File"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Informazione su Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controlla aggiornamenti ..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importa"
|
||||
|
||||
@@ -632,9 +661,6 @@ msgstr "Esporta"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizza"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Stampa"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Nascondi %s"
|
||||
@@ -697,18 +723,6 @@ msgstr "Focus sul testo"
|
||||
msgid "&Tools"
|
||||
msgstr "Strumenti"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opzioni Web Clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opzioni Crittografia"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Aiuto"
|
||||
@@ -719,16 +733,6 @@ msgstr "Sito web e documentazione"
|
||||
msgid "Make a donation"
|
||||
msgstr "Fai una donazione"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controlla aggiornamenti ..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Informazione su Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Aprire %s"
|
||||
@@ -753,11 +757,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -962,6 +966,9 @@ msgstr "Titolo del Taccuino:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Aggiungi or rimuovi etichetta:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separa ogni etichetta da una virgola."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Rinomina il Taccuino:"
|
||||
|
||||
@@ -1164,9 +1171,6 @@ msgstr "Risorse: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Aggiungi o rimuovi etichetta"
|
||||
|
||||
@@ -1197,6 +1201,14 @@ msgstr "Eliminare il taccuino \"%s\"?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Cancellare queste note?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1315,6 +1327,12 @@ msgstr "Crittografato"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Gli elementi crittografati non possono essere modificati"
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titolo"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Data di aggiornamento"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitti"
|
||||
|
||||
@@ -1325,12 +1343,6 @@ msgstr "Impossibile spostare il Taccuino in questa posizione"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "I blocchi non possono essere chiamati \"%s\". È un titolo riservato."
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titolo"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Data di aggiornamento"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Data di creazione"
|
||||
|
||||
@@ -1345,6 +1357,13 @@ msgstr "Non posso copiare la nota nel Taccuino \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Non posso spostare la nota nel Taccuino \"%s\""
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Linguaggio"
|
||||
|
||||
@@ -1375,6 +1394,10 @@ msgstr "Ordina le note per"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverti l'ordine"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordina le note per"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salva geolocalizzazione con le note"
|
||||
|
||||
@@ -1390,6 +1413,43 @@ msgstr "Focus sul testo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando si crea una nuova nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Attiva Crittografia"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Visualizza tray icon"
|
||||
|
||||
@@ -1477,23 +1537,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartella da sincronizzare con (percorso assoluto)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Il percorso di sincronizzazione quando la sincronizzazione è abilitata. Vedi "
|
||||
"`sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL 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 "Nome Utente Nextcloud"
|
||||
|
||||
@@ -1546,6 +1592,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Taccuini"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Esci dall'applicazione."
|
||||
@@ -1759,10 +1808,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sito web Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
@@ -1885,8 +1930,19 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvenuto"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separa ogni etichetta da una virgola."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Questa note è stata modificata:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Il percorso di sincronizzazione quando la sincronizzazione è abilitata. "
|
||||
#~ "Vedi `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Eliminare le note?"
|
||||
|
@@ -123,9 +123,10 @@ msgstr "ToDoを完了としてマークします。"
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "ノートはToDoリストではありません:\"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EEの設定を変更します。コマンドは `enable`, `disable`, `decrypt`, `status` "
|
||||
"and `target-status` です。"
|
||||
@@ -592,9 +593,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "PDF ファイル"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "ファイル"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同期状況"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新しいノート"
|
||||
@@ -605,6 +605,35 @@ msgstr "新しいToDo"
|
||||
msgid "New notebook"
|
||||
msgstr "新しいノートブック"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "印刷"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "全般のオプション"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "暗号化のオプション"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webクリッパーのオプション"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "ファイル"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplinについて"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "アップデートのチェック..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "インポート"
|
||||
|
||||
@@ -614,9 +643,6 @@ msgstr "エクスポート"
|
||||
msgid "Synchronise"
|
||||
msgstr "同期"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "印刷"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "%s を隠す"
|
||||
@@ -679,18 +705,6 @@ msgstr "本文にフォーカス"
|
||||
msgid "&Tools"
|
||||
msgstr "ツール"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同期状況"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webクリッパーのオプション"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "暗号化のオプション"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "全般のオプション"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "ヘルプ"
|
||||
@@ -701,16 +715,6 @@ msgstr "Webサイトとドキュメント"
|
||||
msgid "Make a donation"
|
||||
msgstr "寄付する"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "アップデートのチェック..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplinについて"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s を開く"
|
||||
@@ -735,11 +739,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "アップデートがあります。すぐにダウンロードしますか?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -942,6 +946,9 @@ msgstr "ノートブックの題名:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "タグの追加・削除:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "ノートブックの名前を変更:"
|
||||
|
||||
@@ -1141,9 +1148,6 @@ msgstr "取得中のリソース: %d"
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "同期状況の出力先を選択してください"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "タグの追加と削除"
|
||||
|
||||
@@ -1174,6 +1178,14 @@ msgstr "ノートを削除しますか?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "ノートを削除しますか?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "使用方法: %s"
|
||||
@@ -1292,6 +1304,12 @@ msgstr "暗号化済"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "暗号化したアイテムは修正できません"
|
||||
|
||||
msgid "title"
|
||||
msgstr "タイトル"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "アップデート日"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "衝突"
|
||||
|
||||
@@ -1304,12 +1322,6 @@ msgstr ""
|
||||
"\"%s\" というノートブックの名称はシステムで使用するために予約済みです。名称の"
|
||||
"変更はできません。"
|
||||
|
||||
msgid "title"
|
||||
msgstr "タイトル"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "アップデート日"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "作成日"
|
||||
|
||||
@@ -1324,6 +1336,16 @@ msgstr "ノートをノートブック \"%s\" にコピーできません"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "ノートをノートブック \"%s\" に移動できません"
|
||||
|
||||
#, 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 ""
|
||||
"注意: この場所を変更する際は、同期する前に新しい場所にすべての内容をコピーし"
|
||||
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
|
||||
"次のFAQをご覧ください: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "言語"
|
||||
|
||||
@@ -1354,6 +1376,10 @@ msgstr "ノートのソート方法"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "逆順に並び替え"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "ノートのソート方法"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "ノートに位置情報を保存"
|
||||
|
||||
@@ -1369,6 +1395,43 @@ msgstr "本文にフォーカス"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "新しいノートを作成した際:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "暗号化を有効にする"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "トレイアイコンの表示"
|
||||
|
||||
@@ -1406,11 +1469,11 @@ msgid "Automatically update the application"
|
||||
msgstr "アプリケーションを自動的にアップデート"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
msgstr "更新をチェックする時、開発版を取得する"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
msgstr "詳細についてはプレリリースページを参照してください: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "同期間隔"
|
||||
@@ -1453,26 +1516,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "同期先のディレクトリ(絶対パス)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にしてく"
|
||||
"ださい。"
|
||||
|
||||
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 ""
|
||||
"注意: この場所を変更する際は、同期する前に新しい場所にすべての内容をコピーし"
|
||||
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
|
||||
"次のFAQをご覧ください: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud ユーザー名"
|
||||
|
||||
@@ -1524,6 +1570,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "ノートブック"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "場所"
|
||||
@@ -1736,10 +1785,6 @@ msgstr "- 位置情報: ノートに位置情報を添付するのに必要で
|
||||
msgid "Joplin website"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1863,8 +1908,20 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "ようこそ"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "ノートは変更されています:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にし"
|
||||
#~ "てください。"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "JoplinのWebサイト"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "状態: \"%s\"."
|
||||
|
@@ -119,7 +119,7 @@ msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -527,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -539,6 +539,34 @@ msgstr ""
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -548,9 +576,6 @@ msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr ""
|
||||
@@ -609,18 +634,6 @@ msgstr ""
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
@@ -630,16 +643,6 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -664,11 +667,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -848,6 +851,9 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1043,9 +1049,6 @@ msgstr ""
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1076,6 +1079,14 @@ msgstr ""
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr ""
|
||||
@@ -1186,6 +1197,12 @@ msgstr ""
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr ""
|
||||
|
||||
@@ -1196,12 +1213,6 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1216,6 +1227,13 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
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 "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1246,6 +1264,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1261,6 +1282,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1337,21 +1394,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
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 ""
|
||||
|
||||
@@ -1396,6 +1441,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
@@ -1591,10 +1639,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
@@ -124,9 +124,10 @@ msgstr "'할 일' 항목을 완료로 표시합니다."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "노트는 '할 일' 항목이 아닙니다: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EE(종단간 암호화) 설정을 관리합니다. 명령어는 `enable`, `disable`, "
|
||||
"`decrypt`, `status`, `target-status` 입니다."
|
||||
@@ -589,9 +590,8 @@ msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 파일"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "파일"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "새 노트"
|
||||
@@ -602,6 +602,35 @@ msgstr "새 '할 일'"
|
||||
msgid "New notebook"
|
||||
msgstr "새 노트북"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "인쇄"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "암호화 옵션"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "웹 수집기 옵션"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "파일"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "조플린이란?"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "업데이트 확인..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "가져오기"
|
||||
|
||||
@@ -611,9 +640,6 @@ msgstr "내보내기"
|
||||
msgid "Synchronise"
|
||||
msgstr "동기화"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "인쇄"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "%s 숨기기"
|
||||
@@ -676,18 +702,6 @@ msgstr "내용에 포커스"
|
||||
msgid "&Tools"
|
||||
msgstr "도구"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "웹 수집기 옵션"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "암호화 옵션"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "도움말"
|
||||
@@ -698,16 +712,6 @@ msgstr "웹사이트 및 각종 문서"
|
||||
msgid "Make a donation"
|
||||
msgstr "기부하기"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "업데이트 확인..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "조플린이란?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s 열기"
|
||||
@@ -732,12 +736,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "현재 버전: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "현재 버전: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "새 버전: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "새 버전: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "예"
|
||||
@@ -936,6 +940,9 @@ msgstr "노트북 제목:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "태그 추가 및 제거:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "노트북 이름 바꾸기:"
|
||||
|
||||
@@ -1135,9 +1142,6 @@ msgstr "리소스 가져오는 중: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "태그 추가 및 제거"
|
||||
|
||||
@@ -1168,6 +1172,14 @@ msgstr "노트를 삭제할까요?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "노트를 삭제할까요?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "사용량: %s"
|
||||
@@ -1286,6 +1298,12 @@ msgstr "암호화됨"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "암호화된 항목은 변경될 수 없습니다"
|
||||
|
||||
msgid "title"
|
||||
msgstr "제목"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "업데이트된 날짜"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "충돌"
|
||||
|
||||
@@ -1296,12 +1314,6 @@ msgstr "노트북을 이 위치로 옮길 수 없습니다"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "노트북을 \"%s\" 제목으로 정할 수 없습니다. 이미 예약중입니다."
|
||||
|
||||
msgid "title"
|
||||
msgstr "제목"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "업데이트된 날짜"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "만들어진 날짜"
|
||||
|
||||
@@ -1316,6 +1328,15 @@ msgstr "노트를 \"%s\" 노트북으로 복사할 수 없습니다"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "노트를 \"%s\" 노트북으로 옮길 수 없습니다"
|
||||
|
||||
#, 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 ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "언어"
|
||||
|
||||
@@ -1346,6 +1367,10 @@ msgstr "노트를 다음 기준으로 정렬"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "정렬 순서 반전"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "노트를 다음 기준으로 정렬"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "노트에 지리적 위치 정보 포함시키기"
|
||||
|
||||
@@ -1361,6 +1386,43 @@ msgstr "내용에 포커스"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "새 노트를 만들 때:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "암호화 사용"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "트레이 아이콘 표시"
|
||||
|
||||
@@ -1446,25 +1508,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "동기화를 할 폴더 (절대적 경로)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`를 "
|
||||
"참조하세요."
|
||||
|
||||
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 ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
|
||||
@@ -1516,6 +1562,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "노트북"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "위치"
|
||||
@@ -1728,10 +1777,6 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
|
||||
msgid "Joplin website"
|
||||
msgstr "조플린 웹사이트"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "조플린 v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "데이터베이스 v%s"
|
||||
@@ -1852,8 +1897,19 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
|
||||
msgid "Welcome"
|
||||
msgstr "환영합니다"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "노트가 변경되었습니다:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`"
|
||||
#~ "를 참조하세요."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "조플린 v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "상태: %s."
|
||||
|
@@ -17,8 +17,7 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr ""
|
||||
"Hvis du vil slette en merkelapp, fjern merkelappen fra merkede notater."
|
||||
msgstr "For å slette en merkelapp, fjern merkelappen fra merkede notater."
|
||||
|
||||
msgid "Please select the note or notebook to be deleted first."
|
||||
msgstr "Vennligst velg notatet eller notatboken som skal slettes først."
|
||||
@@ -126,11 +125,11 @@ msgstr "Notat er ikke et gjøremål: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Utfører E2EE-konfiguration. Tilgjengelige kommandoer er: `enable`(aktiver), "
|
||||
"`disable`(lukk), `decrypt`(dekrypter), `status` og `target-status` (mottager-"
|
||||
"status)."
|
||||
"Konfigurerer E2EE-konfigurasjon. Tilgjengelige kommandoer er: "
|
||||
"`enable`(aktiver), `disable`(lukk), `decrypt`(dekrypter), `status` og "
|
||||
"`target-status` (mottager-status)."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Skriv inn masterpassordet:"
|
||||
@@ -186,7 +185,7 @@ msgid "Note has been saved."
|
||||
msgstr "Notat har blitt lagret."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "Forlat programmet."
|
||||
msgstr "Avslutter programmet."
|
||||
|
||||
msgid ""
|
||||
"Exports Joplin data to the given path. By default, it will export the "
|
||||
@@ -343,7 +342,7 @@ msgid "Please select a notebook first."
|
||||
msgstr "Vennligst velg en notatbok først."
|
||||
|
||||
msgid "Creates a new notebook."
|
||||
msgstr "Opprettter en ny notatbok."
|
||||
msgstr "Oppretter en ny notatbok."
|
||||
|
||||
msgid "Creates a new note."
|
||||
msgstr "Oppretter et nytt notat."
|
||||
@@ -381,7 +380,7 @@ msgstr "Sletter notatene uten bekreftelse."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d notes match this pattern. Delete them?"
|
||||
msgstr "%d notater passer dette mønsteret. Slette dem?"
|
||||
msgstr "%d notater passer dette mønsteret. Vil du slette de?"
|
||||
|
||||
msgid "Delete note?"
|
||||
msgstr "Slett notat?"
|
||||
@@ -412,7 +411,7 @@ msgstr "Sync å forsynt mål (uteblivelsene å sync. target config-verdi)"
|
||||
|
||||
msgid ""
|
||||
"Authentication was not completed (did not receive an authentication token)."
|
||||
msgstr "Godkjenning ble ikke fullført (mottok ikke et godkjennings tegn)."
|
||||
msgstr "Godkjenning ble ikke fullført (mottok ikke et autoriseringsbevis)."
|
||||
|
||||
msgid ""
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:"
|
||||
@@ -577,18 +576,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Eksporterer til \"%s\" i \"%s\" format. Vennligst vent..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
msgstr "Sidepanel"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
msgstr "Notatliste"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Tittel på notatbok:"
|
||||
msgstr "Tittel på notat:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notatbøker"
|
||||
msgstr "Notatbrødtekst"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -597,9 +594,8 @@ msgstr "Importerer fra \"%s\" i \"%s\"-format. Vennligst vent..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-fil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nytt notat"
|
||||
@@ -610,18 +606,43 @@ msgstr "Nytt gjøremål"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny notatbok"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsvalg"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web Clipper-innstillinger"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Se etter oppdatering..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Eksport"
|
||||
msgstr "Eksporter"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Skjul %s"
|
||||
@@ -629,9 +650,8 @@ msgstr "Skjul %s"
|
||||
msgid "Quit"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Rediger"
|
||||
msgstr "&Rediger"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopier"
|
||||
@@ -652,7 +672,7 @@ msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Lenke"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Sett inn dato/tid"
|
||||
@@ -663,43 +683,26 @@ msgstr "Rediger i ekstern editor"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Søk i alle notater"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Søk i nåværende notat"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vis"
|
||||
msgstr "&Vis"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Vis/skjul sidepanel"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Bytt editorutseende"
|
||||
msgstr "Bytt editorvisning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
msgstr "Fokuser"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Verktøy"
|
||||
msgstr "&Verktøy"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web Clipper-innstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsvalg"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hjelp"
|
||||
msgstr "&Hjelp"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Nettsted og dokumentasjon"
|
||||
@@ -707,16 +710,6 @@ msgstr "Nettsted og dokumentasjon"
|
||||
msgid "Make a donation"
|
||||
msgstr "Gi et bidrag"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Se etter oppdatering..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Åpne %s"
|
||||
@@ -741,12 +734,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En oppdatering er tilgjengelig, vil du laste den ned nå?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Din versjon: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Din versjon: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Ny versjon: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Ny versjon: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -818,7 +811,7 @@ msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Denne autoriseringsbeviset er det eneste nødvendig for å gi "
|
||||
"Denne autoriseringsbeviset er det eneste nødvendige for å gi "
|
||||
"tredjepartsapplikasjoner tilgang til Joplin."
|
||||
|
||||
#, javascript-format
|
||||
@@ -826,7 +819,7 @@ msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notater og innstillinger er lagret i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
msgstr "Utforsk..."
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sjekk synkroniseringskonfigurasjon"
|
||||
@@ -925,9 +918,8 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering er:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Bruk: %s"
|
||||
msgstr "Bruk"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
@@ -949,7 +941,10 @@ msgid "Notebook title:"
|
||||
msgstr "Tittel på notatbok:"
|
||||
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Legge til eller fjern merkelapp:"
|
||||
msgstr "Legge til eller fjern merkelapper:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separer hver merkelapp med komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Gi nytt navn til notatbok:"
|
||||
@@ -961,7 +956,7 @@ msgid "Set alarm:"
|
||||
msgstr "Angi alarm:"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr "Utseende"
|
||||
msgstr "Visning"
|
||||
|
||||
msgid "Search..."
|
||||
msgstr "Søk..."
|
||||
@@ -1026,7 +1021,7 @@ msgstr ""
|
||||
"Dette notatet har ikke noe innhold. Klikk på \"%s\" for å redigere notatet."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
msgstr "Kun ett notat kan bli printet eller eksportert som PDF om gangen."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "fet tekst"
|
||||
@@ -1063,7 +1058,7 @@ msgid "Numbered List"
|
||||
msgstr "Nummerert liste"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Kuleliste"
|
||||
msgstr "Kulepunktliste"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Avmerkingsboks"
|
||||
@@ -1088,7 +1083,7 @@ msgstr "notat"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Creating new %s..."
|
||||
msgstr "Lager ny %s..."
|
||||
msgstr "Oppretter nytt %s..."
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "Oppdater"
|
||||
@@ -1114,18 +1109,20 @@ msgstr "Krypteringsinnstillinger"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper-innstillinger"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Slette notatbok? Alle notater og underliggende notatbøker i denne notatboken "
|
||||
"vil også bli slettet."
|
||||
"Slette notatbok \"&s\"?\n"
|
||||
"\n"
|
||||
"Alle notater og underliggende notatbøker i denne notatboken vil også bli "
|
||||
"slettet."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Fjern denne merkelappen fra alle notater?"
|
||||
msgstr "Fjern denne merkelappen \"%s\" fra alle notater?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Fjerne dette søket fra sidepanelet?"
|
||||
@@ -1150,9 +1147,6 @@ msgstr "Henter ressurser: %d"
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Velg hvor synkroniseringsstatusen skal eksporteres til"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Legg til eller fjern merkelapper"
|
||||
|
||||
@@ -1175,13 +1169,21 @@ msgstr "Bytt til gjøremålmodus"
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopier Markdown-link"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Slette notater?"
|
||||
msgstr "Slette notat \"%s\"?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Slett disse notatene?"
|
||||
msgstr "Slett disse %d notatene?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
@@ -1272,7 +1274,7 @@ msgstr "Slettet eksterne elementer: %d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Hentede elementer: %d/%d."
|
||||
msgstr "Hentet elementer: %d/%d."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Avbryter…"
|
||||
@@ -1301,6 +1303,12 @@ msgstr "Kryptert"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypterte elementer kan ikke modifiseres"
|
||||
|
||||
msgid "title"
|
||||
msgstr "tittel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "sist oppdatert"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1311,14 +1319,8 @@ msgstr "Kan ikke flytte notatboken til denne plasseringen"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notatbøker kan ikke hete %s, som er en reservert tittel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "tittel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "sist oppdatert"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "opprettet"
|
||||
msgstr "dato opprettet"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Dette notatet har ingen stedsinformasjon."
|
||||
@@ -1331,6 +1333,16 @@ msgstr "Kan ikke kopiere notat til notatenboken \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan ikke flytte notatet til notatboken \"%s\""
|
||||
|
||||
#, 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 ""
|
||||
"Viktig: Dersom du endrer denne lokasjonen, sørg for at du kopierer alt "
|
||||
"innhold dit før du synkroniserer. Hvis ikke blir alle filer fjernet! Se FAQ "
|
||||
"for flere detaljer: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1361,6 +1373,9 @@ msgstr "Sorter notater etter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Reverser sorteringsrekkefølge"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sorter notater etter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Lagre stedsinformasjon med notater"
|
||||
|
||||
@@ -1376,6 +1391,46 @@ msgstr "Fokuser på brødtekst"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Når du lager et nytt notat:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktiver kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Vis systemmenyikon"
|
||||
|
||||
@@ -1397,12 +1452,11 @@ msgstr "Start applikasjonen minimert som systemmenyikon"
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global forstørrelse"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor skriftstørrelse"
|
||||
msgstr "Editorskriftstørrelse"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor skrifttype"
|
||||
msgstr "Editorskrifttype"
|
||||
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
@@ -1461,28 +1515,11 @@ msgstr ""
|
||||
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mappe å synkronisere med (absolutt sti)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Stien som skal synkroniseres når filsystemsynkronisering er aktivert. Se "
|
||||
"`sync.target`."
|
||||
msgstr "Katalog å synkronisere med (absolutt sti)"
|
||||
|
||||
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 ""
|
||||
"Viktig: Dersom du endrer denne lokasjonen, sørg for at du kopierer alt "
|
||||
"innhold dit før du synkroniserer. Hvis ikke blir alle filer fjernet! Se FAQ "
|
||||
"for flere detaljer: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-brukernavn"
|
||||
|
||||
@@ -1510,7 +1547,7 @@ msgstr ""
|
||||
"Kommaseparert liste over stier til mapper å laste sertifikater fra, eller "
|
||||
"sti til individuelle sertifikatfiler. For eksempel: /my/cert_dir, /other/"
|
||||
"custom.perm. Merk at dersom du gjør endringer til TLS-innstillingene må du "
|
||||
"lagre endringer før du velger \"Sjekk synkroniseringsstatus\"."
|
||||
"lagre endringer før du velger \"Sjekk synkroniseringskonfigurasjon\"."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer TLS-sertifikatfeil"
|
||||
@@ -1519,24 +1556,23 @@ msgstr "Ignorer TLS-sertifikatfeil"
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ugyldig verdi: \"%s\". Mulige verdier er: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
msgstr "Synkronisering"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Utseende"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Notat"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notatbøker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Lokasjon"
|
||||
msgstr "Applikasjon"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1746,15 +1782,11 @@ msgstr "- Sted: for å legge ved stedsinformation til notatet."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplins nettsted"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Fulltekstsøk aktivert: %d"
|
||||
|
||||
@@ -1795,7 +1827,7 @@ msgid "Errors only"
|
||||
msgstr "Kun feilmeldinger"
|
||||
|
||||
msgid "This note has been modified:"
|
||||
msgstr "Dette notatet har blitt modifisert:"
|
||||
msgstr "Dette notatet har blitt endret:"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Lagre endringer"
|
||||
@@ -1815,9 +1847,8 @@ msgstr "Joplins mobilapp støtter for tiden ikke denne type linker: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Bildetypen er ikke støttet: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Ta et bilde"
|
||||
msgstr "Ta bilde"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Legg ved et bilde"
|
||||
@@ -1841,7 +1872,7 @@ msgid "Show metadata"
|
||||
msgstr "Vis metadata"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Se på kart"
|
||||
msgstr "Vis på kart"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "Gå til kilde-URL"
|
||||
@@ -1863,13 +1894,28 @@ msgid ""
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"Klikk på (+)-knappen for å lage et nytt notat eller en ny notatbok. Klikk på "
|
||||
"sidemenyen for tilgang til dine eksisterende notatbøker."
|
||||
"sidepanelet for tilgang til dine eksisterende notatbøker."
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr "Du har enda ingen notatbok. Lag en ved å klikke på (+)-knappen."
|
||||
msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separer hver merkelapp med komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Dette notatet har blitt endret:"
|
||||
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Liste over innhold"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Stien som skal synkroniseres når filsystemsynkronisering er aktivert. Se "
|
||||
#~ "`sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
@@ -125,9 +125,10 @@ msgstr "Markeer een to-do als voltooid. "
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Notitie is geen to-do: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Beheert E2EE configuratie. Commando's zijn `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
@@ -606,9 +607,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Bestand"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nieuwe notitie"
|
||||
@@ -619,6 +619,35 @@ msgstr "Nieuwe to-do"
|
||||
msgid "New notebook"
|
||||
msgstr "Nieuw notitieboek"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelopties"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importeer"
|
||||
|
||||
@@ -629,9 +658,6 @@ msgstr "Importeer"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseer"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr ""
|
||||
@@ -694,18 +720,6 @@ msgstr ""
|
||||
msgid "&Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelopties"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Help"
|
||||
@@ -717,16 +731,6 @@ msgstr "Website en documentatie"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website en documentatie"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Op %s: %s"
|
||||
@@ -751,11 +755,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -953,6 +957,9 @@ msgstr "Notitieboek titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Scheid iedere tag met een komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Hernoem notitieboek:"
|
||||
|
||||
@@ -1159,9 +1166,6 @@ msgstr "Middelen: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
@@ -1195,6 +1199,14 @@ msgstr "Notities verwijderen?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Deze notities verwijderen?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Gebruik: %s"
|
||||
@@ -1314,6 +1326,14 @@ msgstr "Versleuteld"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Versleutelde items kunnen niet aangepast worden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Untitled"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Bijgewerkt: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicten"
|
||||
|
||||
@@ -1327,14 +1347,6 @@ 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."
|
||||
@@ -1350,6 +1362,13 @@ msgstr "Kan notitie niet naar notitieboek \"%s\" kopiëren."
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1383,6 +1402,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Draait de sorteervolgorde om."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Bewerk notitieboek"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Sla geo-locatie op bij notities"
|
||||
|
||||
@@ -1400,6 +1423,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Maakt een nieuwe notitie aan."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Schakel encryptie in"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1482,23 +1542,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Folder om mee te synchroniseren (absolute pad)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
|
||||
"ingeschakeld. Zie `sync.target`."
|
||||
|
||||
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 ""
|
||||
|
||||
@@ -1548,6 +1594,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie."
|
||||
@@ -1757,10 +1806,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1886,8 +1931,16 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Scheid iedere tag met een komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Deze notitie werd aangepast:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
|
||||
#~ "ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
@@ -127,9 +127,10 @@ msgstr "Markeert een taak als afgerond."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Notitie is geen taak: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Beheert de E2EE-configuratie. Opdrachten zijn: `enable`, `disable`, "
|
||||
"`decrypt`, `status` en `target-status`."
|
||||
@@ -606,9 +607,8 @@ msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-bestand"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nieuwe notitie"
|
||||
@@ -619,6 +619,35 @@ msgstr "Nieuwe taak"
|
||||
msgid "New notebook"
|
||||
msgstr "Nieuw notitieboek"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Afdrukken"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelingsopties"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webclipper-opties"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controleren op updates..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importeren"
|
||||
|
||||
@@ -628,9 +657,6 @@ msgstr "Exporteren"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseren"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Afdrukken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "%s verbergen"
|
||||
@@ -695,18 +721,6 @@ msgstr "Inhoud focussen"
|
||||
msgid "&Tools"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webclipper-opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelingsopties"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hulp"
|
||||
@@ -717,16 +731,6 @@ msgstr "Website en documentatie"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doneren"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controleren op updates..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s openen"
|
||||
@@ -751,11 +755,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Er is een update beschikbaar. Wil je deze nu downloaden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -961,6 +965,9 @@ msgstr "Titel van notitieboek:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Labels toevoegen of verwijderen:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Scheidt elk label met een komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Notitieboeknaam wijzigen:"
|
||||
|
||||
@@ -1164,9 +1171,6 @@ msgstr "Bronnen: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Kies waar de synchronisatiestatus naar moet worden geëxporteerd"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Labels toevoegen of verwijderen"
|
||||
|
||||
@@ -1199,6 +1203,14 @@ msgstr "Notities verwijderen?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Deze notities verwijderen?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Gebruik: %s"
|
||||
@@ -1317,6 +1329,12 @@ msgstr "Versleuteld"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Versleutelde items kunnen niet worden bewerkt"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "bijgewerkt op"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicten"
|
||||
|
||||
@@ -1327,12 +1345,6 @@ msgstr "Kan notitieboek niet verplaatsen naar deze locatie"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notitieboeken mogen niet \"%s\" heten; dit is een gereserveerde titel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "bijgewerkt op"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "gecreëerd op"
|
||||
|
||||
@@ -1347,6 +1359,13 @@ msgstr "Kan notitie niet kopiëren naar notitieboek \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan notitie niet verplaatsen naar notitieboek \"%s\""
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1377,6 +1396,10 @@ msgstr "Notities sorteren op"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Sorteervolgorde omdraaien"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Notities sorteren op"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Locatie opslaan in notities"
|
||||
|
||||
@@ -1392,6 +1415,43 @@ msgstr "Inhoud focussen"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Bij het creëren van een nieuwe notitie:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Versleuteling inschakelen"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Systeemvakpictogram tonen"
|
||||
|
||||
@@ -1478,23 +1538,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Map waarnaar gesynchroniseerd moet worden (absoluut pad)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
|
||||
"synchronisatie is ingeschakeld. Zie `sync.target`."
|
||||
|
||||
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-gebruikersnaam"
|
||||
|
||||
@@ -1547,6 +1593,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie af."
|
||||
@@ -1762,10 +1811,6 @@ msgstr "- Locatie: zodat je locatie-informatie kunt toevoegen aan een notitie."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1889,8 +1934,20 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Scheidt elk label met een komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Deze notitie is bewerkt:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
|
||||
#~ "synchronisatie is ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin-website"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: %s."
|
||||
|
@@ -14,7 +14,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
@@ -124,9 +124,10 @@ msgstr "Marca uma tarefa como feita."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Nota não é uma tarefa: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gerencia a configuração E2EE. Os comandos são `enable`, `disable`, "
|
||||
"`decrypt`, `status` e `target-status`."
|
||||
@@ -163,8 +164,8 @@ msgstr "Editar nota."
|
||||
msgid ""
|
||||
"No text editor is defined. Please set it using `config editor <editor-path>`"
|
||||
msgstr ""
|
||||
"Nenhum editor de texto está definido. Defina-o usando o comando `config edit "
|
||||
"<caminho-do-editor>`"
|
||||
"Nenhum editor de texto está definido. Defina-o usando o comando `config "
|
||||
"editor <caminho-do-editor>`"
|
||||
|
||||
msgid "No active notebook."
|
||||
msgstr "Nenhum caderno ativo."
|
||||
@@ -603,9 +604,8 @@ msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
msgid "PDF File"
|
||||
msgstr "Arquivo PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Arquivo"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
@@ -616,6 +616,35 @@ msgstr "Nova tarefa"
|
||||
msgid "New notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opções de Encriptação"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opções do Web clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Arquivo"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificar atualizações..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -625,9 +654,6 @@ msgstr "Exportar"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Ocultar %s"
|
||||
@@ -690,18 +716,6 @@ msgstr "Focar no corpo"
|
||||
msgid "&Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opções do Web clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opções de Encriptação"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajuda"
|
||||
@@ -712,16 +726,6 @@ msgstr "Website e documentação"
|
||||
msgid "Make a donation"
|
||||
msgstr "Fazer uma doação"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificar atualizações..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -746,11 +750,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Uma atualização está disponível, você quer baixar agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -760,7 +764,7 @@ msgid "No"
|
||||
msgstr "Não"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Token foi copiado para a \\u00e1rea de transfer\\u00eancia!"
|
||||
msgstr "Token foi copiado para a área de transferência!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
@@ -815,17 +819,17 @@ msgid "Advanced options"
|
||||
msgstr "Mostrar opções avançadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Token de autoriza\\u00e7\\u00e3o:"
|
||||
msgstr "Token de autorização:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "Copira token"
|
||||
msgstr "Copiar token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Esse token de autoriza\\u00e7\\u00e3o só é necess\\u00e1rio para permitir "
|
||||
"que aplicativos de terceiros acessem o Joplin."
|
||||
"Esse token de autorização só é necessário para permitir que aplicativos de "
|
||||
"terceiros acessem o Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
@@ -955,6 +959,9 @@ msgstr "Título do caderno:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Adicionar ou remover tags:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separe cada tag por vírgula."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
@@ -1156,9 +1163,6 @@ msgstr ""
|
||||
"Favor selecionar o local para onde o status de sincronia deveria ser "
|
||||
"exportado"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adicionar ou remover tags"
|
||||
|
||||
@@ -1189,6 +1193,14 @@ msgstr "Apagar o caderno \"%s\"?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Excluir estas notas?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1307,6 +1319,12 @@ msgstr "Encriptado"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Itens encriptados não podem ser modificados"
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data de atualização"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitos"
|
||||
|
||||
@@ -1318,12 +1336,6 @@ 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 atualização"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de criação"
|
||||
|
||||
@@ -1338,6 +1350,16 @@ 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\""
|
||||
|
||||
#, 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 ""
|
||||
"Atenção: Se você modificar esse local, tenha certeza de copiar todo o seu "
|
||||
"conteúdo para lá antes de sincronizar, do contrário todos os seus arquivos "
|
||||
"serão removidos! Veja o FAQ para mais detalhes: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1368,6 +1390,10 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverter ordem de classificação"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salvar geolocalização com notas"
|
||||
|
||||
@@ -1383,6 +1409,43 @@ msgstr "Focar no corpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando criar uma nota nova:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar encriptação"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Exibir tray icon"
|
||||
|
||||
@@ -1469,26 +1532,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Diretório para sincronizar (caminho absoluto)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"O caminho para sincronizar, quando a sincronização do sistema de arquivos "
|
||||
"está habilitada. Veja `sync.target`."
|
||||
|
||||
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 ""
|
||||
"Atenção: Se você modificar esse local, tenha certeza de copiar todo o seu "
|
||||
"conteúdo para lá antes de sincronizar, do contrário todos os seus arquivos "
|
||||
"serão removidos! Veja o FAQ para mais detalhes: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuário da Nextcloud"
|
||||
|
||||
@@ -1541,6 +1587,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Localização"
|
||||
@@ -1643,10 +1692,10 @@ msgid "On %s: %s"
|
||||
msgstr "Em %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "Permissão para utilizar sua c\\u00e2mera"
|
||||
msgstr "Permissão para utilizar sua câmera"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "É necessária a sua permissão para utilizar sua c\\u00e2mera."
|
||||
msgstr "É necessária a sua permissão para utilizar sua câmera."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Atualmente, não há notas. Crie uma, clicando no botão (+)."
|
||||
@@ -1758,10 +1807,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1883,8 +1928,20 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separe cada tag por vírgula."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Esta nota foi modificada:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "O caminho para sincronizar, quando a sincronização do sistema de arquivos "
|
||||
#~ "está habilitada. Veja `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Site do Joplin"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Excluir notas?"
|
||||
|
@@ -123,7 +123,7 @@ msgstr "Notița nu este o sarcină: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -542,9 +542,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Fișier PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fișier"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Adăugați o nouă notiță"
|
||||
@@ -555,6 +554,35 @@ msgstr "Adăugați o nouă sarcină"
|
||||
msgid "New notebook"
|
||||
msgstr "Adăugați un nou caiet de notițe"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Printați"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fișier"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Despre Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificați actualizările..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importați"
|
||||
|
||||
@@ -564,9 +592,6 @@ msgstr "Exportați"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizați"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Printați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Ascundeți %s"
|
||||
@@ -630,18 +655,6 @@ msgstr ""
|
||||
msgid "&Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajutor"
|
||||
@@ -652,16 +665,6 @@ msgstr "Website și documentație"
|
||||
msgid "Make a donation"
|
||||
msgstr "Faceți o donație"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificați actualizările..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Despre Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Deschideți %s"
|
||||
@@ -686,11 +689,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -872,6 +875,9 @@ msgstr "Titlul caietului de notițe:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Adăugați ori eliminați etichete:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Redenumiți caietul de notițe:"
|
||||
|
||||
@@ -1067,9 +1073,6 @@ msgstr "Resurse: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
@@ -1103,6 +1106,14 @@ msgstr "Ștergeți notițele?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Ștergeți aceste notițe?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Utilizare: %s"
|
||||
@@ -1213,6 +1224,12 @@ msgstr "Criptat"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Itemii criptați nu pot fi editați"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titlu"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data actualizării"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicte"
|
||||
|
||||
@@ -1223,12 +1240,6 @@ msgstr "Nu se poate muta caietul de notițe în această locație"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr "titlu"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data actualizării"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data creării"
|
||||
|
||||
@@ -1243,6 +1254,13 @@ msgstr "Nu se poate copia notița în caietul de notițe \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Nu se poate muta notița în caietul de notițe \"%s\""
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Limbă"
|
||||
|
||||
@@ -1273,6 +1291,10 @@ msgstr "Sortați notițele după"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inversați ordinea sortării"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortați notițele după"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salvați geo-locația în notițe"
|
||||
|
||||
@@ -1288,6 +1310,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Când este creată o nouă notiță:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activați criptarea"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afișați iconița coșul de gunoi"
|
||||
|
||||
@@ -1365,21 +1424,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL 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 "Nume utilizator Nextcloud"
|
||||
|
||||
@@ -1427,6 +1474,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Duplicați"
|
||||
@@ -1625,10 +1675,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1751,8 +1797,13 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Această notiță a fost modificată:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Website Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Statut: %s."
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
@@ -127,12 +127,13 @@ msgstr "Отмечает задачу как выполненную."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Заметка не является задачей: «%s»"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Управляет конфигурацией E2EE. Команды: `enable`, `disable`, `decrypt`, "
|
||||
"`status` и `target-status`."
|
||||
"`status`,'decrypt-file' и `target-status`."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Введите мастер-пароль:"
|
||||
@@ -189,7 +190,7 @@ msgid "Note has been saved."
|
||||
msgstr "Заметка сохранена."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "Выход из приложения."
|
||||
msgstr "Выйти из приложения."
|
||||
|
||||
msgid ""
|
||||
"Exports Joplin data to the given path. By default, it will export the "
|
||||
@@ -578,10 +579,10 @@ msgid ""
|
||||
"supplied the password, the encrypted items are being decrypted in the "
|
||||
"background and will be available soon."
|
||||
msgstr ""
|
||||
"Один или несколько элементов сейчас зашифрованы и может потребоваться, чтобы "
|
||||
"вы предоставили мастер-пароль. Для этого введите, пожалуйста, `e2ee "
|
||||
"decrypt`. Если пароль уже был вами предоставлен, зашифрованные элементы "
|
||||
"расшифруются в фоновом режиме и вскоре станут доступны."
|
||||
"Один или несколько элементов зашифрованы, и для их расшифровки может "
|
||||
"потребоваться пароль. Для этого введите `e2ee decrypt`. Если пароль уже был "
|
||||
"вами предоставлен, зашифрованные элементы расшифруются в фоновом режиме и "
|
||||
"вскоре станут доступны."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -606,9 +607,8 @@ msgstr "Импорт из \"%s\" в формате \"%s\". Пожалуйста,
|
||||
msgid "PDF File"
|
||||
msgstr "Файл PDF"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Файл"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Статус синхронизации"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Новая заметка"
|
||||
@@ -619,6 +619,34 @@ msgstr "Новая задача"
|
||||
msgid "New notebook"
|
||||
msgstr "Новый блокнот"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Печать"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Настройки шифрования"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Настройки веб-клиппера"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Файл"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "О Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Проверить обновления..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Импорт"
|
||||
|
||||
@@ -628,9 +656,6 @@ msgstr "Экспорт"
|
||||
msgid "Synchronise"
|
||||
msgstr "Синхронизировать"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Печать"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Скрыть %s"
|
||||
@@ -638,9 +663,8 @@ msgstr "Скрыть %s"
|
||||
msgid "Quit"
|
||||
msgstr "Выход"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Правка"
|
||||
msgstr "&Правка"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Копировать"
|
||||
@@ -675,9 +699,8 @@ msgstr "Поиск во всех заметках"
|
||||
msgid "Search in current note"
|
||||
msgstr "Поиск в текущей заметке"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Вид"
|
||||
msgstr "&Вид"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Переключить боковую панель"
|
||||
@@ -688,25 +711,11 @@ msgstr "Переключить вид редактора"
|
||||
msgid "Focus"
|
||||
msgstr "Фокус"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Сервис"
|
||||
msgstr "&Сервис"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Статус синхронизации"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Настройки веб-клиппера"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Настройки шифрования"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Помощь"
|
||||
msgstr "&Помощь"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Сайт и документация"
|
||||
@@ -714,16 +723,6 @@ msgstr "Сайт и документация"
|
||||
msgid "Make a donation"
|
||||
msgstr "Сделать пожертвование"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Проверить обновления..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "О Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Открыть %s"
|
||||
@@ -748,12 +747,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Доступно обновление, вы хотите загрузить его сейчас?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Ваша версия: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Ваша версия: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Новая версия: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Новая версия: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Да"
|
||||
@@ -957,6 +956,9 @@ msgstr "Название блокнота:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Добавить или удалить метки:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Разделяйте каждую метку запятой."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Переименовать блокнот:"
|
||||
|
||||
@@ -1158,9 +1160,6 @@ msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Пожалуйста, выберите, куда должен быть экспортирован статус синхронизации"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Добавить или удалить метки"
|
||||
|
||||
@@ -1191,6 +1190,14 @@ msgstr "Удалить заметку \"%s\"?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Удалить эти %d заметки?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Использовано: %s"
|
||||
@@ -1309,6 +1316,12 @@ msgstr "Зашифровано"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Зашифрованные элементы не могут быть изменены"
|
||||
|
||||
msgid "title"
|
||||
msgstr "заголовок"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "дата обновления"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Конфликты"
|
||||
|
||||
@@ -1320,12 +1333,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Блокнот не может быть назван \"%s\", так как это зарезервированное название."
|
||||
|
||||
msgid "title"
|
||||
msgstr "заголовок"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "дата обновления"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "дата создания"
|
||||
|
||||
@@ -1340,6 +1347,16 @@ msgstr "Не удалось скопировать заметку в блокн
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Не удалось переместить заметку в блокнот \"%s\""
|
||||
|
||||
#, 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 ""
|
||||
"Внимание: если вы измените это местоположение, обязательно скопируйте все "
|
||||
"содержимое перед синхронизацией, в противном случае все файлы будут удалены! "
|
||||
"Смотрите FAQ для получения подробной информации: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
@@ -1370,6 +1387,9 @@ msgstr "Сортировать заметки по"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Обратный порядок сортировки"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Сортировать блокноты по"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Сохранять информацию о геолокации в заметках"
|
||||
|
||||
@@ -1385,6 +1405,43 @@ msgstr "Фокус на содержимом"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "При создании новой заметки:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Включить шифрование"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Показывать иконку в трее"
|
||||
|
||||
@@ -1473,26 +1530,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Каталог синхронизации (абсолютный путь)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Путь для синхронизации, когда включена синхронизация файловой системы. См. "
|
||||
"`sync.target`."
|
||||
|
||||
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 ""
|
||||
"Внимание: если вы измените это местоположение, обязательно скопируйте все "
|
||||
"содержимое перед синхронизацией, в противном случае все файлы будут удалены! "
|
||||
"Смотрите FAQ для получения подробной информации: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Имя пользователя Nextcloud"
|
||||
|
||||
@@ -1542,6 +1582,9 @@ msgstr "Внешний вид"
|
||||
msgid "Note"
|
||||
msgstr "Заметки"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Приложение"
|
||||
|
||||
@@ -1756,10 +1799,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Сайт Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "База данных v%s"
|
||||
@@ -1882,5 +1921,16 @@ msgstr "У вас сейчас нет блокнота. Создайте его
|
||||
msgid "Welcome"
|
||||
msgstr "Добро пожаловать"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Разделяйте каждую метку запятой."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Эта заметка была изменена:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Путь для синхронизации, когда включена синхронизация файловой системы. "
|
||||
#~ "См. `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
@@ -123,9 +123,10 @@ msgstr "Označi seznam opravil kot končan."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Zabeležka ni formata seznam opravil: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Upravlja z E2EE nastavitvami. Ukazi so `enable`, `disable`, `decrypt`, "
|
||||
"`status` in `target-status`."
|
||||
@@ -603,9 +604,8 @@ msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF datoteka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova zabeležka"
|
||||
@@ -616,6 +616,35 @@ msgstr "Novi seznam opravil"
|
||||
msgid "New notebook"
|
||||
msgstr "Nova beležnica"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Natisni"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Možnosti enkripcije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Preverjanje za posodobitvami..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Uvozi"
|
||||
|
||||
@@ -625,9 +654,6 @@ msgstr "Izvozi"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinhroniziraj"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Natisni"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Skrij %s"
|
||||
@@ -692,18 +718,6 @@ msgstr "Fokusiraj vsebino"
|
||||
msgid "&Tools"
|
||||
msgstr "Orodja"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Možnosti enkripcije"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Pomoč"
|
||||
@@ -714,16 +728,6 @@ msgstr "Spletna stran in dokumentacija"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doniraj"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Preverjanje za posodobitvami..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Odpri %s"
|
||||
@@ -748,11 +752,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Posodobitev je na voljo, jo želite prenesti sedaj?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -950,6 +954,9 @@ msgstr "Naslov beležnice:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Dodaj ali odstrani oznako:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Loči vsako oznako z vejico."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Preimenuj beležnico:"
|
||||
|
||||
@@ -1157,9 +1164,6 @@ msgstr "Viri: %d."
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
@@ -1194,6 +1198,14 @@ msgstr "Izbriši zabeležke?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Izbriši te zabeležke?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uporaba: %s"
|
||||
@@ -1312,6 +1324,14 @@ msgstr "Enkriptirano"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Enkriptirani predmeti ne morejo biti spremenjeni"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Posodobljeno: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konfikti"
|
||||
|
||||
@@ -1323,14 +1343,6 @@ msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
|
||||
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."
|
||||
@@ -1346,6 +1358,13 @@ 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"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1377,6 +1396,10 @@ msgstr "Razporedi zabeležko po"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Obrni vrstni red"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Razporedi zabeležko po"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Shrani geo-lokacijo z zabeležkami"
|
||||
|
||||
@@ -1392,6 +1415,43 @@ msgstr "Fokusiraj vsebino"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ob ustvarjanju nove zabeležke:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Omogoči enkripcijo"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
|
||||
|
||||
@@ -1478,23 +1538,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. Poglej "
|
||||
"`sync.target`."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1542,6 +1588,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Beležnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izhod iz aplikacije."
|
||||
@@ -1749,10 +1798,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1875,8 +1920,20 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Loči vsako oznako z vejico."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Ta zabeležka je bila spremenjena:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. "
|
||||
#~ "Poglej `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin spletna stran"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: %s."
|
||||
|
@@ -124,9 +124,10 @@ msgstr "Märker en att-göra som gjord."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Anteckning är inte en att-göra: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Hanterar E2EE-konfiguration. Kommandon är `enable`,` disable`, `decrypt`,` "
|
||||
"status` och `target-status`."
|
||||
@@ -607,9 +608,8 @@ msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-fil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ny anteckning"
|
||||
@@ -620,6 +620,35 @@ msgstr "Ny att-göra"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny anteckningsbok"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsinställningar"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper-inställningar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Sök efter uppdateringar..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importera"
|
||||
|
||||
@@ -629,9 +658,6 @@ msgstr "Exportera"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkronisera"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Dölj %s"
|
||||
@@ -693,18 +719,6 @@ msgstr "Fokus"
|
||||
msgid "&Tools"
|
||||
msgstr "Verktyg"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper-inställningar"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsinställningar"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hjälp"
|
||||
@@ -715,16 +729,6 @@ msgstr "Webbplats och dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Gör en donation"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Sök efter uppdateringar..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Öppna %s"
|
||||
@@ -749,12 +753,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En uppdatering är tillgänglig, vill du hämta den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Din version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Din version: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Ny version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Ny version: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -958,6 +962,9 @@ msgstr "Titel på anteckningsbok:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Lägg till eller ta bort taggar:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separera varje tagg med ett komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Byt namn på anteckningsbok:"
|
||||
|
||||
@@ -1160,9 +1167,6 @@ msgstr "Hämtar resurser: %d"
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Lägg till eller ta bort taggar"
|
||||
|
||||
@@ -1195,6 +1199,14 @@ msgstr "Ta bort anteckningar?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Ta bort dessa anteckningar?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Användning: %s"
|
||||
@@ -1313,6 +1325,12 @@ msgstr "Krypterad"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypterade objekt kan inte ändras"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "uppdaterad datum"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1324,12 +1342,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Anteckningsböcker kan inte namnges \"%s\", vilket är en reserverad titel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "uppdaterad datum"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "skapad datum"
|
||||
|
||||
@@ -1344,6 +1356,16 @@ msgstr "Kan inte kopiera anteckning till \"%s\" anteckningsbok"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan inte flytta anteckning till \"%s\" anteckningsbok"
|
||||
|
||||
#, 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 ""
|
||||
"OBS! Om du ändrar denna plats så se till att du har en kopia på allt "
|
||||
"innehåll innan du synkroniserar. Annars kommer samtliga filer att raderas. "
|
||||
"Läs FAQ för mer information: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1374,6 +1396,10 @@ msgstr "Sortera anteckningar efter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Omvänd sorteringsordning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortera anteckningar efter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Spara geolokalisering med anteckningar"
|
||||
|
||||
@@ -1389,6 +1415,43 @@ msgstr "Fokus på huvuddel"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "När du skapar en ny anteckning:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktivera kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Visa fältikon"
|
||||
|
||||
@@ -1476,26 +1539,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog för att synkronisera med (absolut sökväg)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sökvägen att synkronisera med när synkronisering av filsystem är aktiverat. "
|
||||
"Se `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud-WebDAV-webbadress"
|
||||
|
||||
#, 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 ""
|
||||
"OBS! Om du ändrar denna plats så se till att du har en kopia på allt "
|
||||
"innehåll innan du synkroniserar. Annars kommer samtliga filer att raderas. "
|
||||
"Läs FAQ för mer information: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-användarnamn"
|
||||
|
||||
@@ -1546,6 +1592,9 @@ msgstr "Utseende"
|
||||
msgid "Note"
|
||||
msgstr "Anteckning"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Avslutar programmet"
|
||||
|
||||
@@ -1763,10 +1812,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Databas v%s"
|
||||
@@ -1891,8 +1936,19 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Välkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separera varje tagg med ett komma."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Denna anteckning har ändrats:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sökvägen att synkronisera med när synkronisering av filsystem är "
|
||||
#~ "aktiverat. Se `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tillstånd: %s."
|
||||
|
@@ -126,7 +126,7 @@ msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -575,9 +575,8 @@ msgstr "\"%s\" den \"%s\" biçiminde içe aktarılıyor. Lütfen bekleyin..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF Dosyası"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Dosya"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Senkronizasyon durumu"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Yeni not"
|
||||
@@ -588,6 +587,35 @@ msgstr "Yeni yapılacak"
|
||||
msgid "New notebook"
|
||||
msgstr "Yeni not defteri"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Yazdır"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Genel seçenekler"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Şifreleme seçenekleri"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web alıntılama ayarları"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Dosya"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin hakkında"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Güncellemeleri kontrol et..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "İçe aktar"
|
||||
|
||||
@@ -597,9 +625,6 @@ msgstr "Dışa aktar"
|
||||
msgid "Synchronise"
|
||||
msgstr "Senkronize"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Yazdır"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "Gizle %s"
|
||||
@@ -661,18 +686,6 @@ msgstr "Odaklan"
|
||||
msgid "&Tools"
|
||||
msgstr "Araçlar"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Senkronizasyon durumu"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web alıntılama ayarları"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Şifreleme seçenekleri"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Genel seçenekler"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Yardım"
|
||||
@@ -683,16 +696,6 @@ msgstr "Web sitesi ve dökümanlar"
|
||||
msgid "Make a donation"
|
||||
msgstr "Bağış yapın"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Güncellemeleri kontrol et..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin hakkında"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Aç %s"
|
||||
@@ -717,12 +720,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Güncelleme mevcut, şimdi indirmek ister misiniz?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Sürümün: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Sürümün: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Yeni sürüm: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Yeni sürüm: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Evet"
|
||||
@@ -928,6 +931,9 @@ msgstr "Not defteri başlığı:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Etiket ekle veya kaldır:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Her etiketi virgülle ayırın."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Not defterini yeniden adlandır:"
|
||||
|
||||
@@ -1130,9 +1136,6 @@ msgstr "Kaynaklar alınıyor: %d"
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Lütfen senkronizasyon durumunun nereye aktarılacağını seçin"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Etiket ekle veya kaldır"
|
||||
@@ -1165,6 +1168,14 @@ msgstr "\"%s\" Notunu sil?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Bu notlar ( %d ) silinsin mi?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Kullanım: %s"
|
||||
@@ -1283,6 +1294,12 @@ msgstr "Şifrelenmiş"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Şifrelenmiş öğeler değiştirilemez"
|
||||
|
||||
msgid "title"
|
||||
msgstr "başlık"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "güncelleme zamanı"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Çakışmalar"
|
||||
|
||||
@@ -1293,12 +1310,6 @@ msgstr "Not defteri bu konuma taşınamıyor"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Not defterine ayrılmış bir başlık adı olan \"%s\" adı verilemez."
|
||||
|
||||
msgid "title"
|
||||
msgstr "başlık"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "güncelleme zamanı"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "oluşturma zamanı"
|
||||
|
||||
@@ -1313,6 +1324,16 @@ msgstr "Not \"%s\" not defterine kopyalanamıyor."
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Not \"%s\" not defterine taşınamıyor."
|
||||
|
||||
#, 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 ""
|
||||
"Dikkat: Bu konumu değiştirirseniz, senkronize etmeden önce tüm içeriğinizi "
|
||||
"kopyaladığınızdan emin olun, aksi takdirde tüm dosyalar kaldırılır! Daha "
|
||||
"fazla bilgi için SSS bölümüne bakın: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Dil"
|
||||
|
||||
@@ -1343,6 +1364,10 @@ msgstr "Notları sırala"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Sıralamayı değiştir"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Notları sırala"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Coğrafi konumu notlarla kaydedin"
|
||||
|
||||
@@ -1358,6 +1383,43 @@ msgstr "Gövde kısmına odaklan"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Yeni bir not oluştururken:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Şifrelemeyi etkinleştir"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Tepsi simgesini göster"
|
||||
|
||||
@@ -1444,26 +1506,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Eşitlenecek dizin (kesin yol)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Dosya sistemi senkronizasyonu etkinleştirildiğinde senkronize edilecek yol. "
|
||||
"Bakınız `sync.target`."
|
||||
|
||||
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 ""
|
||||
"Dikkat: Bu konumu değiştirirseniz, senkronize etmeden önce tüm içeriğinizi "
|
||||
"kopyaladığınızdan emin olun, aksi takdirde tüm dosyalar kaldırılır! Daha "
|
||||
"fazla bilgi için SSS bölümüne bakın: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud kullanıcı adı"
|
||||
|
||||
@@ -1513,6 +1558,9 @@ msgstr "Görünüm"
|
||||
msgid "Note"
|
||||
msgstr "Not"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Uygulama"
|
||||
|
||||
@@ -1725,10 +1773,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin Web Sitesi"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Veritabanı v%s"
|
||||
@@ -1851,5 +1895,16 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Hoşgeldiniz"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Her etiketi virgülle ayırın."
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "Bu not değiştirildi:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Dosya sistemi senkronizasyonu etkinleştirildiğinde senkronize edilecek "
|
||||
#~ "yol. Bakınız `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
@@ -123,10 +123,10 @@ msgstr "笔记非待办事项:\"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"管理E2EE配置。命令为:`enable`, `disable`, `decrypt`, `status` 和 `target-"
|
||||
"status`。"
|
||||
"管理 E2EE 配置。命令为:`enable`、`disable`、`decrypt`、`status、`decrypt-"
|
||||
"file` 和 `target-status`。"
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "输入主密码:"
|
||||
@@ -138,7 +138,7 @@ msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
msgstr ""
|
||||
"开始解密... 请稍后。因解密环节取决于需解密的文件数量,可能需要等待几分钟。"
|
||||
"开始解密,请稍候... 取决于需解密的文件数量,解密环节可能需要等待几分钟。"
|
||||
|
||||
msgid "Completed decryption."
|
||||
msgstr "已完成解密。"
|
||||
@@ -151,7 +151,7 @@ msgstr "已禁用"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Encryption is: %s"
|
||||
msgstr "加密为:%s"
|
||||
msgstr "加密状态:%s"
|
||||
|
||||
msgid "Edit note."
|
||||
msgstr "编辑笔记。"
|
||||
@@ -201,7 +201,7 @@ msgid "Displays a geolocation URL for the note."
|
||||
msgstr "显示该笔记的地理定位 URL 地址。"
|
||||
|
||||
msgid "Displays usage information."
|
||||
msgstr "显示用量信息。"
|
||||
msgstr "显示用法提示。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "For information on how to customise the shortcuts please visit %s"
|
||||
@@ -215,7 +215,7 @@ msgid ""
|
||||
"all` for the complete usage information."
|
||||
msgstr ""
|
||||
"输入 `help [command]` 来获取有关该命令的更多信息;或输入 `help all` 获取完整"
|
||||
"的使用说明。"
|
||||
"的用法提示。"
|
||||
|
||||
msgid "The possible commands are:"
|
||||
msgstr "可用的命令有:"
|
||||
@@ -240,7 +240,7 @@ msgid "To maximise/minimise the console, press \"tc\"."
|
||||
msgstr "按 \"TC\" 最大化/最小化控制台。"
|
||||
|
||||
msgid "To enter command line mode, press \":\""
|
||||
msgstr "按 \":\" 键进入命令行模式"
|
||||
msgstr "按“:”键进入命令行模式"
|
||||
|
||||
msgid "To exit command line mode, press ESCAPE"
|
||||
msgstr "按 ESC 键退出命令行模式"
|
||||
@@ -363,7 +363,7 @@ msgstr "删除笔记(不要求确认)。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d notes match this pattern. Delete them?"
|
||||
msgstr "有%d条笔记符合此模式。是否删除?"
|
||||
msgstr "有 %d 条笔记匹配。是否删除?"
|
||||
|
||||
msgid "Delete note?"
|
||||
msgstr "是否删除笔记?"
|
||||
@@ -397,7 +397,7 @@ msgstr "认证未完成(未收到认证令牌)。"
|
||||
|
||||
msgid ""
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:"
|
||||
msgstr "为了让 Joplin 与 Dropbox 同步,请遵循以下步骤:"
|
||||
msgstr "要让 Joplin 与 Dropbox 同步,请按下列步骤操作:"
|
||||
|
||||
msgid "Step 1: Open this URL in your browser to authorise the application:"
|
||||
msgstr "步骤一:在浏览器中打开此 URL 来授权应用程序:"
|
||||
@@ -407,10 +407,10 @@ msgstr "步骤二:输入 Dropbox 提供的代码:"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Not authentified with %s. Please provide any missing credentials."
|
||||
msgstr "%s 并未被验证。请提供缺少的凭证。"
|
||||
msgstr "未授予 %s 的权限。请提供缺少的凭据。"
|
||||
|
||||
msgid "Synchronisation is already in progress."
|
||||
msgstr "同步已在进行中。"
|
||||
msgstr "已经在同步。"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -435,7 +435,7 @@ msgid "Downloading resources..."
|
||||
msgstr "下载资源中..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "正在取消... 请稍后。"
|
||||
msgstr "正在取消... 请稍候。"
|
||||
|
||||
msgid ""
|
||||
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
|
||||
@@ -501,10 +501,10 @@ msgstr "严重错误:"
|
||||
|
||||
msgid ""
|
||||
"The application has been authorised - you may now close this browser tab."
|
||||
msgstr "该程序已被授权 - 您可以关闭此浏览页面了。"
|
||||
msgstr "授权成功 - 您可以关闭此页面了。"
|
||||
|
||||
msgid "The application has been successfully authorised."
|
||||
msgstr "该程序已被成功授权。"
|
||||
msgstr "已成功授予本应用程序权限。"
|
||||
|
||||
msgid ""
|
||||
"Please open the following URL in your browser to authenticate the "
|
||||
@@ -566,9 +566,8 @@ msgstr "从 \"%s\" 导入,导入格式为 \"%s\" 。请稍等…"
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 文件"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "文件"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同步状态"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新建笔记"
|
||||
@@ -579,6 +578,34 @@ msgstr "新建待办事项"
|
||||
msgid "New notebook"
|
||||
msgstr "新建笔记本"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "打印"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "通用选项"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密选项"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "网页剪辑选项"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "文件 (&F)"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "关于 Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "检查更新..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "导入"
|
||||
|
||||
@@ -588,9 +615,6 @@ msgstr "导出"
|
||||
msgid "Synchronise"
|
||||
msgstr "同步"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "打印"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "隐藏 %s"
|
||||
@@ -598,9 +622,8 @@ msgstr "隐藏 %s"
|
||||
msgid "Quit"
|
||||
msgstr "退出"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "编辑"
|
||||
msgstr "编辑 (&E)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "复制"
|
||||
@@ -615,13 +638,13 @@ msgid "Select all"
|
||||
msgstr "全选"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "粗体"
|
||||
msgstr "加粗"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "斜体"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "链接"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "插入时间"
|
||||
@@ -635,9 +658,8 @@ msgstr "在所有笔记内搜索"
|
||||
msgid "Search in current note"
|
||||
msgstr "在当前笔记内搜索"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "视图"
|
||||
msgstr "界面 (&V)"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "切换边栏"
|
||||
@@ -648,25 +670,11 @@ msgstr "切换编辑器布局"
|
||||
msgid "Focus"
|
||||
msgstr "聚焦于"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "工具"
|
||||
msgstr "工具 (&T)"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同步状态"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "网页剪辑选项"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密选项"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "通用选项"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "帮助"
|
||||
msgstr "帮助 (&H)"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "网站与文档"
|
||||
@@ -674,16 +682,6 @@ msgstr "网站与文档"
|
||||
msgid "Make a donation"
|
||||
msgstr "捐赠"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "检查更新..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "关于 Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "打开 %s"
|
||||
@@ -708,12 +706,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "有更新可用,是否现在进行下载?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "您的版本:v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "您的版本:%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "最新版本:v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "最新版本:%s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
@@ -722,10 +720,10 @@ msgid "No"
|
||||
msgstr "否"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Token 令牌已被复制到剪贴板!"
|
||||
msgstr "Token 令牌已复制到剪贴板!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "网页剪辑服务已启用并设置为自动启动。"
|
||||
msgstr "网页剪辑服务已启用且将自动启动。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: Started on port %d"
|
||||
@@ -830,7 +828,7 @@ msgid "Master Keys"
|
||||
msgstr "主密码"
|
||||
|
||||
msgid "Active"
|
||||
msgstr "活动状态"
|
||||
msgstr "正在使用"
|
||||
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
@@ -855,11 +853,11 @@ msgid ""
|
||||
"as \"active\"). Any of the keys might be used for decryption, depending on "
|
||||
"how the notes or notebooks were originally encrypted."
|
||||
msgstr ""
|
||||
"注意:仅有一个主密码可用于加密(被标记为 \"active\" 的主密码)。但列出的任何"
|
||||
"密码都可用于解密,这取决于笔记或笔记本最初是如何加密的。"
|
||||
"注意:仅有一个主密码会用于加密(被标记为“正在使用”的主密码)。但列出的所有密"
|
||||
"码都可用于解密,这取决于笔记或笔记本最初是如何加密的。"
|
||||
|
||||
msgid "Missing Master Keys"
|
||||
msgstr "缺失主密码"
|
||||
msgstr "缺少主密码"
|
||||
|
||||
msgid ""
|
||||
"The master keys with these IDs are used to encrypt some of your items, "
|
||||
@@ -878,10 +876,10 @@ msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
msgid "Encryption is:"
|
||||
msgstr "加密为:"
|
||||
msgstr "加密状态:"
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "使用量"
|
||||
msgstr "用法提示"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
@@ -889,7 +887,7 @@ msgstr "返回"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
|
||||
msgstr "将新建的笔记本 \"%s\" 和文件 \"%s\" 导入到其中"
|
||||
msgstr "将新建的笔记本“%s”,并将文件 \"%s\" 导入其中"
|
||||
|
||||
msgid "Please create a notebook first."
|
||||
msgstr "请先创建笔记本。"
|
||||
@@ -903,6 +901,9 @@ msgstr "笔记本标题:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "添加或删除标签:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "用半角逗号“,”分开每个标签。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "重命名笔记本:"
|
||||
|
||||
@@ -963,7 +964,7 @@ msgid "Copy Link Address"
|
||||
msgstr "复制链接地址"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "该附件没有下载或者没有解密"
|
||||
msgstr "该附件没有下载或者尚未解密。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1064,19 +1065,22 @@ msgstr "加密选项"
|
||||
msgid "Clipper Options"
|
||||
msgstr "网页剪辑选项"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr "是否删除笔记本?所有在该笔记本内的笔记也将同时被删除。"
|
||||
msgstr ""
|
||||
"是否删除笔记本“%s”?\n"
|
||||
"\n"
|
||||
"所有在该笔记本内的笔记和下级笔记本也将同时被删除。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "从所有笔记中删除该标签?"
|
||||
msgstr "从所有笔记中删除标签“%s”?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "从侧栏中删除该项搜索?"
|
||||
msgstr "从边栏中删除该项搜索?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
@@ -1089,23 +1093,20 @@ msgstr "笔记本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "解密项目:%d/%d"
|
||||
msgstr "正在解密项目:%d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "获取资源:%d。"
|
||||
msgstr "正在获取资源:%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "请选择同步状态的导出位置"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "添加或删除标签"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "重复的"
|
||||
msgstr "创建副本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
@@ -1123,13 +1124,21 @@ msgstr "切换到待办事项"
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "复制 Markdown 链接"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "是否删除笔记?"
|
||||
msgstr "是否删除笔记“%s”?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "是否删除这些笔记?"
|
||||
msgstr "是否删除这 %d 条笔记?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
@@ -1168,7 +1177,7 @@ msgstr "未知级别的 ID:%s"
|
||||
msgid ""
|
||||
"Cannot refresh token: authentication data is missing. Starting the "
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr "无法刷新 Token 令牌:缺失认证数据。重新开始同步可能会修复此错误。"
|
||||
msgstr "无法刷新 Token 令牌:缺少认证数据。重新同步可能会修正此错误。"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "无标题"
|
||||
@@ -1231,20 +1240,26 @@ msgid "Last error: %s"
|
||||
msgstr "最后错误:%s"
|
||||
|
||||
msgid "Idle"
|
||||
msgstr "闲置"
|
||||
msgstr "空闲"
|
||||
|
||||
msgid "In progress"
|
||||
msgstr "正在进行"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "同步正在进行中。状态:%s"
|
||||
msgstr "已经在同步。状态:%s"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "已加密"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "无法修改已加密项目"
|
||||
msgstr "无法修改已加密的项目"
|
||||
|
||||
msgid "title"
|
||||
msgstr "标题"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "冲突"
|
||||
@@ -1254,13 +1269,7 @@ msgstr "无法移动笔记本到该位置"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "笔记本无法被命名为 \"%s\",该标题为保留标题。"
|
||||
|
||||
msgid "title"
|
||||
msgstr "标题"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
msgstr "笔记本无法被命名为 \"%s\",这个标题被留作他用。"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "创建日期"
|
||||
@@ -1270,11 +1279,20 @@ msgstr "该笔记不包含地理定位信息。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Cannot copy note to \"%s\" notebook"
|
||||
msgstr "无法复制笔记到 \"%s\" 笔记本"
|
||||
msgstr "无法复制笔记到笔记本“%s”"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "无法移动笔记到 \"%s\" 笔记本"
|
||||
msgstr "无法移动笔记到笔记本“%s”"
|
||||
|
||||
#, 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 ""
|
||||
"注意:如果您更改该位置,请确保在同步之前将所有内容复制到该位置,否则将删除所"
|
||||
"有文件! 更多详细信息请参阅常见问题解答(FAQ):%s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
@@ -1289,10 +1307,10 @@ msgid "Theme"
|
||||
msgstr "主题"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "浅色"
|
||||
msgstr "明亮"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "深色"
|
||||
msgstr "深邃"
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "将未完成的待办事项置顶"
|
||||
@@ -1304,7 +1322,10 @@ msgid "Sort notes by"
|
||||
msgstr "排序笔记"
|
||||
|
||||
msgid "Reverse sort order"
|
||||
msgstr "反转排序顺序"
|
||||
msgstr "倒序"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "笔记本排序依据"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "保存地理定位信息到笔记中"
|
||||
@@ -1321,19 +1342,59 @@ msgstr "聚焦正文"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "当新建笔记时:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "目录"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "启用加密"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable footnotes"
|
||||
msgstr "目录"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "目录"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "显示托盘图标"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "注意:在所有桌面环境下无法正常工作。"
|
||||
msgstr "注意:某些桌面环境下无效。"
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"该选项允许 Joplin 在后台运行,如果你的笔记时常发生变化,推荐启用该设置来减少"
|
||||
"可能的冲突"
|
||||
"该选项允许 Joplin 在后台运行,如果你经常修改和同步笔记,推荐启用该设置来减少"
|
||||
"可能的冲突。"
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "应用程序启动时最小化到托盘"
|
||||
@@ -1358,7 +1419,7 @@ msgid "Automatically update the application"
|
||||
msgstr "自动更新程序"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "检查更新时获取预发布版本。"
|
||||
msgstr "检查更新时获取预发布版本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
@@ -1404,23 +1465,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "待同步的目录(绝对路径)。"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr "启用文件系统同步时要同步的路径。见 `sync.target`。"
|
||||
|
||||
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 ""
|
||||
"注意:如果您更改该位置,请确保在同步之前将所有内容复制到该位置,否则将删除所"
|
||||
"有文件! 更多详细信息请参阅常见问题解答(FAQ):%s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用户名"
|
||||
|
||||
@@ -1468,6 +1515,9 @@ msgstr "外观"
|
||||
msgid "Note"
|
||||
msgstr "笔记"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr "应用程序"
|
||||
|
||||
@@ -1528,34 +1578,34 @@ msgid ""
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
"这些项目将保留于设备中,但不会上传到同步目标。若需查找这些项目,请搜索标题或"
|
||||
"ID(显示在上方括号中)。"
|
||||
"这些项目将只保存在本设备上,不会上传到同步目标。若需查找这些项目,请搜索标题"
|
||||
"或 ID(显示在上方括号中)。"
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "同步状态(已同步项目/项目总数)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s: %d/%d"
|
||||
msgstr "%s:%d/%d条"
|
||||
msgstr "%s:%d/%d 条"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Total: %d/%d"
|
||||
msgstr "总数:%d/%d条"
|
||||
msgstr "总数:%d/%d 条"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Conflicted: %d"
|
||||
msgstr "有冲突的:%d条"
|
||||
msgstr "有冲突:%d 条"
|
||||
|
||||
#, javascript-format
|
||||
msgid "To delete: %d"
|
||||
msgstr "将删除:%d条"
|
||||
msgstr "将删除:%d 条"
|
||||
|
||||
msgid "Folders"
|
||||
msgstr "文件夹"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s: %d notes"
|
||||
msgstr "%s: %d条笔记"
|
||||
msgstr "%s:%d 条笔记"
|
||||
|
||||
msgid "Coming alarms"
|
||||
msgstr "临近提醒"
|
||||
@@ -1568,7 +1618,7 @@ msgid "Permission to use camera"
|
||||
msgstr "使用摄像头的权限"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "使用摄像头的权限是必须的"
|
||||
msgstr "您须要授予相机权限。"
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "当前没有任何笔记。点击 (+) 按钮创建。"
|
||||
@@ -1593,10 +1643,10 @@ msgstr "移动到笔记本..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Move %d notes to notebook \"%s\"?"
|
||||
msgstr "是否移动%d条笔记到 \"%s\" 笔记本?"
|
||||
msgstr "是否移动 %d 条笔记到笔记本“%s”?"
|
||||
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "按键将设置解密密码。"
|
||||
msgstr "按此设置解密密码。"
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "清除提醒"
|
||||
@@ -1614,10 +1664,10 @@ msgid "Cancel synchronisation"
|
||||
msgstr "取消同步"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "正在检查... 请稍后。"
|
||||
msgstr "正在检查... 请稍候。"
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "成功!同步配置似乎是正确的。"
|
||||
msgstr "成功!同步配置看起来没问题。"
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
@@ -1627,7 +1677,7 @@ msgstr ""
|
||||
"如下:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "此程序已被成功授权。"
|
||||
msgstr "已成功授予本应用程序权限!"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1637,11 +1687,11 @@ msgid ""
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"无法授权应用:\n"
|
||||
"无法授权本程序:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"请重新尝试"
|
||||
"请重试。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
@@ -1657,8 +1707,8 @@ msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
msgstr ""
|
||||
"为了正常的使用,应用需要以下权限。请在你的手机设置(应用 > Joplin > 权限)中"
|
||||
"启用它们"
|
||||
"本应用程序需要下列权限才能正常运作。请在你的手机设置(应用 > Joplin > 权限)"
|
||||
"中启用它们"
|
||||
|
||||
msgid ""
|
||||
"- Storage: to allow attaching files to notes and to enable filesystem "
|
||||
@@ -1666,7 +1716,7 @@ msgid ""
|
||||
msgstr "- 存储:允许将文件附加到笔记中并启用文件系统同步。"
|
||||
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
msgstr "- 相机:允许拍照并将其添加到一条笔记中。"
|
||||
msgstr "- 相机:允许拍照并将照片添加到一条笔记中。"
|
||||
|
||||
msgid "- Location: to allow attaching geo-location information to a note."
|
||||
msgstr "- 定位:允许将地理位置信息附加到一条笔记中。"
|
||||
@@ -1674,10 +1724,6 @@ msgstr "- 定位:允许将地理位置信息附加到一条笔记中。"
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin 官网"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "数据库 v%s"
|
||||
@@ -1796,8 +1842,20 @@ msgstr "您目前未有笔记本。点击 (+) 按钮创建。"
|
||||
msgid "Welcome"
|
||||
msgstr "欢迎"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "用半角逗号 \",\" 分开每个标签。"
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "该笔记已被修改:"
|
||||
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "目录"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr "启用文件系统同步时要同步的路径。见 `sync.target`。"
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "状态:%s。"
|
||||
|
@@ -122,9 +122,10 @@ msgstr "標記待辦事項為完成。"
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "記事不等於待辨事項: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"管理 E2EE 設置。命令是 `enable`,`disable`,`decrypt`,`status` 和 `target-"
|
||||
"status`。"
|
||||
@@ -569,9 +570,8 @@ msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 檔案"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "檔案"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新增記事"
|
||||
@@ -582,6 +582,35 @@ msgstr "新增待辦事項"
|
||||
msgid "New notebook"
|
||||
msgstr "新增記事本"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "列印"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "一般選項"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密選項"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper 選項"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "檔案"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "關於 Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "檢查更新..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "匯入"
|
||||
|
||||
@@ -591,9 +620,6 @@ msgstr "匯出"
|
||||
msgid "Synchronise"
|
||||
msgstr "進行同步"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "列印"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
msgstr "隱藏 %s"
|
||||
@@ -658,18 +684,6 @@ msgstr "游標置於內文"
|
||||
msgid "&Tools"
|
||||
msgstr "工具"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper 選項"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密選項"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "一般選項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "說明"
|
||||
@@ -680,16 +694,6 @@ msgstr "官方網站及線上說明"
|
||||
msgid "Make a donation"
|
||||
msgstr "捐助"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "檢查更新..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "關於 Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "開啟 %s"
|
||||
@@ -714,11 +718,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "有可用的更新,您需要立即下載嗎?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -911,6 +915,9 @@ msgstr "記事本標題:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "新增或移除標籤:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "您可用逗號分隔每個標籤。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "重新命名記事本:"
|
||||
|
||||
@@ -1106,9 +1113,6 @@ msgstr "資源: %d。"
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "請選擇將同步狀態導出到的位置"
|
||||
|
||||
msgid "Remove?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "新增或移除標籤"
|
||||
|
||||
@@ -1141,6 +1145,14 @@ msgstr "刪除此記事?"
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "刪除這些記事?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "使用資訊: %s"
|
||||
@@ -1256,6 +1268,12 @@ msgstr "已加密"
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "無法修改已加密項目"
|
||||
|
||||
msgid "title"
|
||||
msgstr "標題"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "衝突"
|
||||
|
||||
@@ -1266,12 +1284,6 @@ msgstr "無法移動記事本到此位置"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "筆記本無法命名為 \"%s\",這標題已被保留。"
|
||||
|
||||
msgid "title"
|
||||
msgstr "標題"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "建立日期"
|
||||
|
||||
@@ -1286,6 +1298,13 @@ msgstr "無法複製此記事到 \"%s\" 記事本"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "無法移動此記事到 \"%s\" 記事本"
|
||||
|
||||
#, 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 "Language"
|
||||
msgstr "語言"
|
||||
|
||||
@@ -1316,6 +1335,10 @@ msgstr "排序記事"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "顛倒排序順序"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "排序記事"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "在記事中保存地理位置資訊"
|
||||
|
||||
@@ -1331,6 +1354,43 @@ msgstr "游標置於內文"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "當新增記事時:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "啟用加密"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "顯示系統匣圖示"
|
||||
|
||||
@@ -1414,21 +1474,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "要同步的目錄 (絕對路徑)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "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 "Nextcloud 用戶名稱"
|
||||
|
||||
@@ -1479,6 +1527,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "記事本"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "離開本程式。"
|
||||
@@ -1684,10 +1735,6 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1807,8 +1854,18 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
|
||||
msgid "Welcome"
|
||||
msgstr "歡迎"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "您可用逗號分隔每個標籤。"
|
||||
#, fuzzy
|
||||
#~ msgid "This note has no history"
|
||||
#~ msgstr "此記事已被修改:"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin 官方網站"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "狀態: %s。"
|
||||
|
122
CliClient/package-lock.json
generated
122
CliClient/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joplin",
|
||||
"version": "1.0.123",
|
||||
"version": "1.0.125",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -346,9 +346,9 @@
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||
},
|
||||
"color": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
|
||||
"integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz",
|
||||
"integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.1",
|
||||
"color-string": "^1.5.2"
|
||||
@@ -560,6 +560,11 @@
|
||||
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
|
||||
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
|
||||
},
|
||||
"diff-match-patch": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz",
|
||||
"integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg=="
|
||||
},
|
||||
"domexception": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
|
||||
@@ -697,9 +702,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"expand-template": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
|
||||
"integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg=="
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
||||
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.1",
|
||||
@@ -1853,9 +1858,14 @@
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.11.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
|
||||
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw=="
|
||||
"version": "2.13.2",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
|
||||
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
|
||||
},
|
||||
"napi-build-utils": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
|
||||
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
|
||||
},
|
||||
"ndarray": {
|
||||
"version": "1.0.18",
|
||||
@@ -1899,9 +1909,9 @@
|
||||
}
|
||||
},
|
||||
"node-abi": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.4.tgz",
|
||||
"integrity": "sha512-DQ9Mo2mf/XectC+s6+grPPRQ1Z9gI3ZbrGv6nyXRkjwT3HrE0xvtvrfnH7YHYBLgC/KLadg+h3XHnhZw1sv88A==",
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz",
|
||||
"integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==",
|
||||
"requires": {
|
||||
"semver": "^5.4.1"
|
||||
}
|
||||
@@ -2187,21 +2197,22 @@
|
||||
"integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8="
|
||||
},
|
||||
"prebuild-install": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-4.0.0.tgz",
|
||||
"integrity": "sha512-7tayxeYboJX0RbVzdnKyGl2vhQRWr6qfClEXDhOkXjuaOKCw2q8aiuFhONRYVsG/czia7KhpykIlI2S2VaPunA==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz",
|
||||
"integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==",
|
||||
"requires": {
|
||||
"detect-libc": "^1.0.3",
|
||||
"expand-template": "^1.0.2",
|
||||
"expand-template": "^2.0.3",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"node-abi": "^2.2.0",
|
||||
"napi-build-utils": "^1.0.1",
|
||||
"node-abi": "^2.7.0",
|
||||
"noop-logger": "^0.1.1",
|
||||
"npmlog": "^4.0.1",
|
||||
"os-homedir": "^1.0.1",
|
||||
"pump": "^2.0.1",
|
||||
"rc": "^1.1.6",
|
||||
"rc": "^1.2.7",
|
||||
"simple-get": "^2.7.0",
|
||||
"tar-fs": "^1.13.0",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
@@ -2210,8 +2221,18 @@
|
||||
"dependencies": {
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
},
|
||||
"simple-get": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
|
||||
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
|
||||
"requires": {
|
||||
"decompress-response": "^3.3.0",
|
||||
"once": "^1.3.1",
|
||||
"simple-concat": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2443,50 +2464,63 @@
|
||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||
},
|
||||
"sharp": {
|
||||
"version": "0.20.8",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.20.8.tgz",
|
||||
"integrity": "sha512-A8NaPGWRDKpmHTi8sl2xzozYXhTQWBb/GaJ8ZPU7L/vKW8wVvd4Yq+isJ0c7p9sX5gnjPQcM3eOfHuvvnZ2fOQ==",
|
||||
"version": "0.22.1",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz",
|
||||
"integrity": "sha512-lXzSk/FL5b/MpWrT1pQZneKe25stVjEbl6uhhJcTULm7PhmJgKKRbTDM/vtjyUuC/RLqL2PRyC4rpKwbv3soEw==",
|
||||
"requires": {
|
||||
"color": "^3.0.0",
|
||||
"color": "^3.1.1",
|
||||
"detect-libc": "^1.0.3",
|
||||
"fs-copy-file-sync": "^1.1.1",
|
||||
"nan": "^2.11.0",
|
||||
"nan": "^2.13.2",
|
||||
"npmlog": "^4.1.2",
|
||||
"prebuild-install": "^4.0.0",
|
||||
"semver": "^5.5.1",
|
||||
"simple-get": "^2.8.1",
|
||||
"tar": "^4.4.6",
|
||||
"prebuild-install": "^5.3.0",
|
||||
"semver": "^6.0.0",
|
||||
"simple-get": "^3.0.3",
|
||||
"tar": "^4.4.8",
|
||||
"tunnel-agent": "^0.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chownr": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
|
||||
"integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
|
||||
},
|
||||
"minipass": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
|
||||
"integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
|
||||
"integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"minizlib": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
|
||||
"integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
|
||||
"requires": {
|
||||
"minipass": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
|
||||
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
|
||||
"integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ=="
|
||||
},
|
||||
"tar": {
|
||||
"version": "4.4.6",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
|
||||
"integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
|
||||
"version": "4.4.8",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
|
||||
"integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
|
||||
"requires": {
|
||||
"chownr": "^1.0.1",
|
||||
"chownr": "^1.1.1",
|
||||
"fs-minipass": "^1.2.5",
|
||||
"minipass": "^2.3.3",
|
||||
"minizlib": "^1.1.0",
|
||||
"minipass": "^2.3.4",
|
||||
"minizlib": "^1.1.1",
|
||||
"mkdirp": "^0.5.0",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.2"
|
||||
@@ -2505,9 +2539,9 @@
|
||||
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
|
||||
},
|
||||
"simple-get": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
|
||||
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.0.3.tgz",
|
||||
"integrity": "sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw==",
|
||||
"requires": {
|
||||
"decompress-response": "^3.3.0",
|
||||
"once": "^1.3.1",
|
||||
|
@@ -20,7 +20,7 @@
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.123",
|
||||
"version": "1.0.125",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@@ -33,6 +33,7 @@
|
||||
"base-64": "^0.1.0",
|
||||
"compare-version": "^0.1.2",
|
||||
"diacritics": "^1.3.0",
|
||||
"diff-match-patch": "^1.0.4",
|
||||
"es6-promise-pool": "^2.5.0",
|
||||
"follow-redirects": "^1.2.4",
|
||||
"form-data": "^2.1.4",
|
||||
@@ -60,7 +61,7 @@
|
||||
"redux": "^3.7.2",
|
||||
"sax": "^1.2.2",
|
||||
"server-destroy": "^1.0.1",
|
||||
"sharp": "^0.20.8",
|
||||
"sharp": "^0.22.1",
|
||||
"sprintf-js": "^1.1.1",
|
||||
"sqlite3": "^4.0.1",
|
||||
"string-padding": "^1.0.2",
|
||||
|
@@ -31,6 +31,7 @@ npm test tests-build/models_Folder.js
|
||||
npm test tests-build/models_ItemChange.js
|
||||
npm test tests-build/models_Note.js
|
||||
npm test tests-build/models_Resource.js
|
||||
npm test tests-build/models_Revision.js
|
||||
npm test tests-build/models_Setting.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/pathUtils.js
|
||||
@@ -38,6 +39,7 @@ npm test tests-build/services_InteropService.js
|
||||
npm test tests-build/services_ResourceService.js
|
||||
npm test tests-build/services_rest_Api.js
|
||||
npm test tests-build/services_SearchEngine.js
|
||||
npm test tests-build/services_Revision.js
|
||||
npm test tests-build/StringUtils.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
@@ -35,7 +35,7 @@ describe('EnexToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'text2.html') continue;
|
||||
// if (htmlFilename !== 'list5.html') continue;
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
@@ -25,8 +25,7 @@ describe('Encryption', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
//await setupDatabaseAndSynchronizer(2);
|
||||
//await switchClient(1);
|
||||
await switchClient(1);
|
||||
service = new EncryptionService();
|
||||
BaseItem.encryptionService_ = service;
|
||||
Setting.setValue('encryption.enabled', true);
|
||||
|
16
CliClient/tests/enex_to_md/list5.html
Normal file
16
CliClient/tests/enex_to_md/list5.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<ul>
|
||||
<li lang="en-US">
|
||||
<div>Protocols</div>
|
||||
</li>
|
||||
<ul type="circle">
|
||||
<li lang="en-US">
|
||||
<div>two common network protocols used to send data packets over a network</div>
|
||||
</li>
|
||||
<li lang="en-US">
|
||||
<div>TCP Transmission control protocol</div>
|
||||
</li>
|
||||
</ul>
|
||||
<li lang="en-US">
|
||||
<div>Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP</div>
|
||||
</li>
|
||||
</ul>
|
7
CliClient/tests/enex_to_md/list5.md
Normal file
7
CliClient/tests/enex_to_md/list5.md
Normal file
@@ -0,0 +1,7 @@
|
||||
- Protocols
|
||||
|
||||
- two common network protocols used to send data packets over a network
|
||||
|
||||
- TCP Transmission control protocol
|
||||
|
||||
- Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP
|
@@ -1 +1 @@
|
||||
<a href="https://joplin.cozic.net"><h1 id="joplin"><img class="title-icon" src="https://joplin.cozic.net/images/Icon512.png">oplin</h1></a>
|
||||
<a href="https://joplinapp.org"><h1 id="joplin"><img class="title-icon" src="https://joplinapp.org/images/Icon512.png">oplin</h1></a>
|
@@ -1 +1 @@
|
||||
[# oplin](https://joplin.cozic.net)
|
||||
[# oplin](https://joplinapp.org)
|
@@ -47,5 +47,20 @@ describe('models_BaseItem', function() {
|
||||
|
||||
expect('ignore_me' in unserialized).toBe(false);
|
||||
}));
|
||||
|
||||
it('should not modify title when unserializing', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "" });
|
||||
let folder2 = await Folder.save({ title: "folder1" });
|
||||
|
||||
let serialized1 = await Folder.serialize(folder1);
|
||||
let unserialized1 = await Folder.unserialize(serialized1);
|
||||
|
||||
expect(unserialized1.title).toBe(folder1.title);
|
||||
|
||||
let serialized2 = await Folder.serialize(folder2);
|
||||
let unserialized2 = await Folder.unserialize(serialized2);
|
||||
|
||||
expect(unserialized2.title).toBe(folder2.title);
|
||||
}));
|
||||
|
||||
});
|
@@ -52,4 +52,77 @@ describe('models_Folder', function() {
|
||||
expect(all.length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should sort by last modified, based on content', asyncTest(async () => {
|
||||
let folders;
|
||||
|
||||
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
|
||||
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
|
||||
let f3 = await Folder.save({ title: "folder3" }); await sleep(0.1);
|
||||
let n1 = await Note.save({ title: 'note1', parent_id: f2.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(3);
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f1.id);
|
||||
|
||||
let n2 = await Note.save({ title: 'note1', parent_id: f1.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f2.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note1 mod' });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'asc');
|
||||
expect(folders[0].id).toBe(f3.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
}));
|
||||
|
||||
it('should sort by last modified, based on content (sub-folders too)', asyncTest(async () => {
|
||||
let folders;
|
||||
|
||||
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
|
||||
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
|
||||
let f3 = await Folder.save({ title: "folder3", parent_id: f1.id }); await sleep(0.1);
|
||||
let n1 = await Note.save({ title: 'note1', parent_id: f3.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(3);
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
|
||||
let n2 = await Note.save({ title: 'note2', parent_id: f2.id });
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note1 MOD' });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
|
||||
let f4 = await Folder.save({ title: "folder4", parent_id: f1.id }); await sleep(0.1);
|
||||
let n3 = await Note.save({ title: 'note3', parent_id: f4.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(4);
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f4.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
expect(folders[3].id).toBe(f2.id);
|
||||
}));
|
||||
|
||||
});
|
@@ -1,7 +1,7 @@
|
||||
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 { asyncTest, fileContentEqual, revisionService, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const ItemChangeUtils = require('lib/services/ItemChangeUtils');
|
||||
@@ -34,19 +34,17 @@ describe('models_ItemChange', function() {
|
||||
const resourceService = new ResourceService();
|
||||
|
||||
await searchEngine.syncTables();
|
||||
|
||||
// If we run this now, it should not delete any change because
|
||||
// the resource service has not yet processed the change
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await resourceService.indexNoteResources();
|
||||
|
||||
// Now that the resource service has processed the change,
|
||||
// the change can be deleted.
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(0);
|
||||
}));
|
||||
|
||||
|
@@ -86,5 +86,32 @@ describe('models_Note', function() {
|
||||
expect(changedNote === note1).toBe(false);
|
||||
expect(!!changedNote.is_todo).toBe(false);
|
||||
}));
|
||||
|
||||
it('should serialize and unserialize without modifying data', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1"});
|
||||
const testCases = [
|
||||
[ {title: '', body:'Body and no title\nSecond line\nThird Line', parent_id: folder1.id},
|
||||
'', 'Body and no title\nSecond line\nThird Line'],
|
||||
[ {title: 'Note title', body:'Body and title', parent_id: folder1.id},
|
||||
'Note title', 'Body and title'],
|
||||
[ {title: 'Title and no body', body:'', parent_id: folder1.id},
|
||||
'Title and no body', ''],
|
||||
]
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
|
||||
const input = t[0];
|
||||
const expectedTitle = t[1];
|
||||
const expectedBody = t[1];
|
||||
|
||||
let note1 = await Note.save(input);
|
||||
let serialized = await Note.serialize(note1);
|
||||
let unserialized = await Note.unserialize( serialized);
|
||||
|
||||
expect(unserialized.title).toBe(input.title);
|
||||
expect(unserialized.body).toBe(input.body);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
71
CliClient/tests/models_Revision.js
Normal file
71
CliClient/tests/models_Revision.js
Normal file
@@ -0,0 +1,71 @@
|
||||
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 NoteTag = require('lib/models/NoteTag.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Revision = require('lib/models/Revision.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_Revision', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create patches of text and apply it', asyncTest(async () => {
|
||||
const note1 = await Note.save({ body: 'my note\nsecond line' });
|
||||
|
||||
const patch = Revision.createTextPatch(note1.body, 'my new note\nsecond line');
|
||||
const merged = Revision.applyTextPatch(note1.body, patch);
|
||||
|
||||
expect(merged).toBe('my new note\nsecond line');
|
||||
}));
|
||||
|
||||
it('should create patches of objects and apply it', asyncTest(async () => {
|
||||
const oldObject = {
|
||||
one: '123',
|
||||
two: '456',
|
||||
three: '789',
|
||||
};
|
||||
|
||||
const newObject = {
|
||||
one: '123',
|
||||
three: '999',
|
||||
}
|
||||
|
||||
const patch = Revision.createObjectPatch(oldObject, newObject);
|
||||
const merged = Revision.applyObjectPatch(oldObject, patch);
|
||||
|
||||
expect(JSON.stringify(merged)).toBe(JSON.stringify(newObject));
|
||||
}));
|
||||
|
||||
it('should move target revision to the top', asyncTest(async () => {
|
||||
const revs = [
|
||||
{ id: '123' },
|
||||
{ id: '456' },
|
||||
{ id: '789' },
|
||||
];
|
||||
|
||||
let newRevs;
|
||||
newRevs = Revision.moveRevisionToTop({ id: '456' }, revs);
|
||||
expect(newRevs[0].id).toBe('123');
|
||||
expect(newRevs[1].id).toBe('789');
|
||||
expect(newRevs[2].id).toBe('456');
|
||||
|
||||
newRevs = Revision.moveRevisionToTop({ id: '789' }, revs);
|
||||
expect(newRevs[0].id).toBe('123');
|
||||
expect(newRevs[1].id).toBe('456');
|
||||
expect(newRevs[2].id).toBe('789');
|
||||
}));
|
||||
|
||||
});
|
@@ -1,7 +1,7 @@
|
||||
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 { asyncTest, resourceService, decryptionWorker, encryptionService, loadEncryptionMasterKey, allSyncTargetItemsEncrypted, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
@@ -15,6 +15,7 @@ const fs = require('fs-extra');
|
||||
const ArrayUtils = require('lib/ArrayUtils');
|
||||
const ObjectUtils = require('lib/ObjectUtils');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
@@ -37,6 +38,7 @@ describe('services_ResourceService', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await setupDatabaseAndSynchronizer(2);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
@@ -146,4 +148,69 @@ describe('services_ResourceService', function() {
|
||||
expect(before.last_seen_time).toBe(after.last_seen_time);
|
||||
}));
|
||||
|
||||
it('should not delete resources that are associated with an encrypted note', asyncTest(async () => {
|
||||
// https://github.com/laurent22/joplin/issues/1433
|
||||
//
|
||||
// Client 1 and client 2 have E2EE setup.
|
||||
//
|
||||
// - Client 1 creates note N1 and add resource R1 to it
|
||||
// - Client 1 syncs
|
||||
// - Client 2 syncs and get N1
|
||||
// - Client 2 add resource R2 to N1
|
||||
// - Client 2 syncs
|
||||
// - Client 1 syncs
|
||||
// - Client 1 runs resource indexer - but because N1 hasn't been decrypted yet, it found that R1 is no longer associated with any note
|
||||
// - Client 1 decrypts notes, but too late
|
||||
//
|
||||
// Eventually R1 is deleted because service thinks that it was at some point associated with a note, but no longer.
|
||||
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg'); // R1
|
||||
await resourceService().indexNoteResources();
|
||||
await synchronizer().start();
|
||||
expect(await allSyncTargetItemsEncrypted()).toBe(true);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
{
|
||||
const n1 = await Note.load(note1.id);
|
||||
await shim.attachFileToNote(n1, __dirname + '/../tests/support/photo.jpg'); // R2
|
||||
}
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
await resourceService().indexNoteResources();
|
||||
await resourceService().deleteOrphanResources(0); // Previously, R1 would be deleted here because it's not indexed
|
||||
expect((await Resource.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
it('should double-check if the resource is still linked before deleting it', asyncTest(async () => {
|
||||
SearchEngine.instance().setDb(db()); // /!\ Note that we use the global search engine here, which we shouldn't but will work for now
|
||||
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
note1 = await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await resourceService().indexNoteResources();
|
||||
const bodyWithResource = note1.body;
|
||||
await Note.save({ id: note1.id, body: '' });
|
||||
await resourceService().indexNoteResources();
|
||||
await Note.save({ id: note1.id, body: bodyWithResource });
|
||||
await SearchEngine.instance().syncTables();
|
||||
await resourceService().deleteOrphanResources(0);
|
||||
|
||||
expect((await Resource.all()).length).toBe(1); // It should not have deleted the resource
|
||||
const nr = (await NoteResource.all())[0];
|
||||
expect(!!nr.is_associated).toBe(true); // And it should have fixed the situation by re-indexing the note content
|
||||
}));
|
||||
|
||||
});
|
420
CliClient/tests/services_Revision.js
Normal file
420
CliClient/tests/services_Revision.js
Normal file
@@ -0,0 +1,420 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const ItemChange = require('lib/models/ItemChange.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const RevisionService = require('lib/services/RevisionService.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('services_Revision', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
Setting.setValue('revisionService.intervalBetweenRevisions', 0)
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create diff and rebuild notes', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v1 = await Note.save({ title: '', author: 'testing' });
|
||||
await service.collectRevisions();
|
||||
await Note.save({ id: n1_v1.id, title: 'hello', author: 'testing' });
|
||||
await service.collectRevisions();
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome', author: '' });
|
||||
await service.collectRevisions();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
expect(revisions[1].parent_id).toBe(revisions[0].id);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('hello');
|
||||
expect(rev1.author).toBe('testing');
|
||||
|
||||
const rev2 = await service.revisionNote(revisions, 1);
|
||||
expect(rev2.title).toBe('hello welcome');
|
||||
expect(rev2.author).toBe('');
|
||||
|
||||
await time.sleep(0.5);
|
||||
|
||||
await service.deleteOldRevisions(400);
|
||||
const revisions2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions2.length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should delete old revisions (1 note, 2 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await service.collectRevisions();
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id)).length).toBe(2);
|
||||
|
||||
await service.deleteOldRevisions(1000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('hello welcome');
|
||||
}));
|
||||
|
||||
it('should delete old revisions (1 note, 3 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'one' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'one two' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v3 = await Note.save({ id: n1_v1.id, title: 'one two three' });
|
||||
await service.collectRevisions();
|
||||
|
||||
{
|
||||
await service.deleteOldRevisions(2000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('one two');
|
||||
|
||||
const rev2 = await service.revisionNote(revisions, 1);
|
||||
expect(rev2.title).toBe('one two three');
|
||||
}
|
||||
|
||||
{
|
||||
await service.deleteOldRevisions(1000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('one two three');
|
||||
}
|
||||
}));
|
||||
|
||||
it('should delete old revisions (2 notes, 2 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'note 1' });
|
||||
const n2_v0 = await Note.save({ title: '' });
|
||||
const n2_v1 = await Note.save({ id: n2_v0.id, title: 'note 2' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'note 1 (v2)' });
|
||||
const n2_v2 = await Note.save({ id: n2_v1.id, title: 'note 2 (v2)' });
|
||||
await service.collectRevisions();
|
||||
|
||||
expect((await Revision.all()).length).toBe(4);
|
||||
|
||||
await service.deleteOldRevisions(1000);
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('note 1 (v2)');
|
||||
}
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n2_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('note 2 (v2)');
|
||||
}
|
||||
}));
|
||||
|
||||
it('should handle conflicts', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
// A conflict happens in this case:
|
||||
// - Device 1 creates note1 (rev1)
|
||||
// - Device 2 syncs and get note1
|
||||
// - Device 1 modifies note1 (rev2)
|
||||
// - Device 2 modifies note1 (rev3)
|
||||
// When reconstructing the notes based on the revisions, we need to make sure it follow the right
|
||||
// "path". For example, to reconstruct the note at rev2 it would be:
|
||||
// rev1 => rev2
|
||||
// To reconstruct the note at rev3 it would be:
|
||||
// rev1 => rev3
|
||||
// And not, for example, rev1 => rev2 => rev3
|
||||
|
||||
const n1_v1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1_v1.id;
|
||||
const rev1 = await service.createNoteRevision_(n1_v1);
|
||||
const n1_v2 = await Note.save({ id: noteId, title: 'hello Paul' });
|
||||
const rev2 = await service.createNoteRevision_(n1_v2, rev1.id);
|
||||
const n1_v3 = await Note.save({ id: noteId, title: 'hello John' });
|
||||
const rev3 = await service.createNoteRevision_(n1_v3, rev1.id);
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(revisions.length).toBe(3);
|
||||
expect(revisions[1].parent_id).toBe(rev1.id);
|
||||
expect(revisions[2].parent_id).toBe(rev1.id);
|
||||
|
||||
const revNote1 = await service.revisionNote(revisions, 0);
|
||||
const revNote2 = await service.revisionNote(revisions, 1);
|
||||
const revNote3 = await service.revisionNote(revisions, 2);
|
||||
expect(revNote1.title).toBe('hello');
|
||||
expect(revNote2.title).toBe('hello Paul');
|
||||
expect(revNote3.title).toBe('hello John');
|
||||
}));
|
||||
|
||||
it('should create a revision for notes that are older than a given interval', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1.id;
|
||||
|
||||
await sleep(0.1);
|
||||
|
||||
// Set the interval in such a way that the note is considered an old one.
|
||||
Setting.setValue('revisionService.oldNoteInterval', 50);
|
||||
|
||||
// A revision is created the first time a note is overwritten with new content, and
|
||||
// if this note doesn't already have an existing revision.
|
||||
// This is mostly to handle old notes that existed before the revision service. If these
|
||||
// old notes are changed, there's a chance it's accidental or due to some bug, so we
|
||||
// want to preserve a revision just in case.
|
||||
|
||||
{
|
||||
await Note.save({ id: noteId, title: 'hello 2' });
|
||||
await revisionService().collectRevisions(); // Rev for old note created + Rev for new note
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(2);
|
||||
const revNote1 = await revisionService().revisionNote(all, 0);
|
||||
const revNote2 = await revisionService().revisionNote(all, 1);
|
||||
expect(revNote1.title).toBe('hello');
|
||||
expect(revNote2.title).toBe('hello 2');
|
||||
}
|
||||
|
||||
// If the note is saved a third time, we don't automatically create a revision. One
|
||||
// will be created x minutes later when the service collects revisions.
|
||||
|
||||
{
|
||||
await Note.save({ id: noteId, title: 'hello 3' });
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(2);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should create a revision for notes that get deleted (recyle bin)', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1.id;
|
||||
|
||||
await Note.delete(noteId);
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(1);
|
||||
const rev1 = await revisionService().revisionNote(all, 0);
|
||||
expect(rev1.title).toBe('hello');
|
||||
}));
|
||||
|
||||
it('should not create a revision for notes that get deleted if there is already a revision', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
await revisionService().collectRevisions();
|
||||
const noteId = n1.id;
|
||||
await Note.save({ id: noteId, title: 'hello Paul' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
|
||||
await Note.delete(noteId);
|
||||
|
||||
// At this point there is no need to create a new revision for the deleted note
|
||||
// because we already have the latest version as REV 1
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should not create a revision for new note the first time they are saved', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(0);
|
||||
}
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(0);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should abort collecting revisions when one of them is encrypted', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' }); // CHANGE 1
|
||||
await revisionService().collectRevisions();
|
||||
await Note.save({ id: n1.id, title: 'hello Ringo' }); // CHANGE 2
|
||||
await revisionService().collectRevisions();
|
||||
await Note.save({ id: n1.id, title: 'hello George' }); // CHANGE 3
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const encryptedRevId = revisions[0].id;
|
||||
|
||||
// Simulate receiving an encrypted revision
|
||||
await Revision.save({ id: encryptedRevId, encryption_applied: 1 });
|
||||
await Note.save({ id: n1.id, title: 'hello Paul' }); // CHANGE 4
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
// Although change 4 is a note update, check that it has not been processed
|
||||
// by the collector, due to one of the revisions being encrypted.
|
||||
expect(await ItemChange.lastChangeId()).toBe(4);
|
||||
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(3);
|
||||
|
||||
// Simulate the revision being decrypted by DecryptionService
|
||||
await Revision.save({ id: encryptedRevId, encryption_applied: 0 });
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
// Now that the revision has been decrypted, all the changes can be processed
|
||||
expect(await ItemChange.lastChangeId()).toBe(4);
|
||||
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(4);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (1)', asyncTest(async () => {
|
||||
// Test case 1: Two revisions and the first one is encrypted.
|
||||
// Calling deleteOldRevisions() with low TTL, which means all revisions
|
||||
// should be deleted, but they won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
await time.sleep(0.1);
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(0);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 0 });
|
||||
|
||||
await revisionService().deleteOldRevisions(0);
|
||||
expect((await Revision.all()).length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (2)', asyncTest(async () => {
|
||||
// Test case 2: Two revisions and the first one is encrypted.
|
||||
// Calling deleteOldRevisions() with higher TTL, which means the oldest
|
||||
// revision should be deleted, but it won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.5);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (3)', asyncTest(async () => {
|
||||
// Test case 2: Two revisions and the second one is encrypted.
|
||||
// Calling deleteOldRevisions() with higher TTL, which means the oldest
|
||||
// revision should be deleted, but it won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.5);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[1].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
await Revision.save({ id: revisions[1].id, encryption_applied: 0 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should not create a revision if the note has not changed', asyncTest(async () => {
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // Note has not changed (except its timestamp) so don't create a revision
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should preserve user update time', asyncTest(async () => {
|
||||
// user_updated_time is kind of tricky and can be changed automatically in various
|
||||
// places so make sure it is saved correctly with the revision
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
|
||||
const userUpdatedTime = Date.now() - 1000 * 60 * 60;
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello', updated_time: Date.now(), user_updated_time: userUpdatedTime }, { autoTimestamp: false });
|
||||
await revisionService().collectRevisions(); // Only the user timestamp has changed, but that needs to be saved
|
||||
|
||||
const revisions = await Revision.all();
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const revNote = await revisionService().revisionNote(revisions, 1);
|
||||
expect(revNote.user_updated_time).toBe(userUpdatedTime);
|
||||
}));
|
||||
|
||||
it('should not create a revision if there is already a recent one', asyncTest(async () => {
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello 2' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
Setting.setValue('revisionService.intervalBetweenRevisions', 1000);
|
||||
|
||||
const n1_v3 = await Note.save({ id: n1_v0.id, title: 'hello 3' });
|
||||
await revisionService().collectRevisions(); // No rev because there's already a rev that is less than 1000 ms old
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
});
|
@@ -256,6 +256,23 @@ describe('services_SearchEngine', function() {
|
||||
expect((await engine.search('말')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support field restricted queries with Chinese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "你好", body: "我是法国人" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('title:你好*')).length).toBe(1);
|
||||
expect((await engine.search('body:你好')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 body:法国人')).length).toBe(1);
|
||||
expect((await engine.search('title:你好 body:bla')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 我是')).length).toBe(1);
|
||||
expect((await engine.search('title:bla 我是')).length).toBe(0);
|
||||
|
||||
// For non-alpha char, only the first field is looked at, the following ones are ignored
|
||||
expect((await engine.search('title:你好 title:hello')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should parse normal query strings', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
@@ -265,6 +282,7 @@ describe('services_SearchEngine', function() {
|
||||
['title:abcd efgh', { _: ['efgh'], title: ['abcd'] }],
|
||||
['title:abcd', { title: ['abcd'] }],
|
||||
['"abcd efgh"', { _: ['abcd efgh'] }],
|
||||
['title:abcd title:efgh', { title: ['abcd', 'efgh'] }],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
@@ -283,33 +301,6 @@ describe('services_SearchEngine', function() {
|
||||
}
|
||||
}));
|
||||
|
||||
// it('should parse query strings with wildcards', asyncTest(async () => {
|
||||
// let rows;
|
||||
|
||||
// const testCases = [
|
||||
// ['do*', ['do', 'dog', 'domino'], [] ],
|
||||
// // "*" is a wildcard only when used at the end (to search for documents with the specified prefix)
|
||||
// // If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
|
||||
// ['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
|
||||
// ['no*no', ['no*no'], ['nonono'] ],
|
||||
// ];
|
||||
|
||||
// for (let i = 0; i < testCases.length; i++) {
|
||||
// const t = testCases[i];
|
||||
// const input = t[0];
|
||||
// const shouldMatch = t[1];
|
||||
// const shouldNotMatch = t[2];
|
||||
// const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
|
||||
|
||||
// for (let j = 0; j < shouldMatch.length; j++) {
|
||||
// const r = shouldMatch[j].match(regex);
|
||||
// expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
|
||||
// }
|
||||
// }
|
||||
|
||||
// expect(engine.parseQuery('*').termCount).toBe(0);
|
||||
// }));
|
||||
|
||||
it('should handle queries with special characters', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { setupDatabase, allSyncTargetItemsEncrypted, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const fs = require('fs-extra');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
@@ -13,6 +13,7 @@ const { Database } = require('lib/database.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry.js');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
@@ -23,51 +24,40 @@ process.on('unhandledRejection', (reason, p) => {
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000 + 30000; // The first test is slow because the database needs to be built
|
||||
|
||||
async function allItems() {
|
||||
async function allNotesFolders() {
|
||||
let folders = await Folder.all();
|
||||
let notes = await Note.all();
|
||||
return folders.concat(notes);
|
||||
}
|
||||
|
||||
async function allSyncTargetItemsEncrypted() {
|
||||
async function remoteItemsByTypes(types) {
|
||||
const list = await fileApi().list();
|
||||
if (list.has_more) throw new Error('Not implemented!!!');
|
||||
const files = list.items;
|
||||
|
||||
//console.info(Setting.value('resourceDir'));
|
||||
|
||||
let totalCount = 0;
|
||||
let encryptedCount = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
const remoteContentString = await fileApi().get(file.path);
|
||||
const remoteContent = await BaseItem.unserialize(remoteContentString);
|
||||
const ItemClass = BaseItem.itemClass(remoteContent);
|
||||
|
||||
if (!ItemClass.encryptionSupported()) continue;
|
||||
|
||||
totalCount++;
|
||||
|
||||
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
const content = await fileApi().get('.resource/' + remoteContent.id);
|
||||
totalCount++;
|
||||
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
|
||||
}
|
||||
|
||||
if (!!remoteContent.encryption_applied) encryptedCount++;
|
||||
const output = [];
|
||||
for (const file of files) {
|
||||
const remoteContent = await fileApi().get(file.path);
|
||||
const content = await BaseItem.unserialize(remoteContent);
|
||||
if (types.indexOf(content.type_) < 0) continue;
|
||||
output.push(content);
|
||||
}
|
||||
|
||||
if (!totalCount) throw new Error('No encryptable item on sync target');
|
||||
|
||||
return totalCount === encryptedCount;
|
||||
return output;
|
||||
}
|
||||
|
||||
async function localItemsSameAsRemote(locals, expect) {
|
||||
async function remoteNotesAndFolders() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER]);
|
||||
}
|
||||
|
||||
async function remoteNotesFoldersResources() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER, BaseModel.TYPE_RESOURCE]);
|
||||
}
|
||||
|
||||
async function localNotesFoldersSameAsRemote(locals, expect) {
|
||||
let error = null;
|
||||
try {
|
||||
let files = await fileApi().list();
|
||||
files = files.items;
|
||||
|
||||
expect(locals.length).toBe(files.length);
|
||||
const nf = await remoteNotesAndFolders();
|
||||
expect(locals.length).toBe(nf.length);
|
||||
|
||||
for (let i = 0; i < locals.length; i++) {
|
||||
let dbItem = locals[i];
|
||||
@@ -77,12 +67,6 @@ async function localItemsSameAsRemote(locals, expect) {
|
||||
expect(!!remote).toBe(true);
|
||||
if (!remote) continue;
|
||||
|
||||
// if (syncTargetId() == SyncTargetRegistry.nameToId('filesystem')) {
|
||||
// expect(remote.updated_time).toBe(Math.floor(dbItem.updated_time / 1000) * 1000);
|
||||
// } else {
|
||||
// expect(remote.updated_time).toBe(dbItem.updated_time);
|
||||
// }
|
||||
|
||||
let remoteContent = await fileApi().get(path);
|
||||
|
||||
remoteContent = dbItem.type_ == BaseModel.TYPE_NOTE ? await Note.unserialize(remoteContent) : await Folder.unserialize(remoteContent);
|
||||
@@ -114,11 +98,11 @@ describe('Synchronizer', function() {
|
||||
let folder = await Folder.save({ title: "folder1" });
|
||||
await Note.save({ title: "un", parent_id: folder.id });
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should update remote items', asyncTest(async () => {
|
||||
@@ -128,10 +112,10 @@ describe('Synchronizer', function() {
|
||||
|
||||
await Note.save({ title: "un UPDATE", id: note.id });
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should create local items', asyncTest(async () => {
|
||||
@@ -143,9 +127,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should update local items', asyncTest(async () => {
|
||||
@@ -170,9 +154,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should resolve note conflicts', asyncTest(async () => {
|
||||
@@ -264,11 +248,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let files = await fileApi().list();
|
||||
files = files.items;
|
||||
|
||||
expect(files.length).toBe(1);
|
||||
expect(files[0].path).toBe(Folder.systemPath(folder1));
|
||||
const remotes = await remoteNotesAndFolders();
|
||||
expect(remotes.length).toBe(1);
|
||||
expect(remotes[0].id).toBe(folder1.id);
|
||||
|
||||
let deletedItems = await BaseItem.deletedItems(syncTargetId());
|
||||
expect(deletedItems.length).toBe(0);
|
||||
@@ -311,7 +293,7 @@ describe('Synchronizer', function() {
|
||||
await switchClient(1);
|
||||
|
||||
context1 = await synchronizer().start({ context: context1 });
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(2);
|
||||
let deletedItems = await BaseItem.deletedItems(syncTargetId());
|
||||
expect(deletedItems.length).toBe(0);
|
||||
@@ -334,8 +316,8 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
let all = await allNotesFolders();
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should delete local folder', asyncTest(async () => {
|
||||
@@ -352,8 +334,8 @@ describe('Synchronizer', function() {
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start({ context: context1 });
|
||||
let items = await allItems();
|
||||
await localItemsSameAsRemote(items, expect);
|
||||
let items = await allNotesFolders();
|
||||
await localNotesFoldersSameAsRemote(items, expect);
|
||||
}));
|
||||
|
||||
it('should resolve conflict if remote folder has been deleted, but note has been added to folder locally', asyncTest(async () => {
|
||||
@@ -370,7 +352,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
let note = await Note.save({ title: "note1", parent_id: folder1.id });
|
||||
await synchronizer().start();
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(1);
|
||||
expect(items[0].title).toBe('note1');
|
||||
expect(items[0].is_conflict).toBe(1);
|
||||
@@ -392,11 +374,11 @@ describe('Synchronizer', function() {
|
||||
await Note.delete(note.id);
|
||||
await synchronizer().start();
|
||||
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(1);
|
||||
expect(items[0].title).toBe('folder');
|
||||
|
||||
await localItemsSameAsRemote(items, expect);
|
||||
await localNotesFoldersSameAsRemote(items, expect);
|
||||
}));
|
||||
|
||||
it('should cross delete all folders', asyncTest(async () => {
|
||||
@@ -425,13 +407,13 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items2 = await allItems();
|
||||
let items2 = await allNotesFolders();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items1 = await allItems();
|
||||
let items1 = await allNotesFolders();
|
||||
|
||||
expect(items1.length).toBe(0);
|
||||
expect(items1.length).toBe(items2.length);
|
||||
@@ -494,7 +476,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
|
||||
expect(items.length).toBe(1);
|
||||
}));
|
||||
@@ -712,7 +694,7 @@ describe('Synchronizer', function() {
|
||||
let disabledItems = await BaseItem.syncDisabledItems(syncTargetId());
|
||||
expect(disabledItems.length).toBe(0);
|
||||
await Note.save({ id: noteId, title: "un mod", });
|
||||
synchronizer().testingHooks_ = ['rejectedByTarget'];
|
||||
synchronizer().testingHooks_ = ['notesRejectedByTarget'];
|
||||
await synchronizer().start();
|
||||
synchronizer().testingHooks_ = [];
|
||||
await synchronizer().start(); // Another sync to check that this item is now excluded from sync
|
||||
@@ -865,8 +847,8 @@ describe('Synchronizer', function() {
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let resourcePath1 = Resource.fullPath(resource1);
|
||||
await synchronizer().start();
|
||||
expect((await fileApi().list()).items.length).toBe(3);
|
||||
await synchronizer().start();
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(3);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
@@ -933,11 +915,10 @@ describe('Synchronizer', function() {
|
||||
let allResources = await Resource.all();
|
||||
expect(allResources.length).toBe(1);
|
||||
let all = await fileApi().list();
|
||||
expect(all.items.length).toBe(3);
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(3);
|
||||
await Resource.delete(resource1.id);
|
||||
await synchronizer().start();
|
||||
all = await fileApi().list();
|
||||
expect(all.items.length).toBe(2);
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(2);
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
@@ -1068,11 +1049,11 @@ describe('Synchronizer', function() {
|
||||
it('should create remote items with UTF-8 content', asyncTest(async () => {
|
||||
let folder = await Folder.save({ title: "Fahrräder" });
|
||||
await Note.save({ title: "Fahrräder", body: "Fahrräder", parent_id: folder.id });
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it("should update remote items but not pull remote changes", asyncTest(async () => {
|
||||
@@ -1090,7 +1071,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
await Note.save({ title: "un UPDATE", id: note.id });
|
||||
await synchronizer().start({ syncSteps: ["update_remote"] });
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
expect(all.length).toBe(2);
|
||||
|
||||
await switchClient(2);
|
||||
@@ -1142,4 +1123,133 @@ describe('Synchronizer', function() {
|
||||
expect(tags.length).toBe(2);
|
||||
}));
|
||||
|
||||
it("should not save revisions when updating a note via sync", asyncTest(async () => {
|
||||
// When a note is updated, a revision of the original is created.
|
||||
// Here, on client 1, the note is updated for the first time, however since it is
|
||||
// via sync, we don't create a revision - that revision has already been created on client
|
||||
// 2 and is going to be synced.
|
||||
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.save({ id: n1.id, title: 'mod from client 2' });
|
||||
await revisionService().collectRevisions();
|
||||
const allRevs1 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs1.length).toBe(1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
const allRevs2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs2.length).toBe(1);
|
||||
expect(allRevs2[0].id).toBe(allRevs1[0].id);
|
||||
}));
|
||||
|
||||
it("should not save revisions when deleting a note via sync", asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.delete(n1.id);
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start(); // The local note gets deleted here, however a new rev is *not* created
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
|
||||
const notes = await Note.all();
|
||||
expect(notes.length).toBe(0);
|
||||
}));
|
||||
|
||||
it("should not save revisions when an item_change has been generated as a result of a sync", asyncTest(async () => {
|
||||
// When a note is modified an item_change object is going to be created. This
|
||||
// is used for example to tell the search engine, when note should be indexed. It is
|
||||
// also used by the revision service to tell what note should get a new revision.
|
||||
// When a note is modified via sync, this item_change object is also created. The issue
|
||||
// is that we don't want to create revisions for these particular item_changes, because
|
||||
// such revision has already been created on another client (whatever client initially
|
||||
// modified the note), and that rev is going to be synced.
|
||||
//
|
||||
// So in the end we need to make sure that we don't create these unecessary additional revisions.
|
||||
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.save({ id: n1.id, title: 'mod from client 2' });
|
||||
await revisionService().collectRevisions();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
}));
|
||||
|
||||
it("should handle case when new rev is created on client, then older rev arrives later via sync", asyncTest(async () => {
|
||||
// - C1 creates note 1
|
||||
// - C1 modifies note 1 - REV1 created
|
||||
// - C1 sync
|
||||
// - C2 sync
|
||||
// - C2 receives note 1
|
||||
// - C2 modifies note 1 - REV2 created (but not based on REV1)
|
||||
// - C2 receives REV1
|
||||
//
|
||||
// In that case, we need to make sure that REV1 and REV2 are both valid and can be retrieved.
|
||||
// Even though REV1 was created before REV2, REV2 is *not* based on REV1. This is not ideal
|
||||
// due to unecessary data being saved, but a possible edge case and we simply need to check
|
||||
// all the data is valid.
|
||||
|
||||
const n1 = await Note.save({ title: 'note' });
|
||||
await Note.save({ id: n1.id, title: 'note REV1' });
|
||||
await revisionService().collectRevisions(); // REV1
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
synchronizer().testingHooks_ = ['skipRevisions'];
|
||||
await synchronizer().start();
|
||||
synchronizer().testingHooks_ = [];
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note REV2' });
|
||||
await revisionService().collectRevisions(); // REV2
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
await synchronizer().start(); // Sync the rev that had been skipped above with skipRevisions
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
expect((await revisionService().revisionNote(revisions, 0)).title).toBe('note REV1');
|
||||
expect((await revisionService().revisionNote(revisions, 1)).title).toBe('note REV2');
|
||||
}));
|
||||
|
||||
});
|
||||
|
@@ -8,6 +8,7 @@ const ItemChange = require('lib/models/ItemChange.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
@@ -30,13 +31,17 @@ const SyncTargetNextcloud = require('lib/SyncTargetNextcloud.js');
|
||||
const SyncTargetDropbox = require('lib/SyncTargetDropbox.js');
|
||||
const EncryptionService = require('lib/services/EncryptionService.js');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
|
||||
const ResourceService = require('lib/services/ResourceService.js');
|
||||
const RevisionService = require('lib/services/RevisionService.js');
|
||||
const WebDavApi = require('lib/WebDavApi');
|
||||
const DropboxApi = require('lib/DropboxApi');
|
||||
|
||||
let databases_ = [];
|
||||
let synchronizers_ = [];
|
||||
let encryptionServices_ = [];
|
||||
let revisionServices_ = [];
|
||||
let decryptionWorkers_ = [];
|
||||
let resourceServices_ = [];
|
||||
let fileApi_ = null;
|
||||
let currentClient_ = 1;
|
||||
|
||||
@@ -80,6 +85,7 @@ BaseItem.loadClass('Resource', Resource);
|
||||
BaseItem.loadClass('Tag', Tag);
|
||||
BaseItem.loadClass('NoteTag', NoteTag);
|
||||
BaseItem.loadClass('MasterKey', MasterKey);
|
||||
BaseItem.loadClass('Revision', Revision);
|
||||
|
||||
Setting.setConstant('appId', 'net.cozic.joplin-cli');
|
||||
Setting.setConstant('appType', 'cli');
|
||||
@@ -102,6 +108,8 @@ function sleep(n) {
|
||||
}
|
||||
|
||||
async function switchClient(id) {
|
||||
if (!databases_[id]) throw new Error('Call setupDatabaseAndSynchronizer(' + id + ') first!!');
|
||||
|
||||
await time.msleep(sleepTime); // Always leave a little time so that updated_time properties don't overlap
|
||||
await Setting.saveAll();
|
||||
|
||||
@@ -114,6 +122,7 @@ async function switchClient(id) {
|
||||
|
||||
BaseItem.encryptionService_ = encryptionServices_[id];
|
||||
Resource.encryptionService_ = encryptionServices_[id];
|
||||
BaseItem.revisionService_ = revisionServices_[id];
|
||||
|
||||
Setting.setConstant('resourceDir', resourceDir(id));
|
||||
|
||||
@@ -125,21 +134,28 @@ async function clearDatabase(id = null) {
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
|
||||
let queries = [
|
||||
'DELETE FROM notes',
|
||||
'DELETE FROM folders',
|
||||
'DELETE FROM resources',
|
||||
'DELETE FROM tags',
|
||||
'DELETE FROM note_tags',
|
||||
'DELETE FROM master_keys',
|
||||
'DELETE FROM item_changes',
|
||||
'DELETE FROM note_resources',
|
||||
'DELETE FROM settings',
|
||||
'DELETE FROM deleted_items',
|
||||
'DELETE FROM sync_items',
|
||||
'DELETE FROM notes_normalized',
|
||||
const tableNames = [
|
||||
'notes',
|
||||
'folders',
|
||||
'resources',
|
||||
'tags',
|
||||
'note_tags',
|
||||
'master_keys',
|
||||
'item_changes',
|
||||
'note_resources',
|
||||
'settings',
|
||||
'deleted_items',
|
||||
'sync_items',
|
||||
'notes_normalized',
|
||||
'revisions',
|
||||
];
|
||||
|
||||
const queries = [];
|
||||
for (const n of tableNames) {
|
||||
queries.push('DELETE FROM ' + n);
|
||||
queries.push('DELETE FROM sqlite_sequence WHERE name="' + n + '"'); // Reset autoincremented IDs
|
||||
}
|
||||
|
||||
await databases_[id].transactionExecBatch(queries);
|
||||
}
|
||||
|
||||
@@ -164,6 +180,7 @@ async function setupDatabase(id = null) {
|
||||
};
|
||||
|
||||
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
|
||||
databases_[id].setLogger(logger);
|
||||
await databases_[id].open({ name: filePath });
|
||||
|
||||
BaseModel.db_ = databases_[id];
|
||||
@@ -196,8 +213,10 @@ async function setupDatabaseAndSynchronizer(id = null) {
|
||||
}
|
||||
|
||||
encryptionServices_[id] = new EncryptionService();
|
||||
revisionServices_[id] = new RevisionService();
|
||||
decryptionWorkers_[id] = new DecryptionWorker();
|
||||
decryptionWorkers_[id].setEncryptionService(encryptionServices_[id]);
|
||||
resourceServices_[id] = new ResourceService();
|
||||
|
||||
await fileApi().clearRoot();
|
||||
}
|
||||
@@ -217,11 +236,21 @@ function encryptionService(id = null) {
|
||||
return encryptionServices_[id];
|
||||
}
|
||||
|
||||
function revisionService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return revisionServices_[id];
|
||||
}
|
||||
|
||||
function decryptionWorker(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return decryptionWorkers_[id];
|
||||
}
|
||||
|
||||
function resourceService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return resourceServices_[id];
|
||||
}
|
||||
|
||||
async function loadEncryptionMasterKey(id = null, useExisting = false) {
|
||||
const service = encryptionService(id);
|
||||
|
||||
@@ -314,4 +343,34 @@ function asyncTest(callback) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
async function allSyncTargetItemsEncrypted() {
|
||||
const list = await fileApi().list();
|
||||
const files = list.items;
|
||||
|
||||
let totalCount = 0;
|
||||
let encryptedCount = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
const remoteContentString = await fileApi().get(file.path);
|
||||
const remoteContent = await BaseItem.unserialize(remoteContentString);
|
||||
const ItemClass = BaseItem.itemClass(remoteContent);
|
||||
|
||||
if (!ItemClass.encryptionSupported()) continue;
|
||||
|
||||
totalCount++;
|
||||
|
||||
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
const content = await fileApi().get('.resource/' + remoteContent.id);
|
||||
totalCount++;
|
||||
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
|
||||
}
|
||||
|
||||
if (!!remoteContent.encryption_applied) encryptedCount++;
|
||||
}
|
||||
|
||||
if (!totalCount) throw new Error('No encryptable item on sync target');
|
||||
|
||||
return totalCount === encryptedCount;
|
||||
}
|
||||
|
||||
module.exports = { resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper [DEV]",
|
||||
"version": "1.0.8",
|
||||
"version": "1.0.13",
|
||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||
"homepage_url": "https://joplin.cozic.net",
|
||||
"homepage_url": "https://joplinapp.org",
|
||||
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
|
||||
"icons": {
|
||||
"32": "icons/32.png",
|
||||
"48": "icons/48.png",
|
||||
|
1
Clipper/joplin-webclipper/popup/.env
Normal file
1
Clipper/joplin-webclipper/popup/.env
Normal file
@@ -0,0 +1 @@
|
||||
INLINE_RUNTIME_CHUNK=false
|
@@ -15,6 +15,7 @@ class AppComponent extends Component {
|
||||
this.state = ({
|
||||
contentScriptLoaded: false,
|
||||
selectedTags: [],
|
||||
contentScriptError: '',
|
||||
});
|
||||
|
||||
this.confirm_click = () => {
|
||||
@@ -73,7 +74,7 @@ class AppComponent extends Component {
|
||||
}
|
||||
|
||||
this.clipperServerHelpLink_click = () => {
|
||||
bridge().tabsCreate({ url: 'https://joplin.cozic.net/clipper' });
|
||||
bridge().tabsCreate({ url: 'https://joplinapp.org/clipper/' });
|
||||
}
|
||||
|
||||
this.folderSelect_change = (event) => {
|
||||
@@ -126,7 +127,14 @@ class AppComponent extends Component {
|
||||
}
|
||||
|
||||
async componentDidMount() {
|
||||
await this.loadContentScripts();
|
||||
try {
|
||||
await this.loadContentScripts();
|
||||
} catch (error) {
|
||||
console.error('Could not load content scripts', error);
|
||||
this.setState({ contentScriptError: error.message });
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
contentScriptLoaded: true,
|
||||
});
|
||||
@@ -166,7 +174,11 @@ class AppComponent extends Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
if (!this.state.contentScriptLoaded) return 'Loading...';
|
||||
if (!this.state.contentScriptLoaded) {
|
||||
let msg = 'Loading...';
|
||||
if (this.state.contentScriptError) msg = 'The Joplin extension is not available on this tab due to: ' + this.state.contentScriptError;
|
||||
return <div style={{padding: 10, fontSize: 12, maxWidth: 200}}>{msg}</div>;
|
||||
}
|
||||
|
||||
const warningComponent = !this.props.warning ? null : <div className="Warning">{ this.props.warning }</div>
|
||||
|
||||
@@ -198,12 +210,12 @@ class AppComponent extends Component {
|
||||
} else if (hasContent) {
|
||||
previewComponent = (
|
||||
<div className="Preview">
|
||||
<a className={"Confirm Button"} onClick={this.confirm_click}>Confirm</a>
|
||||
<h2>Preview:</h2>
|
||||
<input className={"Title"} value={content.title} onChange={this.contentTitle_change}/>
|
||||
<div className={"BodyWrapper"}>
|
||||
<div className={"Body"} dangerouslySetInnerHTML={{__html: content.body_html}}></div>
|
||||
</div>
|
||||
<a className={"Confirm Button"} onClick={this.confirm_click}>Confirm</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
1
ElectronClient/.gitignore
vendored
1
ElectronClient/.gitignore
vendored
@@ -3,4 +3,5 @@ app/packageInfo.js
|
||||
dist/
|
||||
app/lib/
|
||||
app/gui/*.min.js
|
||||
app/plugins/*.min.js
|
||||
.DS_Store
|
@@ -54,6 +54,7 @@ class ElectronAppWrapper {
|
||||
y: windowState.y,
|
||||
width: windowState.width,
|
||||
height: windowState.height,
|
||||
backgroundColor: '#fff', // required to enable sub pixel rendering, can't be in css
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
},
|
||||
|
@@ -28,6 +28,12 @@ const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
const Menu = bridge().Menu;
|
||||
const MenuItem = bridge().MenuItem;
|
||||
const PluginManager = require('lib/services/PluginManager');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
|
||||
const pluginClasses = [
|
||||
require('./plugins/GotoAnything.min'),
|
||||
];
|
||||
|
||||
const appDefaultState = Object.assign({}, defaultState, {
|
||||
route: {
|
||||
@@ -245,22 +251,41 @@ class Application extends BaseApplication {
|
||||
updateMenu(screen) {
|
||||
if (this.lastMenuScreen_ === screen) return;
|
||||
|
||||
const sortNoteItems = [];
|
||||
const sortNoteOptions = Setting.enumOptions('notes.sortOrder.field');
|
||||
for (let field in sortNoteOptions) {
|
||||
if (!sortNoteOptions.hasOwnProperty(field)) continue;
|
||||
sortNoteItems.push({
|
||||
label: sortNoteOptions[field],
|
||||
screens: ['Main'],
|
||||
const sortNoteFolderItems = (type) => {
|
||||
const sortItems = [];
|
||||
const sortOptions = Setting.enumOptions(type + '.sortOrder.field');
|
||||
for (let field in sortOptions) {
|
||||
if (!sortOptions.hasOwnProperty(field)) continue;
|
||||
sortItems.push({
|
||||
label: sortOptions[field],
|
||||
screens: ['Main'],
|
||||
type: 'checkbox',
|
||||
checked: Setting.value(type + '.sortOrder.field') === field,
|
||||
click: () => {
|
||||
Setting.setValue(type + '.sortOrder.field', field);
|
||||
this.refreshMenu();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sortItems.push({ type: 'separator' });
|
||||
|
||||
sortItems.push({
|
||||
label: Setting.settingMetadata(type + '.sortOrder.reverse').label(),
|
||||
type: 'checkbox',
|
||||
checked: Setting.value('notes.sortOrder.field') === field,
|
||||
checked: Setting.value(type + '.sortOrder.reverse'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
Setting.setValue('notes.sortOrder.field', field);
|
||||
this.refreshMenu();
|
||||
}
|
||||
Setting.setValue(type + '.sortOrder.reverse', !Setting.value(type + '.sortOrder.reverse'));
|
||||
},
|
||||
});
|
||||
|
||||
return sortItems;
|
||||
}
|
||||
|
||||
const sortNoteItems = sortNoteFolderItems('notes');
|
||||
const sortFolderItems = sortNoteFolderItems('folders');
|
||||
|
||||
const focusItems = [];
|
||||
|
||||
focusItems.push({
|
||||
@@ -289,6 +314,8 @@ class Application extends BaseApplication {
|
||||
|
||||
const importItems = [];
|
||||
const exportItems = [];
|
||||
const preferencesItems = [];
|
||||
const toolsItemsFirst = [];
|
||||
const ioService = new InteropService();
|
||||
const ioModules = ioService.modules();
|
||||
for (let i = 0; i < ioModules.length; i++) {
|
||||
@@ -336,6 +363,9 @@ class Application extends BaseApplication {
|
||||
importOptions.path = path;
|
||||
importOptions.format = module.format;
|
||||
importOptions.destinationFolderId = !module.isNoteArchive && moduleSource === 'file' ? selectedFolderId : null;
|
||||
importOptions.onError = (error) => {
|
||||
console.warn(error);
|
||||
}
|
||||
|
||||
const service = new InteropService();
|
||||
try {
|
||||
@@ -366,42 +396,203 @@ class Application extends BaseApplication {
|
||||
}
|
||||
});
|
||||
|
||||
const template = [
|
||||
{
|
||||
label: _('&File'),
|
||||
/* `&` before one of the char in the label name mean, that
|
||||
* <Alt + F> will open this menu. It's needed becase electron
|
||||
* opens the first menu on Alt press if no hotkey assigned.
|
||||
* Issue: https://github.com/laurent22/joplin/issues/934 */
|
||||
submenu: [{
|
||||
label: _('New note'),
|
||||
accelerator: 'CommandOrControl+N',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNote',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('New to-do'),
|
||||
accelerator: 'CommandOrControl+T',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newTodo',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('New notebook'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNotebook',
|
||||
});
|
||||
}
|
||||
/* We need a dummy entry, otherwise the ternary operator to show a
|
||||
* menu item only on a specific OS does not work. */
|
||||
const noItem = {
|
||||
type: 'separator',
|
||||
visible: false
|
||||
}
|
||||
|
||||
const syncStatusItem = {
|
||||
label: _('Synchronisation status'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Status',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newNoteItem = {
|
||||
label: _('New note'),
|
||||
accelerator: 'CommandOrControl+N',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNote',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newTodoItem = {
|
||||
label: _('New to-do'),
|
||||
accelerator: 'CommandOrControl+T',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newTodo',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newNotebookItem = {
|
||||
label: _('New notebook'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNotebook',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const printItem = {
|
||||
label: _('Print'),
|
||||
accelerator: 'CommandOrControl+P',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'print',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
preferencesItems.push({
|
||||
label: _('General Options'),
|
||||
accelerator: 'CommandOrControl+,',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Config',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('Encryption options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'EncryptionConfig',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('Web clipper options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'ClipperConfig',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
toolsItemsFirst.push(syncStatusItem, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
});
|
||||
|
||||
const toolsItems = toolsItemsFirst.concat(preferencesItems);
|
||||
|
||||
function _checkForUpdates(ctx) {
|
||||
bridge().checkForUpdates(false, bridge().window(), ctx.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
|
||||
function _showAbout() {
|
||||
const p = packageInfo;
|
||||
let message = [
|
||||
p.description,
|
||||
'',
|
||||
'Copyright © 2016-2019 Laurent Cozic',
|
||||
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
|
||||
];
|
||||
bridge().showInfoMessageBox(message.join('\n'), {
|
||||
icon: bridge().electronApp().buildDir() + '/icons/32x32.png',
|
||||
});
|
||||
}
|
||||
|
||||
const rootMenuFile = {
|
||||
/* Using a dummy entry for macOS here, because first menu
|
||||
* becomes 'Joplin' and we need a nenu called 'File' later. */
|
||||
label: shim.isMac() ? '&JoplinMainMenu' : _('&File'),
|
||||
/* `&` before one of the char in the label name mean, that
|
||||
* <Alt + F> will open this menu. It's needed becase electron
|
||||
* opens the first menu on Alt press if no hotkey assigned.
|
||||
* Issue: https://github.com/laurent22/joplin/issues/934 */
|
||||
submenu: [{
|
||||
label: _('About Joplin'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
click: () => _showAbout()
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? true : false
|
||||
}, {
|
||||
label: _('Preferences...'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
submenu: preferencesItems
|
||||
}, {
|
||||
label: _('Check for updates...'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
click: () => _checkForUpdates(this)
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? true : false
|
||||
},
|
||||
shim.isMac() ? noItem : newNoteItem,
|
||||
shim.isMac() ? noItem : newTodoItem,
|
||||
shim.isMac() ? noItem : newNotebookItem, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? false : true
|
||||
}, {
|
||||
label: _('Import'),
|
||||
visible: shim.isMac() ? false : true,
|
||||
submenu: importItems,
|
||||
}, {
|
||||
label: _('Export'),
|
||||
visible: shim.isMac() ? false : true,
|
||||
submenu: exportItems,
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Synchronise'),
|
||||
accelerator: 'CommandOrControl+S',
|
||||
screens: ['Main'],
|
||||
click: async () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'synchronize',
|
||||
});
|
||||
}
|
||||
}, shim.isMac() ? syncStatusItem : noItem, {
|
||||
type: 'separator',
|
||||
}, shim.isMac() ? noItem : printItem, {
|
||||
type: 'separator',
|
||||
platforms: ['darwin'],
|
||||
}, {
|
||||
label: _('Hide %s', 'Joplin'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'CommandOrControl+H',
|
||||
click: () => { bridge().electronApp().hide() }
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Quit'),
|
||||
accelerator: 'CommandOrControl+Q',
|
||||
click: () => { bridge().electronApp().quit() }
|
||||
}]
|
||||
};
|
||||
|
||||
const rootMenuFileMacOs = {
|
||||
label: _('&File'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
submenu: [
|
||||
newNoteItem,
|
||||
newTodoItem,
|
||||
newNotebookItem, {
|
||||
label: _('Close Window'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'Command+W',
|
||||
selector: 'performClose:',
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
@@ -412,44 +603,13 @@ class Application extends BaseApplication {
|
||||
submenu: exportItems,
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Synchronise'),
|
||||
accelerator: 'CommandOrControl+S',
|
||||
screens: ['Main'],
|
||||
click: async () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'synchronize',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Print'),
|
||||
accelerator: 'CommandOrControl+P',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'print',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
platforms: ['darwin'],
|
||||
}, {
|
||||
label: _('Hide %s', 'Joplin'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'CommandOrControl+H',
|
||||
click: () => { bridge().electronApp().hide() }
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Quit'),
|
||||
accelerator: 'CommandOrControl+Q',
|
||||
click: () => { bridge().electronApp().quit() }
|
||||
}]
|
||||
}, {
|
||||
},
|
||||
printItem
|
||||
]
|
||||
};
|
||||
|
||||
const rootMenus = {
|
||||
edit: {
|
||||
label: _('&Edit'),
|
||||
submenu: [{
|
||||
label: _('Copy'),
|
||||
@@ -550,7 +710,8 @@ class Application extends BaseApplication {
|
||||
});
|
||||
},
|
||||
}],
|
||||
}, {
|
||||
},
|
||||
view: {
|
||||
label: _('&View'),
|
||||
submenu: [{
|
||||
label: _('Toggle sidebar'),
|
||||
@@ -580,13 +741,9 @@ class Application extends BaseApplication {
|
||||
screens: ['Main'],
|
||||
submenu: sortNoteItems,
|
||||
}, {
|
||||
label: Setting.settingMetadata('notes.sortOrder.reverse').label(),
|
||||
type: 'checkbox',
|
||||
checked: Setting.value('notes.sortOrder.reverse'),
|
||||
label: Setting.settingMetadata('folders.sortOrder.field').label(),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
Setting.setValue('notes.sortOrder.reverse', !Setting.value('notes.sortOrder.reverse'));
|
||||
},
|
||||
submenu: sortFolderItems,
|
||||
}, {
|
||||
label: Setting.settingMetadata('uncompletedTodosOnTop').label(),
|
||||
type: 'checkbox',
|
||||
@@ -611,80 +768,59 @@ class Application extends BaseApplication {
|
||||
screens: ['Main'],
|
||||
submenu: focusItems,
|
||||
}],
|
||||
}, {
|
||||
},
|
||||
tools: {
|
||||
label: _('&Tools'),
|
||||
submenu: [{
|
||||
label: _('Synchronisation status'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Status',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
},{
|
||||
label: _('Web clipper options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'ClipperConfig',
|
||||
});
|
||||
}
|
||||
},{
|
||||
label: _('Encryption options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'EncryptionConfig',
|
||||
});
|
||||
}
|
||||
},{
|
||||
label: _('General Options'),
|
||||
accelerator: 'CommandOrControl+,',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Config',
|
||||
});
|
||||
}
|
||||
}],
|
||||
}, {
|
||||
submenu: shim.isMac() ? [] : toolsItems,
|
||||
},
|
||||
help: {
|
||||
label: _('&Help'),
|
||||
submenu: [{
|
||||
label: _('Website and documentation'),
|
||||
accelerator: 'F1',
|
||||
click () { bridge().openExternal('https://joplin.cozic.net') }
|
||||
click () { bridge().openExternal('https://joplinapp.org') }
|
||||
}, {
|
||||
label: _('Make a donation'),
|
||||
click () { bridge().openExternal('https://joplin.cozic.net/donate') }
|
||||
click () { bridge().openExternal('https://joplinapp.org/donate/') }
|
||||
}, {
|
||||
label: _('Check for updates...'),
|
||||
click: () => {
|
||||
bridge().checkForUpdates(false, bridge().window(), this.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
visible: shim.isMac() ? false : true,
|
||||
click: () => _checkForUpdates(this)
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? false : true,
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('About Joplin'),
|
||||
click: () => {
|
||||
const p = packageInfo;
|
||||
let message = [
|
||||
p.description,
|
||||
'',
|
||||
'Copyright © 2016-2019 Laurent Cozic',
|
||||
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
|
||||
];
|
||||
bridge().showInfoMessageBox(message.join('\n'), {
|
||||
icon: bridge().electronApp().buildDir() + '/icons/32x32.png',
|
||||
});
|
||||
}
|
||||
visible: shim.isMac() ? false : true,
|
||||
click: () => _showAbout()
|
||||
}]
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
if (shim.isMac()) {
|
||||
rootMenus.macOsApp = rootMenuFile;
|
||||
rootMenus.file = rootMenuFileMacOs;
|
||||
} else {
|
||||
rootMenus.file = rootMenuFile;
|
||||
}
|
||||
|
||||
const pluginMenuItems = PluginManager.instance().menuItems();
|
||||
for (const item of pluginMenuItems) {
|
||||
let itemParent = rootMenus[item.parent] ? rootMenus[item.parent] : 'tools';
|
||||
itemParent.submenu.push(item);
|
||||
}
|
||||
|
||||
const template = [
|
||||
rootMenus.file,
|
||||
rootMenus.edit,
|
||||
rootMenus.view,
|
||||
rootMenus.tools,
|
||||
rootMenus.help,
|
||||
];
|
||||
|
||||
if (shim.isMac()) template.splice(0, 0, rootMenus.macOsApp);
|
||||
|
||||
function isEmptyMenu(template) {
|
||||
for (let i = 0; i < template.length; i++) {
|
||||
const t = template[i];
|
||||
@@ -798,6 +934,10 @@ class Application extends BaseApplication {
|
||||
bridge().window().webContents.openDevTools();
|
||||
}
|
||||
|
||||
PluginManager.instance().dispatch_ = this.dispatch.bind(this);
|
||||
PluginManager.instance().setLogger(reg.logger());
|
||||
PluginManager.instance().register(pluginClasses);
|
||||
|
||||
this.updateMenu('Main');
|
||||
|
||||
this.initRedux();
|
||||
@@ -892,6 +1032,11 @@ class Application extends BaseApplication {
|
||||
|
||||
ExternalEditWatcher.instance().setLogger(reg.logger());
|
||||
ExternalEditWatcher.instance().dispatch = this.store().dispatch;
|
||||
|
||||
RevisionService.instance().runInBackground();
|
||||
|
||||
// Make it available to the console window - useful to call revisionService.collectRevisions()
|
||||
window.revisionService = RevisionService.instance();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -131,7 +131,7 @@ function checkForUpdates(inBackground, window, logFilePath, options) {
|
||||
|
||||
const buttonIndex = dialog.showMessageBox(parentWindow_, {
|
||||
type: 'info',
|
||||
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: v%s', packageInfo.version) + '\n' + _('New version: v%s', newVersionString) + releaseNotes,
|
||||
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: %s', packageInfo.version) + '\n' + _('New version: %s', newVersionString) + releaseNotes,
|
||||
buttons: [_('Yes'), _('No')]
|
||||
});
|
||||
|
||||
|
@@ -3,7 +3,6 @@ const spawnSync = require('child_process').spawnSync;
|
||||
|
||||
const babelPath = __dirname + '/node_modules/.bin/babel' + (process.platform === 'win32' ? '.cmd' : '');
|
||||
const basePath = __dirname + '/../..';
|
||||
const guiPath = __dirname + '/gui';
|
||||
|
||||
function fileIsNewerThan(path1, path2) {
|
||||
if (!fs.existsSync(path2)) return true;
|
||||
@@ -14,35 +13,41 @@ function fileIsNewerThan(path1, path2) {
|
||||
return stat1.mtime > stat2.mtime;
|
||||
}
|
||||
|
||||
fs.readdirSync(guiPath).forEach((filename) => {
|
||||
const jsxPath = guiPath + '/' + filename;
|
||||
const p = jsxPath.split('.');
|
||||
if (p.length <= 1) return;
|
||||
const ext = p[p.length - 1];
|
||||
if (ext !== 'jsx') return;
|
||||
p.pop();
|
||||
function convertJsx(path) {
|
||||
fs.readdirSync(path).forEach((filename) => {
|
||||
const jsxPath = path + '/' + filename;
|
||||
const p = jsxPath.split('.');
|
||||
if (p.length <= 1) return;
|
||||
const ext = p[p.length - 1];
|
||||
if (ext !== 'jsx') return;
|
||||
p.pop();
|
||||
|
||||
const basePath = p.join('.');
|
||||
const basePath = p.join('.');
|
||||
|
||||
const jsPath = basePath + '.min.js';
|
||||
const jsPath = basePath + '.min.js';
|
||||
|
||||
if (fileIsNewerThan(jsxPath, jsPath)) {
|
||||
console.info('Compiling ' + jsxPath + '...');
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file', jsPath, jsxPath]);
|
||||
if (result.status !== 0) {
|
||||
const msg = [];
|
||||
if (result.stdout) msg.push(result.stdout.toString());
|
||||
if (result.stderr) msg.push(result.stderr.toString());
|
||||
console.error(msg.join('\n'));
|
||||
if (result.error) console.error(result.error);
|
||||
process.exit(result.status);
|
||||
if (fileIsNewerThan(jsxPath, jsPath)) {
|
||||
console.info('Compiling ' + jsxPath + '...');
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file', jsPath, jsxPath]);
|
||||
if (result.status !== 0) {
|
||||
const msg = [];
|
||||
if (result.stdout) msg.push(result.stdout.toString());
|
||||
if (result.stderr) msg.push(result.stderr.toString());
|
||||
console.error(msg.join('\n'));
|
||||
if (result.error) console.error(result.error);
|
||||
process.exit(result.status);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
convertJsx(__dirname + '/gui');
|
||||
convertJsx(__dirname + '/plugins');
|
||||
|
||||
const libContent = [
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/string-utils-common.js', 'utf8'),
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/markJsUtils.js', 'utf8'),
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/MdToHtml/webviewLib.js', 'utf8'),
|
||||
];
|
||||
|
||||
fs.writeFileSync(__dirname + '/gui/note-viewer/lib.js', libContent.join('\n'), 'utf8');
|
||||
|
50
ElectronClient/app/electronRebuild.js
Normal file
50
ElectronClient/app/electronRebuild.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const execCommand = function(command) {
|
||||
const exec = require('child_process').exec
|
||||
|
||||
console.info('Running: ' + command);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let childProcess = exec(command, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
if (error.signal == 'SIGTERM') {
|
||||
resolve('Process was killed');
|
||||
} else {
|
||||
reject(error);
|
||||
}
|
||||
} else {
|
||||
resolve(stdout.trim());
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const isLinux = () => {
|
||||
return process && process.platform === 'linux';
|
||||
}
|
||||
|
||||
const isWindows = () => {
|
||||
return process && process.platform === 'win32';
|
||||
}
|
||||
|
||||
const isMac = () => {
|
||||
return process && process.platform === 'darwin';
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// electron-rebuild --arch ia32 && electron-rebuild --arch x64
|
||||
|
||||
let exePath = __dirname + '/node_modules/.bin/electron-rebuild';
|
||||
if (isWindows()) exePath += '.cmd';
|
||||
|
||||
if (isWindows()) {
|
||||
console.info(await execCommand(['"' + exePath + '"', '--arch ia32'].join(' ')));
|
||||
console.info(await execCommand(['"' + exePath + '"', '--arch x64'].join(' ')));
|
||||
} else {
|
||||
console.info(await execCommand(['"' + exePath + '"'].join(' ')));
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
@@ -76,6 +76,26 @@ class ConfigScreenComponent extends React.Component {
|
||||
</div>
|
||||
);
|
||||
|
||||
if (section.name === 'sync') {
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
|
||||
|
||||
if (syncTargetMd.supportsConfigCheck) {
|
||||
const messages = shared.checkSyncConfigMessages(this);
|
||||
const statusStyle = Object.assign({}, theme.textStyle, { marginTop: 10 });
|
||||
const statusComp = !messages.length ? null : (
|
||||
<div style={statusStyle}>
|
||||
{messages[0]}
|
||||
{messages.length >= 1 ? (<p>{messages[1]}</p>) : null}
|
||||
</div>);
|
||||
|
||||
settingComps.push(
|
||||
<div key="check_sync_config_button" style={this.rowStyle_}>
|
||||
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={theme.buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
{ statusComp }
|
||||
</div>);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={key} style={sectionStyle}>
|
||||
<h2 style={headerStyle}>{Setting.sectionNameToLabel(section.name)}</h2>
|
||||
@@ -265,9 +285,12 @@ class ConfigScreenComponent extends React.Component {
|
||||
updateSettingValue(key, event.target.value);
|
||||
};
|
||||
|
||||
const label = [md.label()];
|
||||
if (md.unitLabel) label.push('(' + md.unitLabel() + ')');
|
||||
|
||||
return (
|
||||
<div key={key} style={rowStyle}>
|
||||
<div style={labelStyle}><label>{md.label()}</label></div>
|
||||
<div style={labelStyle}><label>{label.join(' ')}</label></div>
|
||||
<input type="number" style={controlStyle} value={this.state.settings[key]} onChange={(event) => {onNumChange(event)}} min={md.minimum} max={md.maximum} step={md.step}/>
|
||||
{ descriptionComp }
|
||||
</div>
|
||||
@@ -320,24 +343,6 @@ class ConfigScreenComponent extends React.Component {
|
||||
|
||||
const settingComps = shared.settingsToComponents2(this, 'desktop', settings);
|
||||
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
|
||||
|
||||
if (syncTargetMd.supportsConfigCheck) {
|
||||
const messages = shared.checkSyncConfigMessages(this);
|
||||
const statusStyle = Object.assign({}, theme.textStyle, { marginTop: 10 });
|
||||
const statusComp = !messages.length ? null : (
|
||||
<div style={statusStyle}>
|
||||
{messages[0]}
|
||||
{messages.length >= 1 ? (<p>{messages[1]}</p>) : null}
|
||||
</div>);
|
||||
|
||||
settingComps.push(
|
||||
<div key="check_sync_config_button" style={this.rowStyle_}>
|
||||
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
{ statusComp }
|
||||
</div>);
|
||||
}
|
||||
|
||||
const buttonBarStyle = {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
|
@@ -189,7 +189,7 @@ class EncryptionConfigScreenComponent extends React.Component {
|
||||
<div style={containerStyle}>
|
||||
{<div style={{backgroundColor: theme.warningBackgroundColor, paddingLeft: 10, paddingRight: 10, paddingTop: 2, paddingBottom: 2 }}>
|
||||
<p style={theme.textStyle}>
|
||||
<span>{_('For more information about End-To-End Encryption (E2EE) and advices on how to enable it please check the documentation:')}</span> <a onClick={() => {bridge().openExternal('https://joplin.cozic.net/e2ee')}} href="#">https://joplin.cozic.net/e2ee</a>
|
||||
<span>{_('For more information about End-To-End Encryption (E2EE) and advices on how to enable it please check the documentation:')}</span> <a onClick={() => {bridge().openExternal('https://joplinapp.org/e2ee/')}} href="#">https://joplinapp.org/e2ee/</a>
|
||||
</p>
|
||||
</div>}
|
||||
<h1 style={theme.h1Style}>{_('Status')}</h1>
|
||||
|
@@ -58,7 +58,7 @@ class HeaderComponent extends React.Component {
|
||||
}
|
||||
|
||||
this.searchUsageLink_click = event => {
|
||||
bridge().openExternal('https://joplin.cozic.net/#searching');
|
||||
bridge().openExternal('https://joplinapp.org/#searching');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,11 +102,14 @@ class HeaderComponent extends React.Component {
|
||||
let icon = null;
|
||||
if (options.iconName) {
|
||||
const iconStyle = {
|
||||
fontSize: Math.round(style.fontSize * 1.4),
|
||||
fontSize: Math.round(style.fontSize * 1.1),
|
||||
color: style.color,
|
||||
};
|
||||
if (options.title) iconStyle.marginRight = 5;
|
||||
if (options.iconRotation) iconStyle.transform = 'rotate(' + options.iconRotation + 'deg)';
|
||||
if("undefined" != typeof(options.iconRotation)) {
|
||||
iconStyle.transition = "transform 0.15s ease-in-out";
|
||||
iconStyle.transform = 'rotate(' + options.iconRotation + 'deg)';
|
||||
}
|
||||
icon = <i style={iconStyle} className={"fa " + options.iconName}></i>
|
||||
}
|
||||
|
||||
@@ -135,8 +138,11 @@ class HeaderComponent extends React.Component {
|
||||
const inputStyle = {
|
||||
display: 'flex',
|
||||
flex: 1,
|
||||
paddingLeft: 4,
|
||||
paddingRight: 4,
|
||||
paddingLeft: 6,
|
||||
paddingRight: 6,
|
||||
paddingTop: 1, // vertical alignment with buttons
|
||||
paddingBottom: 0, // vertical alignment with buttons
|
||||
height: style.fontSize * 2,
|
||||
color: style.color,
|
||||
fontSize: style.fontSize,
|
||||
fontFamily: style.fontFamily,
|
||||
|
39
ElectronClient/app/gui/HelpButton.jsx
Normal file
39
ElectronClient/app/gui/HelpButton.jsx
Normal file
@@ -0,0 +1,39 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
|
||||
class HelpButtonComponent extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.onClick = this.onClick.bind(this);
|
||||
}
|
||||
|
||||
onClick() {
|
||||
if (this.props.onClick) this.props.onClick();
|
||||
}
|
||||
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
let style = Object.assign({}, this.props.style, {color: theme.color, textDecoration: 'none'});
|
||||
const helpIconStyle = {flex:0, width: 16, height: 16, marginLeft: 10};
|
||||
const extraProps = {};
|
||||
if (this.props.tip) extraProps['data-tip'] = this.props.tip;
|
||||
return <a href="#" style={style} onClick={this.onClick} {...extraProps}><i style={helpIconStyle} className={"fa fa-question-circle"}></i></a>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
return {
|
||||
theme: state.settings.theme,
|
||||
};
|
||||
};
|
||||
|
||||
const HelpButton = connect(mapStateToProps)(HelpButtonComponent);
|
||||
|
||||
module.exports = HelpButton;
|
@@ -18,6 +18,7 @@ const layoutUtils = require('lib/layout-utils.js');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
const eventManager = require('../eventManager');
|
||||
const VerticalResizer = require('./VerticalResizer.min');
|
||||
const PluginManager = require('lib/services/PluginManager');
|
||||
|
||||
class MainScreenComponent extends React.Component {
|
||||
|
||||
@@ -210,6 +211,15 @@ class MainScreenComponent extends React.Component {
|
||||
type: 'SEARCH_SELECT',
|
||||
id: this.searchId_,
|
||||
});
|
||||
} else {
|
||||
const note = await Note.load(this.props.selectedNoteId);
|
||||
if (note) {
|
||||
this.props.dispatch({
|
||||
type: "FOLDER_AND_NOTE_SELECT",
|
||||
folderId: note.parent_id,
|
||||
noteId: note.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} else if (command.name === 'commandNoteProperties') {
|
||||
@@ -217,6 +227,7 @@ class MainScreenComponent extends React.Component {
|
||||
notePropertiesDialogOptions: {
|
||||
noteId: command.noteId,
|
||||
visible: true,
|
||||
onRevisionLinkClick: command.onRevisionLinkClick,
|
||||
},
|
||||
});
|
||||
} else if (command.name === 'toggleVisiblePanes') {
|
||||
@@ -449,6 +460,9 @@ class MainScreenComponent extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
const dialogInfo = PluginManager.instance().pluginDialogToShow(this.props.plugins);
|
||||
const pluginDialog = !dialogInfo ? null : <dialogInfo.Dialog {...dialogInfo.props}/>;
|
||||
|
||||
const modalLayerStyle = Object.assign({}, styles.modalLayer, { display: this.state.modalLayer.visible ? 'block' : 'none' });
|
||||
|
||||
const notePropertiesDialogOptions = this.state.notePropertiesDialogOptions;
|
||||
@@ -457,12 +471,12 @@ class MainScreenComponent extends React.Component {
|
||||
<div style={style}>
|
||||
<div style={modalLayerStyle}>{this.state.modalLayer.message}</div>
|
||||
|
||||
<NotePropertiesDialog
|
||||
{ notePropertiesDialogOptions.visible && <NotePropertiesDialog
|
||||
theme={this.props.theme}
|
||||
noteId={notePropertiesDialogOptions.noteId}
|
||||
visible={!!notePropertiesDialogOptions.visible}
|
||||
onClose={this.notePropertiesDialog_close}
|
||||
/>
|
||||
onRevisionLinkClick={notePropertiesDialogOptions.onRevisionLinkClick}
|
||||
/> }
|
||||
|
||||
<PromptDialog
|
||||
autocomplete={promptOptions && ('autocomplete' in promptOptions) ? promptOptions.autocomplete : null}
|
||||
@@ -483,6 +497,8 @@ class MainScreenComponent extends React.Component {
|
||||
<NoteList style={styles.noteList} />
|
||||
<VerticalResizer style={styles.verticalResizer} onDrag={this.noteList_onDrag}/>
|
||||
<NoteText style={styles.noteText} visiblePanes={this.props.noteVisiblePanes} />
|
||||
|
||||
{pluginDialog}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -503,6 +519,8 @@ const mapStateToProps = (state) => {
|
||||
sidebarVisibility: state.sidebarVisibility,
|
||||
sidebarWidth: state.settings['style.sidebar.width'],
|
||||
noteListWidth: state.settings['style.noteList.width'],
|
||||
selectedNoteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
|
||||
plugins: state.plugins,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -17,7 +17,11 @@ class NavigatorComponent extends Component {
|
||||
}
|
||||
|
||||
updateWindowTitle(title) {
|
||||
if (bridge().window()) bridge().window().setTitle(title);
|
||||
try {
|
||||
if (bridge().window()) bridge().window().setTitle(title);
|
||||
} catch (error) {
|
||||
console.warn('updateWindowTitle', error);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@@ -17,13 +17,13 @@ class NotePropertiesDialog extends React.Component {
|
||||
this.okButton_click = this.okButton_click.bind(this);
|
||||
this.cancelButton_click = this.cancelButton_click.bind(this);
|
||||
this.onKeyDown = this.onKeyDown.bind(this);
|
||||
this.revisionsLink_click = this.revisionsLink_click.bind(this);
|
||||
this.okButton = React.createRef();
|
||||
|
||||
this.state = {
|
||||
formNote: null,
|
||||
editedKey: null,
|
||||
editedValue: null,
|
||||
visible: false,
|
||||
};
|
||||
|
||||
this.keyToLabel_ = {
|
||||
@@ -32,17 +32,12 @@ class NotePropertiesDialog extends React.Component {
|
||||
user_updated_time: _('Updated'),
|
||||
location: _('Location'),
|
||||
source_url: _('URL'),
|
||||
revisionsLink: _('Note History'),
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(newProps) {
|
||||
if ('visible' in newProps && newProps.visible !== this.state.visible) {
|
||||
this.setState({ visible: newProps.visible });
|
||||
}
|
||||
|
||||
if ('noteId' in newProps) {
|
||||
this.loadNote(newProps.noteId);
|
||||
}
|
||||
componentDidMount() {
|
||||
this.loadNote(this.props.noteId);
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
@@ -86,6 +81,7 @@ class NotePropertiesDialog extends React.Component {
|
||||
formNote.location = note.latitude + ', ' + note.longitude;
|
||||
}
|
||||
|
||||
formNote.revisionsLink = note.id;
|
||||
formNote.id = note.id;
|
||||
|
||||
return formNote;
|
||||
@@ -109,26 +105,6 @@ class NotePropertiesDialog extends React.Component {
|
||||
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: theme.backgroundColor,
|
||||
padding: 16,
|
||||
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
|
||||
marginTop: 20,
|
||||
}
|
||||
|
||||
this.styles_.controlBox = {
|
||||
marginBottom: '1em',
|
||||
color: 'black', //This will apply for the calendar
|
||||
@@ -160,8 +136,6 @@ class NotePropertiesDialog extends React.Component {
|
||||
borderColor: theme.dividerColor,
|
||||
};
|
||||
|
||||
this.styles_.dialogTitle = Object.assign({}, theme.h1Style, { marginBottom: '1.2em' });
|
||||
|
||||
return this.styles_;
|
||||
}
|
||||
|
||||
@@ -175,10 +149,6 @@ class NotePropertiesDialog extends React.Component {
|
||||
await this.cancelProperty();
|
||||
}
|
||||
|
||||
this.setState({
|
||||
visible: false,
|
||||
});
|
||||
|
||||
if (this.props.onClose) {
|
||||
this.props.onClose();
|
||||
}
|
||||
@@ -192,6 +162,11 @@ class NotePropertiesDialog extends React.Component {
|
||||
this.closeDialog(false);
|
||||
}
|
||||
|
||||
revisionsLink_click() {
|
||||
this.closeDialog(false);
|
||||
if (this.props.onRevisionLinkClick) this.props.onRevisionLinkClick();
|
||||
}
|
||||
|
||||
onKeyDown(event) {
|
||||
if (event.keyCode === 13) {
|
||||
this.closeDialog(true);
|
||||
@@ -311,11 +286,13 @@ class NotePropertiesDialog extends React.Component {
|
||||
url = Note.geoLocationUrlFromLatLong(ll.latitude, ll.longitude);
|
||||
}
|
||||
controlComp = <a href="#" onClick={() => bridge().openExternal(url)} style={theme.urlStyle}>{displayedValue}</a>
|
||||
} else if (key === 'revisionsLink') {
|
||||
controlComp = <a href="#" onClick={this.revisionsLink_click} style={theme.urlStyle}>{_('Previous versions of this note')}</a>
|
||||
} else {
|
||||
controlComp = <div style={Object.assign({}, theme.textStyle, {display: 'inline-block'})}>{displayedValue}</div>
|
||||
}
|
||||
|
||||
if (key !== 'id') {
|
||||
if (key !== 'id' && key !== 'revisionsLink') {
|
||||
editCompHandler = () => {this.editPropertyButtonClick(key, value)};
|
||||
editCompIcon = 'fa-edit';
|
||||
}
|
||||
@@ -379,9 +356,6 @@ class NotePropertiesDialog extends React.Component {
|
||||
|
||||
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;
|
||||
@@ -391,9 +365,9 @@ class NotePropertiesDialog extends React.Component {
|
||||
}
|
||||
|
||||
return (
|
||||
<div style={modalLayerStyle}>
|
||||
<div style={styles.dialogBox}>
|
||||
<div style={styles.dialogTitle}>{_('Note properties')}</div>
|
||||
<div style={theme.dialogModalLayer}>
|
||||
<div style={theme.dialogBox}>
|
||||
<div style={theme.dialogTitle}>{_('Note properties')}</div>
|
||||
<div>{noteComps}</div>
|
||||
<div style={{ textAlign: 'right', marginTop: 10 }}>
|
||||
{buttonComps}
|
||||
|
175
ElectronClient/app/gui/NoteRevisionViewer.jsx
Normal file
175
ElectronClient/app/gui/NoteRevisionViewer.jsx
Normal file
@@ -0,0 +1,175 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const NoteTextViewer = require('./NoteTextViewer.min');
|
||||
const HelpButton = require('./HelpButton.min');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const Revision = require('lib/models/Revision');
|
||||
const Setting = require('lib/models/Setting');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
const shared = require('lib/components/shared/note-screen-shared.js');
|
||||
const MdToHtml = require('lib/MdToHtml');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const ReactTooltip = require('react-tooltip');
|
||||
const { substrWithEllipsis } = require('lib/string-utils');
|
||||
|
||||
class NoteRevisionViewerComponent extends React.PureComponent {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.state = {
|
||||
revisions: [],
|
||||
currentRevId: '',
|
||||
note: null,
|
||||
restoring: false,
|
||||
};
|
||||
|
||||
this.viewerRef_ = React.createRef();
|
||||
|
||||
this.viewer_domReady = this.viewer_domReady.bind(this);
|
||||
this.revisionList_onChange = this.revisionList_onChange.bind(this);
|
||||
this.importButton_onClick = this.importButton_onClick.bind(this);
|
||||
this.backButton_click = this.backButton_click.bind(this);
|
||||
}
|
||||
|
||||
style() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
let style = {
|
||||
root: {
|
||||
backgroundColor: theme.backgroundColor,
|
||||
display: 'flex',
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
},
|
||||
titleInput: Object.assign({}, theme.inputStyle, { flex: 1 }),
|
||||
revisionList: Object.assign({}, theme.dropdownList, { marginLeft: 10, flex: 0.5 }),
|
||||
};
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
async viewer_domReady() {
|
||||
// this.viewerRef_.current.wrappedInstance.openDevTools();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, this.props.noteId);
|
||||
|
||||
this.setState({
|
||||
revisions: revisions,
|
||||
currentRevId: revisions.length ? revisions[revisions.length - 1].id : '',
|
||||
}, () => {
|
||||
this.reloadNote();
|
||||
});
|
||||
}
|
||||
|
||||
async importButton_onClick() {
|
||||
if (!this.state.note) return;
|
||||
this.setState({ restoring: true });
|
||||
await RevisionService.instance().importRevisionNote(this.state.note);
|
||||
this.setState({ restoring: false });
|
||||
alert(_('The note "%s" has been successfully restored to the notebook "%s".', substrWithEllipsis(this.state.note.title, 0, 32), RevisionService.instance().restoreFolderTitle()));
|
||||
}
|
||||
|
||||
backButton_click() {
|
||||
if (this.props.onBack) this.props.onBack();
|
||||
}
|
||||
|
||||
revisionList_onChange(event) {
|
||||
const value = event.target.value;
|
||||
|
||||
if (!value) {
|
||||
if (this.props.onBack) this.props.onBack();
|
||||
} else {
|
||||
this.setState({
|
||||
currentRevId: value,
|
||||
}, () => {
|
||||
this.reloadNote();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async reloadNote() {
|
||||
let noteBody = '';
|
||||
if (!this.state.revisions.length || !this.state.currentRevId) {
|
||||
noteBody = _('This note has no history');
|
||||
this.setState({ note: null });
|
||||
} else {
|
||||
const revIndex = BaseModel.modelIndexById(this.state.revisions, this.state.currentRevId);
|
||||
const note = await RevisionService.instance().revisionNote(this.state.revisions, revIndex);
|
||||
if (!note) return;
|
||||
noteBody = note.body;
|
||||
this.setState({ note: note });
|
||||
}
|
||||
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const mdToHtml = new MdToHtml({
|
||||
resourceBaseUrl: 'file://' + Setting.value('resourceDir') + '/',
|
||||
});
|
||||
|
||||
const result = mdToHtml.render(noteBody, theme, {
|
||||
codeTheme: theme.codeThemeCss,
|
||||
userCss: this.props.customCss ? this.props.customCss : '',
|
||||
resources: await shared.attachedResources(noteBody),
|
||||
});
|
||||
|
||||
this.viewerRef_.current.wrappedInstance.send('setHtml', result.html, { cssFiles: result.cssFiles });
|
||||
}
|
||||
|
||||
render() {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
const style = this.style();
|
||||
|
||||
const revisionListItems = [];
|
||||
const revs = this.state.revisions.slice().reverse();
|
||||
for (let i = 0; i < revs.length; i++) {
|
||||
const rev = revs[i];
|
||||
revisionListItems.push(<option
|
||||
key={rev.id}
|
||||
value={rev.id}
|
||||
>{time.formatMsToLocal(rev.item_updated_time)}</option>);
|
||||
}
|
||||
|
||||
const restoreButtonTitle = _('Restore');
|
||||
const helpMessage = _('Click "%s" to restore the note. It will be copied in the notebook named "%s". The current version of the note will not be replaced or modified.', restoreButtonTitle, RevisionService.instance().restoreFolderTitle());
|
||||
|
||||
const titleInput = (
|
||||
<div style={{display:'flex', flexDirection: 'row', alignItems:'center', marginBottom: 10, borderWidth: 1, borderBottomStyle: 'solid', borderColor: theme.dividerColor, paddingBottom:10}}>
|
||||
<button onClick={this.backButton_click} style={Object.assign({}, theme.buttonStyle, { marginRight: 10, height: theme.inputStyle.height })}>{'⬅ ' + _('Back')}</button>
|
||||
<input readOnly type="text" style={style.titleInput} value={this.state.note ? this.state.note.title : ''}/>
|
||||
<select disabled={!this.state.revisions.length} value={this.state.currentRevId} style={style.revisionList} onChange={this.revisionList_onChange}>
|
||||
{revisionListItems}
|
||||
</select>
|
||||
<button disabled={!this.state.revisions.length || this.state.restoring} onClick={this.importButton_onClick} style={Object.assign({}, theme.buttonStyle, { marginLeft: 10, height: theme.inputStyle.height })}>{restoreButtonTitle}</button>
|
||||
<HelpButton tip={helpMessage} id="noteRevisionHelpButton" onClick={this.helpButton_onClick}/>
|
||||
</div>
|
||||
);
|
||||
|
||||
const viewer = <NoteTextViewer
|
||||
viewerStyle={{display:'flex', flex:1}}
|
||||
ref={this.viewerRef_}
|
||||
onDomReady={this.viewer_domReady}
|
||||
/>
|
||||
|
||||
return (
|
||||
<div style={style.root}>
|
||||
{titleInput}
|
||||
{viewer}
|
||||
<ReactTooltip place="bottom" delayShow={300} className="help-tooltip"/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
return {
|
||||
theme: state.settings.theme,
|
||||
};
|
||||
};
|
||||
|
||||
const NoteRevisionViewer = connect(mapStateToProps)(NoteRevisionViewerComponent);
|
||||
|
||||
module.exports = NoteRevisionViewer;
|
@@ -6,7 +6,7 @@ const Search = require('lib/models/Search.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { IconButton } = require('./IconButton.min.js');
|
||||
const { urlDecode, escapeHtml, pregQuote, scriptType } = require('lib/string-utils');
|
||||
const { urlDecode, escapeHtml, pregQuote, scriptType, substrWithEllipsis } = require('lib/string-utils');
|
||||
const Toolbar = require('./Toolbar.min.js');
|
||||
const TagList = require('./TagList.min.js');
|
||||
const { connect } = require('react-redux');
|
||||
@@ -36,7 +36,9 @@ const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
|
||||
const { clipboard } = require('electron');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const ModelCache = require('lib/services/ModelCache');
|
||||
const NoteTextViewer = require('./NoteTextViewer.min');
|
||||
const NoteRevisionViewer = require('./NoteRevisionViewer.min');
|
||||
|
||||
require('brace/mode/markdown');
|
||||
// https://ace.c9.io/build/kitchen-sink.html
|
||||
@@ -69,12 +71,14 @@ class NoteTextComponent extends React.Component {
|
||||
editorScrollTop: 0,
|
||||
newNote: null,
|
||||
noteTags: [],
|
||||
showRevisions: false,
|
||||
|
||||
// If the current note was just created, and the title has never been
|
||||
// changed by the user, this variable contains that note ID. Used
|
||||
// to automatically set the title.
|
||||
newAndNoTitleChangeNoteId: null,
|
||||
bodyHtml: '',
|
||||
lastRenderCssFiles: [],
|
||||
lastKeys: [],
|
||||
showLocalSearch: false,
|
||||
localSearch: Object.assign({}, this.localSearchDefaultState),
|
||||
@@ -226,9 +230,10 @@ class NoteTextComponent extends React.Component {
|
||||
if (!this.state.note || !this.state.note.body) return;
|
||||
const resourceIds = await Note.linkedResourceIds(this.state.note.body);
|
||||
if (resourceIds.indexOf(resource.id) >= 0) {
|
||||
this.mdToHtml().clearCache();
|
||||
// this.mdToHtml().clearCache();
|
||||
this.lastSetHtml_ = '';
|
||||
this.updateHtml(this.state.note.body);
|
||||
this.scheduleHtmlUpdate();
|
||||
//this.updateHtml(this.state.note.body);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,6 +270,7 @@ class NoteTextComponent extends React.Component {
|
||||
this.titleField_keyDown = this.titleField_keyDown.bind(this);
|
||||
this.webview_ipcMessage = this.webview_ipcMessage.bind(this);
|
||||
this.webview_domReady = this.webview_domReady.bind(this);
|
||||
this.noteRevisionViewer_onBack = this.noteRevisionViewer_onBack.bind(this);
|
||||
}
|
||||
|
||||
// Note:
|
||||
@@ -498,7 +504,7 @@ class NoteTextComponent extends React.Component {
|
||||
// 2. It resets the undo manager - fixes https://github.com/laurent22/joplin/issues/355
|
||||
// Note: calling undoManager.reset() doesn't work
|
||||
try {
|
||||
this.editor_.editor.getSession().setValue(note ? note.body : '');
|
||||
this.editor_.editor.getSession().setValue(note && note.body? note.body : '');
|
||||
} catch (error) {
|
||||
if (error.message === "Cannot read property 'match' of undefined") {
|
||||
// The internals of Ace Editor throws an exception when creating a new note,
|
||||
@@ -527,7 +533,8 @@ class NoteTextComponent extends React.Component {
|
||||
webviewReady: webviewReady,
|
||||
folder: parentFolder,
|
||||
lastKeys: [],
|
||||
noteTags: noteTags
|
||||
noteTags: noteTags,
|
||||
showRevisions: false,
|
||||
};
|
||||
|
||||
if (!note) {
|
||||
@@ -563,6 +570,8 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
// if (newState.note) await shared.refreshAttachedResources(this, newState.note.body);
|
||||
|
||||
this.updateHtml(newState.note ? newState.note.body : '');
|
||||
}
|
||||
|
||||
@@ -614,6 +623,13 @@ class NoteTextComponent extends React.Component {
|
||||
return shared.refreshNoteMetadata(this, force);
|
||||
}
|
||||
|
||||
async noteRevisionViewer_onBack() {
|
||||
this.setState({ showRevisions: false });
|
||||
|
||||
this.lastSetHtml_ = '';
|
||||
this.scheduleReloadNote(this.props);
|
||||
}
|
||||
|
||||
title_changeText(event) {
|
||||
shared.noteComponent_change(this, 'title', event.target.value);
|
||||
this.setState({ newAndNoTitleChangeNoteId: null });
|
||||
@@ -635,7 +651,7 @@ class NoteTextComponent extends React.Component {
|
||||
const arg0 = args && args.length >= 1 ? args[0] : null;
|
||||
const arg1 = args && args.length >= 2 ? args[1] : null;
|
||||
|
||||
reg.logger().debug('Got ipc-message: ' + msg, args);
|
||||
console.info('Got ipc-message: ' + msg, args);
|
||||
|
||||
if (msg.indexOf('checkboxclick:') === 0) {
|
||||
// Ugly hack because setting the body here will make the scrollbar
|
||||
@@ -644,7 +660,7 @@ class NoteTextComponent extends React.Component {
|
||||
// "afterRender" event has been called.
|
||||
this.restoreScrollTop_ = this.editorScrollTop();
|
||||
|
||||
const newBody = this.mdToHtml_.handleCheckboxClick(msg, this.state.note.body);
|
||||
const newBody = shared.toggleCheckbox(msg, this.state.note.body);
|
||||
this.saveOneProperty('body', newBody);
|
||||
} else if (msg === 'setMarkerCount') {
|
||||
const ls = Object.assign({}, this.state.localSearch);
|
||||
@@ -724,6 +740,7 @@ class NoteTextComponent extends React.Component {
|
||||
// When using the file:// protocol, openExternal doesn't work (does nothing) with URL-encoded paths
|
||||
require('electron').shell.openExternal(urlDecode(msg));
|
||||
} else {
|
||||
console.info('OPEN URL');
|
||||
require('electron').shell.openExternal(msg);
|
||||
}
|
||||
} else if (msg.indexOf('#') === 0) {
|
||||
@@ -814,7 +831,7 @@ class NoteTextComponent extends React.Component {
|
||||
this.editor_.editor.renderer.on('afterRender', this.onAfterEditorRender_);
|
||||
|
||||
const cancelledKeys = [];
|
||||
const letters = ['F', 'T', 'P', 'Q', 'L', ','];
|
||||
const letters = ['F', 'T', 'P', 'Q', 'L', ',', 'G'];
|
||||
for (let i = 0; i < letters.length; i++) {
|
||||
const l = letters[i];
|
||||
cancelledKeys.push('Ctrl+' + l);
|
||||
@@ -891,31 +908,22 @@ class NoteTextComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
updateHtml(body = null, options = null) {
|
||||
async updateHtml(body = null, options = null) {
|
||||
if (!options) options = {};
|
||||
if (!('useCustomCss' in options)) options.useCustomCss = true;
|
||||
|
||||
const mdOptions = {
|
||||
onResourceLoaded: () => {
|
||||
if (this.resourceLoadedTimeoutId_) {
|
||||
clearTimeout(this.resourceLoadedTimeoutId_);
|
||||
this.resourceLoadedTimeoutId_ = null;
|
||||
}
|
||||
|
||||
this.resourceLoadedTimeoutId_ = setTimeout(() => {
|
||||
this.resourceLoadedTimeoutId_ = null;
|
||||
this.updateHtml();
|
||||
this.forceUpdate();
|
||||
}, 100);
|
||||
},
|
||||
postMessageSyntax: 'ipcProxySendToHost',
|
||||
userCss: options.useCustomCss ? this.props.customCss : '',
|
||||
};
|
||||
let bodyToRender = body;
|
||||
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
|
||||
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
let bodyToRender = body;
|
||||
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
|
||||
const mdOptions = {
|
||||
codeTheme: theme.codeThemeCss,
|
||||
postMessageSyntax: 'ipcProxySendToHost',
|
||||
userCss: options.useCustomCss ? this.props.customCss : '',
|
||||
resources: await shared.attachedResources(bodyToRender),
|
||||
};
|
||||
|
||||
let bodyHtml = '';
|
||||
|
||||
const visiblePanes = this.props.visiblePanes || ['editor', 'viewer'];
|
||||
@@ -925,9 +933,12 @@ class NoteTextComponent extends React.Component {
|
||||
bodyToRender = '*' + _('This note has no content. Click on "%s" to toggle the editor and edit the note.', _('Layout')) + '*';
|
||||
}
|
||||
|
||||
bodyHtml = this.mdToHtml().render(bodyToRender, theme, mdOptions);
|
||||
const result = this.mdToHtml().render(bodyToRender, theme, mdOptions);
|
||||
|
||||
this.setState({ bodyHtml: bodyHtml });
|
||||
this.setState({
|
||||
bodyHtml: result.html,
|
||||
lastRenderCssFiles: result.cssFiles,
|
||||
});
|
||||
}
|
||||
|
||||
titleField_keyDown(event) {
|
||||
@@ -1061,7 +1072,7 @@ class NoteTextComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
printTo_(target, options) {
|
||||
async printTo_(target, options) {
|
||||
if (this.props.selectedNoteIds.length !== 1 || !this.webviewRef_.current) {
|
||||
throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
|
||||
}
|
||||
@@ -1072,13 +1083,13 @@ class NoteTextComponent extends React.Component {
|
||||
const previousTheme = Setting.value('theme');
|
||||
Setting.setValue('theme', Setting.THEME_LIGHT);
|
||||
this.lastSetHtml_ = '';
|
||||
this.updateHtml(tempBody, { useCustomCss: false });
|
||||
await this.updateHtml(tempBody, { useCustomCss: false });
|
||||
this.forceUpdate();
|
||||
|
||||
const restoreSettings = () => {
|
||||
const restoreSettings = async () => {
|
||||
Setting.setValue('theme', previousTheme);
|
||||
this.lastSetHtml_ = '';
|
||||
this.updateHtml(previousBody);
|
||||
await this.updateHtml(previousBody);
|
||||
this.forceUpdate();
|
||||
}
|
||||
|
||||
@@ -1100,7 +1111,7 @@ class NoteTextComponent extends React.Component {
|
||||
}, 100);
|
||||
}
|
||||
|
||||
commandSavePdf() {
|
||||
async commandSavePdf() {
|
||||
try {
|
||||
if (!this.state.note) throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
|
||||
|
||||
@@ -1111,15 +1122,15 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
if (!path) return;
|
||||
|
||||
this.printTo_('pdf', { path: path });
|
||||
await this.printTo_('pdf', { path: path });
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
commandPrint() {
|
||||
async commandPrint() {
|
||||
try {
|
||||
this.printTo_('printer');
|
||||
await this.printTo_('printer');
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(error.message);
|
||||
}
|
||||
@@ -1372,9 +1383,16 @@ class NoteTextComponent extends React.Component {
|
||||
const toolbarItems = [];
|
||||
if (note && this.state.folder && ['Search', 'Tag'].includes(this.props.notesParentType)) {
|
||||
toolbarItems.push({
|
||||
title: _('In: %s', this.state.folder.title),
|
||||
title: _('In: %s', substrWithEllipsis(this.state.folder.title, 0, 16)),
|
||||
iconName: 'fa-book',
|
||||
enabled: false,
|
||||
onClick: () => {
|
||||
this.props.dispatch({
|
||||
type: "FOLDER_AND_NOTE_SELECT",
|
||||
folderId: this.state.folder.id,
|
||||
noteId: note.id,
|
||||
});
|
||||
},
|
||||
// enabled: false,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1413,25 +1431,6 @@ class NoteTextComponent extends React.Component {
|
||||
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',
|
||||
@@ -1529,6 +1528,23 @@ class NoteTextComponent extends React.Component {
|
||||
toolbarItems.push(item);
|
||||
}
|
||||
|
||||
|
||||
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,
|
||||
onRevisionLinkClick: () => { this.setState({ showRevisions: true}) },
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
return toolbarItems;
|
||||
}
|
||||
|
||||
@@ -1606,6 +1622,18 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
const innerWidth = rootStyle.width - rootStyle.paddingLeft - rootStyle.paddingRight - borderWidth;
|
||||
|
||||
if (this.state.showRevisions && note && note.id) {
|
||||
rootStyle.paddingRight = rootStyle.paddingLeft;
|
||||
rootStyle.paddingTop = rootStyle.paddingLeft;
|
||||
rootStyle.paddingBottom = rootStyle.paddingLeft;
|
||||
rootStyle.display = 'inline-flex';
|
||||
return (
|
||||
<div style={rootStyle}>
|
||||
<NoteRevisionViewer noteId={note.id} customCss={this.props.customCss} onBack={this.noteRevisionViewer_onBack}/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (this.props.selectedNoteIds.length > 1) {
|
||||
return this.renderMultiNotes(rootStyle);
|
||||
} else if (!note || !!note.encryption_applied) { //|| (note && !this.props.newNote && this.props.noteId && note.id !== this.props.noteId)) { // note.id !== props.noteId is when the note has not been loaded yet, and the previous one is still in the state
|
||||
@@ -1706,12 +1734,14 @@ class NoteTextComponent extends React.Component {
|
||||
viewerStyle.borderLeft = 'none';
|
||||
}
|
||||
|
||||
if (this.state.webviewReady) {
|
||||
if (this.state.webviewReady && this.webviewRef_.current) {
|
||||
let html = this.state.bodyHtml;
|
||||
|
||||
const htmlHasChanged = this.lastSetHtml_ !== html;
|
||||
if (htmlHasChanged) {
|
||||
let options = {codeTheme: theme.codeThemeCss};
|
||||
let options = {
|
||||
cssFiles: this.state.lastRenderCssFiles,
|
||||
};
|
||||
this.webviewRef_.current.wrappedInstance.send('setHtml', html, options);
|
||||
this.lastSetHtml_ = html;
|
||||
}
|
||||
@@ -1803,7 +1833,7 @@ class NoteTextComponent extends React.Component {
|
||||
// Disable warning: "Automatically scrolling cursor into view after
|
||||
// selection change this will be disabled in the next version set
|
||||
// editor.$blockScrolling = Infinity to disable this message"
|
||||
editorProps={{$blockScrolling: true}}
|
||||
editorProps={{$blockScrolling: Infinity}}
|
||||
|
||||
// This is buggy (gets outside the container)
|
||||
highlightActiveLine={false}
|
||||
|
@@ -18,11 +18,11 @@ class NoteTextViewerComponent extends React.Component {
|
||||
}
|
||||
|
||||
webview_domReady(event) {
|
||||
this.props.onDomReady(event);
|
||||
if (this.props.onDomReady) this.props.onDomReady(event);
|
||||
}
|
||||
|
||||
webview_ipcMessage(event) {
|
||||
this.props.onIpcMessage(event);
|
||||
if (this.props.onIpcMessage) this.props.onIpcMessage(event);
|
||||
}
|
||||
|
||||
initWebview() {
|
||||
@@ -40,6 +40,20 @@ class NoteTextViewerComponent extends React.Component {
|
||||
const fn = this.webviewListeners_[n];
|
||||
wv.addEventListener(n, fn);
|
||||
}
|
||||
|
||||
let isAlreadyReady = false;
|
||||
try {
|
||||
isAlreadyReady = !this.webviewRef_.current.isLoading()
|
||||
} catch (error) {
|
||||
// Ignore - it means the view has not started loading, and the DOM ready event has not been emitted yet
|
||||
// Error is "The WebView must be attached to the DOM and the dom-ready event emitted before this method can be called."
|
||||
}
|
||||
|
||||
// Edge-case - the webview was already ready by the time initWebview was
|
||||
// called - so manually call the domReady event to notify caller.
|
||||
if (isAlreadyReady) {
|
||||
this.webview_domReady({});
|
||||
}
|
||||
}
|
||||
|
||||
destroyWebview() {
|
||||
@@ -53,13 +67,21 @@ class NoteTextViewerComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
tryInit() {
|
||||
if (!this.initialized_ && this.webviewRef_.current) {
|
||||
this.initWebview();
|
||||
this.initialized_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.tryInit();
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
this.tryInit();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.destroyWebview();
|
||||
}
|
||||
@@ -73,11 +95,21 @@ class NoteTextViewerComponent extends React.Component {
|
||||
}
|
||||
|
||||
printToPDF(options, callback) {
|
||||
return this.webviewRef_.current.printToPDF(options, callback);
|
||||
// In Electron 4x, printToPDF is broken so need to use this hack:
|
||||
// https://github.com/electron/electron/issues/16171#issuecomment-451090245
|
||||
|
||||
// return this.webviewRef_.current.printToPDF(options, callback);
|
||||
return this.webviewRef_.current.getWebContents().printToPDF(options, callback);
|
||||
}
|
||||
|
||||
print(options = {}) {
|
||||
return this.webviewRef_.current.print(options);
|
||||
// In Electron 4x, print is broken so need to use this hack:
|
||||
// https://github.com/electron/electron/issues/16219#issuecomment-451454948
|
||||
// Note that this is not a perfect workaround since it means the options are ignored
|
||||
// In particular it means that background images and colours won't be printed (printBackground property will be ignored)
|
||||
|
||||
// return this.webviewRef_.current.getWebContents().print({});
|
||||
return this.webviewRef_.current.getWebContents().executeJavaScript("window.print()")
|
||||
}
|
||||
|
||||
openDevTools() {
|
||||
|
@@ -152,7 +152,7 @@ class SideBarComponent extends React.Component {
|
||||
header: {
|
||||
height: itemHeight * 1.8,
|
||||
fontFamily: theme.fontFamily,
|
||||
fontSize: theme.fontSize * 1.3,
|
||||
fontSize: theme.fontSize * 1.16,
|
||||
textDecoration: "none",
|
||||
boxSizing: "border-box",
|
||||
color: theme.color2,
|
||||
@@ -221,7 +221,7 @@ class SideBarComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
} else if (command.name === 'synchronize') {
|
||||
this.sync_click();
|
||||
if (!this.props.syncStarted) this.sync_click();
|
||||
} else {
|
||||
commandProcessed = false;
|
||||
}
|
||||
@@ -509,7 +509,7 @@ class SideBarComponent extends React.Component {
|
||||
|
||||
makeHeader(key, label, iconName, extraProps = {}) {
|
||||
const style = this.style().header;
|
||||
const icon = <i style={{ fontSize: style.fontSize * 1.2, marginRight: 5 }} className={"fa " + iconName} />;
|
||||
const icon = <i style={{ fontSize: style.fontSize, marginRight: 5 }} className={"fa " + iconName} />;
|
||||
|
||||
if (extraProps.toggleblock || extraProps.onClick) {
|
||||
style.cursor = "pointer";
|
||||
@@ -642,9 +642,15 @@ class SideBarComponent extends React.Component {
|
||||
|
||||
synchronizeButton(type) {
|
||||
const style = Object.assign({}, this.style().button, { marginBottom: 5 });
|
||||
const iconName = type === "sync" ? "fa-refresh" : "fa-times";
|
||||
const iconName = "fa-refresh";
|
||||
const label = type === "sync" ? _("Synchronise") : _("Cancel");
|
||||
const icon = <i style={{ fontSize: style.fontSize, marginRight: 5 }} className={"fa " + iconName} />;
|
||||
let iconStyle = { fontSize: style.fontSize, marginRight: 5 };
|
||||
|
||||
if(type !== 'sync'){
|
||||
iconStyle.animation = 'icon-infinite-rotation 1s linear infinite';
|
||||
}
|
||||
|
||||
const icon = <i style={iconStyle} className={"fa " + iconName} />;
|
||||
return (
|
||||
<a
|
||||
className="synchronize-button"
|
||||
@@ -738,8 +744,8 @@ class SideBarComponent extends React.Component {
|
||||
{items}
|
||||
</div>
|
||||
<div style={{flex:0}}>
|
||||
{syncReportComp}
|
||||
{syncButton}
|
||||
{syncReportComp}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@@ -1,4 +1,5 @@
|
||||
const React = require("react");
|
||||
const electron = require('electron');
|
||||
|
||||
class VerticalResizer extends React.PureComponent {
|
||||
|
||||
@@ -31,11 +32,13 @@ class VerticalResizer extends React.PureComponent {
|
||||
document.addEventListener('dragover', this.document_onDragOver)
|
||||
|
||||
event.dataTransfer.dropEffect= 'none';
|
||||
|
||||
const cursor = electron.screen.getCursorScreenPoint();
|
||||
|
||||
this.setState({
|
||||
drag: {
|
||||
startX: event.nativeEvent.screenX,
|
||||
lastX: event.nativeEvent.screenX,
|
||||
startX: cursor.x,
|
||||
lastX: cursor.x,
|
||||
}
|
||||
});
|
||||
|
||||
@@ -46,9 +49,12 @@ class VerticalResizer extends React.PureComponent {
|
||||
// If we got a drag event with no buttons pressed, it's the last drag event
|
||||
// that we should ignore, because it's sometimes use to put the dragged element
|
||||
// back to its original position (if there was no valid drop target), which we don't want.
|
||||
if (!event.nativeEvent.buttons) return;
|
||||
// Also if clientX, screenX, etc. are 0, it's also the last event and we want to ignore these buggy values.
|
||||
// const e = event.nativeEvent;
|
||||
// if (!e.buttons || (!e.clientX && !e.clientY && !e.screenX && !e.screenY)) return;
|
||||
|
||||
const newX = event.nativeEvent.screenX;
|
||||
const cursor = electron.screen.getCursorScreenPoint();
|
||||
const newX = cursor.x;
|
||||
const delta = newX - this.state.drag.lastX;
|
||||
if (!delta) return;
|
||||
|
||||
|
@@ -28,14 +28,11 @@
|
||||
ul ul, ul ol, ol ul, ol ol {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.katex { font-size: 1.3em; } /* This controls the global Katex font size*/
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body id="body">
|
||||
<div id="hlScriptContainer"></div>
|
||||
<div id="mermaidScriptContainer"></div>
|
||||
<div id="styleContainer"></div>
|
||||
<div id="markScriptContainer"></div>
|
||||
<div id="content" ondragstart="return false;" ondrop="return false;"></div>
|
||||
<script src="./lib.js"></script>
|
||||
@@ -59,62 +56,18 @@
|
||||
}
|
||||
});
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Handle dynamically loading HLJS when a code element is present
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
let hljsScriptAdded = false;
|
||||
let hljsLoaded = false;
|
||||
|
||||
function loadHljs(options) {
|
||||
hljsScriptAdded = true;
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.onload = function () {
|
||||
hljsLoaded = true;
|
||||
applyHljs();
|
||||
};
|
||||
script.src = 'highlight/highlight.pack.js';
|
||||
document.getElementById('hlScriptContainer').appendChild(script);
|
||||
|
||||
const link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
// https://ace.c9.io/build/kitchen-sink.html
|
||||
// https://highlightjs.org/static/demo/
|
||||
link.href = 'highlight/styles/' + options.codeTheme;
|
||||
document.getElementById('hlScriptContainer').appendChild(link);
|
||||
}
|
||||
|
||||
function loadAndApplyHljs(options) {
|
||||
var codeElements = document.getElementsByClassName('code');
|
||||
if (!codeElements.length) return;
|
||||
|
||||
if (!hljsScriptAdded) {
|
||||
this.loadHljs(options);
|
||||
return;
|
||||
}
|
||||
|
||||
// If HLJS is not loaded yet, no need to do anything. When it loads
|
||||
// it will automatically apply the style to all the code elements.
|
||||
if (hljsLoaded) applyHljs(codeElements);
|
||||
}
|
||||
|
||||
function applyHljs(codeElements) {
|
||||
if (typeof codeElements === 'undefined') codeElements = document.getElementsByClassName('code');
|
||||
|
||||
for (var i = 0; i < codeElements.length; i++) {
|
||||
try {
|
||||
hljs.highlightBlock(codeElements[i]);
|
||||
} catch (error) {
|
||||
console.warn('Cannot highlight code', error);
|
||||
}
|
||||
const loadedCssFiles_ = {};
|
||||
function loadCssFiles(cssFiles) {
|
||||
for (let i = 0; i < cssFiles.length; i++) {
|
||||
const f = cssFiles[i];
|
||||
if (loadedCssFiles_[f]) continue;
|
||||
const link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.href = f;
|
||||
document.getElementById('styleContainer').appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// / Handle dynamically loading HLJS when a code element is present
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
// Note: the scroll position source of truth is "percentScroll_". This is easier to manage than scrollTop because
|
||||
// the scrollTop value depends on the images being loaded or not. For example, if the scrollTop is saved while
|
||||
// images are being displayed then restored while images are being reloaded, the new scrollTop might be changed
|
||||
@@ -142,23 +95,6 @@
|
||||
setPercentScroll(percentScroll_);
|
||||
}
|
||||
|
||||
const loadedScripts_ = {};
|
||||
|
||||
function lazyLoadScript(url, containerId, onReady) {
|
||||
if (loadedScripts_[url]) {
|
||||
onReady();
|
||||
return;
|
||||
}
|
||||
|
||||
console.info('Loading script: ' + url);
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.onload = onReady;
|
||||
script.src = url;
|
||||
document.getElementById(containerId).appendChild(script);
|
||||
loadedScripts_[url] = url;
|
||||
}
|
||||
|
||||
ipc.setHtml = (event) => {
|
||||
const html = event.html;
|
||||
|
||||
@@ -168,24 +104,8 @@
|
||||
|
||||
contentElement.innerHTML = html;
|
||||
|
||||
loadAndApplyHljs(event.options);
|
||||
|
||||
// Remove the bullet from "ul" for checkbox lists and extra padding
|
||||
// const checkboxes = document.getElementsByClassName('checkbox');
|
||||
// for (let i = 0; i < checkboxes.length; i++) {
|
||||
// const cb = checkboxes[i];
|
||||
// const ul = cb.parentElement.parentElement;
|
||||
// if (!ul) {
|
||||
// console.warn('Unexpected layout for checkbox');
|
||||
// continue;
|
||||
// }
|
||||
// ul.style.listStyleType = 'none';
|
||||
// ul.style.paddingLeft = 0;
|
||||
// }
|
||||
|
||||
let previousContentHeight = contentElement.scrollHeight;
|
||||
let startTime = Date.now();
|
||||
ignoreNextScrollEvent = true;
|
||||
restorePercentScroll();
|
||||
|
||||
if (!checkScrollIID_) {
|
||||
@@ -193,7 +113,6 @@
|
||||
const h = contentElement.scrollHeight;
|
||||
if (h !== previousContentHeight) {
|
||||
previousContentHeight = h;
|
||||
ignoreNextScrollEvent = true;
|
||||
restorePercentScroll();
|
||||
}
|
||||
if (Date.now() - startTime >= 1000) {
|
||||
@@ -203,11 +122,7 @@
|
||||
}, 1);
|
||||
}
|
||||
|
||||
if (document.getElementsByClassName('mermaid').length) {
|
||||
lazyLoadScript('../../node_modules/mermaid/dist/mermaid.min.js', 'mermaidScriptContainer', () => {
|
||||
mermaid.init();
|
||||
});
|
||||
}
|
||||
loadCssFiles(event.options.cssFiles);
|
||||
}
|
||||
|
||||
let ignoreNextScrollEvent = false;
|
||||
@@ -371,49 +286,8 @@
|
||||
}
|
||||
});
|
||||
|
||||
function handleInternalLink(event, anchorNode) {
|
||||
const href = anchorNode.getAttribute('href');
|
||||
if (href.indexOf('#') === 0) {
|
||||
event.preventDefault();
|
||||
location.hash = href;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getParentAnchorElement(element) {
|
||||
let counter = 0;
|
||||
while (true) {
|
||||
|
||||
if (counter++ >= 10000) {
|
||||
console.warn('been looping for too long - exiting')
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!element) return null;
|
||||
if (element.nodeName === 'A') return element;
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
const anchor = getParentAnchorElement(event.target);
|
||||
if (!anchor) return;
|
||||
|
||||
// Prevent URLs added via <a> tags from being opened within the application itself
|
||||
// otherwise it would open the whole website within the WebView.
|
||||
if (!anchor.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, anchor)) return;
|
||||
|
||||
event.preventDefault();
|
||||
ipcProxySendToHost(anchor.getAttribute('href'));
|
||||
return;
|
||||
}
|
||||
|
||||
// If this is an internal link, jump to the anchor directly
|
||||
if (anchor.hasAttribute('data-from-md')) {
|
||||
if (handleInternalLink(event, anchor)) return;
|
||||
}
|
||||
webviewLib.initialize({
|
||||
postMessage: ipcProxySendToHost,
|
||||
});
|
||||
|
||||
// Disable drag and drop otherwise it's possible to drop a URL
|
||||
|
1
ElectronClient/app/locales/ar.json
Normal file
1
ElectronClient/app/locales/ar.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
1
ElectronClient/app/locales/en_US.json
Normal file
1
ElectronClient/app/locales/en_US.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
@@ -1,9 +1,11 @@
|
||||
var locales = {};
|
||||
locales['en_GB'] = require('./en_GB.json');
|
||||
locales['ar'] = require('./ar.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');
|
||||
locales['en_US'] = require('./en_US.json');
|
||||
locales['es_ES'] = require('./es_ES.json');
|
||||
locales['eu'] = require('./eu.json');
|
||||
locales['fr_FR'] = require('./fr_FR.json');
|
||||
|
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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user