1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-30 20:39:46 +02:00

Compare commits

...

129 Commits

Author SHA1 Message Date
Helmut K. C. Tessarek
0a0afd7245 CLI v1.0.118 2018-11-20 15:38:32 -05:00
Laurent Cozic
de01606bff Update website 2018-11-20 19:09:47 +00:00
Laurent Cozic
046474b484 Android release v1.0.176 2018-11-20 00:49:27 +00:00
Laurent Cozic
277b2b9298 Electron release v1.0.116 2018-11-20 00:44:25 +00:00
Laurent Cozic
0b7296ae95 Update translations 2018-11-20 00:43:35 +00:00
Laurent Cozic
ce87dd55f0 Merge branch 'master' of github.com:laurent22/joplin 2018-11-20 00:42:33 +00:00
Laurent Cozic
07b724d65b All: Fixes #992: Allow non-ASCII chars when exporting MD and handle duplicate filenames 2018-11-20 00:42:21 +00:00
Caleb John
bc1984298f Add dark theme to note properties dialog (#991) 2018-11-19 22:48:10 +00:00
Ein Verne
9ed0bdfed2 Add more Chinese translation (#986) 2018-11-19 22:44:20 +00:00
Caleb John
57628e8986 Add missing syntax file for dark theme (#985) 2018-11-19 22:43:56 +00:00
Joybin Chen
fc8f53fd0e ReactNativeClient: A better NAV_BACK logic to change folder or tag. (#984) 2018-11-19 22:43:21 +00:00
Renato Rosa
efd7cc6a0c update-locale-pt_BR (#981)
Update missing strings and fixed flagged ones.
2018-11-19 22:40:21 +00:00
Abijeet Patro
7bfc3e1256 Fixes #979 (#980)
* Adds functionality to display tags under the open note.

Towards #469

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Ensured tags in the dialog box and under the note appear in the same order.

Few formatting tweaks.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes issues raised during code review.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Refactored code to always display tags in ascending order.

This changes the order of the tags in the dialog box and below the tag title.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added the new tag height and margin bottom to the bottomRowHeight

Fixes #979

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-11-17 11:21:57 +00:00
FleischKarussel
7f6ca1e527 fixed typo in Aktualsierungsdatum to Aktualisierungsdatum (#974) 2018-11-17 11:17:47 +00:00
Laurent Cozic
71d9b1d441 Electron: Fixes #933: Handle internal links from HTML and from MD 2018-11-16 18:39:11 +00:00
Laurent Cozic
a3d64d0a90 Update website 2018-11-16 16:53:37 +00:00
Laurent Cozic
e7ec2ce6cf Electron release v1.0.115 2018-11-13 23:18:08 +00:00
Laurent Cozic
61dbdd5f7c Update translations 2018-11-13 23:17:56 +00:00
Laurent Cozic
e6888c451d Fixing Katex version number 2018-11-13 22:42:06 +00:00
Laurent Cozic
899219abd2 Merge branch 'master' of github.com:laurent22/joplin 2018-11-13 22:38:32 +00:00
Joybin Chen
7a4c7a13eb Fix image fetching error. For url like http://example.com/favicon.ico?ver=1.0 will be changed to http://example.com/favicon.ico?ver=1.0?ver=1.0 (#970) 2018-11-13 22:37:39 +00:00
Laurent Cozic
e8797f49b9 Mobile: Display number of resources being fetched in side bar 2018-11-13 22:27:58 +00:00
Laurent Cozic
e17f3051f0 Display number of resources being fetched in side bar 2018-11-13 22:25:23 +00:00
Laurent Cozic
06091933e1 All: Moved resource app-specific state to different table 2018-11-13 00:45:08 +00:00
Laurent Cozic
b30c65dd89 Update CONTRIBUTING.md 2018-11-11 20:23:55 +00:00
Ben Fisher
0eb18d206d Patch to implement feature, exporting notes to JSON (#912, issues/912). (#927)
* Patch to implement feature, exporting notes to JSON (#912, issues/912).

* Revising based on feedback

* Directly calling JSON.stringify on the item
2018-11-11 20:17:43 +00:00
Laurent Cozic
3a9948e528 Build doc 2018-11-08 01:21:18 +00:00
Laurent Cozic
2bcddd38b2 Update API doc 2018-11-08 01:17:46 +00:00
Laurent Cozic
5ff8808f69 API: Allow setting the ID of newly created notes. 2018-11-08 01:14:13 +00:00
Laurent Cozic
28b1d8a324 Desktop: Fixes #953 (maybe): Improved the way internal links to notes are loaded to make it more reliable 2018-11-08 00:58:06 +00:00
Laurent Cozic
5c1dd79435 All: Fixes #952: Upgraded Katex lib to fix bug 2018-11-07 23:44:59 +00:00
Laurent Cozic
706d59a6cc Doc 2018-11-07 23:43:48 +00:00
Ben Fisher
251f1bba55 Show note title in pdf export (#890) (#937)
* Show note title in pdf export (#890)

An example of a possible approach, to temporarily change the html in the webview to show the note title. Works, but there may be a more elegant fix.

* Show title in pdf export

Revising based on feedback
Also, a couple changes to tests so that they pass in Windows.
2018-11-07 23:35:14 +00:00
Caleb John
cb1fd85ca4 Add support for custom css across all notes (#925) 2018-11-07 22:52:31 +00:00
Laurent Cozic
11ddc55911 Fixed theme handling for new tag feature 2018-11-07 22:47:34 +00:00
Caleb John
ee106105d8 Joplin desktop Dark Mode (#921)
* Added support for the dark mode on desktop

* Add dark highlighting to the code tags

* Update app/theme.js to be more clear and more easily support additional themes
Update more files to conform to theming
2018-11-07 22:37:13 +00:00
Laurent Cozic
19f5a144e5 Added comment 2018-11-07 22:22:26 +00:00
Abijeet Patro
18717bac79 Adds functionality to display tags under the open note. (#893)
* Adds functionality to display tags under the open note.

Towards #469

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Ensured tags in the dialog box and under the note appear in the same order.

Few formatting tweaks.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes issues raised during code review.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Refactored code to always display tags in ascending order.

This changes the order of the tags in the dialog box and below the tag title.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-11-07 22:16:05 +00:00
Laurent Cozic
28fa83c406 Merge branch 'master' of github.com:laurent22/joplin 2018-11-02 19:56:18 +00:00
Laurent Cozic
258e514a91 Marked password cache as secure, and only display stars if the value is non-empty 2018-11-02 19:22:49 +00:00
Ben Fisher
f92546d6eb Adding some tips for building and debugging Joplin on Windows (#938) 2018-11-02 01:06:48 +00:00
sensor-freak
693456164b Minor fix for translation of 'Location' (#936) 2018-11-02 00:53:05 +00:00
Helmut K. C. Tessarek
7cd3e6b1f7 mobile: add version info (#930) 2018-11-02 00:43:42 +00:00
FoxMaSk
764e63d869 new French Translations (#923) 2018-11-02 00:24:28 +00:00
Laurent Cozic
2c6f47f277 Update README.md
Removed Hacktoberfest news
2018-11-01 17:45:05 +00:00
Laurent Cozic
e41896d6f3 All: Resolves #918: Skip properties that are on sync target but not handled by local client 2018-10-31 00:35:57 +00:00
Laurent Cozic
990591cc80 Minor improvments 2018-10-30 00:17:50 +00:00
Laurent Cozic
7b85c33213 CLI v1.0.117 2018-10-29 23:24:19 +00:00
Laurent Cozic
4b4d0e8b25 Update website 2018-10-24 21:14:38 +01:00
Laurent Cozic
4fb6af3c62 Android release v1.0.175 2018-10-24 19:59:37 +01:00
Laurent Cozic
d7ffe7e294 Electron release v1.0.114 2018-10-24 19:52:07 +01:00
Laurent Cozic
3ff139d445 Merge branch 'master' of github.com:laurent22/joplin 2018-10-24 19:51:16 +01:00
Laurent Cozic
40443e0134 Android v153 2018-10-24 19:50:26 +01:00
Laurent Cozic
1f927c1285 iOS v26 2018-10-24 19:48:09 +01:00
Andros Fenollosa
5e82e62335 Linux script install: implement previous updates (#905)
Avoid an erroneous update and prevent installation icon only on gnome.
2018-10-24 19:17:18 +01:00
Yannis Mitsos
de954827df Support FreeBSD in terminal (#896) 2018-10-24 19:16:15 +01:00
Laurent Cozic
2cb24bf198 Mobile: Fixes #902: Don't change existing note when sharing with mobile app 2018-10-24 19:10:05 +01:00
Laurent Cozic
739a6a4a9c Documentation 2018-10-24 18:47:04 +01:00
Laurent Cozic
dfcf1193dc Electron: Handle internal anchors 2018-10-17 08:01:18 +01:00
Laurent Cozic
c72f92e22f Additional info 2018-10-15 18:40:11 +01:00
Laurent Cozic
f6d01ce7e1 Android release v1.0.174 2018-10-15 00:01:36 +01:00
Laurent Cozic
fed9700587 Merge branch 'master' of github.com:laurent22/joplin 2018-10-15 00:00:13 +01:00
Laurent Cozic
12a3a9a89e android release 2018-10-14 23:59:42 +01:00
Laurent Cozic
590c62c371 Merge branch 'fixing_android_build' 2018-10-14 23:56:42 +01:00
Laurent Cozic
df41f64b3c Revert "trying to fix android build"
This reverts commit 621d0260f4.
2018-10-14 21:47:12 +01:00
Laurent Cozic
1849355245 Android: Tryinc to fix release builkd 2018-10-14 21:42:34 +01:00
Laurent Cozic
fa1b471ea4 Android: Tryinc to fix release builkd 2018-10-14 21:41:29 +01:00
Laurent Cozic
0a67f8c947 Revert "Android: Updated project to build on macOS"
This reverts commit b547f9aa13.
2018-10-14 20:44:05 +01:00
Laurent Cozic
621d0260f4 trying to fix android build 2018-10-14 19:57:30 +01:00
Laurent Cozic
f93fca7c5b Revert "Android: Updated project to build on macOS"
This reverts commit b547f9aa13.
2018-10-13 11:35:21 +01:00
Laurent Cozic
f4d830c2ef Android release v1.0.151 2018-10-13 11:09:03 +01:00
Laurent Cozic
1aa2844efa Android release v1.0.148 2018-10-13 10:39:55 +01:00
Laurent Cozic
f22b2adaad Mobile: Improved camera attachment 2018-10-13 10:32:44 +01:00
Laurent Cozic
b547f9aa13 Android: Updated project to build on macOS 2018-10-13 00:30:41 +01:00
Laurent Cozic
e4166e9da7 Electron: Fixes #312 (maybe): Removed power saving feature, which wasn\'t doing anything and added a possible fix to the UI freezing issue on Linux 2018-10-12 23:44:00 +01:00
Laurent Cozic
1634fdb421 Merge branch 'master' of github.com:laurent22/joplin 2018-10-12 23:26:11 +01:00
Laurent Cozic
7f51035f91 Mobile: Reload note when resource got downloaded. Also fixed Android build script to make it work in macOS. 2018-10-12 23:25:11 +01:00
ebayer
70e71cbc2a Mobile: Fixes #856: Add option to open source url (#872)
* Mobile: Fixes #856: Add option to open source url

* Mobile: Fixes #856: Change menu wording for opening source url
2018-10-12 19:30:00 +01:00
Laurent Cozic
ffd03bf34c Merge branch 'master' of github.com:laurent22/joplin 2018-10-11 17:53:40 +01:00
Christian Baer
f59a3dee78 Fixed some more inconsistencies in german language file. (#855)
* Fixed some typos and inconsistencies in the german language file and added missing translations.

* Fixed some more inconsistencies in german language file.
2018-10-11 17:21:12 +01:00
Timothy Cyrus
3ba3037242 Update README.md (#874) 2018-10-11 17:20:42 +01:00
Helmut K. C. Tessarek
dbb269fef6 add support for webp images (#858)
fixes #848
2018-10-11 17:18:33 +01:00
Laurent Cozic
e209189faa All: Added resource test units 2018-10-11 17:18:24 +01:00
Laurent Cozic
2d7065cde2 Android release v1.0.143 2018-10-10 20:36:42 +01:00
Laurent Cozic
59f5972c93 Electron release v1.0.113 2018-10-10 20:32:45 +01:00
Laurent Cozic
8bac5275c3 All: Fixed fetch logic - mark resource as fetched by default, unless it comes from sync 2018-10-10 18:53:09 +01:00
Helmut K. C. Tessarek
58d748e235 fix permissions for shell scripts (add executable flag) (#866) 2018-10-09 22:58:18 +01:00
Laurent Cozic
e69ac3e62a Android release v1.0.142 2018-10-09 22:05:29 +01:00
Laurent Cozic
7fc8ac4c0f Electron release v1.0.112 2018-10-09 22:02:47 +01:00
Laurent Cozic
069dce69cd Mobile: Added support for ResourceFetcher service 2018-10-09 22:01:50 +01:00
Laurent Cozic
3bdf621026 Api: Document tags parameter 2018-10-08 19:38:27 +01:00
Laurent Cozic
2f62897fb6 All: Improved resource side loading 2018-10-08 19:11:53 +01:00
Laurent Cozic
dbdd602f50 All: Created ResourceFetcher class to handle resource downloads 2018-10-08 07:36:45 +01:00
Laurent Cozic
d66fa87b2b All: Allow excluding certain keys during sync 2018-10-07 20:18:43 +01:00
Laurent Cozic
124a959c8d All: Simplifying serialisation of base items 2018-10-07 20:11:33 +01:00
Laurent Cozic
127dce1cd6 Fixed typo 2018-10-07 19:28:19 +01:00
Laurent Cozic
44986a35a4 Android: Fix crash when attaching certain files 2018-10-07 18:55:49 +01:00
Laurent Cozic
ea516301fd Udpated German translation 2018-10-05 19:53:54 +01:00
Christian Baer
90b684457a Fixed some typos and inconsistencies in the german language file and added missing translations. (#854) 2018-10-05 19:53:13 +01:00
Laurent Cozic
8517e2aa42 Mobile: Fixes #840: Images were not being displayed right after being attached in view mode 2018-10-05 19:49:36 +01:00
Laurent Cozic
b880be8b7c All: Fixes #853: Replace characters to equivalent US-ASCII ones when exporting files 2018-10-05 17:53:55 +01:00
Laurent Cozic
57fd1a7588 Electron: Prevent URLs added via A tag from being opened inside app 2018-10-05 18:21:23 +00:00
Laurent Cozic
5ed458f634 Electron: Fixed potential crash that can happen if editor is not ready 2018-10-05 18:19:47 +00:00
Laurent Cozic
ac12143d00 All: Fixes #671: Make string translatable 2018-10-05 18:17:49 +00:00
Helmut K. C. Tessarek
b6c36d1961 fix file permissions (#851) 2018-10-04 22:32:19 +01:00
FoxMaSk
3c2de70baa add shared folder (#850)
shared 📁 is needed, so the encryption menu will be translated
2018-10-04 22:30:48 +01:00
Laurent Cozic
f6c5620682 Electron: Resolves #751: Allow switching between todo and note when multiple notes are selected 2018-10-04 18:34:30 +01:00
Laurent Cozic
79b6f64bd0 Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 18:01:23 +01:00
Laurent Cozic
ed89f55bff Electron: Fixes #847: Prevent view from scrolling to top when clicking checkbox and editor not visible 2018-10-04 17:56:39 +01:00
Laurent Cozic
8841a92142 Update README.md 2018-10-04 09:10:46 +01:00
Laurent Cozic
0bd19c97eb Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 08:53:11 +01:00
Laurent Cozic
2fd026d107 Mentioned Hacktoberfest 🎃 in Readme 2018-10-04 08:51:48 +01:00
Laurent Cozic
5e7eb37ca7 Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 08:18:19 +01:00
Laurent Cozic
6b10d5d821 Api: Fixes #843: Fixed regression that was preventing resource metadata from being downloaded 2018-10-04 08:17:53 +01:00
Laurent Cozic
0f4dbfbcbf Merge pull request #841 from shorty2380/patch-1
Joplin_install_and_update.sh
2018-10-04 08:10:51 +01:00
Laurent Cozic
99493174ec API: Fixed handling of PUT method and log errors to file 2018-10-04 08:05:22 +01:00
Patrick Petermann
333253fd4f Joplin_install_and_update.sh
The script was original written for “Ubuntu – Gnome” only. I change it a little bit to support more distributions and desktop enviroments.

This script could be used to install and update Joplin at several Linux distributions. I could test this script with “Fedora 28 – Cinnamon” and “Mint LMDE 3”.   There are a lot of requests how to install / start Joplin at Linux in the FAQ’s. Hopefully this could help the people
2018-10-03 20:48:14 +02:00
Laurent Cozic
01470e8d3b Android release v1.0.141 2018-10-03 08:30:19 +01:00
Laurent Cozic
bda2fe6717 Merge branch 'master' of github.com:laurent22/joplin 2018-10-03 08:19:15 +01:00
Laurent Cozic
d1f4c5be18 Disable non-working ShareExtension on iOS 2018-10-03 08:17:37 +01:00
Laurent Cozic
377adea51d Android release v1.0.140 2018-10-02 18:19:27 +01:00
Laurent Cozic
cda3d20834 Android release v1.0.138 2018-10-02 18:10:37 +01:00
Laurent Cozic
d11870b1eb Trying to get RN 0.57.1 to work 2018-10-02 19:02:38 +00:00
Laurent Cozic
53bda3eea7 Trying RN 0.57.1 upgrade 2018-10-02 18:57:31 +00:00
Laurent Cozic
30165e8d6a Electron: Fixes #798: Enable Select All shortcut in macOS 2018-10-02 17:45:39 +01:00
Laurent Cozic
2202eb6570 Merge branch 'master' of github.com:laurent22/joplin 2018-10-01 20:55:52 +01:00
Laurent Cozic
720927f488 All: Fixes #832: Enex import: Don't add extra line breaks at the beginning of list item when it contains a block element 2018-10-01 20:55:24 +01:00
Helmut K. C. Tessarek
2858c0fce0 CLI v1.0.116 2018-09-30 18:28:54 -04:00
Laurent Cozic
36c3521f40 Update website 2018-09-30 21:15:21 +01:00
196 changed files with 6283 additions and 2257 deletions

0
.gitignore vendored Executable file → Normal file
View File

View File

@@ -58,6 +58,8 @@ If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C+
If `yarn dist` fails, it may need administrative rights.
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
# Building the Mobile application
First you need to setup React Native to build projects with native code. For this, follow the instructions on the [Get Started](https://facebook.github.io/react-native/docs/getting-started.html) tutorial, in the "Building Projects with Native Code" tab.

View File

@@ -18,9 +18,11 @@ If you want to add a new feature, consider asking about it before implementing i
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
Pull requests that automatically change many files tend to be rejected (for example changes that automatically update the code styling, or to add new lines to many files, or to automatically convert images to a different format) so if you have such a pull request in mind, please discuss it first in the forum.
# Coding style
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
- **Please use tabs, NOT spaces.**
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.

View File

@@ -21,7 +21,6 @@ const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/loc
const os = require('os');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const EventEmitter = require('events');
const Cache = require('lib/Cache');
class Application extends BaseApplication {

View File

@@ -69,7 +69,8 @@ class Command extends BaseCommand {
lines.push(' }');
lines.push('}');
lines.push('```');
lines.push('');
lines.push('# Authorisation')
lines.push('');
lines.push('To prevent unauthorised applications from accessing the API, the calls must be authentified. To do so, you must provide a token as a query parameter for each API call. You can get this token from the Joplin desktop application, on the Web Clipper Options screen.');
@@ -79,6 +80,7 @@ class Command extends BaseCommand {
lines.push('\tcurl http://localhost:41184/notes?token=ABCD123ABCD123ABCD123ABCD123ABCD123');
lines.push('');
lines.push('In the documentation below, the token will not be specified every time however you will need to include it.');
lines.push('');
lines.push('# Using the API');
lines.push('');
@@ -152,6 +154,11 @@ class Command extends BaseCommand {
type: Database.enumId('fieldType', 'text'),
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
});
tableFields.push({
name: 'tags',
type: Database.enumId('fieldType', 'text'),
description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
});
}
lines.push('# ' + toTitleCase(tableName));
@@ -248,6 +255,12 @@ class Command extends BaseCommand {
lines.push('');
lines.push(' curl --data \'{ "title": "Image test", "body": "Here is Joplin icon:", "image_data_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="}\' http://127.0.0.1:41184/notes');
lines.push('');
lines.push('### Creating a note with a specific ID');
lines.push('');
lines.push('When a new note is created, it is automatically assigned a new unique ID so **normally you do not need to set the ID**. However, if for some reason you want to set it, you can supply it as the `id` property. It needs to be a 32 characters long hexadecimal string. **Make sure it is unique**, for example by generating it using whatever GUID function is available in your programming language.');
lines.push('');
lines.push(' curl --data \'{ "id": "00a87474082744c1a8515da6aa5792d2", "title": "My note with custom ID"}\' http://127.0.0.1:41184/notes');
lines.push('');
}
lines.push('## PUT /' + tableName + '/:id');

View File

@@ -26,7 +26,7 @@ class Command extends BaseCommand {
const md = Setting.settingMetadata(name);
let value = Setting.value(name);
if (typeof value === 'object' || Array.isArray(value)) value = JSON.stringify(value);
if (md.secure) value = '********';
if (md.secure && value) value = '********';
if (Setting.isEnum(name)) {
return _('%s = %s (%s)', name, value, Setting.enumOptionsDoc(name));

View File

@@ -4,6 +4,7 @@ const { _ } = require('lib/locale.js');
const { OneDriveApiNodeUtils } = require('./onedrive-api-node-utils.js');
const Setting = require('lib/models/Setting.js');
const BaseItem = require('lib/models/BaseItem.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const { Synchronizer } = require('lib/synchronizer.js');
const { reg } = require('lib/registry.js');
const { cliUtils } = require('./cli-utils.js');
@@ -191,6 +192,15 @@ class Command extends BaseCommand {
}
}
// When using the tool in command line mode, the ResourceFetcher service is
// not going to be running in the background, so the resources need to be
// explicitely downloaded below.
if (!app().hasGui()) {
this.stdout(_('Downloading resources...'));
await ResourceFetcher.instance().fetchAll();
await ResourceFetcher.instance().waitForAllFinished();
}
await app().refreshCurrentFolder();
} catch (error) {
cleanUp();

View File

@@ -460,6 +460,9 @@ msgstr "No es pot inicialitzar el sincronitzador."
msgid "Starting synchronisation..."
msgstr "Està començant la sincronització..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "S'està cancel·lant... Espereu."
@@ -633,6 +636,10 @@ msgstr "Retalla"
msgid "Paste"
msgstr "Enganxa"
#, fuzzy
msgid "Select all"
msgstr "Seleccioneu una data"
msgid "Bold"
msgstr ""
@@ -948,6 +955,14 @@ msgstr "Copia"
msgid "Switch between note and to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to note type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
msgid "Copy Markdown link"
msgstr "Copia l'enllaç Markdown"
@@ -972,6 +987,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Obre..."
@@ -988,6 +1006,9 @@ msgstr "Copia el camí al porta-retalls"
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Missatge o enllaç no suportat: %s"
@@ -1025,9 +1046,6 @@ msgstr "Estableix una alarma"
msgid "In: %s"
msgstr "A: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1105,6 +1123,14 @@ msgstr "Sincronitza"
msgid "Notebooks"
msgstr "Blocs de notes"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
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ó"
@@ -1149,6 +1175,9 @@ msgstr ""
"No es pot actualitzar el testimoni: manquen les dades d'autenticació. Si "
"comenceu altre cop la sincronització, potser es corregeixi el problema."
msgid "Untitled"
msgstr "Sense títol"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1196,10 +1225,6 @@ msgstr "Elements remots suprimits: %d."
msgid "Fetched items: %d/%d."
msgstr "Elements obtinguts: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Estat: %s"
msgid "Cancelling..."
msgstr "S'està cancel·lant..."
@@ -1246,9 +1271,6 @@ msgstr "data d'actualització"
msgid "created date"
msgstr "data de creació"
msgid "Untitled"
msgstr "Sense títol"
msgid "This note does not have geolocation information."
msgstr "Aquesta nota no té informació de geolocalització."
@@ -1311,6 +1333,12 @@ msgstr "Mostra la icona a la safata"
msgid "Note: Does not work in all desktop environments."
msgstr "Nota: no funciona en tots els entorns d'escriptori."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1439,6 +1467,10 @@ msgstr "Directori d'exportació del Joplin"
msgid "Evernote Export File"
msgstr "Fitxer d'exportació de l'Evernote"
#, fuzzy
msgid "Json Export Directory"
msgstr "Directori d'exportació del Joplin"
msgid "Directory"
msgstr "Directori"
@@ -1513,6 +1545,12 @@ msgstr "Alarmes programades"
msgid "On %s: %s"
msgstr "A les %s.%s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Ara mateix no hi ha cap nota. Creeu-ne una fent clic en el botó (+)."
@@ -1541,6 +1579,10 @@ msgstr "Voleu moure %d notes al bloc de notes «%s»?"
msgid "Press to set the decryption password."
msgstr "Premeu per a establir la contrasenya de desxifratge."
#, fuzzy
msgid "Clear alarm"
msgstr "Estableix una alarma"
msgid "Save alarm"
msgstr "Desa l'alarma"
@@ -1553,8 +1595,34 @@ msgstr "Confirmació"
msgid "Cancel synchronisation"
msgstr "Cancel·la la sincronització"
#, fuzzy
msgid "Checking... Please wait."
msgstr "S'està cancel·lant... Espereu."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Comprova la configuració de la sincronització"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "L'aplicació s'ha autoritzat correctament."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Elements obtinguts: %d/%d."
msgid "New tags:"
@@ -1668,6 +1736,9 @@ msgstr "Mostra les metadades"
msgid "View on map"
msgstr "Mostra-ho al mapa"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Suprimeix el bloc de notes"
@@ -1691,5 +1762,8 @@ msgstr ""
msgid "Welcome"
msgstr "Benvingut"
#~ msgid "State: %s."
#~ msgstr "Estat: %s"
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Ja existeix un bloc de notes amb aquest títol: «%s»"

View File

@@ -448,6 +448,9 @@ msgstr "Nelze zavézt synchronizátor."
msgid "Starting synchronisation..."
msgstr "Zahajuji synchronizaci..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Zastavuji, chvíli strpení."
@@ -615,6 +618,10 @@ msgstr "Vyjmout"
msgid "Paste"
msgstr "Vložit"
#, fuzzy
msgid "Select all"
msgstr "Vybrat datum"
msgid "Bold"
msgstr ""
@@ -920,6 +927,14 @@ msgstr "Kopírovat"
msgid "Switch between note and to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to note type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
@@ -943,6 +958,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Otevřít..."
@@ -959,6 +977,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodporovaný link či zpráva: %s"
@@ -994,9 +1015,6 @@ msgstr "Nastavit alarm"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1075,6 +1093,14 @@ msgstr "Synchronizovat"
msgid "Notebooks"
msgstr "Zápisníky"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Získané položky: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Zdroje: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Prosím vyberte, kam má být stav synchronizace exportován"
@@ -1119,6 +1145,9 @@ msgstr ""
"Nelze obnovit token: chybí autentizační data. Restart synchronizace může "
"tento problém vyřešit. "
msgid "Untitled"
msgstr "Bez názvu"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1166,10 +1195,6 @@ msgstr "Položky smazané na vzdáleném úložišti: %d."
msgid "Fetched items: %d/%d."
msgstr "Získané položky: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Stav: %s."
msgid "Cancelling..."
msgstr "Zastavuji..."
@@ -1220,9 +1245,6 @@ msgstr "Upraveno: %d."
msgid "created date"
msgstr "Vytvořeno: %d."
msgid "Untitled"
msgstr "Bez názvu"
msgid "This note does not have geolocation information."
msgstr "Tato poznámka nemá informace o poloze."
@@ -1286,6 +1308,12 @@ msgstr "Zobrazovat ikonu v panelu"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1414,6 +1442,10 @@ msgstr "Složka pro export"
msgid "Evernote Export File"
msgstr "Soubor Evernote Exportu"
#, fuzzy
msgid "Json Export Directory"
msgstr "Složka pro export"
msgid "Directory"
msgstr "Adresář"
@@ -1488,6 +1520,12 @@ msgstr "Nadcházející alarmy"
msgid "On %s: %s"
msgstr "Na %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Nemáte žádné poznámky. Vytvořte jednu kliknutím na tlačítko (+)."
@@ -1516,6 +1554,10 @@ msgstr "Přesunout poznámky %d do zápisníku \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Stiskněte pro zadání hesla k dešifrování."
#, fuzzy
msgid "Clear alarm"
msgstr "Nastavit alarm"
#, fuzzy
msgid "Save alarm"
msgstr "Nastavit alarm"
@@ -1529,8 +1571,34 @@ msgstr "Potvrdit"
msgid "Cancel synchronisation"
msgstr "Zrušit synchronizaci"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Zastavuji, chvíli strpení."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Zkontrolujte nastavení synchronizace"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Aplikace byla úspěšně autorizována."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Získané položky: %d/%d."
msgid "New tags:"
@@ -1637,6 +1705,9 @@ msgstr "Zobrazit metadata"
msgid "View on map"
msgstr "Zobrazit na map+"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Smazat zápisník"
@@ -1659,6 +1730,9 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
msgid "Welcome"
msgstr "Vítejte"
#~ msgid "State: %s."
#~ msgstr "Stav: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Zápisník s tímto názvem již existuje: \"%s\""

View File

@@ -452,6 +452,9 @@ msgstr "Kan ikke initialisere synkroniseringen."
msgid "Starting synchronisation..."
msgstr "Starter synkronisering."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Annullerer... Vent venligst."
@@ -620,6 +623,10 @@ msgstr "Klip"
msgid "Paste"
msgstr "Indsæt"
#, fuzzy
msgid "Select all"
msgstr "Vælg dato"
msgid "Bold"
msgstr ""
@@ -929,6 +936,14 @@ msgstr "Kopier"
msgid "Switch between note and to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to note type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
@@ -952,6 +967,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Åben..."
@@ -968,6 +986,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Ugyldigt- eller ulovligt link eller besked: %s"
@@ -1003,9 +1024,6 @@ msgstr "Indstil alarm"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1084,6 +1102,14 @@ msgstr "Synkroniser"
msgid "Notebooks"
msgstr "Notesbøger"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede emner: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcer: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Vælg hvor sync status skal eksporteres til"
@@ -1128,6 +1154,9 @@ msgstr ""
"Kan ikke opdatere token: Godkendelses data mangler. Prøv at starte "
"synkronisering igen, det kan løse problemet."
msgid "Untitled"
msgstr "Samlet"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1175,10 +1204,6 @@ msgstr "Slettede fjern-emner: %d."
msgid "Fetched items: %d/%d."
msgstr "Hentede emner: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Tilstand: %s."
msgid "Cancelling..."
msgstr "Annullerer..."
@@ -1229,9 +1254,6 @@ msgstr "Opdateret %d."
msgid "created date"
msgstr "Oprettet: %d."
msgid "Untitled"
msgstr "Samlet"
msgid "This note does not have geolocation information."
msgstr "Denne note har ingen geolokations oplysninger."
@@ -1295,6 +1317,12 @@ msgstr "Vis ikon på bundbjælke"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1423,6 +1451,10 @@ msgstr "Joplin eksport mappe"
msgid "Evernote Export File"
msgstr "Evernote eksport fil"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin eksport mappe"
msgid "Directory"
msgstr "Indeks"
@@ -1497,6 +1529,12 @@ msgstr "Kommende alarmer"
msgid "On %s: %s"
msgstr "På %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Der er ingen noter. Opret note ved at klikke på (+) knappen."
@@ -1525,6 +1563,10 @@ msgstr "Flyt %d noter til notesbogen \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Klik for at gemme dekrypterings kodeord."
#, fuzzy
msgid "Clear alarm"
msgstr "Indstil alarm"
#, fuzzy
msgid "Save alarm"
msgstr "Indstil alarm"
@@ -1538,8 +1580,34 @@ msgstr "Bekræft"
msgid "Cancel synchronisation"
msgstr "Afbryd synkronisering"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Annullerer... Vent venligst."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Check synkroniserings Indstillinger"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Denne app er succesfuldt godkendt."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Hentede emner: %d/%d."
msgid "New tags:"
@@ -1646,6 +1714,9 @@ msgstr "Vis metadata"
msgid "View on map"
msgstr "Vis på kort"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Slet notesbog"
@@ -1668,6 +1739,9 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
msgid "Welcome"
msgstr "Velkommen"
#~ msgid "State: %s."
#~ msgstr "Tilstand: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "En notesbog bruger allerede dette navn: \"%s\""

View File

@@ -18,8 +18,7 @@ msgstr ""
msgid "To delete a tag, untag the associated notes."
msgstr ""
"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen "
"Notizen."
"Um ein Tag zu löschen, entferne es bei allen damit verbundenen Notizen."
msgid "Please select the note or notebook to be deleted first."
msgstr ""
@@ -197,8 +196,8 @@ msgid ""
"Exports Joplin data to the given path. By default, it will export the "
"complete database including notebooks, notes, tags and resources."
msgstr ""
"Exportiert Joplin Dateien in den angegebenen Pfad. Standardmäßig wird die "
"komplette Datenbank inklusive Notizbüchern, Notizen, Markierungen und "
"Exportiert Joplin-Dateien in den angegebenen Pfad. Standardmäßig wird die "
"komplette Datenbank inklusive Notizbüchern, Notizen, Schlagwörtern und "
"Anhängen exportiert."
#, javascript-format
@@ -306,7 +305,7 @@ msgstr "Anhänge: %d."
#, javascript-format
msgid "Tagged: %d."
msgstr "Markiert: %d."
msgstr "Verschlagwortet: %d."
msgid "Importing notes..."
msgstr "Importiere Notizen..."
@@ -472,19 +471,21 @@ msgstr "Kann Synchronisierer nicht initialisieren."
msgid "Starting synchronisation..."
msgstr "Starte Synchronisation..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Abbrechen… Bitte warten."
#, fuzzy
msgid ""
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
"[tag] from [note], or to list the notes associated with [tag]. The command "
"`tag list` can be used to list all the tags (use -l for long option)."
msgstr ""
"<tag-command> kann \"add\", \"remove\" or \"list\" sein, um ein [Schlagwort] "
"zu [Notiz] zuzuweisen oder zu entfernen, oder um mit [Schlagwort] markierte "
"Notizen anzuzeigen. Mit dem Befehl `tag list` können alle Schlagwörter "
"angezeigt werden."
"<tag-command> kann add“, „remove“ oder „list sein um [tag] zu [note] "
"hinzuzufügen oder zu entfernen, oder um die Notizen aufzulisten die [tag] "
"zugeordnet sind. Der Befehl `tag list` kann benutzt werden, um alle "
"Schlagwörter anzuzeigen (nutze -l für die lange Option)."
#, javascript-format
msgid "Invalid command: \"%s\""
@@ -644,6 +645,9 @@ msgstr "Ausschneiden"
msgid "Paste"
msgstr "Einfügen"
msgid "Select all"
msgstr "Alle auswählen"
msgid "Bold"
msgstr "Fett"
@@ -666,7 +670,7 @@ msgid "Toggle sidebar"
msgstr "Seitenleiste ein/aus"
msgid "Toggle editor layout"
msgstr "Editor Layout umschalten"
msgstr "Editor-Layout umschalten"
msgid "Tools"
msgstr "Werkzeuge"
@@ -675,7 +679,7 @@ msgid "Synchronisation status"
msgstr "Status der Synchronisation"
msgid "Web clipper options"
msgstr "Web Clipper Optionen"
msgstr "Web-Clipper Optionen"
msgid "Encryption options"
msgstr "Verschlüsselungsoptionen"
@@ -719,7 +723,7 @@ msgid "Current version is up-to-date."
msgstr "Die aktuelle Version ist up-to-date."
msgid "An update is available, do you want to download it now?"
msgstr "Es ist ein Update verfügbar! Soll es jetzt heruntergeladen werden?"
msgstr "Es ist ein Update verfügbar. Soll es jetzt heruntergeladen werden?"
msgid "Yes"
msgstr "Ja"
@@ -728,11 +732,11 @@ msgid "No"
msgstr "Nein"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "Token wurde in die Zwischenablage kopiert."
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
"Der Webclipperservice ist bereits aktiviert und auf Autostart eingestellt."
"Der Web-Clipper-Service ist bereits aktiviert und auf Autostart eingestellt."
#, javascript-format
msgid "Status: Started on port %d"
@@ -743,26 +747,26 @@ msgid "Status: %s"
msgstr "Status: %s"
msgid "Disable Web Clipper Service"
msgstr "Web Clipper Service deaktivieren"
msgstr "Web-Clipper-Service deaktivieren"
msgid "The web clipper service is not enabled."
msgstr "Der Web Clipper Service ist nicht aktiviert."
msgstr "Der Web-Clipper-Service ist nicht aktiviert."
msgid "Enable Web Clipper Service"
msgstr "Web Clipper Service aktivieren"
msgstr "Web-Clipper-Service aktivieren"
msgid ""
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
"to Joplin."
msgstr ""
"Joplin Web Clipper erlaubt im Browser das Speichern von Webseiten und "
"Joplin Web-Clipper erlaubt im Browser das Speichern von Webseiten und "
"Screenshots nach Joplin."
msgid "In order to use the web clipper, you need to do the following:"
msgstr "Um den Web Clipper zu benutzen, musst du folgendes machen:"
msgstr "Um den Web-Clipper zu benutzen, musst du folgendes machen:"
msgid "Step 1: Enable the clipper service"
msgstr "Schritt 1: Clipper Service aktivieren"
msgstr "Schritt 1: Clipper-Service aktivieren"
msgid ""
"This service allows the browser extension to communicate with Joplin. When "
@@ -771,7 +775,7 @@ msgid ""
msgstr ""
"Dieser Service erlaubt es der Browser-Erweiterung mit Joplin zu "
"kommunizieren. Beim Aktivieren kann deine Firewall dich nach der Erlaubnis "
"bitten, dass Joplin auf einen bestimmten Port mithört."
"bitten, dass Joplin auf einen bestimmten Port mithören darf."
msgid "Step 2: Install the extension"
msgstr "Schritt 2: Erweiterung installieren"
@@ -781,20 +785,21 @@ msgstr ""
"Lade die entsprechende Erweiterung für deinen Browser herunter und "
"installiere sie:"
#, fuzzy
msgid "Advanced options"
msgstr "Erweiterte Optionen anzeigen"
msgstr "Erweiterte Optionen"
msgid "Authorisation token:"
msgstr ""
msgstr "Autorisierung-Token:"
msgid "Copy token"
msgstr ""
msgstr "Token kopieren"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"Dieses Autorisierung-Token wird nur benötigt, um Drittanbieter-Anwendungen "
"Zugriff auf Joplin zu gewähren."
msgid "Check synchronisation configuration"
msgstr "Überprüfen der Synchronisationseinstellungen"
@@ -874,13 +879,14 @@ msgstr ""
"Notizbücher ursprünglich verschlüsselt wurden."
msgid "Missing Master Keys"
msgstr "Fehlender Master-Key"
msgstr "Fehlender Hauptschlüssel"
msgid ""
"The master keys with these IDs are used to encrypt some of your items, "
"however the application does not currently have access to them. It is likely "
"they will eventually be downloaded via synchronisation."
msgstr "Die Master-Keas dieser IDs werden für die Verschlüsselung einiger ..."
msgstr ""
"Die Hauptschlüssel dieser IDs werden für die Verschlüsselung einiger ..."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
@@ -912,10 +918,10 @@ msgid "Please create a notebook first"
msgstr "Bitte erstelle zuerst ein Notizbuch"
msgid "Notebook title:"
msgstr "Notizbuch Titel:"
msgstr "Notizbuch-Titel:"
msgid "Add or remove tags:"
msgstr "Füge hinzu oder entferne Schlagwörter:"
msgstr "Schlagwörter hinzufügen oder entfernen:"
msgid "Separate each tag by a comma."
msgstr "Trenne jedes Schlagwort mit einem Komma."
@@ -960,6 +966,12 @@ msgstr "%s kopieren"
msgid "Switch between note and to-do type"
msgstr "Zwischen Notiz und To-Do Typ wechseln"
msgid "Switch to note type"
msgstr "Zu Notiz-Typ wechseln"
msgid "Switch to to-do type"
msgstr "Zu To-Do-Typ wechseln"
msgid "Copy Markdown link"
msgstr "Markdown-Link kopieren"
@@ -971,8 +983,7 @@ msgstr "Notizen löschen?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
"Hier sind noch keine Notizen. Erstelle eine, indem du auf \"Neue Notiz\" "
"drückst."
"Keine Notizen vorhanden. Erstelle eine, indem du auf \"Neue Notiz\" drückst."
msgid ""
"There is currently no notebook. Create one by clicking on \"New notebook\"."
@@ -980,11 +991,15 @@ msgstr ""
"Momentan existieren noch keine Notizbücher. Erstelle eines, indem du auf "
"\"Neues Notizbuch\" drückst."
# Please note: The term 'Location' is assumed to be the geographical location where the note has been created. For this the german word 'Standort' fits better than the previously used 'Ablageort'. The latter one is used for the folder where files are stored.
msgid "Location"
msgstr "Ablageort"
msgstr "Standort"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note properties"
msgstr "Notiz-Eigenschaften"
msgid "Open..."
msgstr "Öffne..."
@@ -994,7 +1009,7 @@ msgid "This file could not be opened: %s"
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %s"
msgid "Save as..."
msgstr "Sichern unter..."
msgstr "Speichern unter..."
msgid "Copy path to clipboard"
msgstr "Pfad in Zwischenablage kopieren"
@@ -1002,6 +1017,9 @@ msgstr "Pfad in Zwischenablage kopieren"
msgid "Copy Link Address"
msgstr "Link-Adresse kopieren"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nicht unterstützter Link oder Nachricht: %s"
@@ -1030,7 +1048,7 @@ msgid "Attach file"
msgstr "Datei anhängen"
msgid "Tags"
msgstr "Markierungen"
msgstr "Schlagwörter"
msgid "Set alarm"
msgstr "Alarm erstellen"
@@ -1039,9 +1057,6 @@ msgstr "Alarm erstellen"
msgid "In: %s"
msgstr "In: %s"
msgid "Note properties"
msgstr "Notiz-Eigenschaften"
msgid "Hyperlink"
msgstr "Weblink"
@@ -1066,9 +1081,8 @@ msgstr "Horizontale Linie"
msgid "Click to stop external editing"
msgstr "Klicken Sie hier, um die externe Bearbeitung anzuhalten"
#, fuzzy
msgid "Watching..."
msgstr "Ansehen…"
msgstr "Zuschauend…"
msgid "to-do"
msgstr "To-Do"
@@ -1087,22 +1101,22 @@ msgid "Clear"
msgstr "Leeren"
msgid "OneDrive Login"
msgstr "OneDrive Anmeldung"
msgstr "OneDrive-Anmeldung"
msgid "Dropbox Login"
msgstr "Dropbox Anmeldung"
msgstr "Dropbox-Anmeldung"
msgid "Options"
msgstr "Optionen"
msgid "Synchronisation Status"
msgstr "Synchronisations Status"
msgstr "Synchronisations-Status"
msgid "Encryption Options"
msgstr "Verschlüsselungsoptionen"
msgid "Clipper Options"
msgstr "Clipper Einstellungen"
msgstr "Clipper-Einstellungen"
msgid "Remove this tag from all the notes?"
msgstr "Dieses Schlagwort von allen Notizen entfernen?"
@@ -1119,9 +1133,17 @@ msgstr "Synchronisieren"
msgid "Notebooks"
msgstr "Notizbücher"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Entschlüsselte Objekte: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Anhänge: %d."
msgid "Please select where the sync status should be exported to"
msgstr ""
"Bitte wähle aus, wohin der Synchronisations Status exportiert werden soll"
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll"
#, javascript-format
msgid "Usage: %s"
@@ -1151,11 +1173,11 @@ msgstr "WebDAV"
#, javascript-format
msgid "Unknown log level: %s"
msgstr "Unbekanntes Log Level: %s"
msgstr "Unbekanntes Log-Level: %s"
#, javascript-format
msgid "Unknown level ID: %s"
msgstr "Unbekannte Level ID: %s"
msgstr "Unbekannte Level-ID: %s"
msgid ""
"Cannot refresh token: authentication data is missing. Starting the "
@@ -1164,6 +1186,9 @@ msgstr ""
"Kann Token nicht erneuern: Authentifikationsdaten nicht vorhanden. Ein "
"Neustart der Synchronisation könnte das Problem beheben."
msgid "Untitled"
msgstr "Unbenannt"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1177,7 +1202,7 @@ msgstr ""
"Dieser Fehler kommt oft vor, wenn OneDrive Business benutzt wird, das leider "
"nicht unterstützt wird.\n"
"\n"
"Bitte benutze stattdessen einen normalen OneDrive Account."
"Bitte benutze stattdessen einen normalen OneDrive-Account."
#, javascript-format
msgid "Cannot access %s"
@@ -1193,11 +1218,11 @@ msgstr "Lokale Objekte aktualisiert: %d."
#, javascript-format
msgid "Created remote items: %d."
msgstr "Remote Objekte erstellt: %d."
msgstr "Remote-Objekte erstellt: %d."
#, javascript-format
msgid "Updated remote items: %d."
msgstr "Remote Objekte aktualisiert: %d."
msgstr "Remote-Objekte aktualisiert: %d."
#, javascript-format
msgid "Deleted local items: %d."
@@ -1205,18 +1230,14 @@ msgstr "Lokale Objekte gelöscht: %d."
#, javascript-format
msgid "Deleted remote items: %d."
msgstr "Remote Objekte gelöscht: %d."
msgstr "Remote-Objekte gelöscht: %d."
#, javascript-format
msgid "Fetched items: %d/%d."
msgstr "Geladene Objekte: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Status: %s."
msgid "Cancelling..."
msgstr "Abbrechen…"
msgstr "Breche ab…"
#, javascript-format
msgid "Completed: %s"
@@ -1251,20 +1272,17 @@ msgstr "Kann Notizbuch nicht an diesen Ort verschieben"
#, javascript-format
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"Notizbuch kann nicht \"%s\" genannt werden. Dies ist ein reservierter Titel."
"Notizbuch kann nicht \"%s\" genannt werden. Dieser Name ist reserviert.."
msgid "title"
msgstr "Titel"
msgid "updated date"
msgstr "Aktualsierungsdatum"
msgstr "Aktualisierungsdatum"
msgid "created date"
msgstr "Erstelldatum"
msgid "Untitled"
msgstr "Unbenannt"
msgid "This note does not have geolocation information."
msgstr "Diese Notiz hat keine Standort-Informationen."
@@ -1298,7 +1316,7 @@ msgid "Uncompleted to-dos on top"
msgstr "Zeige unvollständige To-Dos an oberster Stelle"
msgid "Show completed to-dos"
msgstr "Abgeschlossene ToDos anzeigen"
msgstr "Abgeschlossene To-Dos anzeigen"
msgid "Sort notes by"
msgstr "Sortiere Notizen nach"
@@ -1322,11 +1340,17 @@ msgid "When creating a new note:"
msgstr "Wenn eine neue Notiz erstellt wird:"
msgid "Show tray icon"
msgstr "Zeige Tray Icon"
msgstr "Zeige Tray-Icon"
msgid "Note: Does not work in all desktop environments."
msgstr "Hinweis: Funktioniert nicht in allen Desktopumgebungen."
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 ""
msgid "Start application minimised in the tray icon"
msgstr "Starte die Anwendung minimiert im Tray"
@@ -1387,7 +1411,7 @@ msgstr ""
"dokumentiert) bezeichnet werden."
msgid "Directory to synchronise with (absolute path)"
msgstr "Verzeichnis zum synchronisieren (absoluter Pfad)"
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
@@ -1397,7 +1421,7 @@ msgstr ""
"Synchronisation aktiviert ist. Siehe `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV-URL"
#, javascript-format
msgid ""
@@ -1410,19 +1434,19 @@ msgstr ""
"die FAQs hierzu: %s"
msgid "Nextcloud username"
msgstr "Nextcloud Benutzername"
msgstr "Nextcloud-Benutzername"
msgid "Nextcloud password"
msgstr "Nextcloud Passwort"
msgstr "Nextcloud-Passwort"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgstr "WebDAV-URL"
msgid "WebDAV username"
msgstr "WebDAV Benutzername"
msgstr "WebDAV-Benutzername"
msgid "WebDAV password"
msgstr "WebDAV Passwort"
msgstr "WebDAV-Passwort"
msgid "Custom TLS certificates"
msgstr "Benutzerdefinierte TLS-Zertifikate"
@@ -1434,9 +1458,9 @@ msgid ""
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
"Kommagetrennte Liste von Pfaden zu Verzeichnissen, aus denen die Zertifikate "
"geladen werden, oder Pfad zu einzelnen Zertifikatsdateien. Zum Beispiel: / "
"my / cert_dir, /other/custom.pem. Wenn Sie Änderungen an den TLS-"
"Einstellungen vornehmen, müssen Sie Ihre Änderungen speichern, bevor Sie auf "
"geladen werden, oder Pfad zu einzelnen Zertifikatsdateien. Zum Beispiel: /my/"
"cert_dir, /other/custom.pem. Wenn Sie Änderungen an den TLS-Einstellungen "
"vornehmen, müssen Sie Ihre Änderungen speichern, bevor Sie auf "
"\"Synchronisierungskonfiguration prüfen\" klicken."
msgid "Ignore TLS certificate errors"
@@ -1463,6 +1487,10 @@ msgstr "Joplin Export Verzeichnis"
msgid "Evernote Export File"
msgstr "Evernote Export Datei"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin Export Verzeichnis"
msgid "Directory"
msgstr "Verzeichnis"
@@ -1538,6 +1566,12 @@ msgstr "Anstehende Alarme"
msgid "On %s: %s"
msgstr "Auf %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Momentan existieren noch keine Notizen. Erstelle eine, indem du auf den (+) "
@@ -1568,6 +1602,9 @@ msgstr "%d Notizen in das Notizbuch \"%s\" verschieben?"
msgid "Press to set the decryption password."
msgstr "Tippe hier, um das Entschlüsselungspasswort festzulegen."
msgid "Clear alarm"
msgstr "Alarm löschen"
msgid "Save alarm"
msgstr "Alarm speichern"
@@ -1580,9 +1617,40 @@ msgstr "Bestätigen"
msgid "Cancel synchronisation"
msgstr "Synchronisation abbrechen"
msgid "Checking... Please wait."
msgstr "Überprüfe… Bitte warten."
msgid "Success! Synchronisation configuration appears to be correct."
msgstr ""
"Erfolgreich. Die Synchronisation-Konfiguration scheint korrekt zu sein."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Fehler. Bitte überprüfe, ob die URL, der Benutzername, das Passwort. usw. "
"korrekt sind und das das Synchronisierungsziel erreichbar ist. Fehlermeldung:"
msgid "The application has been authorised!"
msgstr "Das Programm wurde erfolgreich autorisiert."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Entschlüsselte Objekte: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
"Konnte Applikation nicht autorisieren:\n"
"\n"
"%s\n"
"\n"
"Bitte versuche es erneut."
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Entschlüsselte Objekte: %s / %s"
msgid "New tags:"
msgstr "Neue Schlagwörter:"
@@ -1694,6 +1762,9 @@ msgstr "Metadaten anzeigen"
msgid "View on map"
msgstr "Auf der Karte anzeigen"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Notizbuch löschen"
@@ -1713,12 +1784,15 @@ msgstr ""
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Du hast noch kein Notizbuch. Erstelle eines, indem du auf den (+) Knopf "
"drückst."
"Du hast noch kein Notizbuch angelegt. Erstelle eines, indem du auf den (+) "
"Knopf drückst."
msgid "Welcome"
msgstr "Willkommen"
#~ msgid "State: %s."
#~ msgstr "Status: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Ein Notizbuch mit diesem Titel existiert bereits : \"%s\""

View File

@@ -408,6 +408,9 @@ msgstr ""
msgid "Starting synchronisation..."
msgstr ""
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr ""
@@ -552,6 +555,9 @@ msgstr ""
msgid "Paste"
msgstr ""
msgid "Select all"
msgstr ""
msgid "Bold"
msgstr ""
@@ -843,6 +849,12 @@ msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
@@ -865,6 +877,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr ""
@@ -881,6 +896,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -916,9 +934,6 @@ msgstr ""
msgid "In: %s"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -995,6 +1010,14 @@ msgstr ""
msgid "Notebooks"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1037,6 +1060,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr ""
msgid "Untitled"
msgstr ""
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1078,10 +1104,6 @@ msgstr ""
msgid "Fetched items: %d/%d."
msgstr ""
#, javascript-format
msgid "State: %s."
msgstr ""
msgid "Cancelling..."
msgstr ""
@@ -1128,9 +1150,6 @@ msgstr ""
msgid "created date"
msgstr ""
msgid "Untitled"
msgstr ""
msgid "This note does not have geolocation information."
msgstr ""
@@ -1193,6 +1212,12 @@ msgstr ""
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1310,6 +1335,9 @@ msgstr ""
msgid "Evernote Export File"
msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1379,6 +1407,12 @@ msgstr ""
msgid "On %s: %s"
msgstr ""
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -1407,6 +1441,9 @@ msgstr ""
msgid "Press to set the decryption password."
msgstr ""
msgid "Clear alarm"
msgstr ""
msgid "Save alarm"
msgstr ""
@@ -1419,8 +1456,31 @@ msgstr ""
msgid "Cancel synchronisation"
msgstr ""
msgid "Checking... Please wait."
msgstr ""
msgid "Success! Synchronisation configuration appears to be correct."
msgstr ""
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
msgid "The application has been authorised!"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr ""
msgid "New tags:"
@@ -1526,6 +1586,9 @@ msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr ""

View File

@@ -457,6 +457,9 @@ msgstr "No se puede inicializar sincronizador."
msgid "Starting synchronisation..."
msgstr "Iniciando sincronización..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Cancelando... Por favor espere."
@@ -629,6 +632,10 @@ msgstr "Cortar"
msgid "Paste"
msgstr "Pegar"
#, fuzzy
msgid "Select all"
msgstr "Seleccione fecha"
msgid "Bold"
msgstr "Negrita"
@@ -943,6 +950,14 @@ msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre nota y lista de tareas"
#, fuzzy
msgid "Switch to note type"
msgstr "Cambiar entre nota y lista de tareas"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Cambiar entre nota y lista de tareas"
msgid "Copy Markdown link"
msgstr "Copiar el enlace de Markdown"
@@ -965,6 +980,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Abrir..."
@@ -981,6 +999,9 @@ msgstr "Copiar la ruta en el portapapeles"
msgid "Copy Link Address"
msgstr "Copiar enlace"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Enlace o mensaje no soportado: %s"
@@ -1018,9 +1039,6 @@ msgstr "Establecer alarma"
msgid "In: %s"
msgstr "En: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Hipervínculo"
@@ -1097,6 +1115,14 @@ msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Libretas"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Descifrando elementos: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %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"
@@ -1141,6 +1167,9 @@ msgstr ""
"No se ha podido actualizar token: faltan datos de autenticación. Reiniciar "
"la sincronización podría solucionar el problema."
msgid "Untitled"
msgstr "Sin título"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1188,10 +1217,6 @@ msgstr "Elementos remotos borrados: %d."
msgid "Fetched items: %d/%d."
msgstr "Elementos obtenidos: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Estado: «%s»."
msgid "Cancelling..."
msgstr "Cancelando..."
@@ -1239,9 +1264,6 @@ msgstr "fecha de actualización"
msgid "created date"
msgstr "fecha de creación"
msgid "Untitled"
msgstr "Sin título"
msgid "This note does not have geolocation information."
msgstr "Esta nota no tiene informacion de geolocalización."
@@ -1304,6 +1326,12 @@ msgstr "Mostrar icono en la bandeja"
msgid "Note: Does not work in all desktop environments."
msgstr "Nota: No funciona en todos los entornos de escritorio."
msgid ""
"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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1437,6 +1465,10 @@ 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"
msgid "Directory"
msgstr "Directorio"
@@ -1511,6 +1543,12 @@ msgstr "Alarmas próximas"
msgid "On %s: %s"
msgstr "En %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "No hay notas. Cree una pulsando en el botón (+)."
@@ -1539,6 +1577,10 @@ 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"
msgid "Save alarm"
msgstr "Establecer alarma"
@@ -1551,8 +1593,34 @@ msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronización"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Cancelando... Por favor espere."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Comprobar sincronización"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "La aplicacion ha sido autorizada éxitosamente."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Descifrando elementos: %d/%d."
msgid "New tags:"
@@ -1666,6 +1734,9 @@ msgstr "Mostrar metadatos"
msgid "View on map"
msgstr "Ver en un mapa"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Borrar libreta"
@@ -1689,6 +1760,9 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenido"
#~ msgid "State: %s."
#~ msgstr "Estado: «%s»."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Ya existe una libreta con este nombre: «%s»"

View File

@@ -455,6 +455,9 @@ msgstr "Ezin has daiteke sinkronizazio prozesua."
msgid "Starting synchronisation..."
msgstr "Sinkronizazioa hasten..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Bertan behera uzten... itxaron, mesedez."
@@ -628,6 +631,10 @@ msgstr "Moztu"
msgid "Paste"
msgstr "Itsatsi"
#, fuzzy
msgid "Select all"
msgstr "Data aukeratu"
msgid "Bold"
msgstr ""
@@ -939,6 +946,14 @@ msgstr "Kopiatu"
msgid "Switch between note and to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to note type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
msgid "Copy Markdown link"
msgstr ""
@@ -961,6 +976,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr ""
@@ -978,6 +996,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Esteka edo mezu ez dago onartua: %s"
@@ -1013,9 +1034,6 @@ msgstr "Ezarri alarma"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1097,6 +1115,14 @@ msgstr "Sinkronizatu"
msgid "Notebooks"
msgstr "Koadernoak"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Itemak eskuratuta: %d%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Baliabideak: %d."
#, fuzzy
msgid "Please select where the sync status should be exported to"
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
@@ -1144,6 +1170,9 @@ msgstr ""
"Tokena ezin eguneratu daiteke: egiaztatze-datuak desagertuta daude. Agian, "
"berriro sinkronizatzeak arazoa konpon lezake."
msgid "Untitled"
msgstr "Titulu gabekoa"
#, fuzzy
msgid ""
"Could not synchronize with OneDrive.\n"
@@ -1190,10 +1219,6 @@ msgstr "Urruneko itemak ezabatuta: %d."
msgid "Fetched items: %d/%d."
msgstr "Itemak eskuratuta: %d%d."
#, fuzzy, javascript-format
msgid "State: %s."
msgstr "Egoera: \"%s\"."
msgid "Cancelling..."
msgstr "Bertan behera uzten..."
@@ -1245,9 +1270,6 @@ msgstr "Eguneratuta: %d."
msgid "created date"
msgstr "Sortuta: %d."
msgid "Untitled"
msgstr "Titulu gabekoa"
msgid "This note does not have geolocation information."
msgstr "Ohar honek ez du geokokapen informaziorik."
@@ -1315,6 +1337,12 @@ msgstr ""
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1446,6 +1474,10 @@ msgstr ""
msgid "Evernote Export File"
msgstr "Evernotetik esportatutako fitxategiak"
#, fuzzy
msgid "Json Export Directory"
msgstr "Evernotetik esportatutako fitxategiak"
msgid "Directory"
msgstr ""
@@ -1518,6 +1550,12 @@ msgstr "Hurrengo alarmak"
msgid "On %s: %s"
msgstr "On %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Ez dago oharrik. Sortu bat (+) botoian klik eginaz."
@@ -1546,6 +1584,10 @@ msgstr "Mugitu %d oharrak \"%s\" koadernora?"
msgid "Press to set the decryption password."
msgstr "Sakatu deszifratze pasahitza ezartzeko."
#, fuzzy
msgid "Clear alarm"
msgstr "Ezarri alarma"
#, fuzzy
msgid "Save alarm"
msgstr "Ezarri alarma"
@@ -1559,8 +1601,34 @@ msgstr "Baieztatu"
msgid "Cancel synchronisation"
msgstr "Sinkronizazioa utzi"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Bertan behera uzten... itxaron, mesedez."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Sinkronizazioa utzi"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Aplikazioak baimena hartu du."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Itemak eskuratuta: %d%d."
msgid "New tags:"
@@ -1667,6 +1735,9 @@ msgstr "Erakutsi metadatuak"
msgid "View on map"
msgstr "Ikusi mapan"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Ezabatu koadernoa"
@@ -1689,6 +1760,10 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
msgid "Welcome"
msgstr "Ongi etorri!"
#, fuzzy
#~ msgid "State: %s."
#~ msgstr "Egoera: \"%s\"."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Dagoeneko bada koaderno bat izen horrekin: \"%s\""

View File

@@ -458,6 +458,9 @@ msgstr "Impossible d'initialiser la synchronisation."
msgid "Starting synchronisation..."
msgstr "Commencement de la synchronisation..."
msgid "Downloading resources..."
msgstr "Téléchargement des ressources..."
msgid "Cancelling... Please wait."
msgstr "Annulation... Veuillez attendre."
@@ -627,6 +630,9 @@ msgstr "Couper"
msgid "Paste"
msgstr "Coller"
msgid "Select all"
msgstr "Sélectionner tout"
msgid "Bold"
msgstr "Gras"
@@ -947,6 +953,12 @@ msgstr "%s - Copie"
msgid "Switch between note and to-do type"
msgstr "Alterner entre note et tâche"
msgid "Switch to note type"
msgstr "Convertir en note"
msgid "Switch to to-do type"
msgstr "Convertir en tâche"
msgid "Copy Markdown link"
msgstr "Copier lien Markdown"
@@ -972,6 +984,9 @@ msgstr "Lieu"
msgid "URL"
msgstr "URL"
msgid "Note properties"
msgstr "Propriétés de la note"
msgid "Open..."
msgstr "Ouvrir..."
@@ -988,6 +1003,9 @@ msgstr "Copier le chemin"
msgid "Copy Link Address"
msgstr "Copier l'adresse du lien"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr "Cette pièce jointe n'est pas téléchargée ou pas encore déchiffrée"
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Lien ou message non géré : %s"
@@ -1025,9 +1043,6 @@ msgstr "Régler alarme"
msgid "In: %s"
msgstr "Dans : %s"
msgid "Note properties"
msgstr "Propriétés de la note"
msgid "Hyperlink"
msgstr "Lien"
@@ -1104,6 +1119,14 @@ msgstr "Synchroniser"
msgid "Notebooks"
msgstr "Carnets"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Tél. ressources : %d"
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"
@@ -1149,6 +1172,9 @@ msgstr ""
"Impossible de rafraîchir la connexion à OneDrive. Démarrez la "
"synchronisation à nouveau pour corriger le problème."
msgid "Untitled"
msgstr "Sans titre"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1196,10 +1222,6 @@ msgstr "Objets distants supprimés : %d."
msgid "Fetched items: %d/%d."
msgstr "Téléchargés : %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "État : %s."
msgid "Cancelling..."
msgstr "Annulation..."
@@ -1246,9 +1268,6 @@ msgstr "date de modification"
msgid "created date"
msgstr "date de création"
msgid "Untitled"
msgstr "Sans titre"
msgid "This note does not have geolocation information."
msgstr "Cette note n'a pas d'information d'emplacement."
@@ -1311,6 +1330,15 @@ msgstr "Afficher l'icône dans la zone de notifications"
msgid "Note: Does not work in all desktop environments."
msgstr "Note : Ne fonctionne pas dans tous les environnements de bureau."
msgid ""
"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 ""
"Cela permettra à Joplin de s'exécuter en arrière-plan. Il est recommandé "
"d'activer ce réglage pour que vos notes soient constamment synchronisées, "
"donc réduire le nombre de conflits."
msgid "Start application minimised in the tray icon"
msgstr "Démarrer minimisé dans la zone de notification"
@@ -1446,6 +1474,9 @@ msgstr "Dossier d'export Joplin"
msgid "Evernote Export File"
msgstr "Fichiers d'export Evernote"
msgid "Json Export Directory"
msgstr "Dossier d'export JSON"
msgid "Directory"
msgstr "Dossier"
@@ -1520,6 +1551,12 @@ msgstr "Alarmes à venir"
msgid "On %s: %s"
msgstr "Le %s : %s"
msgid "Permission to use camera"
msgstr "Permission d'utiliser l'appareil photo"
msgid "Your permission to use your camera is required."
msgstr "Votre permission est requise pour utiliser l'appareil photo"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Ce carnet ne contient aucune note. Créez-en une en appuyant sur le bouton "
@@ -1550,6 +1587,9 @@ msgstr "Déplacer %d notes vers carnet \"%s\" ?"
msgid "Press to set the decryption password."
msgstr "Définir mot de passe de synchronisation."
msgid "Clear alarm"
msgstr "Enlever l'alarme"
msgid "Save alarm"
msgstr "Enregistrer alarme"
@@ -1562,9 +1602,39 @@ msgstr "Confirmer"
msgid "Cancel synchronisation"
msgstr "Annuler synchronisation"
msgid "Checking... Please wait."
msgstr "Vérification... Veuillez attendre."
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "La configuration de la synchronisation semble correcte."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Erreur. Veuillez vérifier que l'URL, le nom, le mot de passe, etc. sont "
"corrects et que la destination est accessible. L'erreur reportée est :"
msgid "The application has been authorised!"
msgstr "Le logiciel a été autorisé !"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
"Impossible d'autoriser le logiciel :\n"
"\n"
"%s\n"
"\n"
"Veuillez réessayer."
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Déchiffrement : %s / %s"
msgid "New tags:"
msgstr "Nouvelles étiquettes :"
@@ -1676,6 +1746,9 @@ msgstr "Voir métadonnées"
msgid "View on map"
msgstr "Voir sur carte"
msgid "Go to source URL"
msgstr "Aller à l'URL source"
msgid "Delete notebook"
msgstr "Supprimer le carnet"
@@ -1700,6 +1773,9 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenue"
#~ msgid "State: %s."
#~ msgstr "État : %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Un carnet avec ce titre existe déjà : \"%s\""

View File

@@ -452,6 +452,9 @@ msgstr "Non é posíbel iniciar o sincronizador."
msgid "Starting synchronisation..."
msgstr "Iniciando sincronización..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Cancelando... Agarde."
@@ -620,6 +623,10 @@ msgstr "Cortar"
msgid "Paste"
msgstr "Pegar"
#, fuzzy
msgid "Select all"
msgstr "Seleccionar data"
msgid "Bold"
msgstr ""
@@ -926,6 +933,14 @@ msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to note type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
@@ -949,6 +964,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Abrir…"
@@ -965,6 +983,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Ligazón ou mensaxe incompatíbeis: %s"
@@ -1002,9 +1023,6 @@ msgstr "Estabelecer alarma"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1083,6 +1101,14 @@ msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Cadernos"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elementos obtidos: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione onde exportar o estado da sincronización"
@@ -1127,6 +1153,9 @@ msgstr ""
"Non é posíbel actualizar o «token»: faltan datos da autenticación. Iniciar a "
"sincronización de novo pode arranxar o problema."
msgid "Untitled"
msgstr "Sen título"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1174,10 +1203,6 @@ msgstr "Elementos remotos borrados: %d."
msgid "Fetched items: %d/%d."
msgstr "Elementos obtidos: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Estado: %s."
msgid "Cancelling..."
msgstr "Cancelando..."
@@ -1228,9 +1253,6 @@ msgstr "Actualizado: %d."
msgid "created date"
msgstr "Creado: %d."
msgid "Untitled"
msgstr "Sen título"
msgid "This note does not have geolocation information."
msgstr "Esta nota non ten información de xeolocalización."
@@ -1294,6 +1316,12 @@ msgstr "Mostrar a icona na bandexa"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1422,6 +1450,10 @@ msgstr "Cartafol de exportación do Joplin"
msgid "Evernote Export File"
msgstr "Ficheiro de exportación de Evernote"
#, fuzzy
msgid "Json Export Directory"
msgstr "Cartafol de exportación do Joplin"
msgid "Directory"
msgstr "Cartafol"
@@ -1496,6 +1528,12 @@ msgstr "Alarmas próximas"
msgid "On %s: %s"
msgstr "En %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Non ten notas actualmente. Cree unha premendo no botón (+)."
@@ -1524,6 +1562,10 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Prema para estabelecer o contrasinal de descifrado."
#, fuzzy
msgid "Clear alarm"
msgstr "Estabelecer alarma"
#, fuzzy
msgid "Save alarm"
msgstr "Estabelecer alarma"
@@ -1537,8 +1579,34 @@ msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronización"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Cancelando... Agarde."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Comprobar a configuración da sincronización"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "O aplicativo foi autorizado correctamente."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Elementos obtidos: %d/%d."
msgid "New tags:"
@@ -1645,6 +1713,9 @@ msgstr "Mostrar metadatos"
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Eliminar caderno"
@@ -1667,5 +1738,8 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
msgid "Welcome"
msgstr "Benvido/a"
#~ msgid "State: %s."
#~ msgstr "Estado: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Xa existe un caderno con ese título: «%s»"

View File

@@ -455,6 +455,9 @@ msgstr "Ne mogu započeti sinkronizaciju."
msgid "Starting synchronisation..."
msgstr "Započinjem sinkronizaciju..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Prekidam... Pričekaj."
@@ -625,6 +628,10 @@ msgstr "Izreži"
msgid "Paste"
msgstr "Zalijepi"
#, fuzzy
msgid "Select all"
msgstr "Odaberi datum"
msgid "Bold"
msgstr ""
@@ -926,6 +933,14 @@ msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to note type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Zamijeni bilješku i zadatak"
msgid "Copy Markdown link"
msgstr ""
@@ -948,6 +963,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr ""
@@ -965,6 +983,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodržana poveznica ili poruka: %s"
@@ -1000,9 +1021,6 @@ msgstr "Postavi upozorenje"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1083,6 +1101,14 @@ msgstr "Sinkroniziraj"
msgid "Notebooks"
msgstr "Bilježnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Stvorene lokalne stavke: %d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resursi: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
@@ -1125,6 +1151,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr "Nedostaju podaci za ovjeru. Pokušaj ponovo započeti sinkronizaciju."
msgid "Untitled"
msgstr "Nenaslovljen"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1172,10 +1201,6 @@ msgstr "Obrisane udaljene stavke: %d."
msgid "Fetched items: %d/%d."
msgstr "Stvorene lokalne stavke: %d."
#, fuzzy, javascript-format
msgid "State: %s."
msgstr "Stanje: \"%s\"."
msgid "Cancelling..."
msgstr "Prekidam..."
@@ -1227,9 +1252,6 @@ msgstr "Ažurirano: %d."
msgid "created date"
msgstr "Stvoreno: %d."
msgid "Untitled"
msgstr "Nenaslovljen"
msgid "This note does not have geolocation information."
msgstr "Ova bilješka nema geolokacijske informacije."
@@ -1298,6 +1320,12 @@ msgstr ""
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1423,6 +1451,10 @@ msgstr ""
msgid "Evernote Export File"
msgstr "Evernote izvozne datoteke"
#, fuzzy
msgid "Json Export Directory"
msgstr "Evernote izvozne datoteke"
msgid "Directory"
msgstr ""
@@ -1493,6 +1525,12 @@ msgstr "Nadolazeća upozorenja"
msgid "On %s: %s"
msgstr "On %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Trenutno nema bilješki. Stvori novu klikom na (+) gumb."
@@ -1521,6 +1559,10 @@ msgstr "Premjesti %d bilješke u bilježnicu \"%s\"?"
msgid "Press to set the decryption password."
msgstr ""
#, fuzzy
msgid "Clear alarm"
msgstr "Postavi upozorenje"
#, fuzzy
msgid "Save alarm"
msgstr "Postavi upozorenje"
@@ -1534,8 +1576,34 @@ msgstr "Potvrdi"
msgid "Cancel synchronisation"
msgstr "Prekini sinkronizaciju"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Prekidam... Pričekaj."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Prekini sinkronizaciju"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Aplikacija je uspješno autorizirana."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Stvorene lokalne stavke: %d."
msgid "New tags:"
@@ -1643,6 +1711,9 @@ msgstr "Prikaži metapodatke"
msgid "View on map"
msgstr "Vidi na karti"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Obriši bilježnicu"
@@ -1665,6 +1736,10 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
msgid "Welcome"
msgstr "Dobro došli"
#, fuzzy
#~ msgid "State: %s."
#~ msgstr "Stanje: \"%s\"."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Bilježnica s ovim naslovom već postoji: \"%s\""

View File

@@ -461,6 +461,9 @@ msgstr "Non è possibile inizializzare il sincronizzatore."
msgid "Starting synchronisation..."
msgstr "Inizio sincronizzazione..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Cancellazione... Attendere per favore."
@@ -626,6 +629,10 @@ msgstr "Taglia"
msgid "Paste"
msgstr "Incolla"
#, fuzzy
msgid "Select all"
msgstr "Seleziona la data"
msgid "Bold"
msgstr "Grasseto"
@@ -941,6 +948,14 @@ msgstr "%s - Copia"
msgid "Switch between note and to-do type"
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
#, fuzzy
msgid "Switch to note type"
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
msgid "Copy Markdown link"
msgstr "Copia il link Markdown"
@@ -965,6 +980,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Apri ..."
@@ -981,6 +999,9 @@ msgstr "Copia il percorso negli appunti"
msgid "Copy Link Address"
msgstr "Copia l'indirizzo del link"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Link o Messaggio non supportato: %s"
@@ -1018,9 +1039,6 @@ msgstr "Imposta Allarme"
msgid "In: %s"
msgstr "In: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Collegamento ipertestuale"
@@ -1098,6 +1116,14 @@ msgstr "Sincronizza"
msgid "Notebooks"
msgstr "Taccuini"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Decrittografia Elementi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Risorse: %d."
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1142,6 +1168,9 @@ msgstr ""
"Non è possibile aggiornare il token. mancano i dati di autenticazione. "
"Ricominciare la sincronizzazione da capo potrebbe risolvere il problema."
msgid "Untitled"
msgstr "Senza titolo"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1189,10 +1218,6 @@ msgstr "Elementi remoti eliminati: %d."
msgid "Fetched items: %d/%d."
msgstr "Elementi recuperati: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Stato: %s."
msgid "Cancelling..."
msgstr "Cancellazione..."
@@ -1239,9 +1264,6 @@ msgstr "Data di aggiornamento"
msgid "created date"
msgstr "Data di creazione"
msgid "Untitled"
msgstr "Senza titolo"
msgid "This note does not have geolocation information."
msgstr "Questa nota non ha informazione sulla geolocalizzazione."
@@ -1304,6 +1326,12 @@ msgstr "Visualizza tray icon"
msgid "Note: Does not work in all desktop environments."
msgstr "Nota: non funziona in tutti gli ambienti desktop."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1436,6 +1464,10 @@ msgstr "Cartella di esportazione di Joplin"
msgid "Evernote Export File"
msgstr "Esporta files di Evernote"
#, fuzzy
msgid "Json Export Directory"
msgstr "Cartella di esportazione di Joplin"
msgid "Directory"
msgstr "Cartella"
@@ -1510,6 +1542,12 @@ msgstr "Avviso imminente"
msgid "On %s: %s"
msgstr "Su %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Al momento non ci sono note. Creane una cliccando sul bottone (+)."
@@ -1538,6 +1576,10 @@ msgstr "Spostare le note %d sul Taccuino \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Premere per impostare la password di decrittografia."
#, fuzzy
msgid "Clear alarm"
msgstr "Imposta Allarme"
msgid "Save alarm"
msgstr "Salva Allarme"
@@ -1550,8 +1592,34 @@ msgstr "Conferma"
msgid "Cancel synchronisation"
msgstr "Cancella la sincronizzazione"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Cancellazione... Attendere per favore."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Controlla la configurazione della sincronizzazione"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "L'applicazione è stata autorizzata con successo."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Decrittografia Elementi: %d/%d"
msgid "New tags:"
@@ -1666,6 +1734,9 @@ msgstr "Mostra i metadati"
msgid "View on map"
msgstr "Guarda sulla mappa"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Cancella Taccuino"
@@ -1689,6 +1760,9 @@ msgstr ""
msgid "Welcome"
msgstr "Benvenuto"
#~ msgid "State: %s."
#~ msgstr "Stato: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Esiste già un Taccuino col titolo \"%s\""

View File

@@ -445,6 +445,9 @@ msgstr "同期プロセスを初期化できませんでした。"
msgid "Starting synchronisation..."
msgstr "同期を開始中..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "中止中...お待ちください。"
@@ -615,6 +618,10 @@ msgstr "切り取り"
msgid "Paste"
msgstr "貼り付け"
#, fuzzy
msgid "Select all"
msgstr "日付の選択"
msgid "Bold"
msgstr "太字"
@@ -927,6 +934,14 @@ msgstr "%s - コピー"
msgid "Switch between note and to-do type"
msgstr "ノートとToDoを切り替え"
#, fuzzy
msgid "Switch to note type"
msgstr "ノートとToDoを切り替え"
#, fuzzy
msgid "Switch to to-do type"
msgstr "ノートとToDoを切り替え"
msgid "Copy Markdown link"
msgstr "Markdownのリンクをコピー"
@@ -949,6 +964,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "開く..."
@@ -965,6 +983,9 @@ msgstr "クリップボードにパスを保存"
msgid "Copy Link Address"
msgstr "リンクアドレスをコピー"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "次のリンクまたはメッセージはサポートしていません: %s"
@@ -1002,9 +1023,6 @@ msgstr "アラームをセット"
msgid "In: %s"
msgstr "内: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "ハイパーリンク"
@@ -1081,6 +1099,14 @@ msgstr "同期"
msgid "Notebooks"
msgstr "ノートブック"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "復号中のアイテム: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "リソース: %d."
msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
@@ -1125,6 +1151,9 @@ msgstr ""
"トークンの更新ができませんでした。認証データがありません。同期を再度行うこと"
"で解決することがあります。"
msgid "Untitled"
msgstr "名称未設定"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1172,10 +1201,6 @@ msgstr "リモートアイテムの削除: %d."
msgid "Fetched items: %d/%d."
msgstr "取得したアイテム: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "状態: \"%s\"."
msgid "Cancelling..."
msgstr "中止中..."
@@ -1224,9 +1249,6 @@ msgstr "アップデート日"
msgid "created date"
msgstr "作成日"
msgid "Untitled"
msgstr "名称未設定"
msgid "This note does not have geolocation information."
msgstr "このノートには位置情報がありません。"
@@ -1289,6 +1311,12 @@ msgstr "トレイアイコンの表示"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr "アプリケーションをトレイアンコンで最小化して起動"
@@ -1421,6 +1449,10 @@ msgstr "Joplin エクスポートディレクトリ"
msgid "Evernote Export File"
msgstr "Evernote エクスポートファイル"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin エクスポートディレクトリ"
msgid "Directory"
msgstr "ディレクトリ"
@@ -1495,6 +1527,12 @@ msgstr "直近のアラーム"
msgid "On %s: %s"
msgstr "日時 %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "ノートがありません。(+)ボタンを押して新しいノートを作成してください。"
@@ -1523,6 +1561,10 @@ msgstr "%d個のノートを\"%s\"に移動しますか?"
msgid "Press to set the decryption password."
msgstr "復号するパスワードを入力してください。"
#, fuzzy
msgid "Clear alarm"
msgstr "アラームをセット"
msgid "Save alarm"
msgstr "アラームの保存"
@@ -1535,8 +1577,34 @@ msgstr "確認"
msgid "Cancel synchronisation"
msgstr "同期の中止"
#, fuzzy
msgid "Checking... Please wait."
msgstr "中止中...お待ちください。"
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "同期の設定を確認する"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "アプリケーションは問題なく認証されました。"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "復号中のアイテム: %d/%d"
msgid "New tags:"
@@ -1646,6 +1714,9 @@ msgstr "メタデータを表示"
msgid "View on map"
msgstr "地図上に表示"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "ノートブックを削除"
@@ -1670,6 +1741,9 @@ msgstr ""
msgid "Welcome"
msgstr "ようこそ"
#~ msgid "State: %s."
#~ msgstr "状態: \"%s\"."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "次の名前のノートブックはすでに存在しています: \"%s\""

View File

@@ -408,6 +408,9 @@ msgstr ""
msgid "Starting synchronisation..."
msgstr ""
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr ""
@@ -552,6 +555,9 @@ msgstr ""
msgid "Paste"
msgstr ""
msgid "Select all"
msgstr ""
msgid "Bold"
msgstr ""
@@ -843,6 +849,12 @@ msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
@@ -865,6 +877,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr ""
@@ -881,6 +896,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -916,9 +934,6 @@ msgstr ""
msgid "In: %s"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -995,6 +1010,14 @@ msgstr ""
msgid "Notebooks"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1037,6 +1060,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr ""
msgid "Untitled"
msgstr ""
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1078,10 +1104,6 @@ msgstr ""
msgid "Fetched items: %d/%d."
msgstr ""
#, javascript-format
msgid "State: %s."
msgstr ""
msgid "Cancelling..."
msgstr ""
@@ -1128,9 +1150,6 @@ msgstr ""
msgid "created date"
msgstr ""
msgid "Untitled"
msgstr ""
msgid "This note does not have geolocation information."
msgstr ""
@@ -1193,6 +1212,12 @@ msgstr ""
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1310,6 +1335,9 @@ msgstr ""
msgid "Evernote Export File"
msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1379,6 +1407,12 @@ msgstr ""
msgid "On %s: %s"
msgstr ""
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -1407,6 +1441,9 @@ msgstr ""
msgid "Press to set the decryption password."
msgstr ""
msgid "Clear alarm"
msgstr ""
msgid "Save alarm"
msgstr ""
@@ -1419,8 +1456,31 @@ msgstr ""
msgid "Cancel synchronisation"
msgstr ""
msgid "Checking... Please wait."
msgstr ""
msgid "Success! Synchronisation configuration appears to be correct."
msgstr ""
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
msgid "The application has been authorised!"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr ""
msgid "New tags:"
@@ -1526,6 +1586,9 @@ msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr ""

View File

@@ -446,6 +446,9 @@ msgstr "동기화를 시작할 수 없습니다."
msgid "Starting synchronisation..."
msgstr "동기화를 시작합니다..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "취소하는 중입니다... 잠시만 기다리세요."
@@ -612,6 +615,10 @@ msgstr "잘라내기"
msgid "Paste"
msgstr "붙여넣기"
#, fuzzy
msgid "Select all"
msgstr "날짜 선택"
msgid "Bold"
msgstr "굵게"
@@ -921,6 +928,14 @@ msgstr "%s - 복사"
msgid "Switch between note and to-do type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
#, fuzzy
msgid "Switch to note type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
#, fuzzy
msgid "Switch to to-do type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
msgid "Copy Markdown link"
msgstr "마크다운 링크 복사"
@@ -943,6 +958,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "열기..."
@@ -959,6 +977,9 @@ msgstr "경로를 클립보드에 복사"
msgid "Copy Link Address"
msgstr "링크 주소 복사"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "지원하지 않는 링크 또는 메세지: %s"
@@ -996,9 +1017,6 @@ msgstr "알람 설정"
msgid "In: %s"
msgstr "내부: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "하이퍼링크"
@@ -1075,6 +1093,14 @@ msgstr "동기화"
msgid "Notebooks"
msgstr "노트북"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "복호화 항목: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "리소스: %d."
msgid "Please select where the sync status should be exported to"
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
@@ -1119,6 +1145,9 @@ msgstr ""
"토큰 새로고침 불가: 인증 데이터를 찾을 수 없습니다. 동기화를 다시 시도하면 문"
"제가 해결될수도 있습니다."
msgid "Untitled"
msgstr "제목 없음"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1166,10 +1195,6 @@ msgstr "원격 항목 삭제됨: %d."
msgid "Fetched items: %d/%d."
msgstr "가져온 항목: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "상태: %s."
msgid "Cancelling..."
msgstr "취소하는 중..."
@@ -1216,9 +1241,6 @@ msgstr "업데이트된 날짜"
msgid "created date"
msgstr "만들어진 날짜"
msgid "Untitled"
msgstr "제목 없음"
msgid "This note does not have geolocation information."
msgstr "이 노트는 지리적 위치 정보를 포함하고 있지 않습니다."
@@ -1281,6 +1303,12 @@ msgstr "트레이 아이콘 표시"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1411,6 +1439,10 @@ msgstr "조플린 내보내기 폴더"
msgid "Evernote Export File"
msgstr "에버노트 내보내기 파일"
#, fuzzy
msgid "Json Export Directory"
msgstr "조플린 내보내기 폴더"
msgid "Directory"
msgstr "폴더"
@@ -1485,6 +1517,12 @@ msgstr "다가오는 예정된 알람"
msgid "On %s: %s"
msgstr "%s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "노트가 없습니다. (+) 버튼을 선택해 새로 만드세요."
@@ -1513,6 +1551,10 @@ msgstr "%d 노트를 \"%s\" 노트북으로 옮길까요?"
msgid "Press to set the decryption password."
msgstr "복호화 암호를 설정하려면 누르세요."
#, fuzzy
msgid "Clear alarm"
msgstr "알람 설정"
msgid "Save alarm"
msgstr "알람 저장"
@@ -1525,8 +1567,34 @@ msgstr "확인"
msgid "Cancel synchronisation"
msgstr "동기화 취소"
#, fuzzy
msgid "Checking... Please wait."
msgstr "취소하는 중입니다... 잠시만 기다리세요."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "동기화 설정 확인"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "애플리케이션이 성공적으로 허가되었습니다."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "복호화 항목: %d/%d"
msgid "New tags:"
@@ -1636,6 +1704,9 @@ msgstr "메타데이터 표시"
msgid "View on map"
msgstr "지도에 표시"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "노트북 삭제"
@@ -1658,5 +1729,8 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
msgid "Welcome"
msgstr "환영합니다"
#~ msgid "State: %s."
#~ msgstr "상태: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "같은 제목의 노트북이 이미 있습니다: \"%s\""

View File

@@ -456,6 +456,9 @@ msgstr "Kan de synchronisatie niet starten."
msgid "Starting synchronisation..."
msgstr "Synchronisatie starten..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Annuleren.. Even geduld."
@@ -630,6 +633,10 @@ msgstr "Knip"
msgid "Paste"
msgstr "Plak"
#, fuzzy
msgid "Select all"
msgstr "Selecteer datum"
msgid "Bold"
msgstr ""
@@ -941,6 +948,14 @@ msgstr "Kopieer"
msgid "Switch between note and to-do type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to note type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Wissel tussen notitie en to-do type"
msgid "Copy Markdown link"
msgstr ""
@@ -965,6 +980,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr ""
@@ -982,6 +1000,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Link of bericht \"%s\" wordt niet ondersteund"
@@ -1017,9 +1038,6 @@ msgstr "Zet melding"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1100,6 +1118,14 @@ msgstr "Synchroniseer"
msgid "Notebooks"
msgstr "Notitieboeken"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Opgehaalde items: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
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"
@@ -1145,6 +1171,9 @@ msgstr ""
"Kan token niet vernieuwen: authenticatiedata ontbreekt. Herstarten van de "
"synchronisatie kan het probleem eventueel oplossen. "
msgid "Untitled"
msgstr "Untitled"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1192,10 +1221,6 @@ msgstr "Verwijderde remote items: %d."
msgid "Fetched items: %d/%d."
msgstr "Opgehaalde items: %d/%d."
#, fuzzy, javascript-format
msgid "State: %s."
msgstr "Status: \"%s\""
msgid "Cancelling..."
msgstr "Annuleren..."
@@ -1248,9 +1273,6 @@ msgstr "Bijgewerkt: %d."
msgid "created date"
msgstr "Aangemaakt: %d."
msgid "Untitled"
msgstr "Untitled"
msgid "This note does not have geolocation information."
msgstr "Deze notitie bevat geen geo-locatie informatie."
@@ -1318,6 +1340,12 @@ msgstr ""
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1446,6 +1474,10 @@ msgstr ""
msgid "Evernote Export File"
msgstr "Exporteer Evernote bestanden"
#, fuzzy
msgid "Json Export Directory"
msgstr "Exporteer Evernote bestanden"
msgid "Directory"
msgstr ""
@@ -1519,6 +1551,12 @@ msgstr "Meldingen"
msgid "On %s: %s"
msgstr "Op %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Er zijn momenteel geen notities. Maak een notitie door op (+) te klikken."
@@ -1548,6 +1586,10 @@ msgstr "Verplaats %d notities naar notitieboek \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Klik om het decryptie wachtwoord in te stellen"
#, fuzzy
msgid "Clear alarm"
msgstr "Zet melding"
#, fuzzy
msgid "Save alarm"
msgstr "Zet melding"
@@ -1561,8 +1603,34 @@ msgstr "Bevestig"
msgid "Cancel synchronisation"
msgstr "Annuleer synchronisatie"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Annuleren.. Even geduld."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Annuleer synchronisatie"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "De applicatie is succesvol geauthenticeerd."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Opgehaalde items: %d/%d."
msgid "New tags:"
@@ -1669,6 +1737,9 @@ msgstr "Toon metadata"
msgid "View on map"
msgstr "Toon op de kaart"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Verwijder notitieboek"
@@ -1693,6 +1764,10 @@ msgstr ""
msgid "Welcome"
msgstr "Welkom"
#, fuzzy
#~ msgid "State: %s."
#~ msgstr "Status: \"%s\""
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Er bestaat al een notitieboek met \"%s\" als titel"

View File

@@ -457,6 +457,9 @@ msgstr "De synchronisatie kan niet worden geïnitaliseerd."
msgid "Starting synchronisation..."
msgstr "Bezig met starten van synchronisatie..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Bezig met annuleren... Even geduld."
@@ -629,6 +632,10 @@ msgstr "Knippen"
msgid "Paste"
msgstr "Plakken"
#, fuzzy
msgid "Select all"
msgstr "Datum kiezen"
msgid "Bold"
msgstr "Vetgedrukt"
@@ -945,6 +952,14 @@ msgstr "%s - kopiëren"
msgid "Switch between note and to-do type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to note type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schakelen tussen notitie en taak"
msgid "Copy Markdown link"
msgstr "Markdownlink kopiëren"
@@ -971,6 +986,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Openen..."
@@ -987,6 +1005,9 @@ msgstr "Pad kopiëren naar klembord"
msgid "Copy Link Address"
msgstr "Linkadres kopiëren"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Niet-ondersteunde link of bericht: %s"
@@ -1024,9 +1045,6 @@ msgstr "Alarm instellen"
msgid "In: %s"
msgstr "In: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Hyperlink"
@@ -1103,6 +1121,14 @@ msgstr "Synchroniseren"
msgid "Notebooks"
msgstr "Notitieboeken"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Bezig met ontsleutelen van items: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Bronnen: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Kies waar de synchronisatiestatus naar moet worden geëxporteerd"
@@ -1147,6 +1173,9 @@ msgstr ""
"Kan toegangssleutel niet verversen: de authenticatiegegevens ontbreken. "
"Probeer om de synchronisatie opnieuw te starten."
msgid "Untitled"
msgstr "Naamloos"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1194,10 +1223,6 @@ msgstr "Externe items verwijderd: %d."
msgid "Fetched items: %d/%d."
msgstr "Items opgehaald: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Status: %s."
msgid "Cancelling..."
msgstr "Bezig met annuleren..."
@@ -1244,9 +1269,6 @@ msgstr "bijgewerkt op"
msgid "created date"
msgstr "gecreëerd op"
msgid "Untitled"
msgstr "Naamloos"
msgid "This note does not have geolocation information."
msgstr "Deze notitie bevat geen locatie-informatie."
@@ -1309,6 +1331,12 @@ msgstr "Systeemvakpictogram tonen"
msgid "Note: Does not work in all desktop environments."
msgstr "Let op: dit werkt niet in alle werkomgevingen."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1442,6 +1470,10 @@ msgstr "Joplin-exportmap"
msgid "Evernote Export File"
msgstr "Evernote-exportbestand"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin-exportmap"
msgid "Directory"
msgstr "Map"
@@ -1518,6 +1550,12 @@ msgstr "Aankomende alarmen"
msgid "On %s: %s"
msgstr "Op %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Er zijn momenteel geen notities. Creëer een notitie door te drukken op de "
@@ -1548,6 +1586,10 @@ msgstr "%d notities verplaatsen naar notitieboek \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Druk om het ontsleutelwachtwoord in te stellen."
#, fuzzy
msgid "Clear alarm"
msgstr "Alarm instellen"
msgid "Save alarm"
msgstr "Alarm opslaam"
@@ -1560,8 +1602,34 @@ msgstr "Bevestigen"
msgid "Cancel synchronisation"
msgstr "Synchronisatie annuleren"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Bezig met annuleren... Even geduld."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Synchronisatieconfiguratie controleren"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "De applicatie is geautoriseerd."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Bezig met ontsleutelen van items: %d/%d"
msgid "New tags:"
@@ -1672,6 +1740,9 @@ msgstr "Metagegevens tonen"
msgid "View on map"
msgstr "Tonen op kaart"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Notitieboek verwijderen"
@@ -1696,5 +1767,8 @@ msgstr ""
msgid "Welcome"
msgstr "Welkom"
#~ msgid "State: %s."
#~ msgstr "Status: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Er bestaat al een notitieboek met deze titel: \"%s\""

View File

@@ -453,6 +453,9 @@ msgstr "Kan ikke starte synkronisering."
msgid "Starting synchronisation..."
msgstr "Starter synkronisering..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Stopper… Vennligst vent."
@@ -623,6 +626,10 @@ msgstr "Klipp ut"
msgid "Paste"
msgstr "Lim inn"
#, fuzzy
msgid "Select all"
msgstr "Velg dato"
msgid "Bold"
msgstr ""
@@ -933,6 +940,14 @@ msgstr "Kopier"
msgid "Switch between note and to-do type"
msgstr "Bytt mellom notat og gjøremål"
#, fuzzy
msgid "Switch to note type"
msgstr "Bytt mellom notat og gjøremål"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Bytt mellom notat og gjøremål"
msgid "Copy Markdown link"
msgstr "Kopier Link"
@@ -956,6 +971,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Åpne..."
@@ -972,6 +990,9 @@ msgstr "Kopier sti til utklippshanteren"
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Kobling eller melding som ikke støttes: %s"
@@ -1009,9 +1030,6 @@ msgstr "Angi Alarm"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1090,6 +1108,14 @@ msgstr "Synkroniser"
msgid "Notebooks"
msgstr "Notisbøker"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede elementer: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressurser: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Velg hvor synkroniseringsstatusen skal eksporteres til"
@@ -1134,6 +1160,9 @@ msgstr ""
"Kan ikke oppdatere token: godkjenningsdata mangler. Hvis du starter "
"synkroniseringen på nytt, kan dette løse problemet."
msgid "Untitled"
msgstr "Uten navn"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1181,10 +1210,6 @@ msgstr "Slett eksterne elementer: %d."
msgid "Fetched items: %d/%d."
msgstr "Hentede elementer: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Status: %s."
msgid "Cancelling..."
msgstr "Stopper… Vennligst vent."
@@ -1234,9 +1259,6 @@ msgstr "Oppdatert: %d."
msgid "created date"
msgstr "Laget: %d."
msgid "Untitled"
msgstr "Uten navn"
msgid "This note does not have geolocation information."
msgstr "Dette notatet har ikke geografisk informasjon."
@@ -1299,6 +1321,12 @@ msgstr "Vis ikon i systemkurven"
msgid "Note: Does not work in all desktop environments."
msgstr "Merk: fungerer ikke i alle skrivebordsmiljøer."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1428,6 +1456,10 @@ msgstr "Joplin Export Katalog"
msgid "Evernote Export File"
msgstr "Evernote Export Fil"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin Export Katalog"
msgid "Directory"
msgstr "Katalog"
@@ -1502,6 +1534,12 @@ msgstr "Kommende alarmer"
msgid "On %s: %s"
msgstr "Pa %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Du har ennå ingen notater. Lag en ved å klikke på (+) knappen."
@@ -1530,6 +1568,10 @@ msgstr "Flytt %d notater til notisblokk \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Trykk for å sette krypteringspassordet"
#, fuzzy
msgid "Clear alarm"
msgstr "Angi Alarm"
#, fuzzy
msgid "Save alarm"
msgstr "Angi Alarm"
@@ -1543,8 +1585,34 @@ msgstr "Bekreft"
msgid "Cancel synchronisation"
msgstr "Stopp Synkronisering"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Stopper… Vennligst vent."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Sjekk synkroniseringskonfigurasjonen"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Applikasjonen har blitt godkjent."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Hentede elementer: %d/%d."
msgid "New tags:"
@@ -1654,6 +1722,9 @@ msgstr "Vis Metadata"
msgid "View on map"
msgstr "Se på kart"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Slett notisbok"
@@ -1676,5 +1747,8 @@ msgstr "Du har ennå ingen notisbok. Lag en ved å klikke på (+) knappen."
msgid "Welcome"
msgstr "Velkommen"
#~ msgid "State: %s."
#~ msgstr "Status: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "En notisblokk med denne tittelen eksisterer allerede: \"%s\""

View File

@@ -1,7 +1,8 @@
# SOME DESCRIPTIVE TITLE.
# pt_BR locale strings - Joplin.
# Copyright (C) YEAR Laurent Cozic
# This file is distributed under the same license as the Joplin-CLI package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# Updated by Renato Xavier da Silveira Rosa <renatoxsr@gmail.com>, 2018.
#
msgid ""
msgstr ""
@@ -13,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\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -147,7 +148,7 @@ msgid "Completed decryption."
msgstr "Decriptação completada."
msgid "Enabled"
msgstr "Desabilitado"
msgstr "Habilitado"
msgid "Disabled"
msgstr "Desabilitado"
@@ -454,10 +455,12 @@ msgstr "Não é possível inicializar o sincronizador."
msgid "Starting synchronisation..."
msgstr "Iniciando sincronização..."
msgid "Downloading resources..."
msgstr "Baixando os recursos..."
msgid "Cancelling... Please wait."
msgstr "Cancelando... Aguarde."
#, fuzzy
msgid ""
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
"[tag] from [note], or to list the notes associated with [tag]. The command "
@@ -465,7 +468,8 @@ msgid ""
msgstr ""
"<tag-command> pode ser \"add\", \"remove\" ou \"list\" para atribuir ou "
"remover [tag] de [nota], ou para listar as notas associadas a [tag]. O "
"comando `taglist` pode ser usado para listar todas as tags."
"comando `tag list` pode ser usado para listar todas as tags (use -l para "
"opção longa)."
#, javascript-format
msgid "Invalid command: \"%s\""
@@ -625,6 +629,9 @@ msgstr "Cortar"
msgid "Paste"
msgstr "Colar"
msgid "Select all"
msgstr "Selecionar tudo"
msgid "Bold"
msgstr "Negrito"
@@ -709,7 +716,7 @@ msgid "No"
msgstr "Não"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "Token foi copiado para a \\u00e1rea de transfer\\u00eancia!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
@@ -721,7 +728,7 @@ msgstr "Status: Iniciado, na porta %d"
#, javascript-format
msgid "Status: %s"
msgstr "Status: \"%s\"."
msgstr "Status: %s"
msgid "Disable Web Clipper Service"
msgstr "Desabilitar serviço Web Clipper"
@@ -760,20 +767,21 @@ msgstr "Passo 2: Instalar a extensão"
msgid "Download and install the relevant extension for your browser:"
msgstr "Baixe e instale a extensão relevante para seu browser:"
#, fuzzy
msgid "Advanced options"
msgstr "Mostrar opções avançadas"
msgid "Authorisation token:"
msgstr ""
msgstr "Token de autoriza\\u00e7\\u00e3o:"
msgid "Copy token"
msgstr ""
msgstr "Copira 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."
msgid "Check synchronisation configuration"
msgstr "Verificar a configuração da sincronização"
@@ -939,6 +947,12 @@ msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Alternar entre os tipos Nota e Tarefa"
msgid "Switch to note type"
msgstr "Alternar para o tipo Nota"
msgid "Switch to to-do type"
msgstr "Alternar para o tipo Tarefa"
msgid "Copy Markdown link"
msgstr "Copiar link de Markdown"
@@ -956,10 +970,13 @@ msgid ""
msgstr "Atualmente, não há cadernos. Crie um, clicando em \"Novo caderno\"."
msgid "Location"
msgstr ""
msgstr "Localização"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note properties"
msgstr "Propriedades da nota"
msgid "Open..."
msgstr "Abrir..."
@@ -977,6 +994,9 @@ msgstr "Copiar caminho para a área de transferência"
msgid "Copy Link Address"
msgstr "Copiar endereço do link"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr "O anexo ainda não foi baixado ou decriptado."
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Link ou mensagem não suportada: %s"
@@ -1014,9 +1034,6 @@ msgstr "Definir alarme"
msgid "In: %s"
msgstr "Em: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Hiperlink"
@@ -1042,7 +1059,7 @@ msgid "Click to stop external editing"
msgstr "Clique para encerrar edição externa"
msgid "Watching..."
msgstr "Verificando..."
msgstr "Observando alterações..."
msgid "to-do"
msgstr "tarefa"
@@ -1093,6 +1110,14 @@ msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Cadernos"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Decriptando itens: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Buscando recursos: %d"
msgid "Please select where the sync status should be exported to"
msgstr ""
"Favor selecionar o local para onde o status de sincronia deveria ser "
@@ -1139,6 +1164,9 @@ msgstr ""
"Não é possível atualizar token: faltam dados de autenticação. Iniciar a "
"sincronização novamente pode corrigir o problema."
msgid "Untitled"
msgstr "Sem título"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1186,10 +1214,6 @@ msgstr "Itens remotos excluídos: %d."
msgid "Fetched items: %d/%d."
msgstr "Itens pesquisados: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Estado: \"%s\"."
msgid "Cancelling..."
msgstr "Cancelando..."
@@ -1237,9 +1261,6 @@ msgstr "data de ataualização"
msgid "created date"
msgstr "data de criação"
msgid "Untitled"
msgstr "Sem título"
msgid "This note does not have geolocation information."
msgstr "Esta nota não possui informações de geolocalização."
@@ -1279,7 +1300,7 @@ msgid "Sort notes by"
msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Inverter ordem de classificação."
msgstr "Inverter ordem de classificação"
msgid "Save geo-location with notes"
msgstr "Salvar geolocalização com notas"
@@ -1300,10 +1321,19 @@ msgid "Show tray icon"
msgstr "Exibir tray icon"
msgid "Note: Does not work in all desktop environments."
msgstr "Nota: não funciona em todos os ambientes de desktop"
msgstr "Nota: não funciona em todos os ambientes de desktop."
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 ""
"Isso irá permitir que o Joplin continue sendo executado em segundo plano. É "
"recomendado que você habilita essa configuração para que suas notas "
"sejamconstantemente sincronizadas, de modo a reduzir as chances de conflitos."
msgid "Start application minimised in the tray icon"
msgstr ""
msgstr "Iniciar aplicativo minimizado na barra de tarefas"
msgid "Global zoom percentage"
msgstr "Porcentagem global do zoom"
@@ -1379,6 +1409,9 @@ msgid ""
"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"
@@ -1408,7 +1441,7 @@ msgstr ""
"os certificados, ou caminhos para arquivos cert. Por exemplo, /my/cert_dir, /"
"other/custom.pem. Note que se você fizer mudanças nas configurações de TLS, "
"você tem que salvar as mudanças antes de clicar em \"Verificar a "
"configuração da sincronização\""
"configuração da sincronização\"."
msgid "Ignore TLS certificate errors"
msgstr "Ignorar erros de certificados TLS"
@@ -1419,7 +1452,7 @@ msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
msgstr "A tag \"%s\" já existe. Escolha um nome diferente."
msgid "Joplin Export File"
msgstr "Arquivo de Exportação do Joplin"
@@ -1433,8 +1466,11 @@ msgstr "Diretório de Exportação do Joplin"
msgid "Evernote Export File"
msgstr "Arquivo de Exportação do Evernote"
msgid "Json Export Directory"
msgstr "Diretório de Exportação JSON"
msgid "Directory"
msgstr "DIretório"
msgstr "Diretório"
#, javascript-format
msgid "Cannot load \"%s\" module for format \"%s\""
@@ -1508,6 +1544,12 @@ msgstr "Próximos alarmes"
msgid "On %s: %s"
msgstr "Em %s: %s"
msgid "Permission to use camera"
msgstr "Permissão para utilizar sua c\\u00e2mera"
msgid "Your permission to use your camera is required."
msgstr "É necessária a sua permissão para utilizar sua c\\u00e2mera."
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 (+)."
@@ -1536,6 +1578,9 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Pressione para configurar a senha de decriptação."
msgid "Clear alarm"
msgstr "Limpar alarme"
msgid "Save alarm"
msgstr "Salvar alarme"
@@ -1548,9 +1593,40 @@ msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronização"
msgid "Checking... Please wait."
msgstr "Verificando... Por favor aguarde."
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Sucesso! A configuração da sincronização parece estar correta."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Erro. Verifique se a URL, nome de usuário, senha, etc., estão corretos e "
"tenha certeza que o destino da sincronização está acessível. O erro "
"reportado foi:"
msgid "The application has been authorised!"
msgstr "O aplicativo foi autorizado!"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Decriptando itens: %d/%d."
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
"Não foi possível autorizar o aplicativo:\n"
"\n"
"%s\n"
"\n"
"Por favor tente novamente."
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Itens decriptados: %s / %s"
msgid "New tags:"
msgstr "Novas tags:"
@@ -1570,8 +1646,8 @@ msgid ""
"- Storage: to allow attaching files to notes and to enable filesystem "
"synchronisation."
msgstr ""
"- Armazenamento: para permitir anexar arquivos a notas, e para permitir a "
"sincronização do sistema de arquivos "
"- Armazenamento: para permitir anexar arquivos a notas e para permitir a "
"sincronização do sistema de arquivos."
msgid "- Camera: to allow taking a picture and attaching it to a note."
msgstr "- Câmera: para permitir tirar fotos e anexar a uma nota."
@@ -1662,6 +1738,9 @@ msgstr "Exibir metadados"
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr "Ir para a URL de origem"
msgid "Delete notebook"
msgstr "Excluir caderno"
@@ -1684,6 +1763,9 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
msgid "Welcome"
msgstr "Bem-vindo"
#~ msgid "State: %s."
#~ msgstr "Estado: \"%s\"."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Já existe caderno com este título: \"%s\""

View File

@@ -414,6 +414,9 @@ msgstr "Nu se poate inițializa sincronizatorul."
msgid "Starting synchronisation..."
msgstr "Se începe sincronizarea..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Se anulează... Vă rugăm să așteptați."
@@ -565,6 +568,10 @@ msgstr "Tăiați"
msgid "Paste"
msgstr "Lipește"
#, fuzzy
msgid "Select all"
msgstr "Selectați data"
msgid "Bold"
msgstr ""
@@ -857,6 +864,14 @@ msgstr "%s - Copiați"
msgid "Switch between note and to-do type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to note type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schimbați între notiță și sarcină"
msgid "Copy Markdown link"
msgstr "Copiați link-ul Markdown"
@@ -879,6 +894,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Deschideți..."
@@ -895,6 +913,9 @@ msgstr "Copiați locația în clipboard"
msgid "Copy Link Address"
msgstr "Copați adresa link-ului"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -930,9 +951,6 @@ msgstr "Setați alarma"
msgid "In: %s"
msgstr "În: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Hyperlink"
@@ -1009,6 +1027,14 @@ msgstr "Sincronizați"
msgid "Notebooks"
msgstr "Caiete de notițe"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Se decriptează itemi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurse: %d."
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1051,6 +1077,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr ""
msgid "Untitled"
msgstr "Fără denumire"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1092,10 +1121,6 @@ msgstr ""
msgid "Fetched items: %d/%d."
msgstr ""
#, javascript-format
msgid "State: %s."
msgstr "Statut: %s."
msgid "Cancelling..."
msgstr "Se amână..."
@@ -1142,9 +1167,6 @@ msgstr "data actualizării"
msgid "created date"
msgstr "data creării"
msgid "Untitled"
msgstr "Fără denumire"
msgid "This note does not have geolocation information."
msgstr ""
@@ -1207,6 +1229,12 @@ msgstr "Afișați iconița coșul de gunoi"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1324,6 +1352,9 @@ msgstr ""
msgid "Evernote Export File"
msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1393,6 +1424,12 @@ msgstr "Alarmele următoare"
msgid "On %s: %s"
msgstr "Pe %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -1421,6 +1458,10 @@ msgstr "Mutați %d notițe în caietul de notițe \"%s\"?"
msgid "Press to set the decryption password."
msgstr ""
#, fuzzy
msgid "Clear alarm"
msgstr "Setați alarma"
msgid "Save alarm"
msgstr "Salvați alarma"
@@ -1433,8 +1474,32 @@ msgstr "Confirmați"
msgid "Cancel synchronisation"
msgstr "Amânați sincronizarea"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Se anulează... Vă rugăm să așteptați."
msgid "Success! Synchronisation configuration appears to be correct."
msgstr ""
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
msgid "The application has been authorised!"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Se decriptează itemi: %d/%d"
msgid "New tags:"
@@ -1540,6 +1605,9 @@ msgstr "Afișați metadatele"
msgid "View on map"
msgstr "Vizualizați pe hartă"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Ștergeți caiet de notițe"
@@ -1563,5 +1631,8 @@ msgstr ""
msgid "Welcome"
msgstr "Bine ați venit"
#~ msgid "State: %s."
#~ msgstr "Statut: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Un caiet de notițe cu acest titlu există deja: \"%s\""

View File

@@ -456,6 +456,9 @@ msgstr "Не удалось инициировать синхронизацию.
msgid "Starting synchronisation..."
msgstr "Начало синхронизации..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Отмена... Пожалуйста, ожидайте."
@@ -627,6 +630,10 @@ msgstr "Вырезать"
msgid "Paste"
msgstr "Вставить"
#, fuzzy
msgid "Select all"
msgstr "Выбрать дату"
msgid "Bold"
msgstr ""
@@ -936,6 +943,14 @@ msgstr "Копировать"
msgid "Switch between note and to-do type"
msgstr "Переключить тип между заметкой и задачей"
#, fuzzy
msgid "Switch to note type"
msgstr "Переключить тип между заметкой и задачей"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Переключить тип между заметкой и задачей"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
@@ -959,6 +974,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Открыть..."
@@ -975,6 +993,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Неподдерживаемая ссыка или сообщение: %s"
@@ -1012,9 +1033,6 @@ msgstr "Установить напоминание"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1093,6 +1111,14 @@ msgstr "Синхронизировать"
msgid "Notebooks"
msgstr "Блокноты"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Получено элементов: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ресурсов: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Выберите, куда должен быть экспортирован статус синхронизации"
@@ -1137,6 +1163,9 @@ msgstr ""
"Не удалось обновить токен: отсутствуют данные аутентификации. Повторный "
"запуск синхронизации может решить проблему."
msgid "Untitled"
msgstr "Без имени"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1184,10 +1213,6 @@ msgstr "Удалено удалённых элементов: %d."
msgid "Fetched items: %d/%d."
msgstr "Получено элементов: %d/%d."
#, fuzzy, javascript-format
msgid "State: %s."
msgstr "Статус: «%s»."
msgid "Cancelling..."
msgstr "Отмена..."
@@ -1238,9 +1263,6 @@ msgstr "Обновлено: %d."
msgid "created date"
msgstr "Создано: %d."
msgid "Untitled"
msgstr "Без имени"
msgid "This note does not have geolocation information."
msgstr "Эта заметка не содержит информации о геолокации."
@@ -1304,6 +1326,12 @@ msgstr "Показывать иконку в панели задач"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1432,6 +1460,10 @@ msgstr "Папка экспорта Joplin"
msgid "Evernote Export File"
msgstr "Файл экспорта Evernote"
#, fuzzy
msgid "Json Export Directory"
msgstr "Папка экспорта Joplin"
msgid "Directory"
msgstr "Директория"
@@ -1507,6 +1539,12 @@ msgstr "Грядущие напоминания"
msgid "On %s: %s"
msgstr "В %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Сейчас здесь нет заметок. Создаёте новую, нажав кнопку (+)."
@@ -1535,6 +1573,10 @@ msgstr "Переместить %d заметок в блокнот «%s»?"
msgid "Press to set the decryption password."
msgstr "Нажмите, чтобы установить пароль для расшифровки."
#, fuzzy
msgid "Clear alarm"
msgstr "Установить напоминание"
#, fuzzy
msgid "Save alarm"
msgstr "Установить напоминание"
@@ -1548,8 +1590,34 @@ msgstr "Подтвердить"
msgid "Cancel synchronisation"
msgstr "Отменить синхронизацию"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Отмена... Пожалуйста, ожидайте."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Проверить настройки синхронизации"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Приложение успешно авторизовано."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Получено элементов: %d/%d."
msgid "New tags:"
@@ -1656,6 +1724,9 @@ msgstr "Показать метаданные"
msgid "View on map"
msgstr "Посмотреть на карте"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Удалить блокнот"
@@ -1678,6 +1749,10 @@ msgstr "У вас сейчас нет блокнота. Создайте его
msgid "Welcome"
msgstr "Добро пожаловать"
#, fuzzy
#~ msgid "State: %s."
#~ msgstr "Статус: «%s»."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Блокнот с таким названием уже существует: «%s»"

View File

@@ -455,6 +455,9 @@ msgstr "Ni moč zagnati sinhronizatorja."
msgid "Starting synchronisation..."
msgstr "Sinhronizacija se začenja."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "V preklicu...Prosim počakajte."
@@ -626,6 +629,10 @@ msgstr "Izreži"
msgid "Paste"
msgstr "Prilepi"
#, fuzzy
msgid "Select all"
msgstr "Izberi datum"
msgid "Bold"
msgstr ""
@@ -936,6 +943,14 @@ msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to note type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Sistem označevanja"
@@ -963,6 +978,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Odpri..."
@@ -979,6 +997,9 @@ msgstr ""
msgid "Copy Link Address"
msgstr ""
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodprta povezava ali sporočilo: %s"
@@ -1016,9 +1037,6 @@ msgstr "Nastavi alarm"
msgid "In: %s"
msgstr "%s: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr ""
@@ -1097,6 +1115,14 @@ msgstr "Sinhroniziraj"
msgid "Notebooks"
msgstr "Beležnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Preneseni predmeti: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Viri: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
@@ -1141,6 +1167,9 @@ msgstr ""
"Ne gre osvežiti tokena: manjkajo podatki o avtentikaciji. Ponovno zaženite "
"sinhronizacijo, da morda popravite težavo."
msgid "Untitled"
msgstr "Neimenovano"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1188,10 +1217,6 @@ msgstr "Izbrisani oddaljeni predmeti: %d."
msgid "Fetched items: %d/%d."
msgstr "Preneseni predmeti: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Stanje: %s."
msgid "Cancelling..."
msgstr "V preklicu..."
@@ -1242,9 +1267,6 @@ msgstr "Posodobljeno: %d."
msgid "created date"
msgstr "Ustvarjeno: %d."
msgid "Untitled"
msgstr "Neimenovano"
msgid "This note does not have geolocation information."
msgstr "Ta zabeležke nima geografske lokacije."
@@ -1308,6 +1330,12 @@ msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1436,6 +1464,10 @@ msgstr "Joplin izvozno mesto"
msgid "Evernote Export File"
msgstr "Evernote izvozna datoteka"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin izvozno mesto"
msgid "Directory"
msgstr "Mesto datoteke"
@@ -1510,6 +1542,12 @@ msgstr "Prihajajoči alarmi"
msgid "On %s: %s"
msgstr "Vključeno %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Trenutno ni zabeležk. Ustvarite jo s klikom na (+) gumb."
@@ -1538,6 +1576,10 @@ msgstr "Premakni %d zabeležk v beležnico \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Klikni za nastavitev dekripcijskega gesla."
#, fuzzy
msgid "Clear alarm"
msgstr "Nastavi alarm"
#, fuzzy
msgid "Save alarm"
msgstr "Nastavi alarm"
@@ -1551,8 +1593,34 @@ msgstr "Potrdi"
msgid "Cancel synchronisation"
msgstr "Prekliči sinhronizacijo"
#, fuzzy
msgid "Checking... Please wait."
msgstr "V preklicu...Prosim počakajte."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Preveri nastavitve sinhronizacije"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Aplikacija je bila uspešno avtorizirana."
#, javascript-format
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgid "Decrypted items: %s / %s"
msgstr "Preneseni predmeti: %d/%d."
msgid "New tags:"
@@ -1659,6 +1727,9 @@ msgstr "Prikaži meta podatke"
msgid "View on map"
msgstr "Prikaži na zemljevidu"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Izbriši beležnico"
@@ -1681,6 +1752,9 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
msgid "Welcome"
msgstr "Dobrodošli"
#~ msgid "State: %s."
#~ msgstr "Stanje: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Beležnica s tem naslovom že obstaja: \"%s\""

View File

@@ -461,6 +461,9 @@ msgstr "Kan inte initiera synkroniseraren."
msgid "Starting synchronisation..."
msgstr "Startar synkronisering..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "Avbryter... vänta."
@@ -633,6 +636,10 @@ msgstr "Klipp ut"
msgid "Paste"
msgstr "Klistra in"
#, fuzzy
msgid "Select all"
msgstr "Välj datum"
msgid "Bold"
msgstr "Fet"
@@ -948,6 +955,14 @@ msgstr "%s - Kopiera"
msgid "Switch between note and to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to note type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
msgid "Copy Markdown link"
msgstr "Kopiera Markdown-länk"
@@ -972,6 +987,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "Öppna..."
@@ -988,6 +1006,9 @@ msgstr "Kopiera sökväg till urklipp"
msgid "Copy Link Address"
msgstr "Kopiera länkadress"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Länk eller meddelande stöds inte: %s"
@@ -1025,9 +1046,6 @@ msgstr "Sätt alarm"
msgid "In: %s"
msgstr "I: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "Hyperlänk"
@@ -1104,6 +1122,14 @@ msgstr "Synkronisera"
msgid "Notebooks"
msgstr "Anteckningsböcker"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurser: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
@@ -1148,6 +1174,9 @@ msgstr ""
"Kan inte uppdatera token: autentiseringsdata saknas. Om du startar "
"synkroniseringen igen kan det lösa problemet."
msgid "Untitled"
msgstr "Utan titel"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1195,10 +1224,6 @@ msgstr "Borttagna fjärrobjekt: %d."
msgid "Fetched items: %d/%d."
msgstr "Hämtade objekt: %d/%d."
#, javascript-format
msgid "State: %s."
msgstr "Tillstånd: %s."
msgid "Cancelling..."
msgstr "Avbryter..."
@@ -1246,9 +1271,6 @@ msgstr "uppdaterad datum"
msgid "created date"
msgstr "Skapad datum"
msgid "Untitled"
msgstr "Utan titel"
msgid "This note does not have geolocation information."
msgstr "Denna anteckning har inte geolokaliseringsinformation."
@@ -1311,6 +1333,12 @@ msgstr "Visa fältikon"
msgid "Note: Does not work in all desktop environments."
msgstr "Obs: Fungerar inte i alla skrivbordsmiljöer."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1443,6 +1471,10 @@ msgstr "Joplin-exporteringskatalog"
msgid "Evernote Export File"
msgstr "Evernote-exporteringsfil"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin-exporteringskatalog"
msgid "Directory"
msgstr "Katalog"
@@ -1517,6 +1549,12 @@ msgstr "Kommande larm"
msgid "On %s: %s"
msgstr "På %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Det finns för närvarande inga anteckningar. Skapa en genom att klicka på (+)-"
@@ -1547,6 +1585,10 @@ msgstr "Flytta %d anteckningar till anteckningsboken \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Tryck för att ställa in dekrypteringslösenordet."
#, fuzzy
msgid "Clear alarm"
msgstr "Sätt alarm"
msgid "Save alarm"
msgstr "Spara alarm"
@@ -1559,8 +1601,34 @@ msgstr "Bekräfta"
msgid "Cancel synchronisation"
msgstr "Avbryt synkronisering"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Avbryter... vänta."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Kontrollera synkroniseringskonfigurationen"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "Programmet har godkänts."
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Dekrypterar objekt: %d/%d"
msgid "New tags:"
@@ -1675,6 +1743,9 @@ msgstr "Visa metadata"
msgid "View on map"
msgstr "Visa på karta"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "Ta bort anteckningsbok"
@@ -1700,5 +1771,8 @@ msgstr ""
msgid "Welcome"
msgstr "Välkommen"
#~ msgid "State: %s."
#~ msgstr "Tillstånd: %s."
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "En anteckningsbok med denna titel finns redan: \"%s\""

View File

@@ -431,6 +431,9 @@ msgstr "无法初始化同步。"
msgid "Starting synchronisation..."
msgstr "开始同步..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "正在取消... 请稍后。"
@@ -591,6 +594,10 @@ msgstr "剪切"
msgid "Paste"
msgstr "粘贴"
#, fuzzy
msgid "Select all"
msgstr "选择日期"
msgid "Bold"
msgstr "粗体"
@@ -598,7 +605,7 @@ msgid "Italic"
msgstr "斜体"
msgid "Insert Date Time"
msgstr ""
msgstr "插入时间"
#, fuzzy
msgid "Edit in external editor"
@@ -676,7 +683,7 @@ msgid "No"
msgstr "否"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "Token 已被复制到粘贴板"
msgid "The web clipper service is enabled and set to auto-start."
msgstr "网页剪辑服务已启用并设置为自动启动。"
@@ -728,10 +735,10 @@ msgid "Advanced options"
msgstr "显示高级选项"
msgid "Authorisation token:"
msgstr ""
msgstr "授权码:"
msgid "Copy token"
msgstr ""
msgstr "拷贝 token"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
@@ -746,7 +753,7 @@ msgid "Notes and settings are stored in: %s"
msgstr "笔记与设置文件储存目录为:%s"
msgid "Apply"
msgstr ""
msgstr "应用"
msgid "Submit"
msgstr "提交"
@@ -895,6 +902,14 @@ msgstr "%s - 副本"
msgid "Switch between note and to-do type"
msgstr "在笔记和待办事项类型之间切换"
#, fuzzy
msgid "Switch to note type"
msgstr "在笔记和待办事项类型之间切换"
#, fuzzy
msgid "Switch to to-do type"
msgstr "在笔记和待办事项类型之间切换"
msgid "Copy Markdown link"
msgstr "复制 Markdown 链接"
@@ -912,11 +927,14 @@ msgid ""
msgstr "此处没有任何笔记本。点击\"新笔记本\"创建。"
msgid "Location"
msgstr ""
msgstr "位置"
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr "笔记属性"
msgid "Open..."
msgstr "打开…"
@@ -931,7 +949,10 @@ msgid "Copy path to clipboard"
msgstr "复制路径到剪切板"
msgid "Copy Link Address"
msgstr ""
msgstr "拷贝链接地址"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr "该附件没有下载或者没有解密"
#, javascript-format
msgid "Unsupported link or message: %s"
@@ -968,9 +989,6 @@ msgstr "设置提醒"
msgid "In: %s"
msgstr "在: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "超链接"
@@ -1047,6 +1065,14 @@ msgstr "同步"
msgid "Notebooks"
msgstr "笔记本"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "解密项目:%d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "资源:%d。"
msgid "Please select where the sync status should be exported to"
msgstr "请选择同步状态的导出位置"
@@ -1089,6 +1115,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr "无法刷新令牌:缺失认证数据。重新开始同步可能会修复此错误。"
msgid "Untitled"
msgstr "无标题"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1136,10 +1165,6 @@ msgstr "已删除远程项目: %d。"
msgid "Fetched items: %d/%d."
msgstr "已提取项目:%d/%d."
#, javascript-format
msgid "State: %s."
msgstr "状态:%s。"
msgid "Cancelling..."
msgstr "正在取消..."
@@ -1186,9 +1211,6 @@ msgstr "更新日期"
msgid "created date"
msgstr "创建日期"
msgid "Untitled"
msgstr "无标题"
msgid "This note does not have geolocation information."
msgstr "此笔记不包含地理定位信息。"
@@ -1251,6 +1273,14 @@ msgstr "显示托盘图标"
msgid "Note: Does not work in all desktop environments."
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 在后台运行,如果你的笔记时常发生变化,推荐启用该设置来减少"
"可能的冲突"
msgid "Start application minimised in the tray icon"
msgstr "启动应用程序时在托盘中最小化"
@@ -1379,6 +1409,10 @@ msgstr "Joplin 导出目录"
msgid "Evernote Export File"
msgstr "Evernote 导出文件"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin 导出目录"
msgid "Directory"
msgstr "文件目录"
@@ -1450,6 +1484,12 @@ msgstr "临近提醒"
msgid "On %s: %s"
msgstr "%s:%s"
msgid "Permission to use camera"
msgstr "使用摄像头的权限"
msgid "Your permission to use your camera is required."
msgstr "使用摄像头的权限是必须的"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "当前没有任何笔记。点击(+)按钮创建。"
@@ -1478,6 +1518,10 @@ msgstr "移动%d条笔记至笔记本\"%s\"?"
msgid "Press to set the decryption password."
msgstr "按键将设置解密密码。"
#, fuzzy
msgid "Clear alarm"
msgstr "设置提醒"
msgid "Save alarm"
msgstr "保存提醒"
@@ -1490,8 +1534,41 @@ msgstr "确认"
msgid "Cancel synchronisation"
msgstr "取消同步"
#, fuzzy
msgid "Checking... Please wait."
msgstr "正在取消... 请稍后。"
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "检查同步配置"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"发生错误。请检查 URL,用户名,密码等等是否正确并且确保同步目的地可被访问。报"
"告的错误如下:"
#, fuzzy
msgid "The application has been authorised!"
msgstr "此程序已被成功授权。"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
"无法授权应用:\n"
"\n"
"%s\n"
"\n"
"请重新尝试"
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "解密项目:%d/%d"
msgid "New tags:"
@@ -1599,6 +1676,9 @@ msgstr "显示元数据"
msgid "View on map"
msgstr "查看地图"
msgid "Go to source URL"
msgstr "定位到源 URL"
msgid "Delete notebook"
msgstr "删除笔记本"
@@ -1619,6 +1699,9 @@ msgstr "您目前未有笔记本。点击(+)按钮创建。"
msgid "Welcome"
msgstr "欢迎"
#~ msgid "State: %s."
#~ msgstr "状态:%s。"
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "以此标题命名的笔记本已存在:\"%s\""

View File

@@ -431,6 +431,9 @@ msgstr "無法初始化同步器。"
msgid "Starting synchronisation..."
msgstr "正在啟動同步..."
msgid "Downloading resources..."
msgstr ""
msgid "Cancelling... Please wait."
msgstr "正在取消中...請稍候。"
@@ -592,6 +595,10 @@ msgstr "剪下"
msgid "Paste"
msgstr "貼上"
#, fuzzy
msgid "Select all"
msgstr "選擇日期"
msgid "Bold"
msgstr "粗體"
@@ -895,6 +902,14 @@ msgstr "%s - 複本"
msgid "Switch between note and to-do type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to note type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to to-do type"
msgstr "切換到記事 / 待辦事項"
msgid "Copy Markdown link"
msgstr "複製 Markdown 連結"
@@ -917,6 +932,9 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note properties"
msgstr ""
msgid "Open..."
msgstr "開啟..."
@@ -933,6 +951,9 @@ msgstr "複製路徑到剪貼板"
msgid "Copy Link Address"
msgstr "複製鏈接位址"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "不支援的鏈接或訊息: %s"
@@ -968,9 +989,6 @@ msgstr "設置提醒"
msgid "In: %s"
msgstr "在: %s"
msgid "Note properties"
msgstr ""
msgid "Hyperlink"
msgstr "超連結"
@@ -1047,6 +1065,14 @@ msgstr "進行同步"
msgid "Notebooks"
msgstr "記事本"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "正在解密項目: %d/%d 項"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "資源: %d。"
msgid "Please select where the sync status should be exported to"
msgstr "請選擇將同步狀態導出到的位置"
@@ -1089,6 +1115,9 @@ msgid ""
"synchronisation again may fix the problem."
msgstr "無法刷新 token: 缺少身份驗證資料。再次啟動同步可能會解決此問題。"
msgid "Untitled"
msgstr "未命名"
msgid ""
"Could not synchronize with OneDrive.\n"
"\n"
@@ -1135,10 +1164,6 @@ msgstr "已刪除的遠端項目: %d 項"
msgid "Fetched items: %d/%d."
msgstr "已擷取的本地項目: %d/%d 項"
#, javascript-format
msgid "State: %s."
msgstr "狀態: %s。"
msgid "Cancelling..."
msgstr "正在取消中..."
@@ -1185,9 +1210,6 @@ msgstr "更新日期"
msgid "created date"
msgstr "建立日期"
msgid "Untitled"
msgstr "未命名"
msgid "This note does not have geolocation information."
msgstr "此記事沒有地理位置定位資訊。"
@@ -1250,6 +1272,12 @@ msgstr "顯示系統匣圖示"
msgid "Note: Does not work in all desktop environments."
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 ""
msgid "Start application minimised in the tray icon"
msgstr ""
@@ -1376,6 +1404,10 @@ msgstr "Joplin 匯出目錄"
msgid "Evernote Export File"
msgstr "Evernote 匯出檔"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin 匯出目錄"
msgid "Directory"
msgstr "目錄"
@@ -1447,6 +1479,12 @@ msgstr "將會發生的提醒事項"
msgid "On %s: %s"
msgstr "在 %s: %s"
msgid "Permission to use camera"
msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "您當前沒有任何筆記。通過按一下 (+) 鍵去新增一則筆記。"
@@ -1475,6 +1513,10 @@ msgstr "移動 %d 記事到記事本 \"%s\"?"
msgid "Press to set the decryption password."
msgstr "按下以設置解密密碼。"
#, fuzzy
msgid "Clear alarm"
msgstr "設置提醒"
msgid "Save alarm"
msgstr "儲存提醒事項"
@@ -1487,8 +1529,34 @@ msgstr "確認"
msgid "Cancel synchronisation"
msgstr "取消同步"
#, fuzzy
msgid "Checking... Please wait."
msgstr "正在取消中...請稍候。"
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "檢測同步設置"
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "應用程式已成功取得權限。"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgid ""
"Could not authorise application:\n"
"\n"
"%s\n"
"\n"
"Please try again."
msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "正在解密項目: %d/%d 項"
msgid "New tags:"
@@ -1596,6 +1664,9 @@ msgstr "顯示後設資料 (metadata)"
msgid "View on map"
msgstr "在地圖上顯示"
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgstr "刪除記事本"
@@ -1616,5 +1687,8 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
msgid "Welcome"
msgstr "歡迎"
#~ msgid "State: %s."
#~ msgstr "狀態: %s。"
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "同名筆記本已經存在: \"%s\""

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.115",
"version": "1.0.118",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@@ -19,7 +19,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.115",
"version": "1.0.118",
"bin": {
"joplin": "./main.js"
},

View File

@@ -25,10 +25,12 @@ npm test tests-build/ArrayUtils.js
npm test tests-build/EnexToMd.js
npm test tests-build/HtmlToMd.js
npm test tests-build/markdownUtils.js
npm test tests-build/models_BaseItem.js
npm test tests-build/models_Folder.js
npm test tests-build/models_Note.js
npm test tests-build/models_Tag.js
npm test tests-build/models_Setting.js
npm test tests-build/pathUtils.js
npm test tests-build/services_InteropService.js
npm test tests-build/services_ResourceService.js
npm test tests-build/urlUtils.js

View File

@@ -1,5 +1,6 @@
require('app-module-path').addPath(__dirname);
const os = require('os');
const { time } = require('lib/time-utils.js');
const { filename } = require('lib/path-utils.js');
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
@@ -37,9 +38,14 @@ describe('EnexToMd', function() {
// if (htmlFilename !== 'text2.html') continue;
const html = await shim.fsDriver().readFile(htmlPath);
const expectedMd = await shim.fsDriver().readFile(mdPath);
let expectedMd = await shim.fsDriver().readFile(mdPath);
const actualMd = await enexXmlToMd('<div>' + html + '</div>', []);
let actualMd = await enexXmlToMd('<div>' + html + '</div>', []);
if (os.EOL === '\r\n') {
expectedMd = expectedMd.replace(/\r\n/g, '\n')
actualMd = actualMd.replace(/\r\n/g, '\n')
}
if (actualMd !== expectedMd) {
console.info('');

View File

@@ -1,5 +1,6 @@
require('app-module-path').addPath(__dirname);
const os = require('os');
const { time } = require('lib/time-utils.js');
const { filename } = require('lib/path-utils.js');
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
@@ -39,9 +40,14 @@ describe('HtmlToMd', function() {
// if (htmlFilename !== 'anchor_with_url_with_spaces.html') continue;
const html = await shim.fsDriver().readFile(htmlPath);
const expectedMd = await shim.fsDriver().readFile(mdPath);
let expectedMd = await shim.fsDriver().readFile(mdPath);
const actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
if (os.EOL === '\r\n') {
expectedMd = expectedMd.replace(/\r\n/g, '\n')
actualMd = actualMd.replace(/\r\n/g, '\n')
}
if (actualMd !== expectedMd) {
console.info('');

View File

@@ -0,0 +1,5 @@
<ul>
<li><div>This note has an unordered list</div></li>
<li><div>List item</div></li>
<li><div>List item</div></li>
</ul>

View File

@@ -0,0 +1,3 @@
- This note has an unordered list
- List item
- List item

View File

@@ -0,0 +1,51 @@
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 BaseItem = require('lib/models/BaseItem.js');
const Resource = require('lib/models/Resource.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);
});
async function allItems() {
let folders = await Folder.all();
let notes = await Note.all();
return folders.concat(notes);
}
describe('models_BaseItem', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
done();
});
// it('should be able to exclude keys when syncing', asyncTest(async () => {
// 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');
// let resource1 = (await Resource.all())[0];
// console.info(await Resource.serializeForSync(resource1));
// }));
// This is to handle the case where a property is removed from a BaseItem table - in that case files in
// the sync target will still have the old property but we don't need it locally.
it('should ignore properties that are present in sync file but not in database when serialising', asyncTest(async () => {
let folder = await Folder.save({ title: "folder1" });
let serialized = await Folder.serialize(folder);
serialized += "\nignore_me: true"
let unserialized = await Folder.unserialize(serialized);
expect('ignore_me' in unserialized).toBe(false);
}));
});

View File

@@ -42,4 +42,25 @@ describe('models_Note', function() {
expect(items.length).toBe(4);
}));
it('should change the type of notes', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
note1 = await Note.load(note1.id);
let changedNote = Note.changeNoteType(note1, 'todo');
expect(changedNote === note1).toBe(false);
expect(!!changedNote.is_todo).toBe(true);
await Note.save(changedNote);
note1 = await Note.load(note1.id);
changedNote = Note.changeNoteType(note1, 'todo');
expect(changedNote === note1).toBe(true);
expect(!!changedNote.is_todo).toBe(true);
note1 = await Note.load(note1.id);
changedNote = Note.changeNoteType(note1, 'note');
expect(changedNote === note1).toBe(false);
expect(!!changedNote.is_todo).toBe(false);
}));
});

View File

@@ -0,0 +1,59 @@
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 Resource = require('lib/models/Resource.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_Resource', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
done();
});
it('should have a "done" fetch_status when created locally', asyncTest(async () => {
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');
let resource1 = (await Resource.all())[0];
let ls = await Resource.localState(resource1);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
}));
it('should have a default local state', asyncTest(async () => {
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');
let resource1 = (await Resource.all())[0];
let ls = await Resource.localState(resource1);
expect(!ls.id).toBe(true);
expect(ls.resource_id).toBe(resource1.id);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
}));
it('should save and delete local state', asyncTest(async () => {
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');
let resource1 = (await Resource.all())[0];
await Resource.setLocalState(resource1, { fetch_status: Resource.FETCH_STATUS_IDLE });
let ls = await Resource.localState(resource1);
expect(!!ls.id).toBe(true);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
await Resource.delete(resource1.id);
ls = await Resource.localState(resource1);
expect(!ls.id).toBe(true);
}));
});

View File

@@ -0,0 +1,38 @@
require('app-module-path').addPath(__dirname);
const { friendlySafeFilename } = require('lib/path-utils.js');
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
describe('pathUtils', function() {
beforeEach(async (done) => {
done();
});
it('should create friendly safe filename', async (done) => {
const testCases = [
['生活', '生活'],
['not/good', 'not_good'],
['really/not/good', 'really_not_good'],
['con', '___'],
['no space at the end ', 'no space at the end'],
['nor dots...', 'nor dots'],
['thatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylong', 'thatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylong'],
];
for (let i = 0; i < testCases.length; i++) {
const t = testCases[i];
expect(friendlySafeFilename(t[0])).toBe(t[1]);
}
expect(!!friendlySafeFilename('')).toBe(true);
expect(!!friendlySafeFilename('...')).toBe(true);
done();
});
});

View File

@@ -310,4 +310,51 @@ describe('services_InteropService', function() {
expect(note2_2.body.indexOf(note1_2.id) >= 0).toBe(true);
}));
it('should export into json format', asyncTest(async () => {
const service = new InteropService();
let folder1 = await Folder.save({ title: 'folder1' });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
note1 = await Note.load(note1.id);
const filePath = exportDir();
await service.export({ path: filePath, format: 'json' });
// verify that the json files exist and can be parsed
const items = [folder1, note1];
for (let i = 0; i < items.length; i++) {
const jsonFile = filePath + '/' + items[i].id + '.json';
let json = await fs.readFile(jsonFile, 'utf-8');
let obj = JSON.parse(json);
expect(obj.id).toBe(items[i].id);
expect(obj.type_).toBe(items[i].type_);
expect(obj.title).toBe(items[i].title);
expect(obj.body).toBe(items[i].body);
}
}));
it('should export MD with unicode filenames', asyncTest(async () => {
const service = new InteropService();
let folder1 = await Folder.save({ title: 'folder1' });
let folder2 = await Folder.save({ title: 'ジョプリン' });
let note1 = await Note.save({ title: '生活', parent_id: folder1.id });
let note2 = await Note.save({ title: '生活', parent_id: folder1.id });
let note2b = await Note.save({ title: '生活', parent_id: folder1.id });
let note3 = await Note.save({ title: '', parent_id: folder1.id });
let note4 = await Note.save({ title: '', parent_id: folder1.id });
let note5 = await Note.save({ title: 'salut, ça roule ?', parent_id: folder1.id });
let note6 = await Note.save({ title: 'ジョプリン', parent_id: folder2.id });
const outDir = exportDir();
await service.export({ path: outDir, format: 'md' });
expect(await shim.fsDriver().exists(outDir + '/folder1/生活.md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/folder1/生活 (1).md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/folder1/生活 (2).md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/folder1/Untitled.md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/folder1/Untitled (1).md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/folder1/salut, ça roule _.md')).toBe(true);
expect(await shim.fsDriver().exists(outDir + '/ジョプリン/ジョプリン.md')).toBe(true);
}));
});

View File

@@ -156,6 +156,20 @@ describe('services_rest_Api', function() {
done();
});
it('should create notes with supplied ID', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });
response = await api.route('POST', 'notes', null, JSON.stringify({
id: '12345678123456781234567812345678',
title: 'testing',
parent_id: f.id,
}));
expect(response.id).toBe('12345678123456781234567812345678');
done();
});
it('should create notes with images', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });

View File

@@ -7,6 +7,7 @@ const fs = require('fs-extra');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Resource = require('lib/models/Resource.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const Tag = require('lib/models/Tag.js');
const { Database } = require('lib/database.js');
const Setting = require('lib/models/Setting.js');
@@ -872,12 +873,49 @@ describe('Synchronizer', function() {
let allResources = await Resource.all();
expect(allResources.length).toBe(1);
let resource1_2 = allResources[0];
let resourcePath1_2 = Resource.fullPath(resource1_2);
let ls = await Resource.localState(resource1_2);
expect(resource1_2.id).toBe(resource1.id);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload(resource1_2.id);
await fetcher.waitForAllFinished();
resource1_2 = await Resource.load(resource1.id);
ls = await Resource.localState(resource1_2);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
let resourcePath1_2 = Resource.fullPath(resource1_2);
expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true);
}));
it('should handle resource download errors', asyncTest(async () => {
while (insideBeforeEach) await time.msleep(500);
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');
let resource1 = (await Resource.all())[0];
let resourcePath1 = Resource.fullPath(resource1);
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
const fetcher = new ResourceFetcher(() => { return {
// Simulate a failed download
get: () => { return new Promise((resolve, reject) => { reject(new Error('did not work')) }); }
} });
fetcher.queueDownload(resource1.id);
await fetcher.waitForAllFinished();
resource1 = await Resource.load(resource1.id);
let ls = await Resource.localState(resource1);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_ERROR);
expect(ls.fetch_error).toBe('did not work');
}));
it('should delete resources', asyncTest(async () => {
while (insideBeforeEach) await time.msleep(500);
@@ -926,6 +964,10 @@ describe('Synchronizer', function() {
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
await encryptionService().loadMasterKeysFromSettings();
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload(resource1.id);
await fetcher.waitForAllFinished();
let resource1_2 = (await Resource.all())[0];
resource1_2 = await Resource.decrypt(resource1_2);
let resourcePath1_2 = Resource.fullPath(resource1_2);

0
CliClientDemo/publish.sh Normal file → Executable file
View File

View File

@@ -1,20 +1,20 @@
function randomClipperPort(state, env) {
const startPorts = {
prod: 41184,
dev: 27583,
};
const startPorts = {
prod: 41184,
dev: 27583,
};
const startPort = env === 'prod' ? startPorts.prod : startPorts.dev;
const startPort = env === 'prod' ? startPorts.prod : startPorts.dev;
if (!state) {
state = { offset: 0 };
} else {
state.offset++;
}
if (!state) {
state = { offset: 0 };
} else {
state.offset++;
}
state.port = startPort + state.offset;
state.port = startPort + state.offset;
return state;
return state;
}
module.exports = randomClipperPort;

View File

@@ -49,7 +49,6 @@ class Application extends BaseApplication {
constructor() {
super();
this.lastMenuScreen_ = null;
this.powerSaveBlockerId_ = null;
}
hasGui() {
@@ -221,17 +220,6 @@ class Application extends BaseApplication {
Setting.setValue('sidebarVisibility', newState.sidebarVisibility);
}
if (action.type === 'SYNC_STARTED') {
if (!this.powerSaveBlockerId_) this.powerSaveBlockerId_ = bridge().powerSaveBlockerStart('prevent-app-suspension');
}
if (action.type === 'SYNC_COMPLETED') {
if (this.powerSaveBlockerId_) {
bridge().powerSaveBlockerStop(this.powerSaveBlockerId_);
this.powerSaveBlockerId_ = null;
}
}
return result;
}
@@ -420,6 +408,10 @@ class Application extends BaseApplication {
label: _('Paste'),
role: 'paste',
accelerator: 'CommandOrControl+V',
}, {
label: _('Select all'),
role: 'selectall',
accelerator: 'CommandOrControl+A',
}, {
type: 'separator',
screens: ['Main'],
@@ -684,6 +676,23 @@ class Application extends BaseApplication {
document.head.appendChild(styleTag);
}
async loadCustomCss(filePath) {
let cssString = '';
if (await fs.pathExists(filePath)) {
try {
cssString = await fs.readFile(filePath, 'utf-8');
} catch (error) {
let msg = error.message ? error.message : '';
msg = 'Could not load custom css from ' + filePath + '\n' + msg;
error.message = msg;
throw error;
}
}
return cssString;
}
async start(argv) {
const electronIsDev = require('electron-is-dev');
@@ -737,7 +746,12 @@ class Application extends BaseApplication {
ids: Setting.value('collapsedFolderIds'),
});
if (shim.isLinux()) bridge().setAllowPowerSaveBlockerToggle(true);
const cssString = await this.loadCustomCss(Setting.value('profileDir') + '/userstyle.css');
this.store().dispatch({
type: 'LOAD_CUSTOM_CSS',
css: cssString
});
// Note: Auto-update currently doesn't work in Linux: it downloads the update
// but then doesn't install it on exit.

View File

@@ -1,7 +1,6 @@
const { _, setLocale } = require('lib/locale.js');
const { dirname } = require('lib/path-utils.js');
const { Logger } = require('lib/logger.js');
const { powerSaveBlocker } = require('electron');
class Bridge {
@@ -9,7 +8,6 @@ class Bridge {
this.electronWrapper_ = electronWrapper;
this.autoUpdateLogger_ = null;
this.lastSelectedPath_ = null;
this.allowPowerSaveBlockerToggle_ = false;
}
electronApp() {
@@ -24,10 +22,6 @@ class Bridge {
return this.electronWrapper_.window();
}
setAllowPowerSaveBlockerToggle(v) {
this.allowPowerSaveBlockerToggle_ = v;
}
windowContentSize() {
if (!this.window()) return { width: 0, height: 0 };
const s = this.window().getContentSize();
@@ -126,19 +120,7 @@ class Bridge {
const { checkForUpdates } = require('./checkForUpdates.js');
checkForUpdates(inBackground, window, logFilePath);
}
powerSaveBlockerStart(type) {
if (!this.allowPowerSaveBlockerToggle_) return null;
console.info('Enable powerSaveBlockerStart: ' + type);
return powerSaveBlocker.start(type);
}
powerSaveBlockerStop(id) {
if (!this.allowPowerSaveBlockerToggle_) return null;
console.info('Disable powerSaveBlocker: ' + id);
return powerSaveBlocker.stop(id);
}
}
let bridge_ = null;

View File

@@ -45,15 +45,21 @@ class ClipperConfigScreenComponent extends React.Component {
const style = this.props.style;
const theme = themeStyle(this.props.theme);
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const containerStyle = Object.assign({}, theme.containerStyle, {
overflowY: 'scroll',
height:style.height,
});
const buttonStyle = Object.assign({}, theme.buttonStyle, { marginRight: 10 });
const stepBoxStyle = {
border: "1px solid #ccc",
padding: 15,
paddingTop: 0,
marginBottom: 15,
backgroundColor: theme.backgroundColor,
};
let webClipperStatusComps = [];
@@ -68,7 +74,7 @@ class ClipperConfigScreenComponent extends React.Component {
webClipperStatusComps.push(<button key="disable_button" onClick={this.disableClipperServer_click}>{_('Disable Web Clipper Service')}</button>)
} else {
webClipperStatusComps.push(<p key="text_4" style={theme.textStyle}>{_('The web clipper service is not enabled.')}</p>)
webClipperStatusComps.push(<button key="enable_button" onClick={this.enableClipperServer_click}>{_('Enable Web Clipper Service')}</button>)
webClipperStatusComps.push(<button key="enable_button" style={buttonStyle} onClick={this.enableClipperServer_click}>{_('Enable Web Clipper Service')}</button>)
}
const apiTokenStyle = Object.assign({}, theme.textStyle, {
@@ -81,7 +87,7 @@ class ClipperConfigScreenComponent extends React.Component {
return (
<div>
<Header style={headerStyle} />
<div style={{overflowY:'scroll', height:style.height}}>
<div style={containerStyle}>
<div style={{padding: theme.margin}}>
<p style={theme.textStyle}>{_('Joplin Web Clipper allows saving web pages and screenshots from your browser to Joplin.')}</p>
<p style={theme.textStyle}>{_('In order to use the web clipper, you need to do the following:')}</p>
@@ -106,7 +112,7 @@ class ClipperConfigScreenComponent extends React.Component {
<div style={stepBoxStyle}>
<p style={theme.h1Style}>{_('Advanced options')}</p>
<p style={theme.textStyle}>{_('Authorisation token:')}</p>
<p style={apiTokenStyle}>{this.props.apiToken} <a href="#" onClick={this.copyToken_click}>{_('Copy token')}</a></p>
<p style={apiTokenStyle}>{this.props.apiToken} <a style={theme.urlStyle} href="#" onClick={this.copyToken_click}>{_('Copy token')}</a></p>
<p style={theme.textStyle}>{_('This authorisation token is only needed to allow third-party applications to access Joplin.')}</p>
</div>
</div>
@@ -128,4 +134,4 @@ const mapStateToProps = (state) => {
const ClipperConfigScreen = connect(mapStateToProps)(ClipperConfigScreenComponent);
module.exports = { ClipperConfigScreen };
module.exports = { ClipperConfigScreen };

View File

@@ -53,10 +53,13 @@ class ConfigScreenComponent extends React.Component {
const labelStyle = Object.assign({}, theme.textStyle, {
display: 'inline-block',
marginRight: 10,
color: theme.color,
});
const controlStyle = {
display: 'inline-block',
color: theme.color,
backgroundColor: theme.backgroundColor,
};
const descriptionStyle = Object.assign({}, theme.textStyle, {
@@ -120,7 +123,10 @@ class ConfigScreenComponent extends React.Component {
updateSettingValue(key, event.target.value);
}
const inputStyle = Object.assign({}, controlStyle, { width: '50%', minWidth: '20em' });
const inputStyle = Object.assign({}, controlStyle, {
width: '50%',
minWidth: '20em',
border: '1px solid' });
const inputType = md.secure === true ? 'password' : 'text';
return (
@@ -164,21 +170,19 @@ class ConfigScreenComponent extends React.Component {
render() {
const theme = themeStyle(this.props.theme);
const style = Object.assign({}, this.props.style, { overflow: 'auto' });
const style = Object.assign({
backgroundColor: theme.backgroundColor
}, this.props.style, { overflow: 'auto' });
const settings = this.state.settings;
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const containerStyle = {
padding: 10,
};
const containerStyle = Object.assign({}, theme.containerStyle, { padding: 10 });
const buttonStyle = {
const buttonStyle = Object.assign({}, theme.buttonStyle, {
display: this.state.changedSettingKeys.length ? 'inline-block' : 'none',
marginRight: 10,
}
});
const settingComps = shared.settingsToComponents(this, 'desktop', settings);
@@ -195,7 +199,7 @@ class ConfigScreenComponent extends React.Component {
settingComps.push(
<div key="check_sync_config_button" style={this.rowStyle_}>
<button disabled={this.state.checkSyncConfigResult === 'checking'} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
<button style={buttonStyle} disabled={this.state.checkSyncConfigResult === 'checking'} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
{ statusComp }
</div>);
}
@@ -228,4 +232,4 @@ const mapStateToProps = (state) => {
const ConfigScreen = connect(mapStateToProps)(ConfigScreenComponent);
module.exports = { ConfigScreen };
module.exports = { ConfigScreen };

View File

@@ -28,16 +28,18 @@ class DropboxLoginScreenComponent extends React.Component {
const style = this.props.style;
const theme = themeStyle(this.props.theme);
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const containerStyle = Object.assign({}, theme.containerStyle, {
padding: theme.margin,
height: style.height - theme.headerHeight - theme.margin * 2,
});
const inputStyle = Object.assign({}, theme.inputStyle, { width: 500 });
return (
<div>
<Header style={headerStyle} />
<div style={{padding: theme.margin}}>
<div style={containerStyle}>
<p style={theme.textStyle}>{_('To allow Joplin to synchronise with Dropbox, please follow the steps below:')}</p>
<p style={theme.textStyle}>{_('Step 1: Open this URL in your browser to authorise the application:')}</p>
<a style={theme.textStyle} href="#" onClick={this.shared_.loginUrl_click}>{this.state.loginUrl}</a>
@@ -59,4 +61,4 @@ const mapStateToProps = (state) => {
const DropboxLoginScreen = connect(mapStateToProps)(DropboxLoginScreenComponent);
module.exports = { DropboxLoginScreen };
module.exports = { DropboxLoginScreen };

View File

@@ -50,6 +50,13 @@ class EncryptionConfigScreenComponent extends React.Component {
renderMasterKey(mk) {
const theme = themeStyle(this.props.theme);
const passwordStyle = {
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
}
const onSaveClick = () => {
return shared.onSavePasswordClick(this, mk);
}
@@ -69,7 +76,7 @@ class EncryptionConfigScreenComponent extends React.Component {
<td style={theme.textStyle}>{mk.source_application}</td>
<td style={theme.textStyle}>{time.formatMsToLocal(mk.created_time)}</td>
<td style={theme.textStyle}>{time.formatMsToLocal(mk.updated_time)}</td>
<td style={theme.textStyle}><input type="password" value={password} onChange={(event) => onPasswordChange(event)}/> <button onClick={() => onSaveClick()}>{_('Save')}</button></td>
<td style={theme.textStyle}><input type="password" style={passwordStyle} value={password} onChange={(event) => onPasswordChange(event)}/> <button style={theme.buttonStyle} onClick={() => onSaveClick()}>{_('Save')}</button></td>
<td style={theme.textStyle}>{passwordOk}</td>
</tr>
);
@@ -81,15 +88,13 @@ class EncryptionConfigScreenComponent extends React.Component {
const masterKeys = this.state.masterKeys;
const containerPadding = 10;
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const containerStyle = {
const containerStyle = Object.assign({}, theme.containerStyle, {
padding: containerPadding,
overflow: 'auto',
height: style.height - theme.headerHeight - containerPadding * 2,
};
});
const mkComps = [];
let nonExistingMasterKeyIds = this.props.notLoadedMasterKeys.slice();
@@ -126,7 +131,7 @@ class EncryptionConfigScreenComponent extends React.Component {
}
const decryptedItemsInfo = <p style={theme.textStyle}>{shared.decryptedStatText(this)}</p>;
const toggleButton = <button onClick={() => { onToggleButtonClick() }}>{this.props.encryptionEnabled ? _('Disable encryption') : _('Enable encryption')}</button>
const toggleButton = <button style={theme.buttonStyle} onClick={() => { onToggleButtonClick() }}>{this.props.encryptionEnabled ? _('Disable encryption') : _('Enable encryption')}</button>
let masterKeySection = null;
@@ -213,4 +218,4 @@ const mapStateToProps = (state) => {
const EncryptionConfigScreen = connect(mapStateToProps)(EncryptionConfigScreenComponent);
module.exports = { EncryptionConfigScreen };
module.exports = { EncryptionConfigScreen };

View File

@@ -108,6 +108,9 @@ class HeaderComponent extends React.Component {
color: style.color,
fontSize: style.fontSize,
fontFamily: style.fontFamily,
backgroundColor: style.searchColor,
border: '1px solid',
borderColor: style.dividerColor,
};
const searchButton = {
@@ -171,6 +174,8 @@ class HeaderComponent extends React.Component {
paddingLeft: theme.headerButtonHPadding,
paddingRight: theme.headerButtonHPadding,
color: theme.color,
searchColor: theme.backgroundColor,
dividerColor: theme.dividerColor,
textDecoration: 'none',
fontFamily: theme.fontFamily,
fontSize: theme.fontSize,
@@ -212,4 +217,4 @@ const mapStateToProps = (state) => {
const Header = connect(mapStateToProps)(HeaderComponent);
module.exports = { Header };
module.exports = { Header };

View File

@@ -35,4 +35,4 @@ class IconButton extends React.Component {
}
module.exports = { IconButton };
module.exports = { IconButton };

View File

@@ -120,7 +120,7 @@ class MainScreenComponent extends React.Component {
});
} else if (command.name === 'setTags') {
const tags = await Tag.tagsByNoteId(command.noteId);
const tagTitles = tags.map((a) => { return a.title });
const tagTitles = tags.map((a) => { return a.title }).sort();
this.setState({
promptOptions: {
@@ -158,7 +158,7 @@ class MainScreenComponent extends React.Component {
},
});
} else if (command.name === 'renameTag') {
const tag = await Tag.load(command.id);
const tag = await Tag.load(command.id);
if(!tag) return;
this.setState({
@@ -173,12 +173,12 @@ class MainScreenComponent extends React.Component {
} catch (error) {
bridge().showErrorMessageBox(error.message);
}
}
}
this.setState({promptOptions: null });
}
}
})
} else if (command.name === 'search') {
if (!this.searchId_) this.searchId_ = uuid.create();
@@ -336,14 +336,17 @@ class MainScreenComponent extends React.Component {
}
render() {
const style = this.props.style;
const theme = themeStyle(this.props.theme);
const style = Object.assign({
color: theme.color,
backgroundColor: theme.backgroundColor,
}, this.props.style);
const promptOptions = this.state.promptOptions;
const folders = this.props.folders;
const notes = this.props.notes;
const messageBoxVisible = this.props.hasDisabledSyncItems || this.props.showMissingMasterKeyMessage;
const sidebarVisibility = this.props.sidebarVisibility;
const styles = this.styles(this.props.theme, style.width, style.height, messageBoxVisible, sidebarVisibility);
const theme = themeStyle(this.props.theme);
const selectedFolderId = this.props.selectedFolderId;
const onConflictFolder = this.props.selectedFolderId === Folder.conflictFolderId();

View File

@@ -97,13 +97,33 @@ class NoteListComponent extends React.Component {
}
}}));
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
if (noteIds.length <= 1) {
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}}));
} else {
const switchNoteType = async (noteIds, type) => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
const newNote = Note.changeNoteType(note, type);
if (newNote === note) continue;
await Note.save(newNote, { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}
}}));
menu.append(new MenuItem({label: _('Switch to note type'), click: async () => {
await switchNoteType(noteIds, 'note');
}}));
menu.append(new MenuItem({label: _('Switch to to-do type'), click: async () => {
await switchNoteType(noteIds, 'todo');
}}));
}
menu.append(new MenuItem({label: _('Copy Markdown link'), click: async () => {
const { clipboard } = require('electron');

View File

@@ -110,12 +110,12 @@ class NotePropertiesDialog extends React.Component {
width: '100%',
height: '100%',
backgroundColor: 'rgba(0,0,0,0.6)',
alignItems: 'flex-start',
justifyContent: 'center',
alignItems: 'flex-start',
justifyContent: 'center',
};
this.styles_.dialogBox = {
backgroundColor: 'white',
backgroundColor: theme.backgroundColor,
padding: 16,
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
marginTop: 20,
@@ -123,17 +123,33 @@ class NotePropertiesDialog extends React.Component {
this.styles_.controlBox = {
marginBottom: '1em',
color: 'black', //This will apply for the calendar
};
this.styles_.button = {
minWidth: theme.buttonMinWidth,
minHeight: theme.buttonMinHeight,
marginLeft: 5,
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
this.styles_.editPropertyButton = {
color: theme.color,
textDecoration: 'none',
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
this.styles_.input = {
display:'inline-block',
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
this.styles_.dialogTitle = Object.assign({}, theme.h1Style, { marginBottom: '1.2em' });
@@ -239,7 +255,8 @@ class NotePropertiesDialog extends React.Component {
dateFormat={time.dateFormat()}
timeFormat={time.timeFormat()}
inputProps={{
onKeyDown: (event) => onKeyDown(event, key)
onKeyDown: (event) => onKeyDown(event, key),
style: styles.input
}}
onChange={(momentObject) => {this.setState({ editedValue: momentObject })}}
/>
@@ -254,7 +271,7 @@ class NotePropertiesDialog extends React.Component {
ref="editField"
onChange={(event) => {this.setState({ editedValue: event.target.value })}}
onKeyDown={(event) => onKeyDown(event)}
style={{display:'inline-block'}}
style={styles.input}
/>
}
} else {
@@ -349,7 +366,7 @@ class NotePropertiesDialog extends React.Component {
return (
<div style={modalLayerStyle}>
<div style={styles.dialogBox}>
<div style={styles.dialogTitle}>Note properties</div>
<div style={styles.dialogTitle}>{_('Note properties')}</div>
<div>{noteComps}</div>
<div style={{ textAlign: 'right', marginTop: 10 }}>
{buttonComps}
@@ -361,4 +378,4 @@ class NotePropertiesDialog extends React.Component {
}
module.exports = NotePropertiesDialog;
module.exports = NotePropertiesDialog;

View File

@@ -6,7 +6,9 @@ const Search = require('lib/models/Search.js');
const { time } = require('lib/time-utils.js');
const Setting = require('lib/models/Setting.js');
const { IconButton } = require('./IconButton.min.js');
const { urlDecode, escapeHtml } = require('lib/string-utils');
const Toolbar = require('./Toolbar.min.js');
const TagList = require('./TagList.min.js');
const { connect } = require('react-redux');
const { _ } = require('lib/locale.js');
const { reg } = require('lib/registry.js');
@@ -27,6 +29,7 @@ const urlUtils = require('lib/urlUtils');
const dialogs = require('./dialogs');
const markdownUtils = require('lib/markdownUtils');
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
const { clipboard } = require('electron');
@@ -34,6 +37,7 @@ require('brace/mode/markdown');
// https://ace.c9.io/build/kitchen-sink.html
// https://highlightjs.org/static/demo/
require('brace/theme/chrome');
require('brace/theme/twilight');
class NoteTextComponent extends React.Component {
@@ -51,6 +55,7 @@ class NoteTextComponent extends React.Component {
scrollHeight: null,
editorScrollTop: 0,
newNote: null,
noteTags: [],
// If the current note was just created, and the title has never been
// changed by the user, this variable contains that note ID. Used
@@ -170,6 +175,10 @@ class NoteTextComponent extends React.Component {
}
const updateSelectionRange = () => {
if (!this.rawEditor()) {
this.selectionRange_ = null;
return;
}
const ranges = this.rawEditor().getSelection().getAllRanges();
if (!ranges || !ranges.length || !this.state.note) {
@@ -193,11 +202,21 @@ class NoteTextComponent extends React.Component {
this.reloadNote(this.props);
}
}
this.resourceFetcher_downloadComplete = async (resource) => {
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.lastSetHtml_ = '';
this.updateHtml(this.state.note.body);
}
}
}
// Note:
// - What's called "cursor position" is expressed as { row: x, column: y } and is how Ace Editor get/set the cursor position
// - A "range" defines a selection with a start and end cusor position, expressed as { start: <CursorPos>, end: <CursorPos> }
// - A "range" defines a selection with a start and end cusor position, expressed as { start: <CursorPos>, end: <CursorPos> }
// - A "text offset" below is the absolute position of the cursor in the string, as would be used in the indexOf() function.
// The functions below are used to convert between the different types.
rangeToTextOffsets(range, body) {
@@ -245,7 +264,7 @@ class NoteTextComponent extends React.Component {
}
row++;
currentOffset += line.length + 1;
currentOffset += line.length + 1;
}
}
@@ -259,11 +278,12 @@ class NoteTextComponent extends React.Component {
async componentWillMount() {
let note = null;
let noteTags = [];
if (this.props.newNote) {
note = Object.assign({}, this.props.newNote);
} else if (this.props.noteId) {
note = await Note.load(this.props.noteId);
noteTags = this.props.noteTags || [];
}
const folder = note ? Folder.byId(this.props.folders, note.parent_id) : null;
@@ -273,6 +293,7 @@ class NoteTextComponent extends React.Component {
note: note,
folder: folder,
isLoading: false,
noteTags: noteTags
});
this.lastLoadedNoteId_ = note ? note.id : null;
@@ -282,6 +303,8 @@ class NoteTextComponent extends React.Component {
eventManager.on('alarmChange', this.onAlarmChange_);
eventManager.on('noteTypeToggle', this.onNoteTypeToggle_);
eventManager.on('todoToggle', this.onTodoToggle_);
ResourceFetcher.instance().on('downloadComplete', this.resourceFetcher_downloadComplete);
}
componentWillUnmount() {
@@ -294,6 +317,8 @@ class NoteTextComponent extends React.Component {
eventManager.removeListener('noteTypeToggle', this.onNoteTypeToggle_);
eventManager.removeListener('todoToggle', this.onTodoToggle_);
ResourceFetcher.instance().off('downloadComplete', this.resourceFetcher_downloadComplete);
this.destroyExternalEditWatcher();
}
@@ -341,6 +366,7 @@ class NoteTextComponent extends React.Component {
let note = null;
let loadingNewNote = true;
let parentFolder = null;
let noteTags = [];
if (props.newNote) {
note = Object.assign({}, props.newNote);
@@ -349,6 +375,7 @@ class NoteTextComponent extends React.Component {
} else {
noteId = props.noteId;
loadingNewNote = stateNoteId !== noteId;
noteTags = await Tag.tagsByNoteId(noteId);
this.lastLoadedNoteId_ = noteId;
note = noteId ? await Note.load(noteId) : null;
if (noteId !== this.lastLoadedNoteId_) return; // Race condition - current note was changed while this one was loading
@@ -426,6 +453,7 @@ class NoteTextComponent extends React.Component {
webviewReady: webviewReady,
folder: parentFolder,
lastKeys: [],
noteTags: noteTags
};
if (!note) {
@@ -439,6 +467,20 @@ class NoteTextComponent extends React.Component {
this.setState(newState);
// https://github.com/laurent22/joplin/pull/893#discussion_r228025210
// @Abijeet: Had to add this check. If not, was going into an infinite loop where state was getting updated repeatedly.
// Since I'm updating the state, the componentWillReceiveProps was getting triggered again, where nextProps.newNote was still true, causing reloadNote to trigger again and again.
// Notes from Laurent: The selected note tags are part of the global Redux state because they need to be updated whenever tags are changed or deleted
// anywhere in the app. Thus it's not possible simple to load the tags here (as we won't have a way to know if they're updated afterwards).
// Perhaps a better way would be to move that code in the middleware, check for TAGS_DELETE, TAGS_UPDATE, etc. actions and update the
// selected note tags accordingly.
if (!this.props.newNote) {
this.props.dispatch({
type: "SET_NOTE_TAGS",
items: noteTags,
});
}
this.updateHtml(newState.note ? newState.note.body : '');
}
@@ -447,6 +489,10 @@ class NoteTextComponent extends React.Component {
await this.reloadNote(nextProps);
} else if ('noteId' in nextProps && nextProps.noteId !== this.props.noteId) {
await this.reloadNote(nextProps);
} else if ('noteTags' in nextProps && this.areNoteTagsModified(nextProps.noteTags, this.state.noteTags)) {
this.setState({
noteTags: nextProps.noteTags
});
}
if ('syncStarted' in nextProps && !nextProps.syncStarted && !this.isModified()) {
@@ -462,6 +508,24 @@ class NoteTextComponent extends React.Component {
return shared.isModified(this);
}
areNoteTagsModified(newTags, oldTags) {
if (!oldTags) return true;
if (newTags.length !== oldTags.length) return true;
for (let i = 0; i < newTags.length; ++i) {
let currNewTag = newTags[i];
for (let j = 0; j < oldTags.length; ++j) {
let currOldTag = oldTags[j];
if (currOldTag.id === currNewTag.id && currOldTag.updated_time !== currNewTag.updated_time) {
return true;
}
}
}
return false;
}
refreshNoteMetadata(force = null) {
return shared.refreshNoteMetadata(this, force);
}
@@ -547,25 +611,31 @@ class NoteTextComponent extends React.Component {
if (!item) throw new Error('No item with ID ' + itemId);
if (item.type_ === BaseModel.TYPE_RESOURCE) {
const localState = await Resource.localState(item);
if (localState.fetch_status !== Resource.FETCH_STATUS_DONE || !!item.encryption_blob_encrypted) {
bridge().showErrorMessageBox(_('This attachment is not downloaded or not decrypted yet.'));
return;
}
const filePath = Resource.fullPath(item);
bridge().openItem(filePath);
} else if (item.type_ === BaseModel.TYPE_NOTE) {
this.props.dispatch({
type: "FOLDER_SELECT",
id: item.parent_id,
type: "FOLDER_AND_NOTE_SELECT",
folderId: item.parent_id,
noteId: item.id,
});
setTimeout(() => {
this.props.dispatch({
type: 'NOTE_SELECT',
id: item.id,
});
}, 10);
} else {
throw new Error('Unsupported item type: ' + item.type_);
}
} else if (urlUtils.urlProtocol(msg)) {
require('electron').shell.openExternal(msg);
if (msg.indexOf('file://') === 0) {
// When using the file:// protocol, openExternal doesn't work (does nothing) with URL-encoded paths
require('electron').shell.openExternal(urlDecode(msg));
} else {
require('electron').shell.openExternal(msg);
}
} else if (msg.indexOf('#') === 0) {
// This is an internal anchor, which is handled by the WebView so skip this case
} else {
bridge().showErrorMessageBox(_('Unsupported link or message: %s', msg));
}
@@ -768,6 +838,7 @@ class NoteTextComponent extends React.Component {
let bodyToRender = body;
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
bodyToRender = '<style>' + this.props.customCss + '</style>\n' + bodyToRender;
let bodyHtml = '';
const visiblePanes = this.props.visiblePanes || ['editor', 'viewer'];
@@ -788,20 +859,7 @@ class NoteTextComponent extends React.Component {
let commandProcessed = true;
if (command.name === 'exportPdf' && this.webview_) {
const path = bridge().showSaveDialog({
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
defaultPath: safeFilename(this.state.note.title),
});
if (path) {
this.webview_.printToPDF({}, (error, data) => {
if (error) {
bridge().showErrorMessageBox(error.message);
} else {
shim.fsDriver().writeFile(path, data, 'buffer');
}
});
}
this.commandSavePdf();
} else if (command.name === 'print' && this.webview_) {
this.webview_.print();
} else if (command.name === 'textBold') {
@@ -866,6 +924,44 @@ class NoteTextComponent extends React.Component {
});
}
commandSavePdf() {
const path = bridge().showSaveDialog({
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
defaultPath: safeFilename(this.state.note.title),
});
if (path) {
// Temporarily add a <h2> title in the webview
const newHtml = this.insertHtmlHeading_(this.lastSetHtml_, this.state.note.title);
this.webview_.send('setHtml', newHtml);
setTimeout(() => {
this.webview_.printToPDF({}, (error, data) => {
if (error) {
bridge().showErrorMessageBox(error.message);
} else {
shim.fsDriver().writeFile(path, data, 'buffer');
}
// Refresh the webview, restoring the previous content
this.lastSetHtml_ = '';
this.forceUpdate();
});
}, 100);
}
}
insertHtmlHeading_(s, heading) {
const tag = 'h2';
const marker = '<!-- START_OF_DOCUMENT -->'
let splitStyle = s.split(marker);
const index = splitStyle.length > 1 ? 1 : 0;
let toInsert = escapeHtml(heading);
toInsert = '<' + tag + '>' + toInsert + '</' + tag + '>';
splitStyle[index] = toInsert + splitStyle[index];
return splitStyle.join(marker);
}
externalEditWatcher() {
if (!this.externalEditWatcher_) {
this.externalEditWatcher_ = new ExternalEditWatcher((action) => { return this.props.dispatch(action) });
@@ -1327,13 +1423,21 @@ class NoteTextComponent extends React.Component {
paddingLeft: 8,
paddingRight: 8,
marginRight: rootStyle.paddingLeft,
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
const toolbarStyle = {
marginBottom: 10,
};
const bottomRowHeight = rootStyle.height - titleBarStyle.height - titleBarStyle.marginBottom - titleBarStyle.marginTop - theme.toolbarHeight - toolbarStyle.marginBottom;
const tagStyle = {
marginBottom: 10,
height: 30
};
const bottomRowHeight = rootStyle.height - titleBarStyle.height - titleBarStyle.marginBottom - titleBarStyle.marginTop - theme.toolbarHeight - tagStyle.height - tagStyle.marginBottom;
const viewerStyle = {
width: Math.floor(innerWidth / 2),
@@ -1355,6 +1459,9 @@ class NoteTextComponent extends React.Component {
paddingTop: paddingTop + 'px',
lineHeight: theme.textAreaLineHeight + 'px',
fontSize: theme.fontSize + 'px',
color: theme.color,
backgroundColor: theme.backgroundColor,
editorTheme: theme.editorTheme,
};
if (visiblePanes.indexOf('viewer') < 0) {
@@ -1366,7 +1473,11 @@ class NoteTextComponent extends React.Component {
}
if (visiblePanes.indexOf('editor') < 0) {
editorStyle.display = 'none';
// Note: Ideally we'd set the display to "none" to take the editor out
// of the DOM but if we do that, certain things won't work, in particular
// things related to scroll, which are based on the editor. See
// editorScrollTop_, restoreScrollTop_, etc.
editorStyle.width = 0;
viewerStyle.width = innerWidth;
}
@@ -1381,7 +1492,8 @@ class NoteTextComponent extends React.Component {
const htmlHasChanged = this.lastSetHtml_ !== html;
if (htmlHasChanged) {
this.webview_.send('setHtml', html);
let options = {codeTheme: theme.codeThemeCss};
this.webview_.send('setHtml', html, options);
this.lastSetHtml_ = html;
}
@@ -1410,6 +1522,11 @@ class NoteTextComponent extends React.Component {
placeholder={ this.props.newNote ? _('Creating new %s...', isTodo ? _('to-do') : _('note')) : '' }
/>
const tagList = <TagList
style={tagStyle}
items={this.state.noteTags}
/>;
const titleBarMenuButton = <IconButton style={{
display: 'flex',
}} iconName="fa-caret-down" theme={this.props.theme} onClick={() => { this.itemContextMenu() }} />
@@ -1449,7 +1566,7 @@ class NoteTextComponent extends React.Component {
const editor = <AceEditor
value={body}
mode="markdown"
theme="chrome"
theme={editorRootStyle.editorTheme}
style={editorRootStyle}
width={editorStyle.width + 'px'}
height={editorStyle.height + 'px'}
@@ -1481,6 +1598,7 @@ class NoteTextComponent extends React.Component {
{ false ? titleBarMenuButton : null }
</div>
{ toolbar }
{ tagList }
{ editor }
{ viewer }
</div>
@@ -1492,6 +1610,7 @@ class NoteTextComponent extends React.Component {
const mapStateToProps = (state) => {
return {
noteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
noteTags: state.selectedNoteTags,
folderId: state.selectedFolderId,
itemType: state.selectedItemType,
folders: state.folders,
@@ -1504,9 +1623,10 @@ const mapStateToProps = (state) => {
searches: state.searches,
selectedSearchId: state.selectedSearchId,
watchedNoteFiles: state.watchedNoteFiles,
customCss: state.customCss,
};
};
const NoteText = connect(mapStateToProps)(NoteTextComponent);
module.exports = { NoteText };
module.exports = { NoteText };

View File

@@ -73,14 +73,14 @@ class OneDriveLoginScreenComponent extends React.Component {
const style = this.props.style;
const theme = themeStyle(this.props.theme);
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const webviewStyle = {
width: this.props.style.width,
height: this.props.style.height - theme.headerHeight,
overflow: 'hidden',
color: theme.color,
backgroundColor: theme.backgroundColor,
};
const headerButtons = [
@@ -109,4 +109,4 @@ const mapStateToProps = (state) => {
const OneDriveLoginScreen = connect(mapStateToProps)(OneDriveLoginScreenComponent);
module.exports = { OneDriveLoginScreen };
module.exports = { OneDriveLoginScreen };

View File

@@ -59,7 +59,7 @@ class PromptDialog extends React.Component {
};
this.styles_.promptDialog = {
backgroundColor: 'white',
backgroundColor: theme.backgroundColor,
padding: 16,
display: 'inline-block',
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
@@ -69,6 +69,10 @@ class PromptDialog extends React.Component {
minWidth: theme.buttonMinWidth,
minHeight: theme.buttonMinHeight,
marginLeft: 5,
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
this.styles_.label = {
@@ -82,6 +86,10 @@ class PromptDialog extends React.Component {
this.styles_.input = {
width: 0.5 * width,
maxWidth: 400,
color: theme.color,
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
};
this.styles_.desc = Object.assign({}, theme.textStyle, {
@@ -142,6 +150,7 @@ class PromptDialog extends React.Component {
if (this.props.inputType === 'datetime') {
inputComp = <Datetime
value={this.state.answer}
inputProps={{style: styles.input}}
dateFormat={time.dateFormat()}
timeFormat={time.timeFormat()}
onChange={(momentObject) => onDateTimeChange(momentObject)}
@@ -166,7 +175,7 @@ class PromptDialog extends React.Component {
<div style={styles.modalLayer}>
<div style={styles.promptDialog}>
<label style={styles.label}>{this.props.label ? this.props.label : ''}</label>
<div style={{display: 'inline-block'}}>
<div style={{display: 'inline-block', color: 'black', backgroundColor: theme.backgroundColor}}>
{inputComp}
{descComp}
</div>
@@ -180,4 +189,4 @@ class PromptDialog extends React.Component {
}
module.exports = { PromptDialog };
module.exports = { PromptDialog };

View File

@@ -12,6 +12,7 @@ const { bridge } = require("electron").remote.require("./bridge");
const Menu = bridge().Menu;
const MenuItem = bridge().MenuItem;
const InteropServiceHelper = require("../InteropServiceHelper.js");
const { shim } = require('lib/shim');
class SideBarComponent extends React.Component {
@@ -178,6 +179,35 @@ class SideBarComponent extends React.Component {
return style;
}
clearForceUpdateDuringSync() {
if (this.forceUpdateDuringSyncIID_) {
clearInterval(this.forceUpdateDuringSyncIID_);
this.forceUpdateDuringSyncIID_ = null;
}
}
componentDidUpdate(prevProps) {
if (shim.isLinux()) {
// For some reason, the UI seems to sleep in some Linux distro during
// sync. Cannot find the reason for it and cannot replicate, so here
// as a test force the update at regular intervals.
// https://github.com/laurent22/joplin/issues/312#issuecomment-429472193
if (!prevProps.syncStarted && this.props.syncStarted) {
this.clearForceUpdateDuringSync();
this.forceUpdateDuringSyncIID_ = setInterval(() => {
this.forceUpdate();
}, 2000);
}
if (prevProps.syncStarted && !this.props.syncStarted) this.clearForceUpdateDuringSync();
}
}
componentWillUnmount() {
this.clearForceUpdateDuringSync();
}
itemContextMenu(event) {
const itemId = event.target.getAttribute("data-id");
if (itemId === Folder.conflictFolderId()) return;
@@ -470,7 +500,19 @@ class SideBarComponent extends React.Component {
);
}
let decryptionReportText = '';
if (this.props.decryptionWorker && this.props.decryptionWorker.state !== 'idle' && this.props.decryptionWorker.itemCount) {
decryptionReportText = _('Decrypting items: %d/%d', this.props.decryptionWorker.itemIndex + 1, this.props.decryptionWorker.itemCount);
}
let resourceFetcherText = '';
if (this.props.resourceFetcher && this.props.resourceFetcher.toFetchCount) {
resourceFetcherText = _('Fetching resources: %d', this.props.resourceFetcher.toFetchCount);
}
let lines = Synchronizer.reportToLines(this.props.syncReport);
if (resourceFetcherText) lines.push(resourceFetcherText);
if (decryptionReportText) lines.push(decryptionReportText);
const syncReportText = [];
for (let i = 0; i < lines.length; i++) {
syncReportText.push(
@@ -510,6 +552,8 @@ const mapStateToProps = state => {
locale: state.settings.locale,
theme: state.settings.theme,
collapsedFolderIds: state.collapsedFolderIds,
decryptionWorker: state.decryptionWorker,
resourceFetcher: state.resourceFetcher,
};
};

View File

@@ -47,17 +47,14 @@ class StatusScreenComponent extends React.Component {
const theme = themeStyle(this.props.theme);
const style = this.props.style;
const headerStyle = {
width: style.width,
};
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const containerPadding = 10;
const containerStyle = {
const containerStyle = Object.assign({}, theme.containerStyle, {
padding: containerPadding,
overflowY: 'auto',
height: style.height - theme.headerHeight - containerPadding * 2,
};
});
function renderSectionTitleHtml(key, title) {
return <h2 key={'section_' + key} style={theme.h2Style}>{title}</h2>
@@ -134,4 +131,4 @@ const mapStateToProps = (state) => {
const StatusScreen = connect(mapStateToProps)(StatusScreenComponent);
module.exports = { StatusScreen };
module.exports = { StatusScreen };

View File

@@ -0,0 +1,21 @@
const React = require('react');
const { connect } = require('react-redux');
const { themeStyle } = require('../theme.js');
class TagItemComponent extends React.Component {
render() {
const theme = themeStyle(this.props.theme);
const style = Object.assign({}, theme.tagStyle);
const title = this.props.title;
return <span style={style}>{title}</span>;
}
}
const mapStateToProps = (state) => {
return { theme: state.settings.theme };
};
const TagItem = connect(mapStateToProps)(TagItemComponent);
module.exports = TagItem;

View File

@@ -0,0 +1,50 @@
const React = require('react');
const { connect } = require('react-redux');
const { themeStyle } = require('../theme.js');
const TagItem = require('./TagItem.min.js');
class TagListComponent extends React.Component {
render() {
const style = Object.assign({}, this.props.style);
const theme = themeStyle(this.props.theme);
const tags = this.props.items;
style.display = 'flex';
style.flexDirection = 'row';
style.borderBottom = '1px solid ' + theme.dividerColor;
style.boxSizing = 'border-box';
style.fontSize = theme.fontSize;
const tagItems = [];
if (tags || tags.length > 0) {
// Sort by id for now, but probably needs to be changed in the future.
tags.sort((a, b) => { return a.title < b.title ? -1 : +1; });
for (let i = 0; i < tags.length; i++) {
const props = {
title: tags[i].title,
key: tags[i].id
};
tagItems.push(<TagItem {...props} />);
}
}
if (tagItems.length === 0) {
style.visibility = 'hidden';
}
return (
<div className="tag-list" style={style}>
{ tagItems }
</div>
)
}
}
const mapStateToProps = (state) => {
return { theme: state.settings.theme };
};
const TagList = connect(mapStateToProps)(TagListComponent);
module.exports = TagList;

View File

@@ -30,4 +30,4 @@ class Dialogs {
const dialogs = new Dialogs();
module.exports = dialogs;
module.exports = dialogs;

View File

@@ -0,0 +1,77 @@
/*
Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
line-height: 1.3em;
color: #abb2bf;
background: #282c34;
border-radius: 5px;
}
.hljs-keyword, .hljs-operator {
color: #F92672;
}
.hljs-pattern-match {
color: #F92672;
}
.hljs-pattern-match .hljs-constructor {
color: #61aeee;
}
.hljs-function {
color: #61aeee;
}
.hljs-function .hljs-params {
color: #A6E22E;
}
.hljs-function .hljs-params .hljs-typing {
color: #FD971F;
}
.hljs-module-access .hljs-module {
color: #7e57c2;
}
.hljs-constructor {
color: #e2b93d;
}
.hljs-constructor .hljs-string {
color: #9CCC65;
}
.hljs-comment, .hljs-quote {
color: #b18eb1;
font-style: italic;
}
.hljs-doctag, .hljs-formula {
color: #c678dd;
}
.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst {
color: #e06c75;
}
.hljs-literal {
color: #56b6c2;
}
.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string {
color: #98c379;
}
.hljs-built_in, .hljs-class .hljs-title {
color: #e6c07b;
}
.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number {
color: #d19a66;
}
.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title {
color: #61aeee;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-link {
text-decoration: underline;
}

View File

@@ -59,7 +59,7 @@
let hljsScriptAdded = false;
let hljsLoaded = false;
function loadHljs(callback) {
function loadHljs(options) {
hljsScriptAdded = true;
const script = document.createElement('script');
@@ -74,16 +74,16 @@
link.rel = 'stylesheet';
// https://ace.c9.io/build/kitchen-sink.html
// https://highlightjs.org/static/demo/
link.href = 'highlight/styles/atom-one-light.css';
link.href = 'highlight/styles/' + options.codeTheme;
document.getElementById('hlScriptContainer').appendChild(link);
}
function loadAndApplyHljs() {
function loadAndApplyHljs(options) {
var codeElements = document.getElementsByClassName('code');
if (!codeElements.length) return;
if (!hljsScriptAdded) {
this.loadHljs();
this.loadHljs(options);
return;
}
@@ -142,7 +142,7 @@
contentElement.innerHTML = html;
loadAndApplyHljs();
loadAndApplyHljs(event.options);
// Remove the bullet from "ul" for checkbox lists and extra padding
// const checkboxes = document.getElementsByClassName('checkbox');
@@ -276,6 +276,35 @@
}
});
function handleInternalLink(event, anchorNode) {
const href = anchorNode.getAttribute('href');
if (href.indexOf('#') === 0) {
event.preventDefault();
location.hash = href;
return true;
}
return false;
}
document.addEventListener('click', function(event) {
const t = event.target;
// Prevent URLs added via <a> tags from being opened within the application itself
// otherwise it would open the whole website within the WebView.
if (t && t.nodeName === 'A' && !t.hasAttribute('data-from-md')) {
if (handleInternalLink(event, t)) return;
event.preventDefault();
ipcProxySendToHost(t.getAttribute('href'));
return;
}
// If this is an internal link, jump to the anchor directly
if (t && t.nodeName === 'A' && t.hasAttribute('data-from-md')) {
if (handleInternalLink(event, t)) return;
}
});
// Disable drag and drop otherwise it's possible to drop a URL
// on it and it will open in the view as a website.
document.addEventListener('drop', function(e) {
@@ -298,4 +327,4 @@
</script>
</body>
</html>
</html>

View File

@@ -5,8 +5,8 @@
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('setHtml', (event, html) => {
window.postMessage({ target: 'webview', name: 'setHtml', data: { html: html } }, '*');
ipcRenderer.on('setHtml', (event, html, options) => {
window.postMessage({ target: 'webview', name: 'setHtml', data: { html: html, options: options } }, '*');
});
ipcRenderer.on('setPercentScroll', (event, percent) => {
@@ -33,4 +33,4 @@ window.addEventListener('message', (event) => {
} else {
throw new Error('Unsupported number of args');
}
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.111",
"version": "1.0.116",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -4057,17 +4057,17 @@
"integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po="
},
"katex": {
"version": "0.10.0-rc.1",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.10.0-rc.1.tgz",
"integrity": "sha512-JmnreLp0lWPA1z1krzO5drN1qBrkhqzMg5qv0l5y+Fr97sqgOuh37k9ky7VD1k/Ec+yvOe2BptiYSR9OoShkFg==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.10.0.tgz",
"integrity": "sha512-/WRvx+L1eVBrLwX7QzKU1dQuaGnE7E8hDvx3VWfZh9HbMiCfsKWJNnYZ0S8ZMDAfAyDSofdyXIrH/hujF1fYXg==",
"requires": {
"commander": "^2.16.0"
},
"dependencies": {
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
}
}
},

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.111",
"version": "1.0.116",
"description": "Joplin for Desktop",
"main": "main.js",
"scripts": {
@@ -95,7 +95,7 @@
"joplin-turndown": "^4.0.9",
"joplin-turndown-plugin-gfm": "^1.0.7",
"jssha": "^2.3.1",
"katex": "^0.10.0-rc.1",
"katex": "^0.10.0",
"levenshtein": "^1.0.5",
"lodash": "^4.17.10",
"mark.js": "^8.11.1",

View File

@@ -81,4 +81,4 @@ table td, table th {
.note-property-box .rdt {
display: inline-block;
}
}

View File

@@ -2,52 +2,29 @@ const Setting = require('lib/models/Setting.js');
const zoomRatio = Setting.value('style.zoom') / 100;
// globalStyle should be used for properties that do not change across themes
// i.e. should not be used for colors
const globalStyle = {
fontSize: Math.round(12 * zoomRatio),
fontFamily: 'sans-serif',
margin: 15, // No text and no interactive component should be within this margin
itemMarginTop: 10,
itemMarginBottom: 10,
backgroundColor: "#ffffff",
backgroundColorTransparent: 'rgba(255,255,255,0.9)',
oddBackgroundColor: "#dddddd",
color: "#222222", // For regular text
colorError: "red",
colorWarn: "#9A5B00",
colorFaded: "#777777", // For less important text
fontSizeSmaller: 14,
dividerColor: "#dddddd",
selectedColor: '#e5e5e5',
disabledOpacity: 0.3,
buttonMinWidth: 50,
buttonMinHeight: 30,
textAreaLineHeight: 17,
//backgroundColor2: "#2B2634",
backgroundColor2: "#162B3D",
color2: "#ffffff",
//selectedColor2: "#5A4D70",
selectedColor2: "#0269C2",
colorError2: "#ff6c6c",
warningBackgroundColor: "#FFD08D",
headerHeight: 35,
headerButtonHPadding: 6,
toolbarHeight: 35,
raisedBackgroundColor: "#0080EF",
raisedColor: "#003363",
raisedHighlightedColor: "#ffffff",
tagItemPadding: 3,
};
// For WebView - must correspond to the properties above
globalStyle.htmlFontSize = globalStyle.fontSize + 'px';
globalStyle.htmlColor ='black'; // Note: CSS in WebView component only supports named colors or rgb() notation
globalStyle.htmlBackgroundColor ='white';
globalStyle.htmlDividerColor = 'rgb(150,150,150)';
globalStyle.htmlLinkColor ='blue';
globalStyle.htmlLineHeight = Math.round(20 * zoomRatio) + 'px';
globalStyle.marginRight = globalStyle.margin;
@@ -57,28 +34,22 @@ globalStyle.marginBottom = globalStyle.margin;
globalStyle.htmlMarginLeft = ((globalStyle.marginLeft / 10) * 0.6).toFixed(2) + 'em';
globalStyle.icon = {
color: globalStyle.color,
fontSize: 30,
};
globalStyle.lineInput = {
color: globalStyle.color,
backgroundColor: globalStyle.backgroundColor,
fontFamily: globalStyle.fontFamily,
};
globalStyle.textStyle = {
color: globalStyle.color,
fontFamily: globalStyle.fontFamily,
fontSize: globalStyle.fontSize,
lineHeight: '1.6em',
};
globalStyle.textStyle2 = Object.assign({}, globalStyle.textStyle, {
color: globalStyle.color2,
});
globalStyle.textStyle2 = Object.assign({}, globalStyle.textStyle, {});
globalStyle.urlStyle = Object.assign({}, globalStyle.textStyle, { color: "#155BDA", textDecoration: 'underline' });
globalStyle.urlStyle = Object.assign({}, globalStyle.textStyle, { textDecoration: 'underline' });
globalStyle.h1Style = Object.assign({}, globalStyle.textStyle);
globalStyle.h1Style.fontSize *= 1.5;
@@ -95,7 +66,6 @@ globalStyle.toolbarStyle = {
alignItems: 'center',
paddingLeft: globalStyle.headerButtonHPadding,
paddingRight: globalStyle.headerButtonHPadding,
color: globalStyle.color,
textDecoration: 'none',
fontFamily: globalStyle.fontFamily,
fontSize: globalStyle.fontSize,
@@ -104,31 +74,213 @@ globalStyle.toolbarStyle = {
justifyContent: 'center',
};
globalStyle.headerStyle = {};
globalStyle.inputStyle = {
border: '1px solid',
};
globalStyle.containerStyle = {
overflow: 'auto',
overflowY: 'auto',
};
globalStyle.buttonStyle = {
marginRight: 10,
border: '1px solid',
};
const lightStyle = {
backgroundColor: "#ffffff",
backgroundColorTransparent: 'rgba(255,255,255,0.9)',
oddBackgroundColor: "#dddddd",
color: "#222222", // For regular text
colorError: "red",
colorWarn: "#9A5B00",
colorFaded: "#777777", // For less important text
dividerColor: "#dddddd",
selectedColor: '#e5e5e5',
urlColor: '#155BDA',
backgroundColor2: "#162B3D",
color2: "#ffffff",
selectedColor2: "#0269C2",
colorError2: "#ff6c6c",
raisedBackgroundColor: "#e5e5e5",
raisedColor: "#222222",
warningBackgroundColor: "#FFD08D",
codeColor: "#EFF0F1",
codeBorderColor: '#CBCBCB',
htmlColor:'black', // Note: CSS in WebView component only supports named colors or rgb() notation
htmlBackgroundColor: 'white',
htmlDividerColor: 'rgb(150,150,150)',
htmlLinkColor: 'blue',
htmlCodeColor: 'rgb(239, 240, 241)',
htmlCodeBorderColor: 'rgb(203, 203, 203)',
editorTheme: "chrome",
codeThemeCss: "atom-one-light.css",
};
const darkStyle = {
backgroundColor: '#1D2024',
backgroundColorTransparent: 'rgba(255,255,255,0.9)',
oddBackgroundColor: "#dddddd",
color: '#dddddd',
colorFaded: '#777777',
colorError: "red",
colorWarn: "#9A5B00",
colorFaded: "#777777", // For less important text
dividerColor: '#555555',
selectedColor: '#333333',
urlColor: '#4E87EE',
backgroundColor2: "#162B3D",
color2: "#ffffff",
selectedColor2: "#0269C2",
colorError2: "#ff6c6c",
raisedBackgroundColor: "#474747",
raisedColor: "#ffffff",
warningBackgroundColor: "#CC6600",
codeColor: "#2F3031",
codeBorderColor: '#464646',
htmlColor: 'rgb(220,220,220)', // Note: CSS in WebView component only supports named colors or rgb() notation
htmlBackgroundColor: 'rgb(29,32,36)',
htmlDividerColor: 'rgb(150,150,150)',
htmlLinkColor: 'rgb(166,166,255)',
htmlCodeColor: 'rgb(47, 48, 49)',
htmlCodeBorderColor: 'rgb(70, 70, 70)',
editorTheme: 'twilight',
codeThemeCss: "atom-one-dark-reasonable.css",
};
function addExtraStyles(style) {
style.tagStyle = {
fontSize: style.fontSize,
fontFamily: style.fontFamily,
marginTop: style.itemMarginTop * 0.4,
marginBottom: style.itemMarginBottom * 0.4,
marginRight: style.margin * 0.3,
paddingTop: style.tagItemPadding,
paddingBottom: style.tagItemPadding,
paddingRight: style.tagItemPadding * 2,
paddingLeft: style.tagItemPadding * 2,
backgroundColor: style.raisedBackgroundColor,
color: style.raisedColor,
};
return style;
}
let themeCache_ = {};
function themeStyle(theme) {
if (!theme) throw new Error('Theme must be specified');
if (themeCache_[theme]) return themeCache_[theme];
let output = Object.assign({}, globalStyle);
if (theme == Setting.THEME_LIGHT) return output;
let output = {};
if (theme == Setting.THEME_LIGHT) {
output = Object.assign({}, globalStyle, lightStyle);
}
else if (theme == Setting.THEME_DARK) {
output = Object.assign({}, globalStyle, darkStyle);
}
output.backgroundColor = '#1D2024';
output.color = '#dddddd';
output.colorFaded = '#777777';
output.dividerColor = '#555555';
output.selectedColor = '#333333';
// TODO: All the theme specific things should go in addExtraStyles
// so that their definition is not split between here and the
// beginning of the file. At least new styles should go in
// addExtraStyles.
output.raisedBackgroundColor = "#0F2051";
output.raisedColor = "#788BC3";
output.raisedHighlightedColor = "#ffffff";
output.textStyle = Object.assign({},
output.textStyle,
{ color: output.color }
);
output.htmlColor = 'rgb(220,220,220)';
output.htmlBackgroundColor = 'rgb(29,32,36)';
output.htmlLinkColor = 'rgb(166,166,255)';
output.icon = Object.assign({},
output.icon,
{ color: output.color }
);
output.lineInput = Object.assign({},
output.lineInput,
{
color: output.color,
backgroundColor: output.backgroundColor,
}
);
output.textStyle2 = Object.assign({},
output.textStyle2,
{ color: output.color2, }
);
output.urlStyle = Object.assign({},
output.urlStyle,
{ color: output.urlColor }
);
output.h1Style = Object.assign({},
output.h1Style,
{ color: output.color }
);
output.h2Style = Object.assign({},
output.h2Style,
{ color: output.color }
);
output.toolbarStyle = Object.assign({},
output.toolbarStyle,
{ color: output.color }
);
output.headerStyle = Object.assign({},
output.headerStyle,
{
color: output.color,
backgroundColor: output.backgroundColor,
}
);
output.inputStyle = Object.assign({},
output.inputStyle,
{
color: output.color,
backgroundColor: output.backgroundColor,
borderColor: output.dividerColor,
}
);
output.containerStyle = Object.assign({},
output.containerStyle,
{
color: output.color,
backgroundColor: output.backgroundColor,
}
);
output.buttonStyle = Object.assign({},
output.buttonStyle,
{
color: output.color,
backgroundColor: output.backgroundColor,
borderColor: output.dividerColor,
}
);
output = addExtraStyles(output);
themeCache_[theme] = output;
return themeCache_[theme];
}
module.exports = { themeStyle };
module.exports = { themeStyle };

0
ElectronClient/run-prod.sh Normal file → Executable file
View File

70
Joplin_install_and_update.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
set -e
# Title
echo " _ _ _ _ _ _ "
echo " | | (_) (_) | | | | | "
echo " | | ___ _ __ _ _ __ _ _ __ ___| |_ __ _| | | ___ _ __ "
echo " _ | |/ _ \\\| '_ \| | '_ \\ | | '_ \\\/ __| __/ _\` | | |/ _ \ '__|"
echo " | |__| | (_) | |_) | | | | | | | | | \__ \ || (_| | | | __/ | "
echo " \____/ \___/| .__/|_|_| |_| |_|_| |_|___/\__\__,_|_|_|\___|_| "
echo " | | "
echo " |_| "
echo ""
#-----------------------------------------------------
# Download Joplin
#-----------------------------------------------------
# Get the latest version to download
version=$(curl --silent "https://api.github.com/repos/laurent22/joplin/releases/latest" | grep -Po '"tag_name": "v\K.*?(?=")')
# Check if it's in the latest version
touch VERSION
if [[ $(< ~/.joplin/VERSION) != "$version" ]]; then
# Delete previous version
rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION
# Creates the folder where the binary will be stored
mkdir -p ~/.joplin/
# Download the latest version
wget -O ~/.joplin/Joplin.AppImage https://github.com/laurent22/joplin/releases/download/v$version/Joplin-$version-x86_64.AppImage
# Gives execution privileges
chmod +x ~/.joplin/Joplin.AppImage
#-----------------------------------------------------
# Icon
#-----------------------------------------------------
# Download icon
wget -O ~/.joplin/Icon512.png https://joplin.cozic.net/images/Icon512.png
# Detect desktop environment
if [ "$XDG_CURRENT_DESKTOP" = "" ]
then
desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
desktop=$XDG_CURRENT_DESKTOP
fi
desktop=${desktop,,} # convert to lower case
# Create icon for Gnome
if [[ $desktop =~ .*gnome.* ]]
then
echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nExec=/home/$USER/.joplin/Joplin-$version-x86_64.AppImage\nIcon=/home/$USER/.joplin/Icon512.png\nType=Application\nCategories=Application;" >> ~/.local/share/applications/joplin.desktop
fi
#-----------------------------------------------------
# Finish
#-----------------------------------------------------
# Informs the user that it has been installed and cleans variables
echo 'Joplin installed in the version' $version
# Add version
echo $version > ~/.joplin/VERSION
else
echo 'You are now in the latest version.'
fi
unset version

View File

@@ -20,23 +20,23 @@ Three types of applications are available: for the **desktop** (Windows, macOS a
Operating System | Download | Alternative
-----------------|--------|-------------------
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.109/Joplin-Setup-1.0.109.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a> | or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.109/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.109/Joplin-1.0.109.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a> |
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.109/Joplin-1.0.109-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a> | An Arch Linux package<br>[is also available](#terminal-application).
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.116/Joplin-Setup-1.0.116.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a> | or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.116/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.116/Joplin-1.0.116.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a> |
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.116/Joplin-1.0.116-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a> | An Arch Linux package<br>[is also available](#terminal-application).
The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
### Install and Update Ubuntu/Debian (Gnome Shell)
On Linux, if it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:
``` sh
wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/install_ubuntu.sh | bash
wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash
```
## Mobile applications
Operating System | Download | Alt. Download
-----------------|----------|----------------
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplin.cozic.net/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.135/joplin-v1.0.135.apk)
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplin.cozic.net/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.176/joplin-v1.0.176.apk)
iOS | <a href='https://itunes.apple.com/us/app/joplin/id1315599797'><img alt='Get it on the App Store' height="40px" src='https://joplin.cozic.net/images/BadgeIOS.png'/></a> | -
## Terminal application
@@ -159,7 +159,7 @@ If synchronisation does not work, please consult the logs in the app profile dir
## Dropbox synchronisation
When syncing with Dropbox, Joplin creates a sub-directory in Dropbox, in /Apps/Joplin and read/write the notes and notebooks from it. The application does not have access to anything outside this directory.
When syncing with Dropbox, Joplin creates a sub-directory in Dropbox, in `/Apps/Joplin` and read/write the notes and notebooks from it. The application does not have access to anything outside this directory.
On the **desktop application** or **mobile application**, select "Dropbox" as the synchronisation target in the config screen (it is selected by default). Then, to initiate the synchronisation process, click on the "Synchronise" button in the sidebar and follow the instructions.
@@ -178,6 +178,7 @@ WebDAV-compatible services that are known to work with Joplin:
- [Fastmail](https://www.fastmail.com/)
- [HiDrive](https://www.strato.fr/stockage-en-ligne/) from Strato. [Setup help](https://github.com/laurent22/joplin/issues/309)
- [Nginx WebDAV Module](https://nginx.org/en/docs/http/ngx_http_dav_module.html)
- [NextCloud](https://nextcloud.com/)
- [OwnCloud](https://owncloud.org/)
- [Seafile](https://www.seafile.com/)
- [Stack](https://www.transip.nl/stack/)
@@ -245,7 +246,7 @@ Since getting the ID of a note is not straightforward, each app provides a way t
## Math notation
Math expressions can be added using the [Katex notation](https://khan.github.io/KaTeX/). To add an inline equation, wrap the expression in `$EXPRESSION$`, eg. `$\sqrt{3x-1}+(1+x)^2$`. To create an expression block, wrap it as follow:
Math expressions can be added using the [KaTeX notation](https://khan.github.io/KaTeX/). To add an inline equation, wrap the expression in `$EXPRESSION$`, eg. `$\sqrt{3x-1}+(1+x)^2$`. To create an expression block, wrap it as follow:
$$
EXPRESSION
@@ -279,6 +280,10 @@ It is generally recommended to enter the notes as Markdown as it makes the notes
This is <s>strikethrough text</s> mixed with regular **Markdown**.
## Custom CSS
Rendered markdown can be customized by placing a userstyle file in the profile directory `~/.config/joplin-desktop/userstyle.css` (This path might be different on your device - check at the top of the Config screen for the exact path). This file supports standard CSS syntax.
# Donations
Donations to Joplin support the development of the project. Developing quality applications mostly takes time, but there are also some expenses, such as digital certificates to sign the applications, app store fees, hosting, etc. Most of all, your donation will make it possible to keep up the current development standard.
@@ -314,29 +319,29 @@ Current translations:
<!-- LOCALE-TABLE-AUTO-GENERATED -->
&nbsp; | Language | Po File | Last translator | Percent done
---|---|---|---|---
![](https://joplin.cozic.net/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 63%
![](https://joplin.cozic.net/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 90%
![](https://joplin.cozic.net/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 51%
![](https://joplin.cozic.net/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 80%
![](https://joplin.cozic.net/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 82%
![](https://joplin.cozic.net/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 61%
![](https://joplin.cozic.net/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 87%
![](https://joplin.cozic.net/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 49%
![](https://joplin.cozic.net/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 77%
![](https://joplin.cozic.net/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 78%
![](https://joplin.cozic.net/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Michael Sonntag (ms@editorei.de) | 98%
![](https://joplin.cozic.net/images/flags/country-4x3/gb.png) | English | [en_GB](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_GB.po) | | 100%
![](https://joplin.cozic.net/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Fernando Martín (f@mrtn.es) | 97%
![](https://joplin.cozic.net/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Fernando Martín (f@mrtn.es) | 93%
![](https://joplin.cozic.net/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 100%
![](https://joplin.cozic.net/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 80%
![](https://joplin.cozic.net/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 95%
![](https://joplin.cozic.net/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 97%
![](https://joplin.cozic.net/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 64%
![](https://joplin.cozic.net/images/flags/country-4x3/no.png) | Norwegian | [no](https://github.com/laurent22/joplin/blob/master/CliClient/locales/no.po) | | 86%
![](https://joplin.cozic.net/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 97%
![](https://joplin.cozic.net/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 63%
![](https://joplin.cozic.net/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 79%
![](https://joplin.cozic.net/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 96%
![](https://joplin.cozic.net/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 79%
![](https://joplin.cozic.net/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 97%
![](https://joplin.cozic.net/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 97%
![](https://joplin.cozic.net/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 98%
![](https://joplin.cozic.net/images/flags/country-4x3/kr.png) | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 97%
![](https://joplin.cozic.net/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 77%
![](https://joplin.cozic.net/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 92%
![](https://joplin.cozic.net/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 93%
![](https://joplin.cozic.net/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 61%
![](https://joplin.cozic.net/images/flags/country-4x3/no.png) | Norwegian | [no](https://github.com/laurent22/joplin/blob/master/CliClient/locales/no.po) | | 83%
![](https://joplin.cozic.net/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 100%
![](https://joplin.cozic.net/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 61%
![](https://joplin.cozic.net/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 76%
![](https://joplin.cozic.net/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 92%
![](https://joplin.cozic.net/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 76%
![](https://joplin.cozic.net/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 96%
![](https://joplin.cozic.net/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 93%
![](https://joplin.cozic.net/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 94%
![](https://joplin.cozic.net/images/flags/country-4x3/kr.png) | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 93%
<!-- LOCALE-TABLE-AUTO-GENERATED -->
# Known bugs

View File

@@ -1,3 +1,3 @@
{
"presets": ["react-native"]
"presets": ["module:metro-react-native-babel-preset"]
}

Some files were not shown because too many files have changed in this diff Show More