You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-30 20:39:46 +02:00
Compare commits
59 Commits
android-v2
...
android-v2
Author | SHA1 | Date | |
---|---|---|---|
|
7f169807ca | ||
|
514c3437b3 | ||
|
552e78c4cd | ||
|
c7031f29d0 | ||
|
db3fc3a827 | ||
|
6e133b0725 | ||
|
3200224b6f | ||
|
98b55cbe73 | ||
|
87e44e9381 | ||
|
1cb62d8357 | ||
|
4faba40b1e | ||
|
d1508ce8f2 | ||
|
c26ce462e8 | ||
|
f761e9021b | ||
|
586542e15e | ||
|
10c6af8aa7 | ||
|
e9ce3d194c | ||
|
83a46e563d | ||
|
aa42cebbca | ||
|
9c0982dcab | ||
|
23de363548 | ||
|
4a1bc075ac | ||
|
39196fa582 | ||
|
28c6f91ac3 | ||
|
5c82e439a7 | ||
|
a4aa40dde8 | ||
|
b40d9bd8a1 | ||
|
4ad4fdee49 | ||
|
7ce9ae11c7 | ||
|
deb300326b | ||
|
227c9dcfee | ||
|
28c7b717f3 | ||
|
c499473467 | ||
|
7fa278f875 | ||
|
06e427fc5a | ||
|
51f7dc9ab8 | ||
|
eca964b03b | ||
|
bfcc02a769 | ||
|
7c42688072 | ||
|
e0e93c436b | ||
|
78c5877c65 | ||
|
9767b659c2 | ||
|
4b6210802b | ||
|
9f0def64f3 | ||
|
16c94d95cb | ||
|
03c8942a74 | ||
|
1626170ea6 | ||
|
fd03ab4f47 | ||
|
684857752f | ||
|
95f88d0f2c | ||
|
3ddfa0b774 | ||
|
35f684a1ee | ||
|
aac044fc9c | ||
|
9cbc3b3096 | ||
|
122afd6d46 | ||
|
75c67b7d78 | ||
|
33822295ef | ||
|
a5b1255f45 | ||
|
62f4396ffe |
@@ -705,9 +705,6 @@ packages/app-desktop/gui/style/StyledTextInput.js.map
|
||||
packages/app-desktop/gui/utils/NoteListUtils.d.ts
|
||||
packages/app-desktop/gui/utils/NoteListUtils.js
|
||||
packages/app-desktop/gui/utils/NoteListUtils.js.map
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.d.ts
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.js
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.js.map
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.d.ts
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.js
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.js.map
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -688,9 +688,6 @@ packages/app-desktop/gui/style/StyledTextInput.js.map
|
||||
packages/app-desktop/gui/utils/NoteListUtils.d.ts
|
||||
packages/app-desktop/gui/utils/NoteListUtils.js
|
||||
packages/app-desktop/gui/utils/NoteListUtils.js.map
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.d.ts
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.js
|
||||
packages/app-desktop/gui/utils/SyncScrollMap.js.map
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.d.ts
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.js
|
||||
packages/app-desktop/gui/utils/convertToScreenCoordinates.js.map
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<a href="https://twitter.com/joplinapp" title="Joplin Twitter feed"><i class="fab fa-twitter"></i></a>
|
||||
<a href="https://mastodon.social/@joplinapp" title="Joplin Mastodon feed"><i class="fab fa-mastodon"></i></a>
|
||||
<a href="https://www.patreon.com/joplin" title="Joplin Patreon"><i class="fab fa-patreon"></i></a>
|
||||
<a href="https://discordapp.com/invite/d2HMPwE" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a href="https://discord.gg/VSj7AFHvpq" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a href="https://www.reddit.com/r/joplinapp/" title="Joplin Subreddit"><i class="fab fa-reddit"></i></a>
|
||||
<a href="https://github.com/laurent22/joplin/" title="Joplin GitHub repository"><i class="fab fa-github"></i></a>
|
||||
</div>
|
||||
|
74
README.md
74
README.md
@@ -502,7 +502,7 @@ Name | Description
|
||||
[Twitter feed](https://twitter.com/joplinapp) | Follow us on Twitter
|
||||
[Mastodon feed](https://mastodon.social/@joplinapp) | Follow us on Mastodon
|
||||
[Patreon page](https://www.patreon.com/joplin) |The latest news are often posted there
|
||||
[Discord server](https://discordapp.com/invite/d2HMPwE) | Our chat server
|
||||
[Discord server](https://discord.gg/VSj7AFHvpq) | Our chat server
|
||||
[Sub-reddit](https://www.reddit.com/r/joplinapp/) | Also a good place to get help
|
||||
|
||||
# Contributing
|
||||
@@ -528,47 +528,47 @@ Current translations:
|
||||
<!-- LOCALE-TABLE-AUTO-GENERATED -->
|
||||
| Language | Po File | Last translator | Percent done
|
||||
---|---|---|---|---
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/arableague.png" width="16px"/> | Arabic | [ar](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ar.po) | [Whaell O](mailto:Whaell@protonmail.com) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/arableague.png" width="16px"/> | Arabic | [ar](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ar.po) | [Whaell O](mailto:Whaell@protonmail.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/es/basque_country.png" width="16px"/> | Basque | [eu](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/eu.po) | juan.abasolo@ehu.eus | 27%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ba.png" width="16px"/> | Bosnian (Bosna i Hercegovina) | [bs_BA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bs_BA.po) | [Derviš T.](mailto:dervis.t@pm.me) | 68%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/bg.png" width="16px"/> | Bulgarian (България) | [bg_BG](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bg_BG.po) | | 54%
|
||||
<img src="https://joplinapp.org/images/flags/es/catalonia.png" width="16px"/> | Catalan | [ca](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ca.po) | [Xavi Ivars](mailto:xavi.ivars@gmail.com) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/hr.png" width="16px"/> | Croatian (Hrvatska) | [hr_HR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hr_HR.po) | [Milo Ivir](mailto:mail@milotype.de) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/cz.png" width="16px"/> | Czech (Česká republika) | [cs_CZ](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/cs_CZ.po) | [Michal Stanke](mailto:michal@stanke.cz) | 91%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/dk.png" width="16px"/> | Dansk (Danmark) | [da_DK](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/da_DK.po) | ERYpTION | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/de.png" width="16px"/> | Deutsch (Deutschland) | [de_DE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/de_DE.po) | [MrKanister](mailto:s.robin@tutanota.de) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ee.png" width="16px"/> | Eesti Keel (Eesti) | [et_EE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/et_EE.po) | | 52%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ba.png" width="16px"/> | Bosnian (Bosna i Hercegovina) | [bs_BA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bs_BA.po) | [Derviš T.](mailto:dervis.t@pm.me) | 67%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/bg.png" width="16px"/> | Bulgarian (България) | [bg_BG](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bg_BG.po) | | 53%
|
||||
<img src="https://joplinapp.org/images/flags/es/catalonia.png" width="16px"/> | Catalan | [ca](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ca.po) | [Xavi Ivars](mailto:xavi.ivars@gmail.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/hr.png" width="16px"/> | Croatian (Hrvatska) | [hr_HR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hr_HR.po) | [Milo Ivir](mailto:mail@milotype.de) | 97%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/cz.png" width="16px"/> | Czech (Česká republika) | [cs_CZ](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/cs_CZ.po) | [Michal Stanke](mailto:michal@stanke.cz) | 89%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/dk.png" width="16px"/> | Dansk (Danmark) | [da_DK](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/da_DK.po) | ERYpTION | 97%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/de.png" width="16px"/> | Deutsch (Deutschland) | [de_DE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/de_DE.po) | [MrKanister](mailto:s.robin@tutanota.de) | 97%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ee.png" width="16px"/> | Eesti Keel (Eesti) | [et_EE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/et_EE.po) | | 51%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/gb.png" width="16px"/> | English (United Kingdom) | [en_GB](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/en_GB.po) | | 100%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/us.png" width="16px"/> | English (United States of America) | [en_US](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/en_US.po) | | 100%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/es.png" width="16px"/> | Español (España) | [es_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/es_ES.po) | [Francisco Mora](mailto:francisco.m.collao@gmail.com) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/es.png" width="16px"/> | Español (España) | [es_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/es_ES.po) | [Francisco Mora](mailto:francisco.m.collao@gmail.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/esperanto.png" width="16px"/> | Esperanto | [eo](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/eo.po) | Marton Paulo | 30%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/fi.png" width="16px"/> | Finnish (Suomi) | [fi_FI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fi_FI.po) | mrkaato | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/fr.png" width="16px"/> | Français (France) | [fr_FR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fr_FR.po) | Nicolas Viviani | 96%
|
||||
<img src="https://joplinapp.org/images/flags/es/galicia.png" width="16px"/> | Galician (España) | [gl_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/gl_ES.po) | [Marcos Lans](mailto:marcoslansgarza@gmail.com) | 35%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/id.png" width="16px"/> | Indonesian (Indonesia) | [id_ID](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/id_ID.po) | [eresytter](mailto:42007357+eresytter@users.noreply.github.com) | 94%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/it.png" width="16px"/> | Italiano (Italia) | [it_IT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/it_IT.po) | [Albano Battistella](mailto:albano_battistella@hotmail.com) | 92%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/hu.png" width="16px"/> | Magyar (Magyarország) | [hu_HU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hu_HU.po) | [Magyari Balázs](mailto:balmag@gmail.com) | 80%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/be.png" width="16px"/> | Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 83%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/nl.png" width="16px"/> | Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MetBril](mailto:metbril@users.noreply.github.com) | 87%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/no.png" width="16px"/> | Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | Alexander Dawson | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 65%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [konhi](mailto:hello.konhi@gmail.com) | 86%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/br.png" width="16px"/> | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Felipe Viggiano](mailto:felipeviggiano@gmail.com) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/pt.png" width="16px"/> | Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 86%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ro.png" width="16px"/> | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 60%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/se.png" width="16px"/> | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/fi.png" width="16px"/> | Finnish (Suomi) | [fi_FI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fi_FI.po) | mrkaato | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/fr.png" width="16px"/> | Français (France) | [fr_FR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fr_FR.po) | Laurent Cozic | 100%
|
||||
<img src="https://joplinapp.org/images/flags/es/galicia.png" width="16px"/> | Galician (España) | [gl_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/gl_ES.po) | [Marcos Lans](mailto:marcoslansgarza@gmail.com) | 34%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/id.png" width="16px"/> | Indonesian (Indonesia) | [id_ID](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/id_ID.po) | [eresytter](mailto:42007357+eresytter@users.noreply.github.com) | 92%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/it.png" width="16px"/> | Italiano (Italia) | [it_IT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/it_IT.po) | [Albano Battistella](mailto:albano_battistella@hotmail.com) | 90%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/hu.png" width="16px"/> | Magyar (Magyarország) | [hu_HU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hu_HU.po) | [Magyari Balázs](mailto:balmag@gmail.com) | 78%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/be.png" width="16px"/> | Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 81%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/nl.png" width="16px"/> | Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MetBril](mailto:metbril@users.noreply.github.com) | 85%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/no.png" width="16px"/> | Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | Alexander Dawson | 90%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 64%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [konhi](mailto:hello.konhi@gmail.com) | 84%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/br.png" width="16px"/> | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Felipe Viggiano](mailto:felipeviggiano@gmail.com) | 94%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/pt.png" width="16px"/> | Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 84%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ro.png" width="16px"/> | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 59%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/se.png" width="16px"/> | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 97%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/th.png" width="16px"/> | Thai (ประเทศไทย) | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/th_TH.po) | | 43%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/vi.png" width="16px"/> | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/tr.png" width="16px"/> | Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 85%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/gr.png" width="16px"/> | Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 89%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ru.png" width="16px"/> | Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Sergey Segeda](mailto:thesermanarm@gmail.com) | 95%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/rs.png" width="16px"/> | српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 78%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/cn.png" width="16px"/> | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_CN.po) | [南宫小骏](mailto:jackytsu@vip.qq.com) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/tw.png" width="16px"/> | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_TW.po) | [SiderealArt](mailto:nelson22768384@gmail.com) | 92%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/jp.png" width="16px"/> | 日本語 (日本) | [ja_JP](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ja_JP.po) | [genneko](mailto:genneko217@gmail.com) | 96%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/kr.png" width="16px"/> | 한국어 | [ko](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ko.po) | [Ji-Hyeon Gim](mailto:potatogim@potatogim.net) | 91%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/vi.png" width="16px"/> | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 90%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/tr.png" width="16px"/> | Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 83%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/gr.png" width="16px"/> | Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 87%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/ru.png" width="16px"/> | Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Sergey Segeda](mailto:thesermanarm@gmail.com) | 93%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/rs.png" width="16px"/> | српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 76%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/cn.png" width="16px"/> | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_CN.po) | [南宫小骏](mailto:jackytsu@vip.qq.com) | 97%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/tw.png" width="16px"/> | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_TW.po) | [SiderealArt](mailto:nelson22768384@gmail.com) | 90%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/jp.png" width="16px"/> | 日本語 (日本) | [ja_JP](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ja_JP.po) | [genneko](mailto:genneko217@gmail.com) | 98%
|
||||
<img src="https://joplinapp.org/images/flags/country-4x3/kr.png" width="16px"/> | 한국어 | [ko](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ko.po) | [Ji-Hyeon Gim](mailto:potatogim@potatogim.net) | 89%
|
||||
<!-- LOCALE-TABLE-AUTO-GENERATED -->
|
||||
|
||||
# Contributors
|
||||
|
@@ -6,7 +6,7 @@ version: '3'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:13.1
|
||||
image: postgres:13
|
||||
command: postgres -c work_mem=100000
|
||||
ports:
|
||||
- "5432:5432"
|
||||
@@ -14,7 +14,7 @@ services:
|
||||
- POSTGRES_PASSWORD=joplin
|
||||
- POSTGRES_USER=joplin
|
||||
- POSTGRES_DB=joplin
|
||||
|
||||
|
||||
# Use this to specify additional Postgres
|
||||
# config parameters:
|
||||
#
|
||||
|
@@ -18,7 +18,7 @@ services:
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_HOST=localhost
|
||||
db:
|
||||
image: postgres:13.1
|
||||
image: postgres:13
|
||||
ports:
|
||||
- "5432:5432"
|
||||
environment:
|
||||
|
@@ -8,7 +8,7 @@ version: '3'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:13.1
|
||||
image: postgres:13
|
||||
volumes:
|
||||
- ./data/postgres:/var/lib/postgresql/data
|
||||
ports:
|
||||
|
@@ -5,6 +5,7 @@ import MigrationHandler from '@joplin/lib/services/synchronizer/MigrationHandler
|
||||
import ResourceFetcher from '@joplin/lib/services/ResourceFetcher';
|
||||
import Synchronizer from '@joplin/lib/Synchronizer';
|
||||
import { masterKeysWithoutPassword } from '@joplin/lib/services/e2ee/utils';
|
||||
import { appTypeToLockType } from '@joplin/lib/services/synchronizer/LockHandler';
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { OneDriveApiNodeUtils } = require('@joplin/lib/onedrive-api-node-utils.js');
|
||||
@@ -188,7 +189,7 @@ class Command extends BaseCommand {
|
||||
sync.api(),
|
||||
reg.db(),
|
||||
sync.lockHandler(),
|
||||
Setting.value('appType'),
|
||||
appTypeToLockType(Setting.value('appType')),
|
||||
Setting.value('clientId')
|
||||
);
|
||||
|
||||
|
@@ -7,7 +7,7 @@ import { commandAttachFileToBody, handlePasteEvent } from '../../utils/resourceH
|
||||
import { ScrollOptions, ScrollOptionTypes } from '../../utils/types';
|
||||
import { CommandValue } from '../../utils/types';
|
||||
import { usePrevious, cursorPositionToTextOffset } from './utils';
|
||||
import useScrollHandler, { translateScrollPercentToEditor, translateScrollPercentToViewer } from './utils/useScrollHandler';
|
||||
import useScrollHandler from './utils/useScrollHandler';
|
||||
import useElementSize from '@joplin/lib/hooks/useElementSize';
|
||||
import Toolbar from './Toolbar';
|
||||
import styles_ from './styles';
|
||||
@@ -65,7 +65,8 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
|
||||
usePluginServiceRegistration(ref);
|
||||
|
||||
const { resetScroll, editor_scroll, setEditorPercentScroll, setViewerPercentScroll } = useScrollHandler(editorRef, webviewRef, props.onScroll);
|
||||
const { resetScroll, editor_scroll, setEditorPercentScroll, setViewerPercentScroll, editor_resize,
|
||||
} = useScrollHandler(editorRef, webviewRef, props.onScroll);
|
||||
|
||||
const codeMirror_change = useCallback((newBody: string) => {
|
||||
props_onChangeRef.current({ changeId: null, content: newBody });
|
||||
@@ -115,10 +116,9 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
if (!webviewRef.current) return;
|
||||
webviewRef.current.wrappedInstance.send('scrollToHash', options.value as string);
|
||||
} else if (options.type === ScrollOptionTypes.Percent) {
|
||||
const editorPercent = options.value as number;
|
||||
setEditorPercentScroll(editorPercent);
|
||||
const viewerPercent = translateScrollPercentToViewer(editorRef, webviewRef, editorPercent);
|
||||
setViewerPercentScroll(viewerPercent);
|
||||
const percent = options.value as number;
|
||||
setEditorPercentScroll(percent);
|
||||
setViewerPercentScroll(percent);
|
||||
} else {
|
||||
throw new Error(`Unsupported scroll options: ${options.type}`);
|
||||
}
|
||||
@@ -581,17 +581,8 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
editorRef.current.updateBody(newBody);
|
||||
}
|
||||
} else if (msg === 'percentScroll') {
|
||||
const viewerPercent = arg0;
|
||||
const editorPercent = translateScrollPercentToEditor(editorRef, webviewRef, viewerPercent);
|
||||
setEditorPercentScroll(editorPercent);
|
||||
} else if (msg === 'syncViewerScrollWithEditor') {
|
||||
const force = !!arg0;
|
||||
webviewRef.current?.wrappedInstance?.refreshSyncScrollMap(force);
|
||||
const editorPercent = Math.max(0, Math.min(1, editorRef.current?.getScrollPercent()));
|
||||
if (!isNaN(editorPercent)) {
|
||||
const viewerPercent = translateScrollPercentToViewer(editorRef, webviewRef, editorPercent);
|
||||
setViewerPercentScroll(viewerPercent);
|
||||
}
|
||||
const percent = arg0;
|
||||
setEditorPercentScroll(percent);
|
||||
} else {
|
||||
props.onMessage(event);
|
||||
}
|
||||
@@ -644,6 +635,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
const options: any = {
|
||||
pluginAssets: renderedBody.pluginAssets,
|
||||
downloadResources: Setting.value('sync.resourceDownloadMode'),
|
||||
markupLineCount: editorRef.current?.lineCount() || 0,
|
||||
};
|
||||
|
||||
// It seems when there's an error immediately when the component is
|
||||
@@ -652,7 +644,6 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
// Since we can't do much about it we just print an error.
|
||||
if (webviewRef.current && webviewRef.current.wrappedInstance) {
|
||||
webviewRef.current.wrappedInstance.send('setHtml', renderedBody.html, options);
|
||||
webviewRef.current.wrappedInstance.refreshSyncScrollMap(true);
|
||||
} else {
|
||||
console.error('Trying to set HTML on an undefined webview ref');
|
||||
}
|
||||
@@ -829,6 +820,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
onScroll={editor_scroll}
|
||||
onEditorPaste={onEditorPaste}
|
||||
isSafeMode={props.isSafeMode}
|
||||
onResize={editor_resize}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
@@ -93,6 +93,7 @@ export interface EditorProps {
|
||||
onScroll: any;
|
||||
onEditorPaste: any;
|
||||
isSafeMode: boolean;
|
||||
onResize: any;
|
||||
}
|
||||
|
||||
function Editor(props: EditorProps, ref: any) {
|
||||
@@ -189,6 +190,8 @@ function Editor(props: EditorProps, ref: any) {
|
||||
cm.on('paste', editor_paste);
|
||||
cm.on('drop', editor_drop);
|
||||
cm.on('dragover', editor_drag);
|
||||
cm.on('refresh', props.onResize);
|
||||
cm.on('update', props.onResize);
|
||||
|
||||
// It's possible for searchMarkers to be available before the editor
|
||||
// In these cases we set the markers asap so the user can see them as
|
||||
@@ -202,6 +205,8 @@ function Editor(props: EditorProps, ref: any) {
|
||||
cm.off('paste', editor_paste);
|
||||
cm.off('drop', editor_drop);
|
||||
cm.off('dragover', editor_drag);
|
||||
cm.off('refresh', props.onResize);
|
||||
cm.off('update', props.onResize);
|
||||
editorParent.current.removeChild(cm.getWrapperElement());
|
||||
setEditor(null);
|
||||
};
|
||||
|
@@ -1,10 +1,34 @@
|
||||
import { useCallback, useRef } from 'react';
|
||||
import shim from '@joplin/lib/shim';
|
||||
import { SyncScrollMap } from '../../../../utils/SyncScrollMap';
|
||||
|
||||
export default function useScrollHandler(editorRef: any, webviewRef: any, onScroll: Function) {
|
||||
const ignoreNextEditorScrollEvent_ = useRef(false);
|
||||
const scrollTimeoutId_ = useRef<any>(null);
|
||||
const scrollPercent_ = useRef(0);
|
||||
const ignoreNextEditorScrollTime_ = useRef(Date.now());
|
||||
const ignoreNextEditorScrollEventCount_ = useRef(0);
|
||||
const delayedSetEditorPercentScrollTimeoutID_ = useRef(null);
|
||||
|
||||
// Ignores one next scroll event for a short time.
|
||||
const ignoreNextEditorScrollEvent = () => {
|
||||
const now = Date.now();
|
||||
if (now >= ignoreNextEditorScrollTime_.current) ignoreNextEditorScrollEventCount_.current = 0;
|
||||
if (ignoreNextEditorScrollEventCount_.current < 10) { // for safety
|
||||
ignoreNextEditorScrollTime_.current = now + 200;
|
||||
ignoreNextEditorScrollEventCount_.current += 1;
|
||||
}
|
||||
};
|
||||
|
||||
// Tests the next scroll event should be ignored and then decrements the count.
|
||||
const isNextEditorScrollEventIgnored = () => {
|
||||
if (ignoreNextEditorScrollEventCount_.current) {
|
||||
if (Date.now() < ignoreNextEditorScrollTime_.current) {
|
||||
ignoreNextEditorScrollEventCount_.current -= 1;
|
||||
return true;
|
||||
}
|
||||
ignoreNextEditorScrollEventCount_.current = 0;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
const scheduleOnScroll = useCallback((event: any) => {
|
||||
if (scrollTimeoutId_.current) {
|
||||
@@ -18,108 +42,128 @@ export default function useScrollHandler(editorRef: any, webviewRef: any, onScro
|
||||
}, 10);
|
||||
}, [onScroll]);
|
||||
|
||||
const setEditorPercentScroll = useCallback((p: number) => {
|
||||
ignoreNextEditorScrollEvent_.current = true;
|
||||
const setEditorPercentScrollInternal = (percent: number) => {
|
||||
scrollPercent_.current = percent;
|
||||
let retry = 0;
|
||||
const fn = () => {
|
||||
if (delayedSetEditorPercentScrollTimeoutID_.current) {
|
||||
shim.clearInterval(delayedSetEditorPercentScrollTimeoutID_.current);
|
||||
delayedSetEditorPercentScrollTimeoutID_.current = null;
|
||||
}
|
||||
const cm = editorRef.current;
|
||||
if (isCodeMirrorReady(cm)) {
|
||||
// calculates editor's GUI-dependent pixel-based raw percent
|
||||
const newEditorPercent = translateScrollPercentL2E(cm, scrollPercent_.current);
|
||||
const oldEditorPercent = cm.getScrollPercent();
|
||||
if (!(Math.abs(newEditorPercent - oldEditorPercent) < 1e-8)) {
|
||||
ignoreNextEditorScrollEvent();
|
||||
cm.setScrollPercent(newEditorPercent);
|
||||
}
|
||||
} else {
|
||||
retry += 1;
|
||||
if (retry <= 10) {
|
||||
delayedSetEditorPercentScrollTimeoutID_.current = shim.setTimeout(fn, 50);
|
||||
}
|
||||
}
|
||||
};
|
||||
fn();
|
||||
};
|
||||
|
||||
const restoreEditorPercentScroll = () => {
|
||||
if (isCodeMirrorReady(editorRef.current)) {
|
||||
setEditorPercentScrollInternal(scrollPercent_.current);
|
||||
}
|
||||
};
|
||||
|
||||
const setEditorPercentScroll = useCallback((percent: number) => {
|
||||
setEditorPercentScrollInternal(percent);
|
||||
if (editorRef.current) {
|
||||
editorRef.current.setScrollPercent(p);
|
||||
|
||||
scheduleOnScroll({ percent: p });
|
||||
scheduleOnScroll({ percent });
|
||||
}
|
||||
}, [scheduleOnScroll]);
|
||||
|
||||
const setViewerPercentScroll = useCallback((p: number) => {
|
||||
const setViewerPercentScroll = useCallback((percent: number) => {
|
||||
if (webviewRef.current) {
|
||||
webviewRef.current.wrappedInstance.send('setPercentScroll', p);
|
||||
scheduleOnScroll({ percent: p });
|
||||
webviewRef.current.wrappedInstance.send('setPercentScroll', percent);
|
||||
scheduleOnScroll({ percent });
|
||||
}
|
||||
}, [scheduleOnScroll]);
|
||||
|
||||
const editor_scroll = useCallback(() => {
|
||||
if (ignoreNextEditorScrollEvent_.current) {
|
||||
ignoreNextEditorScrollEvent_.current = false;
|
||||
return;
|
||||
}
|
||||
if (isNextEditorScrollEventIgnored()) return;
|
||||
|
||||
if (editorRef.current) {
|
||||
const editorPercent = Math.max(0, Math.min(1, editorRef.current.getScrollPercent()));
|
||||
const cm = editorRef.current;
|
||||
if (isCodeMirrorReady(cm)) {
|
||||
const editorPercent = Math.max(0, Math.min(1, cm.getScrollPercent()));
|
||||
if (!isNaN(editorPercent)) {
|
||||
// when switching to another note, the percent can sometimes be NaN
|
||||
// this is coming from `gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.ts`
|
||||
// when CodeMirror returns scroll info with heigth == clientHeigth
|
||||
// https://github.com/laurent22/joplin/issues/4797
|
||||
const viewerPercent = translateScrollPercentToViewer(editorRef, webviewRef, editorPercent);
|
||||
setViewerPercentScroll(viewerPercent);
|
||||
|
||||
// calculates GUI-independent line-based percent
|
||||
const percent = translateScrollPercentE2L(cm, editorPercent);
|
||||
scrollPercent_.current = percent;
|
||||
setViewerPercentScroll(percent);
|
||||
}
|
||||
}
|
||||
}, [setViewerPercentScroll]);
|
||||
|
||||
const resetScroll = useCallback(() => {
|
||||
scrollPercent_.current = 0;
|
||||
if (editorRef.current) {
|
||||
editorRef.current.setScrollPercent(0);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return { resetScroll, setEditorPercentScroll, setViewerPercentScroll, editor_scroll };
|
||||
const editor_resize = useCallback((cm) => {
|
||||
if (cm) {
|
||||
restoreEditorPercentScroll();
|
||||
}
|
||||
}, []);
|
||||
|
||||
return {
|
||||
resetScroll, setEditorPercentScroll, setViewerPercentScroll, editor_scroll, editor_resize,
|
||||
};
|
||||
}
|
||||
|
||||
const translateScrollPercent_ = (editorRef: any, webviewRef: any, percent: number, editorToViewer: boolean) => {
|
||||
const translateLE_ = (codeMirror: any, percent: number, l2e: boolean) => {
|
||||
// If the input is out of (0,1) or not number, it is not translated.
|
||||
if (!(0 < percent && percent < 1)) return percent;
|
||||
const map: SyncScrollMap = webviewRef.current?.wrappedInstance.getSyncScrollMap();
|
||||
const cm = editorRef.current;
|
||||
if (!map || map.line.length <= 2 || !cm) return percent; // No translation
|
||||
const lineCount = cm.lineCount();
|
||||
if (map.line[map.line.length - 2] >= lineCount) {
|
||||
// Discarded a obsolete map and use no translation.
|
||||
webviewRef.current.wrappedInstance.refreshSyncScrollMap(false);
|
||||
return percent;
|
||||
}
|
||||
const info = cm.getScrollInfo();
|
||||
const height = Math.max(1, info.height - info.clientHeight);
|
||||
let values = map.percent, target = percent;
|
||||
if (editorToViewer) {
|
||||
const top = percent * height;
|
||||
const line = cm.lineAtHeight(top, 'local');
|
||||
values = map.line;
|
||||
target = line;
|
||||
}
|
||||
// Binary search (rightmost): finds where map[r-1][field] <= target < map[r][field]
|
||||
let l = 1, r = values.length - 1;
|
||||
while (l < r) {
|
||||
const m = Math.floor(l + (r - l) / 2);
|
||||
if (target < values[m]) r = m; else l = m + 1;
|
||||
}
|
||||
const lineU = map.line[r - 1];
|
||||
const lineL = Math.min(lineCount, map.line[r]);
|
||||
const ePercentU = r == 1 ? 0 : Math.min(1, cm.heightAtLine(lineU, 'local') / height);
|
||||
const ePercentL = Math.min(1, cm.heightAtLine(lineL, 'local') / height);
|
||||
const vPercentU = map.percent[r - 1];
|
||||
const vPercentL = ePercentL == 1 ? 1 : map.percent[r];
|
||||
let result;
|
||||
if (editorToViewer) {
|
||||
const linInterp = (percent - ePercentU) / (ePercentL - ePercentU);
|
||||
result = vPercentU + (vPercentL - vPercentU) * linInterp;
|
||||
} else {
|
||||
const linInterp = (percent - vPercentU) / (vPercentL - vPercentU);
|
||||
if (!codeMirror) return percent; // No translation
|
||||
const info = codeMirror.getScrollInfo();
|
||||
const height = info.height - info.clientHeight;
|
||||
if (height <= 1) return percent; // No translation for non-displayed CodeMirror.
|
||||
const lineCount = codeMirror.lineCount();
|
||||
let lineU = l2e ? Math.floor(percent * lineCount) : codeMirror.lineAtHeight(percent * height, 'local');
|
||||
lineU = Math.max(0, Math.min(lineCount - 1, lineU));
|
||||
const ePercentU = codeMirror.heightAtLine(lineU, 'local') / height;
|
||||
const ePercentL = codeMirror.heightAtLine(lineU + 1, 'local') / height;
|
||||
let linInterp, result;
|
||||
if (l2e) {
|
||||
linInterp = percent * lineCount - lineU;
|
||||
result = ePercentU + (ePercentL - ePercentU) * linInterp;
|
||||
} else {
|
||||
linInterp = Math.max(0, Math.min(1, (percent - ePercentU) / (ePercentL - ePercentU))) || 0;
|
||||
result = (lineU + linInterp) / lineCount;
|
||||
}
|
||||
return Math.max(0, Math.min(1, result));
|
||||
};
|
||||
|
||||
// translateScrollPercentToEditor() and translateScrollPercentToViewer() are
|
||||
// the translation functions between Editor's scroll percent and Viewer's scroll
|
||||
// translateScrollPercentL2E() and translateScrollPercentE2L() are
|
||||
// the translation functions between Editor's scroll percent and line-based scroll
|
||||
// percent. They are used for synchronous scrolling between Editor and Viewer.
|
||||
// They use a SyncScrollMap provided by Viewer for its translation.
|
||||
// To see the detail of synchronous scrolling, refer the following design document.
|
||||
// https://github.com/laurent22/joplin/pull/5512#issuecomment-931277022
|
||||
|
||||
export const translateScrollPercentToEditor = (editorRef: any, webviewRef: any, viewerPercent: number) => {
|
||||
const editorPercent = translateScrollPercent_(editorRef, webviewRef, viewerPercent, false);
|
||||
return editorPercent;
|
||||
// <s> Replace me! https://github.com/laurent22/joplin/pull/5512#issuecomment-931277022</s>
|
||||
const translateScrollPercentL2E = (cm: any, lPercent: number) => {
|
||||
return translateLE_(cm, lPercent, true);
|
||||
};
|
||||
|
||||
export const translateScrollPercentToViewer = (editorRef: any, webviewRef: any, editorPercent: number) => {
|
||||
const viewerPercent = translateScrollPercent_(editorRef, webviewRef, editorPercent, true);
|
||||
return viewerPercent;
|
||||
const translateScrollPercentE2L = (cm: any, ePercent: number) => {
|
||||
return translateLE_(cm, ePercent, false);
|
||||
};
|
||||
|
||||
function isCodeMirrorReady(cm: any) {
|
||||
const info = cm?.getScrollInfo();
|
||||
return info && info.height - info.clientHeight > 0;
|
||||
}
|
||||
|
@@ -356,8 +356,6 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!editorReady) return () => {};
|
||||
|
||||
const theme = themeStyle(props.themeId);
|
||||
|
||||
const element = document.createElement('style');
|
||||
@@ -491,11 +489,28 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
||||
padding-top: ${theme.toolbarPadding}px;
|
||||
padding-bottom: ${theme.toolbarPadding}px;
|
||||
}
|
||||
|
||||
.joplin-tinymce .tox .tox-edit-area__iframe {
|
||||
background-color: ${theme.backgroundColor} !important;
|
||||
}
|
||||
|
||||
.joplin-tinymce .tox .tox-toolbar__primary {
|
||||
/* This component sets an empty svg with a white background as the background
|
||||
* which needs to be cleared to prevent it from flashing white in dark themes */
|
||||
background: none;
|
||||
background-color: ${theme.backgroundColor3} !important;
|
||||
}
|
||||
`));
|
||||
|
||||
return () => {
|
||||
document.head.removeChild(element);
|
||||
};
|
||||
// editorReady is here because TinyMCE starts by initializing a blank iframe, which needs to be
|
||||
// styled by us, otherwise users in dark mode get a bright white flash. During initialization
|
||||
// our styling is overwritten which causes some elements to have the wrong styling. Removing the
|
||||
// style and re-applying it on editorReady gives our styles precedence and prevents any flashing
|
||||
//
|
||||
// tl;dr: editorReady is used here because the css needs to be re-applied after TinyMCE init
|
||||
}, [editorReady, props.themeId]);
|
||||
|
||||
// -----------------------------------------------------------------------------------------
|
||||
|
@@ -344,7 +344,10 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
const onScroll = useCallback((event: any) => {
|
||||
props.dispatch({
|
||||
type: 'EDITOR_SCROLL_PERCENT_SET',
|
||||
noteId: formNote.id,
|
||||
// In callbacks of setTimeout()/setInterval(), props/state cannot be used
|
||||
// to refer the current value, since they would be one or more generations old.
|
||||
// For the purpose, useRef value should be used.
|
||||
noteId: formNoteRef.current.id,
|
||||
percent: event.percent,
|
||||
});
|
||||
}, [props.dispatch, formNote]);
|
||||
|
@@ -5,6 +5,8 @@ import SearchBar from '../SearchBar/SearchBar';
|
||||
import Button, { ButtonLevel, ButtonSize, buttonSizePx } from '../Button/Button';
|
||||
import CommandService from '@joplin/lib/services/CommandService';
|
||||
import { runtime as focusSearchRuntime } from './commands/focusSearch';
|
||||
import Note from '@joplin/lib/models/Note';
|
||||
import { notesSortOrderNextField } from '../../services/sortOrder/notesSortOrderUtils';
|
||||
const { connect } = require('react-redux');
|
||||
const styled = require('styled-components').default;
|
||||
|
||||
@@ -36,7 +38,7 @@ const StyledButton = styled(Button)`
|
||||
|
||||
const StyledPairButtonL = styled(Button)`
|
||||
margin-left: 8px;
|
||||
border-radius: 5px 0 0 5px;
|
||||
border-radius: 3px 0 0 3px;
|
||||
min-width: ${(props: any) => buttonSizePx(props)}px;
|
||||
max-width: ${(props: any) => buttonSizePx(props)}px;
|
||||
`;
|
||||
@@ -44,7 +46,7 @@ const StyledPairButtonL = styled(Button)`
|
||||
const StyledPairButtonR = styled(Button)`
|
||||
min-width: 8px;
|
||||
margin-left: 0px;
|
||||
border-radius: 0 5px 5px 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
border-width: 1px 1px 1px 0;
|
||||
width: auto;
|
||||
`;
|
||||
@@ -81,6 +83,14 @@ function NoteListControls(props: Props) {
|
||||
void CommandService.instance().execute('toggleNotesSortOrderReverse');
|
||||
}
|
||||
|
||||
function sortOrderFieldTooltip() {
|
||||
const term1 = CommandService.instance().label('toggleNotesSortOrderField');
|
||||
const field = props.sortOrderField;
|
||||
const term2 = Note.fieldToLabel(field);
|
||||
const term3 = Note.fieldToLabel(notesSortOrderNextField(field));
|
||||
return `${term1}:\n ${term2} -> ${term3}`;
|
||||
}
|
||||
|
||||
function sortOrderFieldIcon() {
|
||||
const field = props.sortOrderField;
|
||||
const iconMap: any = {
|
||||
@@ -110,7 +120,7 @@ function NoteListControls(props: Props) {
|
||||
{showsSortOrderButtons() &&
|
||||
<StyledPairButtonL
|
||||
className="sort-order-field-button"
|
||||
tooltip={CommandService.instance().label('toggleNotesSortOrderField')}
|
||||
tooltip={sortOrderFieldTooltip()}
|
||||
iconName={sortOrderFieldIcon()}
|
||||
level={ButtonLevel.Secondary}
|
||||
size={ButtonSize.Small}
|
||||
|
@@ -2,7 +2,6 @@ import PostMessageService, { MessageResponse, ResponderComponentType } from '@jo
|
||||
import * as React from 'react';
|
||||
const { connect } = require('react-redux');
|
||||
import { reg } from '@joplin/lib/registry';
|
||||
import { SyncScrollMap, SyncScrollMapper } from './utils/SyncScrollMap';
|
||||
|
||||
interface Props {
|
||||
onDomReady: Function;
|
||||
@@ -168,17 +167,6 @@ class NoteTextViewerComponent extends React.Component<Props, any> {
|
||||
}
|
||||
}
|
||||
|
||||
private syncScrollMapper_ = new SyncScrollMapper;
|
||||
|
||||
refreshSyncScrollMap(forced: boolean) {
|
||||
return this.syncScrollMapper_.refresh(forced);
|
||||
}
|
||||
|
||||
getSyncScrollMap(): SyncScrollMap {
|
||||
const doc = this.webviewRef_.current?.contentWindow?.document;
|
||||
return this.syncScrollMapper_.get(doc);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// Wrap WebView functions (END)
|
||||
// ----------------------------------------------------------------
|
||||
|
@@ -42,6 +42,7 @@
|
||||
<div id="joplin-container-markScriptContainer"></div>
|
||||
<div id="joplin-container-content" ondragstart="return false;" ondrop="return false;"></div>
|
||||
<script src="./lib.js"></script>
|
||||
<script src="./scrollmap.js"></script>
|
||||
|
||||
<script>
|
||||
// This is function used internally to send message from the webview to
|
||||
@@ -104,23 +105,46 @@
|
||||
// it at any time knowing that it's not going to be changed because the content height has changed.
|
||||
let percentScroll_ = 0;
|
||||
|
||||
// This variable provides a way to skip scroll events for a certain duration.
|
||||
// In general, it should be set whenever the scroll value is set explicitely (programmatically)
|
||||
let ignoreNextScrollTime_ = Date.now();
|
||||
let ignoreNextScrollEventCount_ = 0;
|
||||
|
||||
// ignoreNextScrollEvent() provides a way to skip scroll events for a certain duration.
|
||||
// In general, it should be called whenever the scroll value is set explicitely (programmatically)
|
||||
// so as to differentiate scroll events generated by the user (when scrolling the view) and those
|
||||
// generated by the application.
|
||||
let lastScrollEventTime = 0;
|
||||
function ignoreNextScrollEvent() {
|
||||
const now = Date.now();
|
||||
if (now >= ignoreNextScrollTime_) ignoreNextScrollEventCount_ = 0;
|
||||
if (ignoreNextScrollEventCount_ < 10) { // for safety
|
||||
ignoreNextScrollTime_ = now + 200;
|
||||
ignoreNextScrollEventCount_ += 1;
|
||||
}
|
||||
};
|
||||
|
||||
function setPercentScroll(percent) {
|
||||
percentScroll_ = percent;
|
||||
contentElement.scrollTop = percentScroll_ * maxScrollTop();
|
||||
// Tests the next scroll event should be ignored and then decrements the count.
|
||||
function isNextScrollEventIgnored() {
|
||||
if (ignoreNextScrollEventCount_) {
|
||||
if (Date.now() < ignoreNextScrollTime_) {
|
||||
ignoreNextScrollEventCount_ -= 1;
|
||||
return true;
|
||||
}
|
||||
ignoreNextScrollEventCount_ = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function percentScroll() {
|
||||
return percentScroll_;
|
||||
function setPercentScroll(percent) {
|
||||
// calculates viewer's GUI-dependent pixel-based raw percent
|
||||
const viewerPercent = scrollmap.translateL2V(percent);
|
||||
const newScrollTop = viewerPercent * maxScrollTop();
|
||||
if (Math.floor(contentElement.scrollTop) !== Math.floor(newScrollTop)) {
|
||||
ignoreNextScrollEvent();
|
||||
percentScroll_ = percent;
|
||||
contentElement.scrollTop = newScrollTop;
|
||||
}
|
||||
}
|
||||
|
||||
function restorePercentScroll() {
|
||||
lastScrollEventTime = Date.now();
|
||||
setPercentScroll(percentScroll_);
|
||||
}
|
||||
|
||||
@@ -153,25 +177,38 @@
|
||||
}
|
||||
|
||||
ipc.scrollToHash = (event) => {
|
||||
if (window.scrollToHashIID_) clearInterval(window.scrollToHashIID_);
|
||||
window.scrollToHashIID_ = setInterval(() => {
|
||||
if (document.readyState !== 'complete') return;
|
||||
clearInterval(window.scrollToHashIID_);
|
||||
const hash = event.hash.toLowerCase();
|
||||
const e = document.getElementById(hash);
|
||||
if (!e) {
|
||||
console.warn('Cannot find hash', hash);
|
||||
return;
|
||||
let retry = 0;
|
||||
const fn = () => {
|
||||
if (window.scrollToHashTimeoutID_) {
|
||||
clearInterval(window.scrollToHashTimeoutID_);
|
||||
window.scrollToHashTimeoutID_ = null;
|
||||
}
|
||||
e.scrollIntoView();
|
||||
if (document.readyState === 'complete' ||
|
||||
// If scrollmap is present, Element.scrollIntoView() is also
|
||||
// available when document.readyState is interactive.
|
||||
document.readyState === 'interactive' && scrollmap.isPresent()) {
|
||||
const hash = event.hash.toLowerCase();
|
||||
const e = document.getElementById(hash);
|
||||
if (e) {
|
||||
e.scrollIntoView();
|
||||
// It causes a scroll event, whose listener sent a new scroll
|
||||
// position to Editor.
|
||||
} else {
|
||||
console.warn('Cannot find hash', hash);
|
||||
}
|
||||
} else {
|
||||
retry += 1;
|
||||
if (retry <= 10) {
|
||||
window.scrollToHashTimeoutID_ = setTimeout(fn, 100);
|
||||
}
|
||||
}
|
||||
};
|
||||
fn();
|
||||
}
|
||||
|
||||
// Make sure the editor pane is also scrolled
|
||||
setTimeout(() => {
|
||||
const percent = currentPercentScroll();
|
||||
setPercentScroll(percent);
|
||||
ipcProxySendToHost('percentScroll', percent);
|
||||
}, 10);
|
||||
}, 100);
|
||||
function isVisible() {
|
||||
// See the logic of hiding viewer in CoderMirror.tsx
|
||||
return window.innerWidth > 1;
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/a/1977898/561309
|
||||
@@ -182,6 +219,7 @@
|
||||
}
|
||||
|
||||
function allImagesLoaded() {
|
||||
if (!isVisible()) return true; // In the case, images would not be loaded.
|
||||
for (const image of document.images) {
|
||||
if (!isImageReady(image)) return false;
|
||||
}
|
||||
@@ -209,13 +247,16 @@
|
||||
// to observe the changes of the scroll height of the content element
|
||||
// using a callback approach.
|
||||
function observeRendering(callback, compress = false) {
|
||||
let previousHeight = 0;
|
||||
let lastScrollHeight = 0;
|
||||
let lastClientHeight = 0;
|
||||
const fn = (cause) => {
|
||||
const height = contentElement.scrollHeight;
|
||||
const heightChanged = height != previousHeight;
|
||||
const sh = contentElement.scrollHeight;
|
||||
const ch = contentElement.clientHeight;
|
||||
const heightChanged = (sh !== lastScrollHeight || ch !== lastClientHeight);
|
||||
if (!compress || heightChanged) {
|
||||
previousHeight = height;
|
||||
callback(cause, height, heightChanged);
|
||||
lastScrollHeight = sh;
|
||||
lastClientHeight = ch;
|
||||
callback(cause, sh, heightChanged);
|
||||
}
|
||||
};
|
||||
// 'resized' means DOM Layout change or Window resize event
|
||||
@@ -232,21 +273,39 @@
|
||||
return { mutationObserver, resizeObserver };
|
||||
};
|
||||
|
||||
// To suppress too frequent restoring of scroll positions and refreshing of the scroll map
|
||||
let restoreAndRefreshTimeoutID_ = null;
|
||||
let restoreAndRefreshTimeout_ = Date.now();
|
||||
|
||||
// A callback anonymous function invoked when the scroll height changes.
|
||||
const onRendering = observeRendering((cause, height, heightChanged) => {
|
||||
if (!alreadyAllImagesLoaded) {
|
||||
if (!alreadyAllImagesLoaded && !scrollmap.isPresent()) {
|
||||
const loaded = allImagesLoaded();
|
||||
if (loaded) {
|
||||
alreadyAllImagesLoaded = true;
|
||||
ipcProxySendToHost('syncViewerScrollWithEditor', true);
|
||||
scrollmap.refresh();
|
||||
restorePercentScroll();
|
||||
ipcProxySendToHost('noteRenderComplete');
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (heightChanged) {
|
||||
// When the scroll height changes, sync is needed.
|
||||
ipcProxySendToHost('syncViewerScrollWithEditor');
|
||||
if (!heightChanged) return;
|
||||
const restoreAndRefresh = () => {
|
||||
scrollmap.refresh();
|
||||
restorePercentScroll();
|
||||
};
|
||||
const now = Date.now();
|
||||
if (now < restoreAndRefreshTimeout_) {
|
||||
if (restoreAndRefreshTimeoutID_) {
|
||||
clearTimeout(restoreAndRefreshTimeoutID_);
|
||||
restoreAndRefreshTimeoutID_ = null;
|
||||
}
|
||||
const msec = Math.min(1000, restoreAndRefreshTimeout_ - now);
|
||||
restoreAndRefreshTimeoutID_ = setTimeout(restoreAndRefresh, msec);
|
||||
} else {
|
||||
restoreAndRefresh();
|
||||
}
|
||||
restoreAndRefreshTimeout_ = now + 200;
|
||||
});
|
||||
|
||||
ipc.focus = (event) => {
|
||||
@@ -267,12 +326,12 @@
|
||||
|
||||
updateBodyHeight();
|
||||
|
||||
alreadyAllImagesLoaded = false;
|
||||
|
||||
contentElement.innerHTML = html;
|
||||
|
||||
scrollmap.create(event.options.markupLineCount);
|
||||
restorePercentScroll(); // First, a quick treatment is applied.
|
||||
ipcProxySendToHost('syncViewerScrollWithEditor');
|
||||
|
||||
alreadyAllImagesLoaded = false;
|
||||
|
||||
addPluginAssets(event.options.pluginAssets);
|
||||
|
||||
@@ -281,12 +340,15 @@
|
||||
}
|
||||
|
||||
document.dispatchEvent(new Event('joplin-noteDidUpdate'));
|
||||
|
||||
if (scrollmap.isPresent()) {
|
||||
// Now, ready to receive scrollToHash/setPercentScroll from Editor.
|
||||
ipcProxySendToHost('noteRenderComplete');
|
||||
}
|
||||
}
|
||||
|
||||
ipc.setPercentScroll = (event) => {
|
||||
const percent = event.percent;
|
||||
lastScrollEventTime = Date.now();
|
||||
setPercentScroll(percent);
|
||||
setPercentScroll(event.percent);
|
||||
}
|
||||
|
||||
// HACK for Mark.js bug - https://github.com/julmot/mark.js/issues/127
|
||||
@@ -391,11 +453,14 @@
|
||||
document.getElementById('joplin-container-content').style.height = window.innerHeight + 'px';
|
||||
}
|
||||
|
||||
function currentPercentScroll() {
|
||||
function getPercentFromViewer() {
|
||||
const m = maxScrollTop();
|
||||
// As of 2021, if zoomFactor != 1, underlying Chrome returns scrollTop with
|
||||
// some numerical error. It can be more than maxScrollTop().
|
||||
return m ? Math.min(1, contentElement.scrollTop / m) : 0;
|
||||
const viewerPecent = m ? Math.min(1, contentElement.scrollTop / m) : 0;
|
||||
// calculates GUI-independent line-based logical percent
|
||||
const percent = scrollmap.translateV2L(viewerPecent);
|
||||
return percent;
|
||||
}
|
||||
|
||||
// If zoom factor is not 1, Electron/Chromium calculates scrollTop incorrectly.
|
||||
@@ -477,22 +542,15 @@
|
||||
}));
|
||||
|
||||
contentElement.addEventListener('scroll', webviewLib.logEnabledEventHandler(e => {
|
||||
// If the last scroll event was done by the user, lastScrollEventTime is set and
|
||||
lastScrollTop_ = contentElement.scrollTop;
|
||||
// If the last scroll event was done by the application, ignoreNextScrollEvent() is called and
|
||||
// we can use that to skip the event handling. We skip it because in that case
|
||||
// the scroll position has already been updated. Also we add a 200ms interval
|
||||
// because otherwise it's most likely a glitch where we called ipc.setPercentScroll
|
||||
// but the scroll event listener has not been called.
|
||||
if (lastScrollEventTime && Date.now() - lastScrollEventTime < 200) {
|
||||
lastScrollEventTime = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
lastScrollEventTime = 0;
|
||||
|
||||
const percent = currentPercentScroll();
|
||||
setPercentScroll(percent);
|
||||
|
||||
ipcProxySendToHost('percentScroll', percent);
|
||||
if (isNextScrollEventIgnored()) return;
|
||||
percentScroll_ = getPercentFromViewer();
|
||||
ipcProxySendToHost('percentScroll', percentScroll_);
|
||||
}));
|
||||
|
||||
ipc['postMessageService.response'] = function(event) {
|
||||
@@ -568,11 +626,25 @@
|
||||
e.preventDefault();
|
||||
}));
|
||||
|
||||
let lastClientWidth_ = NaN, lastClientHeight_ = NaN, lastScrollTop_ = NaN;
|
||||
|
||||
window.addEventListener('resize', webviewLib.logEnabledEventHandler(() => {
|
||||
updateBodyHeight();
|
||||
// When zoomFactor is changed, resize event happens.
|
||||
zoomFactorIsNotOne = false;
|
||||
resetSmoothScroll();
|
||||
|
||||
// If this event resizes contentElement, ignore the scroll event caused by it.
|
||||
const cw = contentElement.clientWidth;
|
||||
const ch = contentElement.clientHeight;
|
||||
const top = contentElement.scrollTop;
|
||||
if (!(cw === lastClientWidth_ && ch === lastClientHeight_)) {
|
||||
// Since scroll listeners are invoked before ResizeObserver and
|
||||
// resize listeners are invoked before scroll listeners,
|
||||
// this code should be here to ignore scroll events.
|
||||
if (top !== lastScrollTop_) ignoreNextScrollEvent();
|
||||
lastClientWidth_ = cw; lastClientHeight_ = ch; lastScrollTop_ = top;
|
||||
}
|
||||
}));
|
||||
|
||||
// Prevent middle-click as that would open the URL in an Electron window
|
||||
|
@@ -202,6 +202,8 @@ document.addEventListener('click', function(event) {
|
||||
if (webviewLib.handleInternalLink(event, anchor)) return;
|
||||
event.preventDefault();
|
||||
if (anchor.getAttribute('href')) webviewLib.options_.postMessage(anchor.getAttribute('href'));
|
||||
// Depending on the chart type, the generated SVG contains an anchor element with xlink:href attribute.
|
||||
if (anchor.getAttribute('xlink:href')) webviewLib.options_.postMessage(anchor.getAttribute('xlink:href'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
113
packages/app-desktop/gui/note-viewer/scrollmap.js
Normal file
113
packages/app-desktop/gui/note-viewer/scrollmap.js
Normal file
@@ -0,0 +1,113 @@
|
||||
// scrollmap is used for synchronous scrolling between Markdown Editor and Viewer.
|
||||
// It has the mapping information between the line numbers of a Markdown text and
|
||||
// the scroll positions (percents) of the elements in the HTML document transformed
|
||||
// from the Markdown text.
|
||||
// To see the detail of synchronous scrolling, refer the following design document.
|
||||
// <s> Replace me! https://github.com/laurent22/joplin/pull/5512#issuecomment-931277022 </s>
|
||||
|
||||
const scrollmap = {
|
||||
map_: null,
|
||||
lineCount_: 0,
|
||||
};
|
||||
|
||||
scrollmap.create = (lineCount) => {
|
||||
// Creates a translation map between editor's line number
|
||||
// and viewer's scroll percent. Both attributes (line and percent) of
|
||||
// the returned map are sorted respectively.
|
||||
// For each document change, this function should be called.
|
||||
// Since creating this map is costly for each scroll event,
|
||||
// it is cached and re-created as needed. Whenever the layout
|
||||
// of the document changes, it has to be invalidated by refresh().
|
||||
scrollmap.lineCount_ = lineCount;
|
||||
scrollmap.refresh();
|
||||
};
|
||||
|
||||
scrollmap.refresh = () => {
|
||||
scrollmap.map_ = null;
|
||||
};
|
||||
|
||||
scrollmap.get_ = () => {
|
||||
if (scrollmap.map_) return scrollmap.map_;
|
||||
const contentElement = document.getElementById('joplin-container-content');
|
||||
if (!contentElement) return null;
|
||||
const height = Math.max(1, contentElement.scrollHeight - contentElement.clientHeight);
|
||||
// Since getBoundingClientRect() returns a relative position,
|
||||
// the offset of the origin is needed to get its aboslute position.
|
||||
const firstElem = document.getElementById('rendered-md');
|
||||
if (!firstElem) return null;
|
||||
const offset = firstElem.getBoundingClientRect().top;
|
||||
// Mapping information between editor's lines and viewer's elements is
|
||||
// embedded into elements by the renderer.
|
||||
// See also renderer/MdToHtml/rules/source_map.ts.
|
||||
const elems = document.getElementsByClassName('maps-to-line');
|
||||
if (elems.length == 0) return null;
|
||||
const map = { line: [0], percent: [0], viewHeight: height, lineCount: 0 };
|
||||
// Each map entry is total-ordered.
|
||||
let last = 0;
|
||||
for (let i = 0; i < elems.length; i++) {
|
||||
const top = elems[i].getBoundingClientRect().top - offset;
|
||||
const line = Number(elems[i].getAttribute('source-line'));
|
||||
const percent = Math.max(0, Math.min(1, top / height));
|
||||
if (map.line[last] < line && map.percent[last] < percent) {
|
||||
map.line.push(line);
|
||||
map.percent.push(percent);
|
||||
last += 1;
|
||||
}
|
||||
}
|
||||
const lineCount = scrollmap.lineCount_;
|
||||
if (lineCount) {
|
||||
map.lineCount = lineCount;
|
||||
} else {
|
||||
if (map.lineCount <= map.line[last]) map.lineCount = map.line[last] + 1;
|
||||
}
|
||||
if (map.percent[last] < 1) {
|
||||
map.line.push(lineCount || 1e10);
|
||||
map.percent.push(1);
|
||||
} else {
|
||||
map.line[last] = lineCount || 1e10;
|
||||
}
|
||||
scrollmap.map_ = map;
|
||||
return map;
|
||||
};
|
||||
|
||||
scrollmap.isPresent = () => {
|
||||
const map = scrollmap.get_();
|
||||
return !!map;
|
||||
};
|
||||
|
||||
scrollmap.translateLV_ = (percent, l2v = true) => {
|
||||
// If the input is out of (0,1) or not number, it is not translated.
|
||||
if (!(0 < percent && percent < 1)) return percent;
|
||||
const map = scrollmap.get_();
|
||||
if (!map || map.line.length <= 2) return percent; // No translation
|
||||
const lineCount = map.lineCount;
|
||||
const values = l2v ? map.line : map.percent;
|
||||
const target = l2v ? percent * lineCount : percent;
|
||||
// Binary search (rightmost): finds where map[r-1][field] <= target < map[r][field]
|
||||
let l = 1, r = values.length - 1;
|
||||
while (l < r) {
|
||||
const m = Math.floor(l + (r - l) / 2);
|
||||
if (target < values[m]) r = m; else l = m + 1;
|
||||
}
|
||||
const lineU = map.line[r - 1];
|
||||
const lineL = Math.min(lineCount, map.line[r]);
|
||||
const vPercentU = map.percent[r - 1];
|
||||
const vPercentL = map.percent[r];
|
||||
let linInterp, result;
|
||||
if (l2v) {
|
||||
linInterp = (percent * lineCount - lineU) / (lineL - lineU);
|
||||
result = vPercentU + (vPercentL - vPercentU) * linInterp;
|
||||
} else {
|
||||
linInterp = (percent - vPercentU) / (vPercentL - vPercentU);
|
||||
result = (lineU + (lineL - lineU) * linInterp) / lineCount;
|
||||
}
|
||||
return Math.max(0, Math.min(1, result));
|
||||
};
|
||||
|
||||
scrollmap.translateL2V = (lPercent) => {
|
||||
return scrollmap.translateLV_(lPercent, true);
|
||||
};
|
||||
|
||||
scrollmap.translateV2L = (vPercent) => {
|
||||
return scrollmap.translateLV_(vPercent, false);
|
||||
};
|
@@ -1,92 +0,0 @@
|
||||
import shim from '@joplin/lib/shim';
|
||||
|
||||
// SyncScrollMap is used for synchronous scrolling between Markdown Editor and Viewer.
|
||||
// It has the mapping information between the line numbers of a Markdown text and
|
||||
// the scroll positions (percents) of the elements in the HTML document transformed
|
||||
// from the Markdown text.
|
||||
// To see the detail of synchronous scrolling, refer the following design document.
|
||||
// https://github.com/laurent22/joplin/pull/5512#issuecomment-931277022
|
||||
|
||||
export interface SyncScrollMap {
|
||||
line: number[];
|
||||
percent: number[];
|
||||
viewHeight: number;
|
||||
}
|
||||
|
||||
// Map creation utility class
|
||||
export class SyncScrollMapper {
|
||||
private map_: SyncScrollMap = null;
|
||||
private refreshTimeoutId_: any = null;
|
||||
private refreshTime_ = 0;
|
||||
|
||||
// Invalidates an outdated SyncScrollMap.
|
||||
// For a performance reason, too frequent refresh requests are
|
||||
// skippend and delayed. If forced is true, refreshing is immediately performed.
|
||||
public refresh(forced: boolean) {
|
||||
const elapsed = this.refreshTime_ ? Date.now() - this.refreshTime_ : 10 * 1000;
|
||||
if (!forced && (elapsed < 200 || this.refreshTimeoutId_)) {
|
||||
// to avoid too frequent recreations of a sync-scroll map.
|
||||
if (this.refreshTimeoutId_) {
|
||||
shim.clearTimeout(this.refreshTimeoutId_);
|
||||
this.refreshTimeoutId_ = null;
|
||||
}
|
||||
this.refreshTimeoutId_ = shim.setTimeout(() => {
|
||||
this.refreshTimeoutId_ = null;
|
||||
this.map_ = null;
|
||||
this.refreshTime_ = Date.now();
|
||||
}, 200);
|
||||
} else {
|
||||
this.map_ = null;
|
||||
this.refreshTime_ = Date.now();
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a new SyncScrollMap or reuses an existing one.
|
||||
public get(doc: Document): SyncScrollMap {
|
||||
// Returns a cached translation map between editor's scroll percenet
|
||||
// and viewer's scroll percent. Both attributes (line and percent) of
|
||||
// the returned map are sorted respectively.
|
||||
// Since creating this map is costly for each scroll event, it is cached.
|
||||
// When some update events which outdate it such as switching a note or
|
||||
// editing a note, it has to be invalidated (using refresh()),
|
||||
// and a new map will be created at a next scroll event.
|
||||
if (!doc) return null;
|
||||
const contentElement = doc.getElementById('joplin-container-content');
|
||||
if (!contentElement) return null;
|
||||
const height = Math.max(1, contentElement.scrollHeight - contentElement.clientHeight);
|
||||
if (this.map_) {
|
||||
// check whether map_ is obsolete
|
||||
if (this.map_.viewHeight === height) return this.map_;
|
||||
this.map_ = null;
|
||||
}
|
||||
// Since getBoundingClientRect() returns a relative position,
|
||||
// the offset of the origin is needed to get its aboslute position.
|
||||
const offset = doc.getElementById('rendered-md')?.getBoundingClientRect().top;
|
||||
if (!offset) return null;
|
||||
// Mapping information between editor's lines and viewer's elements is
|
||||
// embedded into elements by the renderer.
|
||||
// See also renderer/MdToHtml/rules/source_map.ts.
|
||||
const elems = doc.getElementsByClassName('maps-to-line');
|
||||
const map: SyncScrollMap = { line: [0], percent: [0], viewHeight: height };
|
||||
// Each map entry is total-ordered.
|
||||
let last = 0;
|
||||
for (let i = 0; i < elems.length; i++) {
|
||||
const top = elems[i].getBoundingClientRect().top - offset;
|
||||
const line = Number(elems[i].getAttribute('source-line'));
|
||||
const percent = Math.max(0, Math.min(1, top / height));
|
||||
if (map.line[last] < line && map.percent[last] < percent) {
|
||||
map.line.push(line);
|
||||
map.percent.push(percent);
|
||||
last += 1;
|
||||
}
|
||||
}
|
||||
if (map.percent[last] < 1) {
|
||||
map.line.push(1e10);
|
||||
map.percent.push(1);
|
||||
} else {
|
||||
map.line[last] = 1e10;
|
||||
}
|
||||
this.map_ = map;
|
||||
return map;
|
||||
}
|
||||
}
|
4
packages/app-desktop/package-lock.json
generated
4
packages/app-desktop/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@joplin/app-desktop",
|
||||
"version": "2.6.2",
|
||||
"version": "2.6.8",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@joplin/app-desktop",
|
||||
"version": "2.6.2",
|
||||
"version": "2.6.8",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@electron/remote": "^2.0.1",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@joplin/app-desktop",
|
||||
"version": "2.6.2",
|
||||
"version": "2.6.8",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"private": true,
|
||||
|
@@ -146,8 +146,8 @@ android {
|
||||
applicationId "net.cozic.joplin"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 2097660
|
||||
versionName "2.6.4"
|
||||
versionCode 2097664
|
||||
versionName "2.6.8"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||
}
|
||||
|
@@ -492,13 +492,13 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 77;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEVELOPMENT_TEAM = A9BXAFS6CT;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Joplin/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 12.6.0;
|
||||
MARKETING_VERSION = 12.6.2;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@@ -521,12 +521,12 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 77;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEVELOPMENT_TEAM = A9BXAFS6CT;
|
||||
INFOPLIST_FILE = Joplin/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 12.6.0;
|
||||
MARKETING_VERSION = 12.6.2;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@@ -588,7 +588,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
|
||||
@@ -641,7 +641,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
|
||||
@@ -667,14 +667,14 @@
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 77;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = A9BXAFS6CT;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
INFOPLIST_FILE = ShareExtension/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 12.6.0;
|
||||
MARKETING_VERSION = 12.6.2;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin.ShareExtension;
|
||||
@@ -698,14 +698,14 @@
|
||||
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 77;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = A9BXAFS6CT;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
INFOPLIST_FILE = ShareExtension/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 12.6.0;
|
||||
MARKETING_VERSION = 12.6.2;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin.ShareExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@@ -6,7 +6,10 @@ require_relative '../node_modules/@react-native-community/cli-platform-ios/nativ
|
||||
#
|
||||
# 2021-11-04: Set to 13.0 because it crashes with 12.x
|
||||
# https://github.com/laurent22/joplin/issues/5671
|
||||
platform :ios, '13.0'
|
||||
#
|
||||
# 2021-12-17: Changed back to 11.0 because after the fix it works with at least
|
||||
# 12.x, and probably 11.0 too, which is the version supported by React Native.
|
||||
platform :ios, '11.0'
|
||||
|
||||
target 'Joplin' do
|
||||
config = use_native_modules!
|
||||
|
@@ -213,7 +213,7 @@ PODS:
|
||||
- React-jsinspector (0.66.1)
|
||||
- React-logger (0.66.1):
|
||||
- glog
|
||||
- react-native-alarm-notification (1.0.3):
|
||||
- react-native-alarm-notification (1.0.5):
|
||||
- React
|
||||
- react-native-camera (3.40.0):
|
||||
- React-Core
|
||||
@@ -528,7 +528,7 @@ SPEC CHECKSUMS:
|
||||
React-jsiexecutor: db2f6e22a534d466fc0e34e622df47d9d20bab2f
|
||||
React-jsinspector: 8c0517dee5e8c70cd6c3066f20213ff7ce54f176
|
||||
React-logger: bfddd3418dc1d45b77b822958f3e31422e2c179b
|
||||
react-native-alarm-notification: 466e4ad56fbd948ecac26e657f292dca8bf483d5
|
||||
react-native-alarm-notification: 4817a2a0d7cc2ed2acc97337ebcdf9ae2a69c9d5
|
||||
react-native-camera: 35854c4f764a4a6cf61c1c3525888b92f0fe4b31
|
||||
react-native-document-picker: 0bba80cc56caab1f67dbaa81ff557e3a9b7f2b9f
|
||||
react-native-geolocation: c956aeb136625c23e0dce0467664af2c437888c9
|
||||
@@ -565,6 +565,6 @@ SPEC CHECKSUMS:
|
||||
RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59
|
||||
Yoga: 2b4a01651f42a32f82e6cef3830a3ba48088237f
|
||||
|
||||
PODFILE CHECKSUM: 3ccf11f600ddb42a825b2bb9a341a19f5c891f2b
|
||||
PODFILE CHECKSUM: 3503e0565874e79261edc56dcddb35b3a49a2984
|
||||
|
||||
COCOAPODS: 1.10.2
|
||||
|
@@ -1,5 +1,5 @@
|
||||
module.exports = {
|
||||
hash:"de3871f000c87478973d7cd0913bd3ff", files: {
|
||||
hash:"dd2315568bb7795f97cee26a47e9b82b", files: {
|
||||
'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' },
|
||||
'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' },
|
||||
'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
|
||||
|
File diff suppressed because one or more lines are too long
@@ -258,6 +258,20 @@ export default class BaseApplication {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (arg.indexOf('--enable-features=') === 0) {
|
||||
// Electron-specific flag - ignore it
|
||||
// Allows users to run the app on native wayland
|
||||
argv.splice(0, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (arg.indexOf('--ozone-platform=') === 0) {
|
||||
// Electron-specific flag - ignore it
|
||||
// Allows users to run the app on native wayland
|
||||
argv.splice(0, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (arg.length && arg[0] == '-') {
|
||||
throw new JoplinError(_('Unknown flag: %s', arg), 'flagError');
|
||||
} else {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import Logger from './Logger';
|
||||
import LockHandler, { hasActiveLock, LockClientType, LockType } from './services/synchronizer/LockHandler';
|
||||
import LockHandler, { appTypeToLockType, hasActiveLock, LockClientType, LockType } from './services/synchronizer/LockHandler';
|
||||
import Setting, { AppType } from './models/Setting';
|
||||
import shim from './shim';
|
||||
import MigrationHandler from './services/synchronizer/MigrationHandler';
|
||||
@@ -53,7 +53,7 @@ export default class Synchronizer {
|
||||
|
||||
private db_: JoplinDatabase;
|
||||
private api_: FileApi;
|
||||
private appType_: string;
|
||||
private appType_: AppType;
|
||||
private logger_: Logger = new Logger();
|
||||
private state_: string = 'idle';
|
||||
private cancelling_: boolean = false;
|
||||
@@ -77,7 +77,7 @@ export default class Synchronizer {
|
||||
|
||||
public dispatch: Function;
|
||||
|
||||
public constructor(db: JoplinDatabase, api: FileApi, appType: string) {
|
||||
public constructor(db: JoplinDatabase, api: FileApi, appType: AppType) {
|
||||
this.db_ = db;
|
||||
this.api_ = api;
|
||||
this.appType_ = appType;
|
||||
@@ -123,13 +123,7 @@ export default class Synchronizer {
|
||||
|
||||
private lockClientType(): LockClientType {
|
||||
if (this.lockClientType_) return this.lockClientType_;
|
||||
|
||||
if (this.appType_ === AppType.Desktop) this.lockClientType_ = LockClientType.Desktop;
|
||||
if (this.appType_ === AppType.Mobile) this.lockClientType_ = LockClientType.Mobile;
|
||||
if (this.appType_ === AppType.Cli) this.lockClientType_ = LockClientType.Cli;
|
||||
|
||||
if (!this.lockClientType_) throw new Error(`Invalid client type: ${this.appType_}`);
|
||||
|
||||
this.lockClientType_ = appTypeToLockType(this.appType_);
|
||||
return this.lockClientType_;
|
||||
}
|
||||
|
||||
@@ -141,7 +135,7 @@ export default class Synchronizer {
|
||||
|
||||
maxResourceSize() {
|
||||
if (this.maxResourceSize_ !== null) return this.maxResourceSize_;
|
||||
return this.appType_ === 'mobile' ? 100 * 1000 * 1000 : Infinity;
|
||||
return this.appType_ === AppType.Mobile ? 100 * 1000 * 1000 : Infinity;
|
||||
}
|
||||
|
||||
public setShareService(v: ShareService) {
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "ادراج النصف الآخر للأقواس و علامات الإقتباس.",
|
||||
"Automatically switch theme to match system theme": "التبديل تلقائيا للتنسيق لمطابقة تنسيق النضام",
|
||||
"Automatically update the application": "تحديث التطبيق آلياً",
|
||||
"AWS key": "مفتاح AWS",
|
||||
"AWS S3": "أمازون إس 3",
|
||||
"AWS S3 bucket": "حاوية AWS S3",
|
||||
"AWS S3 URL": "عنوان URL ل AWS S3",
|
||||
"AWS secret": "سر AWS",
|
||||
"Back": "عودة",
|
||||
"Bold": "غامق",
|
||||
"Browse all plugins": "تصفح جميع المكونات الإضافية",
|
||||
@@ -339,6 +334,7 @@
|
||||
"Goto Anything...": "اذهب إلى أي شيء...",
|
||||
"Grant authorisation": "منح ال",
|
||||
"Heading": "ترويسة",
|
||||
"Help": "مساعدة",
|
||||
"Hide %s": "أخف %s",
|
||||
"Hide Joplin": "إخفي Joplin",
|
||||
"Highlight": "تَمييز النَص",
|
||||
|
@@ -248,6 +248,7 @@
|
||||
"Highlight": "Oznaci",
|
||||
"Horizontal Rule": "Vodoravna linija",
|
||||
"Hyperlink": "Poveznica",
|
||||
"Icon": "Sličica",
|
||||
"ID": "ID",
|
||||
"Idle": "Na čekanju",
|
||||
"Ignore TLS certificate errors": "Zanemari greške u vezi sa TLS certifikatima",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Aparellament automàtic de claus, parèntesis, cites, etc.",
|
||||
"Automatically switch theme to match system theme": "Canvia de tema automàticament per a coincidir amb el tema del sistema",
|
||||
"Automatically update the application": "Actualitza automàticament l'aplicació",
|
||||
"AWS key": "Clau AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "Contenidor AWS S3",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "Secret AWS",
|
||||
"Back": "Enrere",
|
||||
"Bold": "Negreta",
|
||||
"Browse all plugins": "Navega per tots els connectors",
|
||||
@@ -339,6 +334,7 @@
|
||||
"Goto Anything...": "Anar a qualsevol cosa...",
|
||||
"Grant authorisation": "Autoritza",
|
||||
"Heading": "Capçalera",
|
||||
"Help": "Ajuda",
|
||||
"Hide %s": "Amaga %s",
|
||||
"Hide Joplin": "Amaga el Joplin",
|
||||
"Highlight": "Ressalta",
|
||||
@@ -346,6 +342,7 @@
|
||||
"HTML Directory": "Directori HTML",
|
||||
"HTML File": "Fitxer HTML",
|
||||
"Hyperlink": "Enllaç",
|
||||
"Icon": "Icona",
|
||||
"ID": "ID",
|
||||
"Idle": "Ociós",
|
||||
"Ignore": "Ignora",
|
||||
|
@@ -78,11 +78,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Automaticky zdvojit uvozovky, závorky, apod.",
|
||||
"Automatically switch theme to match system theme": "Automaticky přepnout téma vzhledu podle nastavení systému",
|
||||
"Automatically update the application": "Automaticky aktualizovat aplikaci",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Zpět",
|
||||
"Bold": "Tučně",
|
||||
"Browse all plugins": "Procházet všechna rozšíření",
|
||||
@@ -324,6 +319,7 @@
|
||||
"Go to source URL": "Jít na zdrojovou URL",
|
||||
"Goto Anything...": "Přejít na...",
|
||||
"Heading": "Nadpis",
|
||||
"Help": "Nápověda",
|
||||
"Hide %s": "Schovat %s",
|
||||
"Hide Joplin": "Skrýt Joplin",
|
||||
"Highlight": "Zvýraznění",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Auto-par klammer, parenteser, citater, etc.",
|
||||
"Automatically switch theme to match system theme": "Skifter automatisk tema så det matcher systemets tema",
|
||||
"Automatically update the application": "Opdater automatisk applikationen",
|
||||
"AWS key": "AWS nøgle",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS hemmelighed",
|
||||
"Back": "Tilbage",
|
||||
"Bold": "Fed",
|
||||
"Browse all plugins": "Gennemse alle udvidelser",
|
||||
@@ -106,6 +101,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Kan ikke genindlæse token: Godkendelsesdata mangler. Prøv at starte synkronisering igen, det kan måske løse problemet.",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "Kan ikke gemme %s \"%s\" da den er større end den tilladte grænse (%s)",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "Kan ikke gemme %s \"%s\" da den vil overskride den tilladte størrelse (%s) for denne konto",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "Kan ikke dele krypteret notebook med modtager %s, fordi de ikke har aktiveret end-to-end-kryptering. De kan gøre det i Indstillinger > Kryptering.",
|
||||
"Change application layout": "Skift applikationslayout",
|
||||
"Change language": "Skift sprog",
|
||||
"Characters": "Tegn",
|
||||
@@ -144,10 +140,12 @@
|
||||
"Conflicted: %d": "Konflikter: %d",
|
||||
"Conflicts": "Konflikter",
|
||||
"Conflicts (attachments)": "Konflikter (vedhæftninger)",
|
||||
"Content provided by %s": "Indhold leveret af %s",
|
||||
"Convert to note": "Konverter til note",
|
||||
"Convert to todo": "Konverter til opgave",
|
||||
"Copy": "Kopier",
|
||||
"Copy dev mode command to clipboard": "Kopier udviklertilstand-kommando til udklipsholderen",
|
||||
"Copy external link": "Kopiér eksternt link",
|
||||
"Copy Link Address": "Kopier linkadresse",
|
||||
"Copy Markdown link": "Kopier markdown link",
|
||||
"Copy path to clipboard": "Kopier sti til udklipsholder",
|
||||
@@ -158,6 +156,7 @@
|
||||
"Could not connect to plugin repository.": "Kunne ikke forbinde til plugin-lager.",
|
||||
"Could not export notes: %s": "Kunne ikke eksportere noterne: %s",
|
||||
"Could not install plugin: %s": "Kunne ikke installere plugin: %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "Kunne ikke svare på invitationen. Prøv venligst igen, eller kontakt ejeren af notesbogen, hvis de stadig deler den\n\nFejlen var: \"%s\"",
|
||||
"Could not upgrade master key: %s": "Kunne ikke opgradere hovednøgle: %s",
|
||||
"Create a notebook": "Opret en notesbog",
|
||||
"Created": "Oprettet",
|
||||
@@ -229,6 +228,7 @@
|
||||
"Displays version information": "Viser versionsinfo",
|
||||
"Do it now": "Gør det nu",
|
||||
"Do not ask for confirmation.": "Spørg ikke om bekræftelse.",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "Glem ikke adgangkoden, da den af sikkerhedshensyn er den *eneste* mulighed for dekryptering af data! For at aktivere kryptering til, skal du indtaste din adgangskode herunder.",
|
||||
"Download": "Download",
|
||||
"Download and install the relevant extension for your browser:": "Download og installer den relevante udvidelse til din browser:",
|
||||
"Downloaded": "Downloadet",
|
||||
@@ -280,14 +280,18 @@
|
||||
"Enable Web Clipper Service": "Aktiver Web-Clipper tjeneste",
|
||||
"Enable ~sub~ syntax": "Aktivér ~sub~ syntaks",
|
||||
"Enabled": "Aktiveret",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "Slås kryptering fra vil *alle* dine noter og vedhæftninger blive re-synkroniseret og sendt ukrypteret til synk-modtageren.",
|
||||
"Encrypted": "Krypteret",
|
||||
"Encrypted items cannot be modified": "Krypteret emner kan ikke rettes",
|
||||
"Encrypted notebooks cannot be renamed": "Krypterede notesbøger kan ikke omdøbes",
|
||||
"Encryption": "Kryptering",
|
||||
"Encryption Config": "Krypteringsindstillinger",
|
||||
"Encryption is: %s": "Kryptering er: %s",
|
||||
"Encryption keys": "Krypteringsnøgler",
|
||||
"Encryption:": "Kryptering:",
|
||||
"End-to-end encryption": "End-to-end kryptering",
|
||||
"Enter code here": "Skriv kode her",
|
||||
"Enter master password:": "Indtast hovedkodeord:",
|
||||
"Enter master password:": "Indtast hovedadgangskode:",
|
||||
"Enter notebook title": "Indtast notesbogstitel",
|
||||
"Enum": "Enum",
|
||||
"Error": "Fejl",
|
||||
@@ -332,6 +336,7 @@
|
||||
"FTS enabled: %d": "Fuld-tekst søgning slået til: %d",
|
||||
"Full changelog": "Komplet ændringslog",
|
||||
"General": "Generelt",
|
||||
"Generated": "Oprettet",
|
||||
"Generating link...": "Opretter link...",
|
||||
"Get it now:": "Få den nu:",
|
||||
"Get pre-releases when checking for updates": "Hent for-udgivelser når der tjekkes efter opdateringer",
|
||||
@@ -341,6 +346,7 @@
|
||||
"Grant authorisation": "Giv tilladelse",
|
||||
"Heading": "Overskrift",
|
||||
"Hide %s": "Skjul %s",
|
||||
"Hide disabled keys": "Skjul deaktiverede nøgler",
|
||||
"Hide Joplin": "Skjul Joplin",
|
||||
"Highlight": "Fremhæv",
|
||||
"Horizontal Rule": "Vandret linje",
|
||||
@@ -386,14 +392,14 @@
|
||||
"Joplin can synchronise your notes using various providers. Select one from the list below.": "Joplin kan synkronisere dine noter ved hjælp af forskellige tjenesteudbydere. Vælg en fra listen nedenfor.",
|
||||
"Joplin Cloud": "Joplin Cloud",
|
||||
"Joplin Cloud email": "Joplin Cloud e-mail",
|
||||
"Joplin Cloud password": "Joplin Cloud adgangskode",
|
||||
"Joplin Cloud password": "Joplin Cloud-adgangskode",
|
||||
"Joplin Export Directory": "Joplin eksport mappe",
|
||||
"Joplin Export File": "Joplin eksport fil",
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they are corrupted or too large. These items will remain on the device but Joplin will no longer attempt to decrypt them.": "Joplin kunne ikke dekryptere disse filer efter flere forsøg. De er måske korrupte eller for store. Disse emner vil forblive på enheden, men Joplin vil ikke længere prøve at dekryptere dem.",
|
||||
"Joplin Forum": "Joplin-forum",
|
||||
"Joplin Server": "Joplin server",
|
||||
"Joplin Server email": "Joplin server e-mail",
|
||||
"Joplin Server password": "Joplin Server adgangskode",
|
||||
"Joplin Server password": "Joplin Server-adgangskode",
|
||||
"Joplin Server URL": "Joplin Server URL",
|
||||
"Joplin Web Clipper allows saving web pages and screenshots from your browser to Joplin.": "Joplin Web-Clipper gør at du kan gemme hjemmesider og screenshots fra din browser i Joplin.",
|
||||
"Joplin website": "Joplin hjemmeside",
|
||||
@@ -403,12 +409,14 @@
|
||||
"Keyboard Shortcut": "Tastaturgenvej",
|
||||
"Keyboard Shortcuts": "Tastaturgenveje",
|
||||
"Keychain Supported: %s": "Keychain-understøttet: %s",
|
||||
"Keys that need upgrading": "Nøgler der har brug for opgradering",
|
||||
"Landscape": "Landskab",
|
||||
"Language": "Sprog",
|
||||
"Last error: %s": "Sidste fejl: %s",
|
||||
"Later": "Senere",
|
||||
"Layout": "Layout",
|
||||
"Layout button sequence": "Indstil knap-rækkefølge",
|
||||
"Leave notebook...": "Forlad notesbog...",
|
||||
"Legal": "US Legal",
|
||||
"Letter": "US Letter",
|
||||
"Light": "Lyst",
|
||||
@@ -425,16 +433,21 @@
|
||||
"Login with Dropbox": "Log på med Dropbox",
|
||||
"Login with OneDrive": "Log på med OneDrive",
|
||||
"Make a donation": "Giv en donation",
|
||||
"Manage master password": "Administrer hovedadgangskode",
|
||||
"Manage master password...": "Administrer hovedadgangskode...",
|
||||
"Manage your plugins": "Administrer dine udvidelser",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "Administrer E2EE-konfiguration. Kommandoer er `enable`(aktiver), `disable`(sluk), `decrypt`(dekrypter), `status`, `decrypt-file`(dekrypter fil) og `target-status` (modtager-status).",
|
||||
"Manual": "Manuel",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + Front Matter",
|
||||
"Marks a to-do as done.": "Markerer en opgave som udført.",
|
||||
"Marks a to-do as non-completed.": "Markerer en opgave som ikke-udført.",
|
||||
"Markup": "Markup",
|
||||
"Master Key %s": "Hovednøgle %s",
|
||||
"Master password": "Hovedadgangskode",
|
||||
"Master password:": "Indtast adgangskode:",
|
||||
"Master password:": "Hovedadgangskode:",
|
||||
"Max concurrent connections": "Maksimale samtidige forbindelser",
|
||||
"Missing keys": "Manglende nøgler",
|
||||
"Missing Master Keys": "Manglende hovednøgler",
|
||||
"Missing required argument: %s": "Mangler krævet argument: %s",
|
||||
"Mobile data - auto-sync disabled": "Mobildata - auto-synk deaktiveret",
|
||||
@@ -457,7 +470,7 @@
|
||||
"New to-do": "Ny opgave",
|
||||
"New version: %s": "Ny version: %s",
|
||||
"Nextcloud": "Nextcloud",
|
||||
"Nextcloud password": "Nextcloud adgangskode",
|
||||
"Nextcloud password": "Nextcloud-adgangskode",
|
||||
"Nextcloud username": "Nextcloud brugernavn",
|
||||
"Nextcloud WebDAV URL": "Nextcloud WebDAV URL",
|
||||
"no": "nej",
|
||||
@@ -475,6 +488,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "Ikke godkendt med %s. Angiv venligst eventuelle manglende legitimationsoplysninger.",
|
||||
"Not downloaded": "Ikke downloadet",
|
||||
"Not generated": "Ikke oprettet",
|
||||
"note": "note",
|
||||
"Note": "Note",
|
||||
"Note area growth factor": "Noteområde-vækstfaktor",
|
||||
@@ -529,8 +543,10 @@
|
||||
"PDF File": "PDF-fil",
|
||||
"Permission needed": "Tilladelse nødvendig",
|
||||
"Permission to use camera": "Tilladelse til at bruge kameraet",
|
||||
"Please click on \"%s\" to proceed": "Klik på \"%s\" for at fortsætte",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "Bekræft venligst at du ønsker at genkryptere hele din database.",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "Indtast din adgangskode i hovednøglelisten nedenfor før opgradering af nøglen.",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "Bemærk, at hvis der er tale om en stor notesbog, kan det tage et par minutter, før alle noter vises på modtagerens enhed.",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "Åben venligst flg. ULR i en browser for at bekræfte app'en. App'en vil oprette en mappe i \"Apps/Joplin\" og vil kun skrive/læse filer i denne mappe. Den får ingen adgang til filer udenfor denne mappe, heller ikke til andre persondata. Ingen data deles med nogen tredjepart.",
|
||||
"Please select a notebook first.": "Vælg først en notesbog.",
|
||||
"Please select the note or notebook to be deleted first.": "Vælg først noten eller notesbogen der skal slettes.",
|
||||
@@ -552,12 +568,13 @@
|
||||
"Press Ctrl+D or type \"exit\" to exit the application": "Tast Ctrl+D eller tast \"exit\" for at afslutte app'en",
|
||||
"Press the shortcut": "Tryk på genvejen",
|
||||
"Press the shortcut and then press ENTER. Or, press BACKSPACE to clear the shortcut.": "Tryk på genvejen og tryk så på ENTER. Eller, tryk MELLEMRUMSTASTEN for at rydde genvejen.",
|
||||
"Press to set the decryption password.": "Klik for at gemme dekrypterings kodeord.",
|
||||
"Press to set the decryption password.": "Klik for at gemme dekrypterings-adgangskodeord.",
|
||||
"Previous versions of this note": "Tidligere udgaver af denne note",
|
||||
"Print": "Udskriv",
|
||||
"Privacy Policy": "Privatlivspolitik",
|
||||
"Profile Version: %s": "Profil-version: %s",
|
||||
"Properties": "Egenskaber",
|
||||
"Public-private key pair:": "Offentligt-privat nøglepar:",
|
||||
"Publish note...": "Publicer note...",
|
||||
"Publish Notes": "Publicer noter",
|
||||
"Publish notes to the internet": "Udgiv noter til internettet",
|
||||
@@ -582,6 +599,7 @@
|
||||
"Rename tag:": "Omdøb etikette:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "Omdøber det aktuelle <item> (note eller notesbog) til <name>.",
|
||||
"Renew token": "Forny token",
|
||||
"Reset master password": "Nulstil hovedadgangskode",
|
||||
"Resources: %d.": "Ressourcer: %d.",
|
||||
"Restart and upgrade": "Genstart og upgradér",
|
||||
"Restart now": "Genstart nu",
|
||||
@@ -615,6 +633,7 @@
|
||||
"Server is running on port %d": "Serveren kører på port %d",
|
||||
"Set alarm": "Indstil alarm",
|
||||
"Set alarm:": "Indstil alarm:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "Indtil den til 0 for at bruge hele den tilgængelige plads. Anbefalet bredde er 600.",
|
||||
"Set the password": "Indstil adgangskoden",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "Sætter ejerskab <name> af valgt <note> til aktuel [value]. Mulige ejerskab er:\n\n%s",
|
||||
"Share": "Del",
|
||||
@@ -625,6 +644,7 @@
|
||||
"Show Advanced Settings": "Vis avancerede indstillinger",
|
||||
"Show all": "Vis alt",
|
||||
"Show completed to-dos": "Vis færdige opgaver",
|
||||
"Show disabled keys": "Vis deaktiverede nøgler",
|
||||
"Show note counts": "Vis noteantal",
|
||||
"Show tray icon": "Vis ikon på bundbjælke",
|
||||
"Sidebar": "Sidebjælke",
|
||||
@@ -636,6 +656,7 @@
|
||||
"Solarised Light": "Solarised Lys",
|
||||
"Some items cannot be decrypted.": "Nogle emner kan ikke dekrypteres.",
|
||||
"Some items cannot be synchronised.": "Nogle emner kan ikke synkroniseres.",
|
||||
"Some items cannot be synchronised. Press for more info.": "Nogle emner kan ikke synkroniseres. Tryk for mere info.",
|
||||
"Sort notebooks by": "Sorter notesbøger efter",
|
||||
"Sort notes by": "Sorter noter efter",
|
||||
"Sort selected lines": "Sorter valgte linjer",
|
||||
@@ -710,15 +731,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "Editorkommandoen (kan inkludere argumenter) der bruges til at åbne noter. Hvis der ikke er angivet nogen, vil den prøve at autodetektere standardeditoren.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Faktoren vil bestemme om elementet vil vokse eller skrumpe for at tilpasse den tilgængelig plads i dens beholder med hensyn til andre elementer. Således vil et element med en faktor 2 optage dobbelt så meget plads som et element med en faktor 1. Genstart app'en for at se ændringer.",
|
||||
"The following attachments are being watched for changes:": "Følgende vedhæftninger overvåges for ændringer:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "Følgende nøgler bruger en forældet krypteringsalgoritme, og det anbefales at opgradere dem. Den opgraderet nøgler vil stadig kunne dekryptere og kryptere dine data som normalt.",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Joplin mobil-app'en understøtter på nuværende tidspunkt ikke denne type link: %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Joplin-teamet har kontrolleret dette plugin, og det opfylder vores standarder for sikkerhed og ydeevne.",
|
||||
"The 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.": "Nøglerne til disse ID'er er brugt til at kryptere nogle af dine emner, men applikationen har i øjeblikket ikke adgang til dem. De vil sandsynligvis blive hentet i forbindelse med synkronisering.",
|
||||
"The master key has been upgraded successfully!": "Hovednøglen er succesfuldt opgraderet!",
|
||||
"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.": "Hovednøglerne til disse ID'er er brugt til at kryptere nogle af dine emner, men app'en har pt. ikke adgang til dem. Det er sandsynligt at de vil blive hentet via synkronisering.",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "Noten \"%s\" er blevet gendannet til notesbogen \"%s\".",
|
||||
"The notebook could not be saved: %s": "Notesbogen kan ikke gemmes: %s",
|
||||
"The notes have been imported: %s": "Noterne er importeret: %s",
|
||||
"The possible commands are:": "Mulige kommandoer er:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "Modtageren kunne ikke fjernes fra listen. Prøv venligst igen.\n\nFejlen var: \"%s\"",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "Synkroniseringsmålet skal opgraderes før Joplin kan synkronisere. Denne operation kan tage nogle minutter at udføre, og appen skal genstartes. Klik på linket for at fortsætte.",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "Synk-mål skal opgraderes! Tryk på denne banner for at fortsætte.",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "Etiketten \"%s\" eksisterer allerede. Vælg venligst et andet navn.",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "Synkroniseringsmålet. Hver synk. mål kan have ekstra parametre der navngives som `sync.NUM.NAME` (se dokumentation herunder).",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Web Clipper har brug for din tilladelse til at få adgang til dine data.",
|
||||
@@ -745,10 +770,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "Denne tjeneste tillader browser udvidelsen at kommunikere med Joplin. Når du slår den til kan det være, at din firewall beder om tilladelse til at lytte på en bestemt port.",
|
||||
"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.": "Dette tillader Joplin at køre i baggrunden. Det er anbefalet at slå dette til for at holde dine noter synkroniserede og dermed undgå konflikter.",
|
||||
"This will open a new screen. Save your current changes?": "Dette åbner i et nyt vindue. Vil du gemme dine ændringer?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "Dette vil fjerne notesbogen fra din samling, og du vil ikke længere have adgang til dens indhold. Ønsker du at fortsætte?",
|
||||
"Time format": "Tidsformat",
|
||||
"title": "titel",
|
||||
"Title": "Titel",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "For at give Joplin tilladelse til at synkronisere med Dropbox, skal du følge nedenstående trin:",
|
||||
"To continue, please enter your master password below.": "Indtast din hovedadgangskode nedenfor for at fortsætte.",
|
||||
"To delete a tag, untag the associated notes.": "For at slette en etikette, fjern etikette fra de tilhørende noter.",
|
||||
"To delete: %d": "Til sletning: %d",
|
||||
"To enter command line mode, press \":\"": "For at skifte til kommandolinje tilstand, tryk \":\"",
|
||||
@@ -816,7 +843,7 @@
|
||||
"Warning: not all resources shown for performance reasons (limit: %s).": "Advarsel: Ikke alle ressourcer kan vises af ydelsesmæssige årsager (Begrænsning: %s).",
|
||||
"Web Clipper": "Web-clipper",
|
||||
"WebDAV": "WebDAV",
|
||||
"WebDAV password": "WebDAV adgangskode",
|
||||
"WebDAV password": "WebDAV-adgangskode",
|
||||
"WebDAV URL": "WebDAV URL",
|
||||
"WebDAV username": "WebDAV brugernavn",
|
||||
"Website and documentation": "Hjemmeside og dokumentation",
|
||||
@@ -835,6 +862,7 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "Du kan bruge værktøjet nedenfor til at genkryptere dine data for eksempel hvis du ved at nogle af dine noter er krypteret med en forældet krypteringsmetode.",
|
||||
"Your choice: ": "Dit valg: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "Dine data bliver genkrypteret og synkroniseret igen.",
|
||||
"Your master password is needed to decrypt some of your data.": "Din hovedadgangskode er nødvendig for at dekryptere nogle af dine data.",
|
||||
"Your permission to use your camera is required.": "Din tilladelse til at bruge kameraet er påkrævet.",
|
||||
"Your version: %s": "Din version: %s",
|
||||
"Zoom In": "Zoom ind",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Automatisches Hinzufügen von geschweiften Klammern, runden Klammern, Anführungszeichen usw.",
|
||||
"Automatically switch theme to match system theme": "Automatisch das Design ändern, um es dem System-Design anzupassen",
|
||||
"Automatically update the application": "Die Anwendung automatisch aktualisieren",
|
||||
"AWS key": "AWS-Schlüssel",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "Amazon S3-Bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS-Geheimnis",
|
||||
"Back": "Zurück",
|
||||
"Bold": "Fett",
|
||||
"Browse all plugins": "Alle Erweiterungen durchsuchen",
|
||||
@@ -106,6 +101,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Kann Token nicht erneuern: Authentifikationsdaten nicht vorhanden. Ein Neustart der Synchronisation könnte das Problem beheben.",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "Kann %s \"%s\" nicht speichern, da es größer ist als das erlaubte Limit (%s)",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "Kann %s \"%s\" nicht speichern, da es die zulässige Gesamtgröße (%s) für dieses Konto überschreiten würde",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "Das verschlüsselte Notizbuch kann nicht mit %s geteilt werden, da die Person die Ende-zu-Ende Verschlüsselung nicht aktiviert hat. Dies ist unter Optionen > Verschlüsselung möglich.",
|
||||
"Change application layout": "Anwendungs-Layout ändern",
|
||||
"Change language": "Sprache ändern",
|
||||
"Characters": "Zeichen",
|
||||
@@ -144,10 +140,12 @@
|
||||
"Conflicted: %d": "Im Konflikt: %d",
|
||||
"Conflicts": "Konflikte",
|
||||
"Conflicts (attachments)": "Konflikte (Anhänge)",
|
||||
"Content provided by %s": "Von %s bereitgestellte Inhalte",
|
||||
"Convert to note": "In eine Notiz umwandeln",
|
||||
"Convert to todo": "In eine Aufgabe umwandeln",
|
||||
"Copy": "Kopieren",
|
||||
"Copy dev mode command to clipboard": "Entwicklermodus-Befehl in Zwischenablage kopieren",
|
||||
"Copy external link": "Externen Link kopieren",
|
||||
"Copy Link Address": "Link-Adresse kopieren",
|
||||
"Copy Markdown link": "Markdown-Link kopieren",
|
||||
"Copy path to clipboard": "Pfad in Zwischenablage kopieren",
|
||||
@@ -158,6 +156,7 @@
|
||||
"Could not connect to plugin repository.": "Konnte keine Verbindung zum Plugin-Repository herstellen.",
|
||||
"Could not export notes: %s": "Konnte Notizen nicht exportieren: %s",
|
||||
"Could not install plugin: %s": "Erweiterung konnte nicht installiert werden: %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "Die Einladung konnte nicht beantwortet werden. Bitte versuche es erneut, oder prüfe, ob der Notizbuch-Besitzer dieses noch freigibt.\n\nDer Fehler war: \"%s\"",
|
||||
"Could not upgrade master key: %s": "Konnte Hauptschlüssel nicht aktualisieren: %s",
|
||||
"Create a notebook": "Notizbuch erstellen",
|
||||
"Created": "Erstellt",
|
||||
@@ -229,6 +228,7 @@
|
||||
"Displays version information": "Zeigt Informationen zur Version an",
|
||||
"Do it now": "Mach es jetzt",
|
||||
"Do not ask for confirmation.": "Nicht nach einer Bestätigung fragen.",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "Achte darauf, dass du das Passwort nicht verlierst, da dies aus Sicherheitsgründen die *einzige* Möglichkeit ist, deine Daten zu entschlüsseln! Um die Verschlüsselung zu aktivieren, gib bitte unten dein Passwort ein.",
|
||||
"Download": "Herunterladen",
|
||||
"Download and install the relevant extension for your browser:": "Lade die entsprechende Erweiterung für deinen Browser herunter und installiere sie:",
|
||||
"Downloaded": "Heruntergeladen",
|
||||
@@ -280,12 +280,16 @@
|
||||
"Enable Web Clipper Service": "Web-Clipper-Dienst aktivieren",
|
||||
"Enable ~sub~ syntax": "Syntax ~sub~ aktivieren",
|
||||
"Enabled": "Aktiviert",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "Durch die Aktivierung der Verschlüsselung werden *alle* Notizen und Anhänge neu synchronisiert und verschlüsselt an das Synchronisationsziel gesendet.",
|
||||
"Encrypted": "Verschlüsselt",
|
||||
"Encrypted items cannot be modified": "Verschlüsselte Elemente können nicht verändert werden",
|
||||
"Encrypted notebooks cannot be renamed": "Verschlüsselte Notizbücher können nicht umbenannt werden",
|
||||
"Encryption": "Verschlüsselung",
|
||||
"Encryption Config": "Verschlüsselungskonfiguration",
|
||||
"Encryption is: %s": "Verschlüsselung ist: %s",
|
||||
"Encryption keys": "Verschlüsselungsschlüssel",
|
||||
"Encryption:": "Verschlüsselung:",
|
||||
"End-to-end encryption": "Ende-zu-Ende Verschlüsselung",
|
||||
"Enter code here": "Hier Code eingeben",
|
||||
"Enter master password:": "Master-Passwort eingeben:",
|
||||
"Enter notebook title": "Titel des Notizbuchs eingeben",
|
||||
@@ -332,6 +336,7 @@
|
||||
"FTS enabled: %d": "FTS aktiviert: %d",
|
||||
"Full changelog": "Komplettes Änderungsprotokoll",
|
||||
"General": "Allgemeines",
|
||||
"Generated": "Erzeugt",
|
||||
"Generating link...": "Link wird erzeugt ...",
|
||||
"Get it now:": "Hole es jetzt:",
|
||||
"Get pre-releases when checking for updates": "Bei der Suche nach Aktualisierungen Vorabveröffentlichungen erhalten",
|
||||
@@ -340,13 +345,16 @@
|
||||
"Goto Anything...": "Gehe zu ...",
|
||||
"Grant authorisation": "Genehmigung erteilen",
|
||||
"Heading": "Überschrift",
|
||||
"Help": "Hilfe",
|
||||
"Hide %s": "%s ausblenden",
|
||||
"Hide disabled keys": "Deaktivierte Schlüssel ausblenden",
|
||||
"Hide Joplin": "Joplin ausblenden",
|
||||
"Highlight": "Hervorheben",
|
||||
"Horizontal Rule": "Horizontale Linie",
|
||||
"HTML Directory": "HTML-Verzeichnis",
|
||||
"HTML File": "HTML-Datei",
|
||||
"Hyperlink": "Hyperlink",
|
||||
"Icon": "Icon",
|
||||
"ID": "ID",
|
||||
"Idle": "Wartend",
|
||||
"Ignore": "Ignorieren",
|
||||
@@ -403,12 +411,14 @@
|
||||
"Keyboard Shortcut": "Tastaturkürzel",
|
||||
"Keyboard Shortcuts": "Tastaturkürzel",
|
||||
"Keychain Supported: %s": "Unterstützter Schlüsselbund: %s",
|
||||
"Keys that need upgrading": "Hauptschlüssel, die aktualisiert werden müssen",
|
||||
"Landscape": "Querformat",
|
||||
"Language": "Sprache",
|
||||
"Last error: %s": "Letzte Fehlermeldung: %s",
|
||||
"Later": "Später",
|
||||
"Layout": "Layout",
|
||||
"Layout button sequence": "Layout-Reihenfolge",
|
||||
"Leave notebook...": "Verlasse Notizbuch...",
|
||||
"Legal": "Legal",
|
||||
"Letter": "Letter",
|
||||
"Light": "Hell",
|
||||
@@ -425,9 +435,13 @@
|
||||
"Login with Dropbox": "Mit Dropbox anmelden",
|
||||
"Login with OneDrive": "Mit OneDrive anmelden",
|
||||
"Make a donation": "Spenden",
|
||||
"Manage master password": "Master-Passwort verwalten",
|
||||
"Manage master password...": "Master-Passwort verwalten...",
|
||||
"Manage your plugins": "Erweiterungen verwalten",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "Verwaltet die E2EE-Konfiguration. Die Befehle lauten `enable`, `disable`, `decrypt`, `status`, `decrypt-file` und `target-status`.",
|
||||
"Manual": "Manuell",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + Front Matter",
|
||||
"Marks a to-do as done.": "Markiert eine Aufgabe als erledigt.",
|
||||
"Marks a to-do as non-completed.": "Markiert eine Aufgabe als nicht abgeschlossen.",
|
||||
"Markup": "Markup",
|
||||
@@ -435,6 +449,7 @@
|
||||
"Master password": "Master-Passwort",
|
||||
"Master password:": "Master-Passwort:",
|
||||
"Max concurrent connections": "Maximale Anzahl an gleichzeitigen Verbindungen",
|
||||
"Missing keys": "Fehlende Schlüssel",
|
||||
"Missing Master Keys": "Fehlende Hauptschlüssel",
|
||||
"Missing required argument: %s": "Fehlendes erforderliches Argument: %s",
|
||||
"Mobile data - auto-sync disabled": "Mobile Daten - Auto-Synchronisierung deaktiviert",
|
||||
@@ -475,6 +490,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "Keine Authentifizierung mit %s. Gib bitte alle fehlenden Zugangsdaten an.",
|
||||
"Not downloaded": "Nicht heruntergeladen",
|
||||
"Not generated": "Nicht erzeugt",
|
||||
"note": "Notiz",
|
||||
"Note": "Notiz",
|
||||
"Note area growth factor": "Notiz-Flächenwachstumsfaktor",
|
||||
@@ -529,8 +545,10 @@
|
||||
"PDF File": "PDF-Datei",
|
||||
"Permission needed": "Berechtigung benötigt",
|
||||
"Permission to use camera": "Berechtigung zur Verwendung der Kamera",
|
||||
"Please click on \"%s\" to proceed": "Klicke bitte auf \"%s\" um fortzufahren",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "Bitte bestätige, dass du deine gesamte Datenbank neu verschlüsseln möchtest.",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "Bitte gib zuerst dein Passwort in der unten stehenden Liste der Hauptschlüssel ein, bevor du den Schlüssel aktualisierst.",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "Wenn das Notizbuch sehr groß ist, kann es ein paar Minuten dauern, bis alle Notizen auf dem Empfängergerät erscheinen.",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "Bitte öffne die folgende URL in deinem Browser, um die Anwendung zu authentifizieren. Die Anwendung erstellt ein Verzeichnis in „Apps/Joplin“ und kann nur Dateien in diesem Verzeichnis lesen und schreiben. Sie hat weder Zugriff auf Dateien außerhalb dieses Verzeichnisses noch auf andere persönliche Daten. Es werden keine Daten an Dritte weitergegeben.",
|
||||
"Please select a notebook first.": "Bitte wähle erst ein Notizbuch aus.",
|
||||
"Please select the note or notebook to be deleted first.": "Bitte wähle zuerst eine Notiz oder ein Notizbuch aus, das gelöscht werden soll.",
|
||||
@@ -558,6 +576,7 @@
|
||||
"Privacy Policy": "Datenschutzrichtlinie",
|
||||
"Profile Version: %s": "Profil-Version: %s",
|
||||
"Properties": "Eigenschaften",
|
||||
"Public-private key pair:": "Öffentlich-Privates Schlüsselpaar:",
|
||||
"Publish note...": "Notiz veröffentlichen...",
|
||||
"Publish Notes": "Notizen veröffentlichen",
|
||||
"Publish notes to the internet": "Notizen im Internet veröffentlichen",
|
||||
@@ -582,6 +601,7 @@
|
||||
"Rename tag:": "Schlagwort umbenennen:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "Benennt das angegebene <item> (Notiz oder Notizbuch) zu <name> um.",
|
||||
"Renew token": "Token erneuern",
|
||||
"Reset master password": "Master-Passwort zurücksetzen",
|
||||
"Resources: %d.": "Anhänge: %d.",
|
||||
"Restart and upgrade": "Neustarten und aktualisieren",
|
||||
"Restart now": "Jetzt neu starten",
|
||||
@@ -615,6 +635,7 @@
|
||||
"Server is running on port %d": "Server läuft auf Port %d",
|
||||
"Set alarm": "Alarm erstellen",
|
||||
"Set alarm:": "Alarm erstellen:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "Setze sie auf 0, um den gesamten verfügbaren Platz zu verwenden. Die empfohlene Breite ist 600.",
|
||||
"Set the password": "Gib das Passwort ein",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "Setzt die Eigenschaft <name> der gegebenen <note> auf den gegebenen [Wert]. Mögliche Werte sind:\n\n%s",
|
||||
"Share": "Teilen",
|
||||
@@ -625,6 +646,7 @@
|
||||
"Show Advanced Settings": "Erweiterte Einstellungen anzeigen",
|
||||
"Show all": "Zeige alles",
|
||||
"Show completed to-dos": "Abgeschlossene Aufgaben anzeigen",
|
||||
"Show disabled keys": "Deaktivierte Schlüssel anzeigen",
|
||||
"Show note counts": "Notizanzahl anzeigen",
|
||||
"Show tray icon": "Taskleistensymbol anzeigen",
|
||||
"Sidebar": "Seitenleiste",
|
||||
@@ -703,23 +725,27 @@
|
||||
"The application has been authorised!": "Die Anwendung wurde erfolgreich autorisiert!",
|
||||
"The application has been successfully authorised.": "Die Anwendung wurde erfolgreich autorisiert.",
|
||||
"The application must be restarted for these changes to take effect.": "Die Anwendung muss neu gestartet werden, damit diese Änderungen wirksam werden.",
|
||||
"The attachments will no longer be watched when you switch to a different note.": "Die Anhänge werden nicht mehr überwacht, wenn Sie zu einer anderen Notiz wechseln.",
|
||||
"The attachments will no longer be watched when you switch to a different note.": "Die Anhänge werden nicht mehr überwacht, wenn du zu einer anderen Notiz wechseln.",
|
||||
"The command \"%s\" is only available in GUI mode": "Der Befehl „%s“ ist nur im GUI-Modus verfügbar",
|
||||
"The default admin password is insecure and has not been changed! [Change it now](%s)": "Das Standard-Administratorpasswort ist unsicher und wurde nicht geändert! [Jetzt ändern](%s)",
|
||||
"The default encryption method has been changed to a more secure one and it is recommended that you apply it to your data.": "Die Standardverschlüsselungsmethode wurde in eine sicherere geändert und es wird empfohlen, sie auf deine Daten anzuwenden.",
|
||||
"The default encryption method has been changed, you should re-encrypt your data.": "Die Standardverschlüsselungsmethode wurde geändert. Du solltest deine Daten erneut verschlüsseln.",
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "Der Editor-Befehl (kann Kommandozeilenargumente enthalten), der zum Öffnen einer Notiz verwendet wird. Wenn keiner angegeben wird, wird versucht, den Standard-Editor automatisch zu erkennen.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Die Faktor-Eigenschaft legt fest, wie der Artikel wächst oder schrumpft, um dem verfügbaren Platz in seinem Container in Bezug auf die anderen Artikel zu entsprechen. Ein Element mit dem Faktor 2 benötigt also doppelt so viel Platz wie ein Element mit dem Faktor 1. Starten Sie die App neu, um Änderungen zu sehen.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Die Faktor-Eigenschaft legt fest, wie der Artikel wächst oder schrumpft, um dem verfügbaren Platz in seinem Container in Bezug auf die anderen Artikel zu entsprechen. Ein Element mit dem Faktor 2 benötigt also doppelt so viel Platz wie ein Element mit dem Faktor 1. Starte die App neu, um Änderungen zu sehen.",
|
||||
"The following attachments are being watched for changes:": "Die folgenden Anhänge werden auf Änderungen überwacht:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "Die folgenden Schlüssel verwenden einen veralteten Verschlüsselungsalgorithmus und es wird empfohlen, sie zu aktualisieren. Der aktualisierte Schlüssel wird deine Daten weiterhin wie gewohnt entschlüsseln und verschlüsseln können.",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Die Joplin Handy-App unterstützt derzeit diese Art von Link nicht: %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Das Joplin-Team hat dieses Plugin auf unsere Standards für Sicherheit und Leistung überprüft.",
|
||||
"The 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.": "Die Schlüssel mit diesen IDs werden zur Verschlüsselung einiger deiner Objekte verwendet, die Anwendung hat jedoch derzeit keinen Zugriff darauf. Es ist wahrscheinlich, dass sie irgendwann über die Synchronisation heruntergeladen werden.",
|
||||
"The master key has been upgraded successfully!": "Der Hauptschlüssel wurde erfolgreich aktualisiert!",
|
||||
"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.": "Die Hauptschlüssel mit diesen IDs werden zur Verschlüsselung einiger deiner Objekte verwendet, die Anwendung hat jedoch derzeit keinen Zugriff darauf. Es ist wahrscheinlich, dass sie irgendwann über die Synchronisation heruntergeladen werden.",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "Die Notiz „%s“ wurde erfolgreich im Notizbuch „%s“ wiederhergestellt.",
|
||||
"The notebook could not be saved: %s": "Dieses Notizbuch konnte nicht gespeichert werden: %s",
|
||||
"The notes have been imported: %s": "Die Notizen wurden importiert: %s",
|
||||
"The possible commands are:": "Die möglichen Befehle sind:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "Der Empfänger konnte nicht von der Liste entfernt werden. Bitte versuche es erneut.\n\nDer Fehler war: \"%s\"",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "Das Synchronisationsziel muss aktualisiert werden, bevor Joplin synchronisiert werden kann. Der Vorgang kann einige Minuten dauern, und die App muss neu gestartet werden. Um fortzufahren, klicke bitte auf den Link.",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "Das Synchronisationsziel muss aktualisiert werden! Klicke auf diesen Banner, um fortzufahren.",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "Das Schlagwort „%s“ existiert bereits. Bitte wähle einen anderen Namen.",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten dokumentiert) bezeichnet werden.",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Der Web Clipper benötigt deine Genehmigung, um auf die Daten zuzugreifen.",
|
||||
@@ -746,10 +772,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "Dieser Dienst erlaubt es der Browser-Erweiterung mit Joplin zu kommunizieren. Beim Aktivieren kann deine Firewall dich nach der Erlaubnis bitten, dass Joplin auf einem bestimmten Port mithören darf.",
|
||||
"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.": "Dadurch kann Joplin im Hintergrund laufen. Es wird empfohlen, diese Einstellung zu aktivieren, damit deine Notizen ständig synchronisiert werden und somit die Anzahl der Konflikte reduziert wird.",
|
||||
"This will open a new screen. Save your current changes?": "Diese Aktion wird ein neues Fenster öffnen. Aktuelle Änderungen speichern?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "Das Notizbuch wird aus deiner Sammlung gelöscht und du wirst keinen Zugriff mehr darauf haben. Möchtest du fortfahren?",
|
||||
"Time format": "Zeitformat",
|
||||
"title": "Titel",
|
||||
"Title": "Titel",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "Um Joplin die Synchronisation mit Dropbox zu ermöglichen, folge bitte den folgenden Schritten:",
|
||||
"To continue, please enter your master password below.": "Gib bitte das Master-Passwort unten ein um forzufahren.",
|
||||
"To delete a tag, untag the associated notes.": "Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen Notizen.",
|
||||
"To delete: %d": "Zu löschen: %d",
|
||||
"To enter command line mode, press \":\"": "Um den Befehlszeilen-Modus aufzurufen, drücke „:“",
|
||||
@@ -803,7 +831,7 @@
|
||||
"Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE": "Verwende ausführliches Listenformat. Das Format ist ID, NOTIZEN_ANZAHL (für Notizbuch), DATUM, AUFGABE_BEARBEITET (für Aufgaben), TITEL",
|
||||
"Use spell checker": "Rechtschreibprüfung verwenden",
|
||||
"Use the arrows and page up/down to scroll the lists and text areas (including this console).": "Benutze die Pfeiltasten und Bild auf/ab, um durch Listen und Texte zu scrollen (inklusive dieser Konsole).",
|
||||
"Use the arrows to move the layout items. Press \"Escape\" to exit.": "Verwenden Sie die Pfeile, um die Layoutelemente zu verschieben. Drücken Sie zum Beenden „Escape“.",
|
||||
"Use the arrows to move the layout items. Press \"Escape\" to exit.": "Verwende die Pfeile, um die Layoutelemente zu verschieben. Drücke zum Beenden „Escape“.",
|
||||
"Use this to rebuild the search index if there is a problem with search. It may take a long time depending on the number of notes.": "Verwende dies, um den Suchindex neu aufzubauen, wenn es ein Problem mit der Suche gibt. Dies kann je nach Anzahl der Notizen eine lange Zeit dauern.",
|
||||
"Used for most text in the markdown editor. If not found, a generic proportional (variable width) font is used.": "Hauptsächlich für Text im Markdown-Editor verwendet. Falls nicht vorhanden wird eine generische Proportional-Schriftart (mit variabler Breite) verwendet.",
|
||||
"Used where a fixed width font is needed to lay out text legibly (e.g. tables, checkboxes, code). If not found, a generic monospace (fixed width) font is used.": "Verwendete Schriftart mit fester Breite, um Text lesbar zu machen (z.B. in Tabellen, Kontrollkästchen, Code). Falls nicht vorhanden wird eine Monotype-Scrhiftart (mit fester Breite) verwendet.",
|
||||
@@ -829,13 +857,14 @@
|
||||
"Y": "J",
|
||||
"yes": "Ja",
|
||||
"Yes": "Ja",
|
||||
"You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?": "Sie sind dabei, ein großes Bild (%dx%d Pixel) anzuhängen. Möchten Sie es vor dem Anhängen auf %d Pixel verkleinern?",
|
||||
"You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?": "Du bist dabei, ein großes Bild (%dx%d Pixel) anzuhängen. Möchtest du es vor dem Anhängen auf %d Pixel verkleinern?",
|
||||
"You currently have no notebooks.": "Du hast momentan keine Notizbücher.",
|
||||
"You do not have any installed plugin.": "Es sind keine Erweiterungen installiert.",
|
||||
"You may also type `status` for more information.": "Du kannst auch `status` für weitere Informationen eingeben.",
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "Du kannst das folgende Werkzeug verwenden, um deine Daten erneut zu verschlüsseln, falls einige deiner Notizen mit einer veralteten Verschlüsselungsmethode verschlüsselt sein sollten.",
|
||||
"Your choice: ": "Deine Auswahl: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "Deine Daten werden neu verschlüsselt und erneut synchronisiert.",
|
||||
"Your master password is needed to decrypt some of your data.": "Das Master-Passwort ist nötig um einige deiner Daten zu entschlüsseln.",
|
||||
"Your permission to use your camera is required.": "Deine Zustimmung zur Verwendung deiner Kamera ist erforderlich.",
|
||||
"Your version: %s": "Deine Version: %s",
|
||||
"Zoom In": "Hineinzoomen",
|
||||
|
@@ -74,11 +74,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Αυτόματη-σύζευξη αγκίστρων, παρενθέσεων, εισαγωγικών, κ.λπ.",
|
||||
"Automatically switch theme to match system theme": "Αυτόματη εναλλαγή θέματος ώστε να ταιριάζει με το θέμα συστήματος",
|
||||
"Automatically update the application": "Αυτόματη ενημέρωση της εφαρμογής",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Πίσω",
|
||||
"Bold": "Έντονη γραφή",
|
||||
"Browse all plugins": "Αναζήτηση όλων των plugin",
|
||||
@@ -319,6 +314,7 @@
|
||||
"Go to source URL": "Μεταβείτε στη διεύθυνση URL προέλευσης",
|
||||
"Goto Anything...": "Γρήγορη Μετακίνηση...",
|
||||
"Heading": "Επικεφαλίδα",
|
||||
"Help": "Βοήθεια",
|
||||
"Hide %s": "Απόκρυψη %s",
|
||||
"Hide Joplin": "Κρύψε το Joplin",
|
||||
"Highlight": "Επισήμανση",
|
||||
@@ -326,6 +322,7 @@
|
||||
"HTML Directory": "Φάκελος HTML",
|
||||
"HTML File": "Αρχείο HTML",
|
||||
"Hyperlink": "Υπερσύνδεση",
|
||||
"Icon": "Εικονίδιο",
|
||||
"ID": "ID",
|
||||
"Idle": "Αδρανής",
|
||||
"Ignore": "Παράβλεψη",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Autoemparejar llaves, paréntesis, comillas, etc.",
|
||||
"Automatically switch theme to match system theme": "Cambiar automáticamente el tema para que coincida con el tema del sistema",
|
||||
"Automatically update the application": "Actualizar la aplicación automáticamente",
|
||||
"AWS key": "Clave de AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "URL de AWS S3",
|
||||
"AWS secret": "Secreto de AWS",
|
||||
"Back": "Retroceder",
|
||||
"Bold": "Negrita",
|
||||
"Browse all plugins": "Explorar todos los plugins",
|
||||
@@ -339,6 +334,7 @@
|
||||
"Goto Anything...": "Ir a...",
|
||||
"Grant authorisation": "Conceder la autorización",
|
||||
"Heading": "Título",
|
||||
"Help": "Ayuda",
|
||||
"Hide %s": "Ocultar %s",
|
||||
"Hide Joplin": "Ocultar Joplin",
|
||||
"Highlight": "Resaltado",
|
||||
@@ -346,6 +342,7 @@
|
||||
"HTML Directory": "Directorio HTML",
|
||||
"HTML File": "Archivo HTML",
|
||||
"Hyperlink": "Hipervínculo",
|
||||
"Icon": "Icono",
|
||||
"ID": "ID",
|
||||
"Idle": "En reposo",
|
||||
"Ignore": "Ignorar",
|
||||
|
@@ -195,6 +195,7 @@
|
||||
"Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.": "Saab või seab seadistusväärtuse. Kui väärtust [value] ei ole esitatud, näitab see [name] väärtust. Kui ei ole esitatud [name] ega [value], loetatakse praegune konfiguratsioon.",
|
||||
"Go to source URL": "Mine Allika URL-ile",
|
||||
"Heading": "Pealkiri",
|
||||
"Help": "Abi",
|
||||
"Hide %s": "Peida %s",
|
||||
"HTML Directory": "HTML-kataloog",
|
||||
"HTML File": "HTML-fail",
|
||||
|
@@ -53,7 +53,6 @@
|
||||
"Auto": "خودکار",
|
||||
"Automatically switch theme to match system theme": "به طور خودکار پوسته هماهنگ با پوسته سیستم تغییر کند",
|
||||
"Automatically update the application": "به طور خودکار نرمافزار را بهروز کن",
|
||||
"AWS S3": "AWS S3",
|
||||
"Back": "بازگشت",
|
||||
"Bold": "پررنگ",
|
||||
"Browse...": "مرور...",
|
||||
@@ -235,12 +234,14 @@
|
||||
"Go to source URL": "رفتن به آدرس منبع",
|
||||
"Goto Anything...": "رفنت به هر چیزی...",
|
||||
"Heading": "عنوان",
|
||||
"Help": "کمک",
|
||||
"Hide %s": "پنهان کردن %s",
|
||||
"Hide Joplin": "Joplin را مخفی کنید",
|
||||
"Horizontal Rule": "خط افقی",
|
||||
"HTML Directory": "پوشه HTML",
|
||||
"HTML File": "فایل HTML",
|
||||
"Hyperlink": "پیوند برجسته",
|
||||
"Icon": "آیکون",
|
||||
"ID": "شناسه",
|
||||
"Idle": "بیکار",
|
||||
"Import": "وارد کردن",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Yhdistä sulut, sulkeet, lainaukset jne.",
|
||||
"Automatically switch theme to match system theme": "Vaihda teema automaattisesti vastaamaan järjestelmän teemaa",
|
||||
"Automatically update the application": "Päivitä sovellus automaattisesti",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 osoite (URL)",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Takaisin",
|
||||
"Bold": "Lihavoitu",
|
||||
"Browse all plugins": "Selaa kaikkia laajennuksia",
|
||||
@@ -339,6 +334,7 @@
|
||||
"Goto Anything...": "Siirry mihin tahansa...",
|
||||
"Grant authorisation": "Myönnä lupa",
|
||||
"Heading": "Otsikko",
|
||||
"Help": "Apua",
|
||||
"Hide %s": "Piilota %s",
|
||||
"Hide Joplin": "Piilota Joplin",
|
||||
"Highlight": "Korosta",
|
||||
@@ -346,6 +342,7 @@
|
||||
"HTML Directory": "HTML hakemisto",
|
||||
"HTML File": "HTML tiedosto",
|
||||
"Hyperlink": "Hyperlinkki",
|
||||
"Icon": "Kuvake",
|
||||
"ID": "ID",
|
||||
"Idle": "Käyttämättömänä",
|
||||
"Ignore": "Ohita",
|
||||
|
@@ -80,11 +80,11 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Auto‑compléter les paires de parenthèses, guillemets, etc.",
|
||||
"Automatically switch theme to match system theme": "Changer le thème automatiquement pour correspondre au thème système",
|
||||
"Automatically update the application": "Mettre à jour le logiciel automatiquement",
|
||||
"AWS key": "AWS : Clef",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3: bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS : Secret",
|
||||
"AWS access key": "Clef d'accès AWS",
|
||||
"AWS region": "Région AWS",
|
||||
"AWS S3 bucket": "Seau AWS S3",
|
||||
"AWS S3 URL": "URL AWS S3",
|
||||
"AWS secret key": "Clef secrète AWS",
|
||||
"Back": "Retour",
|
||||
"Bold": "Gras",
|
||||
"Browse all plugins": "Parcourir les plugins",
|
||||
@@ -106,6 +106,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Impossible de rafraîchir la connexion à OneDrive. Démarrez la synchronisation à nouveau pour corriger le problème.",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "Impossible d'enregistrer l'élément %s \"%s\" car il excède la limite allouée (%s)",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "Impossible d'enregistrer l'élément %s \"%s\" car cela excèderait la limite totale allouée (%s) pour ce compte",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "Impossible de partager ce carnet chiffré car le destinataire %s car ils n'ont pas activé le chiffrement. Ils peuvent le faire à partir de l'écran Configuration > Chiffrement.",
|
||||
"Change application layout": "Changer la disposition de l'interface",
|
||||
"Change language": "Changer de langue",
|
||||
"Characters": "Caractères",
|
||||
@@ -144,10 +145,12 @@
|
||||
"Conflicted: %d": "Conflits : %d",
|
||||
"Conflicts": "Conflits",
|
||||
"Conflicts (attachments)": "Conflits (fichiers joints)",
|
||||
"Content provided by %s": "Contenu fourni par %s",
|
||||
"Convert to note": "Convertir en note",
|
||||
"Convert to todo": "Convertir en tâche",
|
||||
"Copy": "Copier",
|
||||
"Copy dev mode command to clipboard": "Copier commande de développement dans presse papier",
|
||||
"Copy external link": "Copier le lien externe",
|
||||
"Copy Link Address": "Copier l'adresse du lien",
|
||||
"Copy Markdown link": "Copier lien Markdown",
|
||||
"Copy path to clipboard": "Copier le chemin",
|
||||
@@ -158,7 +161,9 @@
|
||||
"Could not connect to plugin repository.": "Impossible de télécharger la liste des plugins.",
|
||||
"Could not export notes: %s": "Impossible d'exporter les notes : %s",
|
||||
"Could not install plugin: %s": "Impossible d'installer le module : %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "Impossible de répondre à l'invitation. Veuillez réessayer, ou demandez au propriétaire du carnet s'il le partage toujours.\n\nL'erreur était : \"%s\"",
|
||||
"Could not upgrade master key: %s": "Impossible de mettre la clef à niveau : %s",
|
||||
"Could not verify the share status of this notebook - aborting. Please try again when you are connected to the internet.": "Impossible de vérifier l'état du partage du carnet - annulation. Veuillez réessayer lorsque vous serez connecté à internet.",
|
||||
"Create a notebook": "Créer un carnet",
|
||||
"Created": "Créé",
|
||||
"created date": "date de création",
|
||||
@@ -201,8 +206,8 @@
|
||||
"Delete plugin \"%s\"?": "Supprimer plugin \"%s\" ?",
|
||||
"Delete these %d notes?": "Supprimer ces %d notes ?",
|
||||
"Delete this invitation? The recipient will no longer have access to this shared notebook.": "Supprimer cette invitation ? Le destinataire n'aura plus accès au carnet partagé.",
|
||||
"Deleted local items: %d.": "Objets supprimés localement : %d.",
|
||||
"Deleted remote items: %d.": "Objets distants supprimés : %d.",
|
||||
"Deleted local items: %d.": "Objets suppr. localement : %d.",
|
||||
"Deleted remote items: %d.": "Objets distants suppr. : %d.",
|
||||
"Deletes the given notebook.": "Supprimer le carnet.",
|
||||
"Deletes the notebook without asking for confirmation.": "Supprimer le carnet sans demander la confirmation.",
|
||||
"Deletes the notes matching <note-pattern>.": "Supprimer les notes correspondants à <note-pattern>.",
|
||||
@@ -229,6 +234,7 @@
|
||||
"Displays version information": "Affiche les informations de version",
|
||||
"Do it now": "Le faire maintenant",
|
||||
"Do not ask for confirmation.": "Ne pas demander de confirmation.",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "Ne perdez pas le mot de passe car, par sécurité, ce sera la seule façon de déchiffrer les données. Pour activer le chiffrement, veuillez entrer votre mot de passe ci-dessous.",
|
||||
"Download": "Télécharger",
|
||||
"Download and install the relevant extension for your browser:": "Téléchargez et installez le module complémentaire correspondant à votre navigateur :",
|
||||
"Downloaded": "Téléchargé",
|
||||
@@ -280,12 +286,16 @@
|
||||
"Enable Web Clipper Service": "Activer le service du Web Clipper",
|
||||
"Enable ~sub~ syntax": "Activer la syntaxe ~indice~",
|
||||
"Enabled": "Activé",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "Activer le chiffrement signifie que *toutes* les notes et fichiers vont être re‑synchronisés et envoyés chiffrés vers la cible de la synchronisation.",
|
||||
"Encrypted": "Chiffré",
|
||||
"Encrypted items cannot be modified": "Les objets chiffrés ne peuvent être modifiés",
|
||||
"Encrypted notebooks cannot be renamed": "Les carnets chiffrés ne peuvent être renommés",
|
||||
"Encryption": "Chiffrement",
|
||||
"Encryption Config": "Config chiffrement",
|
||||
"Encryption is: %s": "Le chiffrement est : %s",
|
||||
"Encryption keys": "Clefs de chiffrement",
|
||||
"Encryption:": "Chiffrement :",
|
||||
"End-to-end encryption": "Chiffrement de bout en bout",
|
||||
"Enter code here": "Entrez le code ici",
|
||||
"Enter master password:": "Entrer le mot de passe maître :",
|
||||
"Enter notebook title": "Entrez le titre du carnet",
|
||||
@@ -327,11 +337,13 @@
|
||||
"For information on how to customise the shortcuts please visit %s": "Pour personnaliser les raccourcis veuillez consulter la documentation à %s",
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to enable it please check the documentation:": "Pour plus d'informations sur le chiffrement de bout en bout, ainsi que des conseils pour l'activer, veuillez consulter la documentation :",
|
||||
"For the list of keyboard shortcuts and config options, type `help keymap`": "Pour la liste complète des raccourcis disponibles, tapez `help keymap`",
|
||||
"Force path style": "Forcer le style de chemin",
|
||||
"Forward": "Vers l'avant",
|
||||
"Found: %d.": "Trouvés : %d.",
|
||||
"FTS enabled: %d": "FTS activé : %d",
|
||||
"Full changelog": "Changements complets",
|
||||
"General": "Général",
|
||||
"Generated": "Généré",
|
||||
"Generating link...": "Génération des liens…",
|
||||
"Get it now:": "L'obtenir maintenant :",
|
||||
"Get pre-releases when checking for updates": "Recevoir les pré‑release lors de la vérification des mises à jour",
|
||||
@@ -340,13 +352,17 @@
|
||||
"Goto Anything...": "Navigation rapide…",
|
||||
"Grant authorisation": "Autoriser",
|
||||
"Heading": "Titre",
|
||||
"Help": "Aide",
|
||||
"Hide %s": "Cacher %s",
|
||||
"Hide disabled keys": "Cacher les clefs désactivées",
|
||||
"Hide Joplin": "Cacher Joplin",
|
||||
"Highlight": "Surligner",
|
||||
"Home": "Accueil",
|
||||
"Horizontal Rule": "Règle horizontale",
|
||||
"HTML Directory": "Dossier de fichiers HTML",
|
||||
"HTML File": "Fichier HTML",
|
||||
"Hyperlink": "Lien",
|
||||
"Icon": "Icône",
|
||||
"ID": "ID",
|
||||
"Idle": "Arrêté",
|
||||
"Ignore": "Ignorer",
|
||||
@@ -379,8 +395,10 @@
|
||||
"Invalid answer: %s": "Réponse invalide : %s",
|
||||
"Invalid command: \"%s\"": "Commande invalide : \"%s\"",
|
||||
"Invalid option value: \"%s\". Possible values are: %s.": "Option invalide: \"%s\". Les valeurs possibles sont : %s.",
|
||||
"Invalid password": "Mot de passe invalide",
|
||||
"Italic": "Italique",
|
||||
"Item \"%s\" could not be downloaded: %s": "L'objet \"%s\" n'a pas pu être téléchargé : %s",
|
||||
"Items": "Objets",
|
||||
"Items that cannot be decrypted": "Objets qui ne peuvent pas être déchiffrés",
|
||||
"Items that cannot be synchronised": "Objets qui ne peuvent pas être synchronisés",
|
||||
"Joplin can synchronise your notes using various providers. Select one from the list below.": "Joplin peut synchroniser vos notes grâce à divers fournisseurs. Sélectionnez‑en un dans la liste ci‑dessous.",
|
||||
@@ -403,12 +421,14 @@
|
||||
"Keyboard Shortcut": "Raccourci",
|
||||
"Keyboard Shortcuts": "Raccourcis clavier",
|
||||
"Keychain Supported: %s": "Trousseau supporté : %s",
|
||||
"Keys that need upgrading": "Clefs qui peuvent être mise à niveau",
|
||||
"Landscape": "Paysage",
|
||||
"Language": "Langue",
|
||||
"Last error: %s": "Dernière erreur : %s",
|
||||
"Later": "Plus tard",
|
||||
"Layout": "Disposition",
|
||||
"Layout button sequence": "Ordre des actions du bouton de disposition",
|
||||
"Leave notebook...": "Quitter le carnet partagé…",
|
||||
"Legal": "Légal",
|
||||
"Letter": "Lettre",
|
||||
"Light": "Clair",
|
||||
@@ -424,10 +444,15 @@
|
||||
"Login below.": "Connexion ci‑dessous.",
|
||||
"Login with Dropbox": "Se connecter à Dropbox",
|
||||
"Login with OneDrive": "Se connecter à OneDrive",
|
||||
"Logout": "Se déconnecter",
|
||||
"Make a donation": "Faire un don",
|
||||
"Manage master password": "Gestion du mot de passe maître",
|
||||
"Manage master password...": "Gestion du mot de passe maître...",
|
||||
"Manage your plugins": "Gérer vos modules",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont `enable`, `disable`, `decrypt` et `status`, `decrypt-file` et `target-status`.",
|
||||
"Manual": "Manuel",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + Front Matter",
|
||||
"Marks a to-do as done.": "Marquer la tâche comme complétée.",
|
||||
"Marks a to-do as non-completed.": "Marquer une tâche comme non‑complétée.",
|
||||
"Markup": "Langage de balisage",
|
||||
@@ -435,6 +460,7 @@
|
||||
"Master password": "Mot de passe maître",
|
||||
"Master password:": "Mot de passe maître :",
|
||||
"Max concurrent connections": "Nombre maxi de connections simultanées",
|
||||
"Missing keys": "Clefs manquantes",
|
||||
"Missing Master Keys": "Clefs maître manquantes",
|
||||
"Missing required argument: %s": "Paramètre requis manquant : %s",
|
||||
"Mobile data - auto-sync disabled": "Données mobiles – sync auto désactivé",
|
||||
@@ -475,6 +501,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "Non‑connecté à %s. Veuillez fournir les identifiants et mots de passe manquants.",
|
||||
"Not downloaded": "Non téléchargé",
|
||||
"Not generated": "Non-généré",
|
||||
"note": "note",
|
||||
"Note": "Note",
|
||||
"Note area growth factor": "Facteur de croissance de la zone de la note",
|
||||
@@ -492,11 +519,13 @@
|
||||
"Note&book": "Carnet",
|
||||
"Note: Does not work in all desktop environments.": "Note : Ne fonctionne pas dans tous les environnements de bureau.",
|
||||
"Note: When a note is shared, it will no longer be encrypted on the server.": "Note : Lorsqu'une note est partagée, elle ne sera plus chiffrée sur le serveur.",
|
||||
"Notebook": "Carnet",
|
||||
"Notebook list growth factor": "Facteur de croissance de la liste de carnets",
|
||||
"Notebook title:": "Titre du carnet :",
|
||||
"Notebook: %s": "Carnet : %s",
|
||||
"Notebooks": "Carnets",
|
||||
"Notebooks cannot be named \"%s\", which is a reserved title.": "Les carnets ne peuvent être nommés \"%s\" car c'est un nom réservé.",
|
||||
"Notes": "Notes",
|
||||
"Notes and settings are stored in: %s": "Les notes et paramètres se trouve dans : %s",
|
||||
"Notes can only be created within a notebook.": "Les notes ne peuvent être créées que dans un carnet.",
|
||||
"Numbered List": "Liste numérotée",
|
||||
@@ -529,8 +558,10 @@
|
||||
"PDF File": "Fichier PDF",
|
||||
"Permission needed": "Permission requise",
|
||||
"Permission to use camera": "Permission d'utiliser l'appareil photo",
|
||||
"Please click on \"%s\" to proceed": "Veuillez cliquer sur \"%s\" pour continuer",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "Veuillez confirmer que vous souhaitez ré‑encrypter la base de données complète.",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "Veuillez entrer le mot de passe de la clef maître ci‑dessous avant de mettre la clef à niveau.",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "Veuillez noter que les carnets de grande taille peuvent mettre plusieurs minutes pour que toutes les notes apparaissent sur l'appareil du destinataire.",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "Veuillez ouvrir le lien ci‑dessous dans votre navigateur pour authentifier le logiciel. Joplin va créer un répertoire \"Apps/Joplin\" et lire/écrira des fichiers uniquement dans ce répertoire. Le logiciel n'aura pas d'accès à aucun fichier en dehors de ce répertoire, ni à d'autres données personnelles. Aucune donnée ne sera partagé avec aucun tier.",
|
||||
"Please select a notebook first.": "Veuillez d'abord sélectionner un carnet.",
|
||||
"Please select the note or notebook to be deleted first.": "Veuillez d'abord sélectionner un carnet.",
|
||||
@@ -558,6 +589,7 @@
|
||||
"Privacy Policy": "Politique de confidentialité",
|
||||
"Profile Version: %s": "Version du profil : %s",
|
||||
"Properties": "Propriétés",
|
||||
"Public-private key pair:": "Paire de clefs publiques privées :",
|
||||
"Publish note...": "Publier la note…",
|
||||
"Publish Notes": "Publier des notes",
|
||||
"Publish notes to the internet": "Publier les notes sur Internet",
|
||||
@@ -582,6 +614,7 @@
|
||||
"Rename tag:": "Renommer étiquette :",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "Renommer l'objet <item> (note ou carnet) en <name>.",
|
||||
"Renew token": "Renouveler le code",
|
||||
"Reset master password": "Réinitialiser le mot de passe maître",
|
||||
"Resources: %d.": "Ressources : %d.",
|
||||
"Restart and upgrade": "Redémarrer et mettre à jour",
|
||||
"Restart now": "Redémarrer maintenant",
|
||||
@@ -594,6 +627,7 @@
|
||||
"Reverses the sorting order.": "Inverser l'ordre.",
|
||||
"Revision: %s (%s)": "Révision : %s (%s)",
|
||||
"Runs the commands contained in the text file. There should be one command per line.": "Exécute les commandes contenues dans le fichier texte. Il doit y avoir une commande par ligne.",
|
||||
"S3": "S3",
|
||||
"Safe mode is currently active. Note rendering and all plugins are temporarily disabled.": "Le mode sans échec est actif. Le rendu des notes et les modules sont temporairement désactivés.",
|
||||
"Save": "Enregistrer",
|
||||
"Save alarm": "Enregistrer alarme",
|
||||
@@ -615,6 +649,7 @@
|
||||
"Server is running on port %d": "Le serveur tourne sur le port %d",
|
||||
"Set alarm": "Régler alarme",
|
||||
"Set alarm:": "Régler alarme :",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "Choisissez 0 pour que la totalité de l'espace disponible soit utilisé. La largeur recommandée est 600.",
|
||||
"Set the password": "Définir le mot de passe",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "Assigner la valeur [value] à la propriété <name> de la <note> donnée. Les valeurs possibles sont :\n\n%s",
|
||||
"Share": "Partager",
|
||||
@@ -625,7 +660,9 @@
|
||||
"Show Advanced Settings": "Montrer options avancées",
|
||||
"Show all": "Afficher tous",
|
||||
"Show completed to-dos": "Afficher les tâches complétées",
|
||||
"Show disabled keys": "Afficher les clefs désactivées",
|
||||
"Show note counts": "Afficher le compte des notes",
|
||||
"Show sort order buttons": "Afficher les boutons pour trier les notes",
|
||||
"Show tray icon": "Afficher l'icône dans la zone de notifications",
|
||||
"Sidebar": "Barre latérale",
|
||||
"Size": "Taille",
|
||||
@@ -696,6 +733,7 @@
|
||||
"Tagged: %d.": "Étiquettes : %d.",
|
||||
"Tags": "Étiquettes",
|
||||
"Take photo": "Prendre une photo",
|
||||
"Tasks": "Tâches",
|
||||
"Text editor command": "Commande de l'éditeur de texte",
|
||||
"Thank you! Your Joplin Cloud account is now setup and ready to use.": "Merci ! Votre compte Joplin Cloud est maintenant configuré et prêt à être utilisé.",
|
||||
"The app is now going to close. Please relaunch it to complete the process.": "L'application va maintenant se fermer. Veuillez la relancer pour terminer l'opération.",
|
||||
@@ -711,15 +749,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "La commande de l'éditeur de texte (peut inclure des options) pour ouvrir et modifier les notes. Si non‑spécifiée, elle sera détectée automatiquement.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Le facteur de croissance détermine la façon dont la taille des composants se réduit ou augmente par rapport aux autres composants. Ainsi un composant avec un facteur de 2 prendra deux fois plus de place qu'un composant avec un facteur de 1. Veuillez redémarrer l'application pour appliquer les changements.",
|
||||
"The following attachments are being watched for changes:": "Les changements sur les éléments suivants sont monitorés :",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "Les clefs suivantes utilisent un algorithme de chiffrement obsolète, et il est recommandé de les mettre à niveau. Les clefs mise à niveau pourront continuer à chiffrer et à déchiffrer vos données comme d'habitude.",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "L'application mobile Joplin ne gère pas pour l'instant ce type de lien : %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "L'équipe Joplin a approuvé ce plugin qui respecte nos spécifications en matière de sécurité et de performance.",
|
||||
"The 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.": "Les clefs avec ces identifiants sont utilisées pour chiffrer certains de vos objets, cependant le logiciel n'y a pour l'instant pas accès. Il est probable qu'elle vont être prochainement disponible via la synchronisation.",
|
||||
"The master key has been upgraded successfully!": "La clef maître a été mise à niveau avec succès !",
|
||||
"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.": "Les clefs maître avec ces identifiants sont utilisées pour chiffrer certains de vos objets, cependant le logiciel n'y a pour l'instant pas accès. Il est probable qu'elle vont être prochainement disponible via la synchronisation.",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "La note \"%s\" a été restaurée dans le carnet \"%s\".",
|
||||
"The notebook could not be saved: %s": "Ce carnet n'a pas pu être sauvegardé : %s",
|
||||
"The notes have been imported: %s": "Les notes ont été importées : %s",
|
||||
"The possible commands are:": "Les commandes possibles sont :",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "Le destinataire n'a pas pu être supprimé de la liste. Veuillez réessayer.\n\nL'erreur était : \"%s\"",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "La cible de synchronisation doit être mise à jour. L'opération peut prendre plusieurs minutes et l'application devra être re‑démarrée. Pour continuer, veuillez cliquer sur le lien.",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "La cible de synchronisation doit être mise à jour. Appuyer sur la bannière pour commencer.",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "L'étiquette \"%s\" existe déjà. Veuillez choisir un autre nom.",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "La cible avec laquelle synchroniser. Chaque cible de synchronisation peut avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés ci‑dessous).",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Le Web Clipper requiert votre autorisation pour accéder à vos données.",
|
||||
@@ -746,10 +788,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "Le service permet au module complémentaire de communiquer avec Joplin. Lorsque vous aller l'activer, il se pourrait que votre pare feu vous demande d'autoriser l'application Joplin.",
|
||||
"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.": "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.",
|
||||
"This will open a new screen. Save your current changes?": "Sauvegarder vos changements avant de continuer ?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "Cela enlèvera le carnet de votre collection et vous n'aurez plus accès à son contenu. Souhaitez vous continuer ?",
|
||||
"Time format": "Format de l'heure",
|
||||
"title": "titre",
|
||||
"Title": "Titre",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "Pour permettre à Joplin de synchroniser avec Dropbox, veuillez suivre les étapes ci‑dessous :",
|
||||
"To continue, please enter your master password below.": "Pour continuer, entrez le mot de passe maître ci-dessous.",
|
||||
"To delete a tag, untag the associated notes.": "Pour supprimer une vignette, enlever là des notes associées.",
|
||||
"To delete: %d": "À supprimer : %d",
|
||||
"To enter command line mode, press \":\"": "Pour démarrer le mode ligne de commande, pressez \":\"",
|
||||
@@ -766,8 +810,10 @@
|
||||
"Toggle editors": "Basculer l'éditeur",
|
||||
"Toggle external editing": "Basculer l'édition externe",
|
||||
"Toggle note list": "Basculer liste de notes",
|
||||
"Toggle own sort order": "Utiliser le tri personaliser",
|
||||
"Toggle safe mode": "Basculer le mode sans échec",
|
||||
"Toggle sidebar": "Basculer barre latérale",
|
||||
"Toggle sort order field": "Basculer le champ d'ordre de tri",
|
||||
"Token has been copied to the clipboard!": "Le code d'authentification a été copié dans le presse‑papiers !",
|
||||
"Tools": "Outils",
|
||||
"Total: %d/%d": "Total : %d/%d",
|
||||
@@ -790,8 +836,8 @@
|
||||
"Update": "Mettre à jour",
|
||||
"Updated": "Mis à jour",
|
||||
"updated date": "date de modification",
|
||||
"Updated local items: %d.": "Objets mis à jour localement : %d.",
|
||||
"Updated remote items: %d.": "Objets distants mis à jour : %d.",
|
||||
"Updated local items: %d.": "Objets màj localement : %d.",
|
||||
"Updated remote items: %d.": "Objets distants màj : %d.",
|
||||
"Updated: ": "Mis à jour : ",
|
||||
"Updated: %d.": "Mis à jour : %d.",
|
||||
"Updated: %s": "Mis à jour : %s",
|
||||
@@ -807,6 +853,7 @@
|
||||
"Use this to rebuild the search index if there is a problem with search. It may take a long time depending on the number of notes.": "Utilisez ceci pour corriger l'index du moteur de recherche en cas de problème. Cela peut prendre longtemps selon le nombre de notes.",
|
||||
"Used for most text in the markdown editor. If not found, a generic proportional (variable width) font is used.": "Utilisée pour la plupart du texte de l'éditeur Markdown. Par défaut, une police proportionnelle sera utilisée.",
|
||||
"Used where a fixed width font is needed to lay out text legibly (e.g. tables, checkboxes, code). If not found, a generic monospace (fixed width) font is used.": "Utilisée lorsque une police à taille fixe est nécessaire pour afficher le texte de façon lisible (par ex. pour les tables, code source, etc.).",
|
||||
"Users": "Utilisateurs",
|
||||
"Valid": "Valide",
|
||||
"View": "Affichage",
|
||||
"View on map": "Voir sur carte",
|
||||
@@ -836,6 +883,8 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "Vous pouvez utiliser l'outil ci‑dessous pour re‑chiffrer vos données, par exemple si vous savez que certaines de vos notes sont chiffrées avec une méthode de chiffrage obsolète.",
|
||||
"Your choice: ": "Votre choix : ",
|
||||
"Your data is going to be re-encrypted and synced again.": "Vos données vont être chiffrées et synchronisées à nouveau.",
|
||||
"Your master password is needed to decrypt some of your data.": "Votre mot de passe maître est requis pour déchiffrer une partie de vos données.",
|
||||
"Your password is needed to decrypt some of your data. Type `:e2ee decrypt` to set it.": "Votre mot de passe maître est requis pour déchiffrer une partie de vos données. Tapez `:e2ee decrypt` pour entrer le mot de passe.",
|
||||
"Your permission to use your camera is required.": "Votre permission est requise pour utiliser l'appareil photo.",
|
||||
"Your version: %s": "Votre version : %s",
|
||||
"Zoom In": "Zoom avant",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Automatski uskladi zagrade, navodnike itd.",
|
||||
"Automatically switch theme to match system theme": "Automatski promijeni temu na temu sustava",
|
||||
"Automatically update the application": "Automatski aktualiziraj program",
|
||||
"AWS key": "AWS ključ",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS tajna",
|
||||
"Back": "Natrag",
|
||||
"Bold": "Podebljano",
|
||||
"Browse all plugins": "Pregledaj sve dodatke",
|
||||
@@ -106,6 +101,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Nije moguće aktualizirati ključ: nedostaju podaci za autentifikaciju. Ponovno pokretanje sinkronizacije može ispraviti problem.",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "Nije moguće spremiti %s „%s\\” jer je veći od dozvoljene granice (%s)",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "Nije moguće spremiti %s „%s” jer bi se prekoračila ukupna dozvoljena veličina (%s) za ovaj račun",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "Šifriranu bilježnicu nije moguće dijeliti s primateljem %s jer nije omogućio/la obostrano šifriranje. Primatelji to mogu učiniti putem Konfiguracija > Šifriranje.",
|
||||
"Change application layout": "Promijeni raspored programa",
|
||||
"Change language": "Promijeni jezik",
|
||||
"Characters": "Broj znakova",
|
||||
@@ -144,10 +140,12 @@
|
||||
"Conflicted: %d": "S konfliktom: %d",
|
||||
"Conflicts": "Konflikti",
|
||||
"Conflicts (attachments)": "Konflikti (privici)",
|
||||
"Content provided by %s": "Sadržaj pruža %s",
|
||||
"Convert to note": "Pretvori u bilješku",
|
||||
"Convert to todo": "Pretvori u zadatak",
|
||||
"Copy": "Kopiraj",
|
||||
"Copy dev mode command to clipboard": "Kopiraj programersku naredbu u međuspremnik",
|
||||
"Copy external link": "Kopiraj vanjsku poveznicu",
|
||||
"Copy Link Address": "Kopiraj adresu poveznice",
|
||||
"Copy Markdown link": "Kopiraj Markdown poveznicu",
|
||||
"Copy path to clipboard": "Kopiraj putanju u međuspremnik",
|
||||
@@ -158,6 +156,7 @@
|
||||
"Could not connect to plugin repository.": "Neuspjelo povezivanje s repozitorijem dodataka.",
|
||||
"Could not export notes: %s": "Neuspio izvoz bilježaka: %s",
|
||||
"Could not install plugin: %s": "Neuspjelo instaliranje dodatka: %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "Nije bilo moguće odgovoriti na poziv. Pokušaj ponovo ili provjeri s vlasnikom prijenosnog računala ako ga još uvijek dijele.\n\nGreška je bila: „% s”",
|
||||
"Could not upgrade master key: %s": "Neuspjela nadogradnja glavnog ključa: %s",
|
||||
"Create a notebook": "Stvori bilježnicu",
|
||||
"Created": "Stvoreno",
|
||||
@@ -229,6 +228,7 @@
|
||||
"Displays version information": "Prikazuje podatke verzije",
|
||||
"Do it now": "Odradi sada",
|
||||
"Do not ask for confirmation.": "Nemoj zatražiti potvrdu.",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "Nemoj izgubiti lozinku, jer će to iz sigurnosnih razloga biti *jedini* način za dešifriranje podataka! Za aktiviranje šifriranja dolje upiši svoju lozinku.",
|
||||
"Download": "Preuzmi",
|
||||
"Download and install the relevant extension for your browser:": "Preuzmi i instaliraj odgovarajuće proširenje za tvoj preglednik:",
|
||||
"Downloaded": "Preuzeto",
|
||||
@@ -280,12 +280,16 @@
|
||||
"Enable Web Clipper Service": "Aktiviraj Web Clipper uslugu",
|
||||
"Enable ~sub~ syntax": "Aktiviraj sintaksu za indeks ~sub~",
|
||||
"Enabled": "Aktivirano",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "Aktiviranje šifriranja znači, da će se *sve* tvoje bilješke i privici ponovo sinkronizirati i poslati šifrirano u cilj sinkronizacije.",
|
||||
"Encrypted": "Šifrirano",
|
||||
"Encrypted items cannot be modified": "Šifrirani elementi se ne mogu promijeniti",
|
||||
"Encrypted notebooks cannot be renamed": "Šifrirane bilježnice se ne mogu preimenovati",
|
||||
"Encryption": "Šifriranje",
|
||||
"Encryption Config": "Konfiguracija šifriranja",
|
||||
"Encryption is: %s": "Šifriranje je: %s",
|
||||
"Encryption keys": "Ključevi šifriranja",
|
||||
"Encryption:": "Šifriranje:",
|
||||
"End-to-end encryption": "Obostrano šifriranje",
|
||||
"Enter code here": "Ovdje upiši kod",
|
||||
"Enter master password:": "Upiši glavnu lozinku:",
|
||||
"Enter notebook title": "Upiši naslov bilježnice",
|
||||
@@ -294,6 +298,7 @@
|
||||
"Error opening note in editor: %s": "Greška prilikom otvaranja bilješke u uređivaču: %s",
|
||||
"Error. Please check that URL, username, password, etc. are correct and that the sync target is accessible. The reported error was:": "Greška. Provjeri točnost URL-a, korisničko imena, lozinke itd. kao i dostupnost cilja sinkronizacije. Prijavljena greška bila je:",
|
||||
"Error: %s": "Greška: %s",
|
||||
"Errors only": "Samo greške",
|
||||
"Evernote Export File (as HTML)": "Evernote datoteka izvoza (kao HTML)",
|
||||
"Evernote Export File (as Markdown)": "Evernote datoteka izvoza (kao Markdown)",
|
||||
"Exits the application.": "Zatvara program.",
|
||||
@@ -331,6 +336,7 @@
|
||||
"FTS enabled: %d": "Pretraživanje cijelog teksta je aktivirano: %d",
|
||||
"Full changelog": "Potpuni dnevnik promjena",
|
||||
"General": "Opće",
|
||||
"Generated": "Izrađeno",
|
||||
"Generating link...": "Generiranje poveznice …",
|
||||
"Get it now:": "Nabavi sada:",
|
||||
"Get pre-releases when checking for updates": "Preuzmi predizdanja prilikom traženja novih verzija",
|
||||
@@ -340,6 +346,7 @@
|
||||
"Grant authorisation": "Odobri autorizaciju",
|
||||
"Heading": "Naslov",
|
||||
"Hide %s": "Sakrij %s",
|
||||
"Hide disabled keys": "Sakrij deaktivirane ključeve",
|
||||
"Hide Joplin": "Sakrij Joplin",
|
||||
"Highlight": "Istaknuto",
|
||||
"Horizontal Rule": "Vodoravna crta",
|
||||
@@ -402,12 +409,14 @@
|
||||
"Keyboard Shortcut": "Tipkovni prečaci",
|
||||
"Keyboard Shortcuts": "Tipkovni prečaci",
|
||||
"Keychain Supported: %s": "Podržani privjesak ključeva: %s",
|
||||
"Keys that need upgrading": "Ključevi koji se moraju nadograditi",
|
||||
"Landscape": "Ležeći",
|
||||
"Language": "Jezik",
|
||||
"Last error: %s": "Zadnja greška: %s",
|
||||
"Later": "Kasnije",
|
||||
"Layout": "Raspored",
|
||||
"Layout button sequence": "Slijed gumbova rasporeda",
|
||||
"Leave notebook...": "Napusti bilježnicu …",
|
||||
"Legal": "Legal",
|
||||
"Letter": "Letter",
|
||||
"Light": "Svijetla",
|
||||
@@ -424,9 +433,13 @@
|
||||
"Login with Dropbox": "Prijavi se s Dropbox",
|
||||
"Login with OneDrive": "Prijavi se s OneDrive",
|
||||
"Make a donation": "Doniraj",
|
||||
"Manage master password": "Upravjaj glavnom lozinkom",
|
||||
"Manage master password...": "Upravjaj glavnom lozinkom …",
|
||||
"Manage your plugins": "Upravljaj dodacima",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "Upravlja E2EE konfiguracijom. Naredbe su `enable` (aktiviraj), `disable` (deaktiviraj), `decrypt` (dešifriraj), `status` (stanje), `decrypt-file` (dešifriraj datoteku) i `target-status` (stanje cilja).",
|
||||
"Manual": "Ručno",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + Front Matter",
|
||||
"Marks a to-do as done.": "Označava zadatak završenim.",
|
||||
"Marks a to-do as non-completed.": "Označava zadatak kao nezavršen.",
|
||||
"Markup": "Označavanje",
|
||||
@@ -434,13 +447,14 @@
|
||||
"Master password": "Glavna lozinka",
|
||||
"Master password:": "Glavna lozinka:",
|
||||
"Max concurrent connections": "Najviše istovremenih veza",
|
||||
"Missing keys": "Nedostajući ključevi",
|
||||
"Missing Master Keys": "Nedostaje glavni ključ",
|
||||
"Missing required argument: %s": "Nedostaje obavezni argument: %s",
|
||||
"Mobile data - auto-sync disabled": "Podaci mobitela – automatska sinkronizacija je deaktivirana",
|
||||
"More info": "Daljnje informacije",
|
||||
"More information": "Daljnje informacije",
|
||||
"More than one item match \"%s\". Please narrow down your query.": "Više elemenata se poklapaju s „%s”. Ograniči pretragu.",
|
||||
"Move %d notes to notebook \"%s\"?": "Premjesti %d bilješke u bilježnicu \"%s\"?",
|
||||
"Move %d notes to notebook \"%s\"?": "Premjesti %d bilješke u bilježnicu „%s”?",
|
||||
"Move to notebook": "Premjesti u bilježnicu",
|
||||
"Move to notebook...": "Premjesti u bilježnicu...",
|
||||
"Move to notebook:": "Premjesti u bilježnicu:",
|
||||
@@ -474,6 +488,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "Nije autentificirano s %s. Upiši sve nedostajuće podatke za prijavu.",
|
||||
"Not downloaded": "Nepreuzeto",
|
||||
"Not generated": "Nije izrađeno",
|
||||
"note": "bilješka",
|
||||
"Note": "Bilješka",
|
||||
"Note area growth factor": "Faktor povećanja područja bilježaka",
|
||||
@@ -482,8 +497,8 @@
|
||||
"Note body": "Sadržaj bilješke",
|
||||
"Note does not exist: \"%s\". Create it?": "Bilješka ne postoji: „%s”. Želiš li je stvoriti?",
|
||||
"Note has been saved.": "Bilješka je spremljena.",
|
||||
"Note History": "Povijest bilješke",
|
||||
"Note is not a to-do: \"%s\"": "Bilješka nije zadatak: \"%s\"",
|
||||
"Note History": "Povijest bilježaka",
|
||||
"Note is not a to-do: \"%s\"": "Bilješka nije zadatak: „%s”",
|
||||
"Note list": "Popis bilježaka",
|
||||
"Note list growth factor": "Faktor povećanja popisa bilježaka",
|
||||
"Note properties": "Svojstva bilješke",
|
||||
@@ -528,8 +543,10 @@
|
||||
"PDF File": "PDF datoteka",
|
||||
"Permission needed": "Potrebna je dozvola",
|
||||
"Permission to use camera": "Dozvola za korištenje kamere",
|
||||
"Please click on \"%s\" to proceed": "Za nastavljanje pritisni „%s”",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "Potvrdi da želiš ponovo šifrirati tvoju cijelu bazu podataka.",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "Upiši lozinku u donji popis glavnih ključeva prije nadograđivanja ključa.",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "Imaj na umu, da ako je velika bilježnica, može potrajati nekoliko minuta dok se sve bilješke pojave na uređaju primatelja.",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "Otvori sljedeći URL u pregledniku za autentificiranje programa. Program će stvoriti mapu u „Aplikacije/Joplin” i koristit će je samo za čitanje i pisanje. Program neće moći pristupiti datotekama izvan ove mape niti bilo kojim drugim osobnim podacima. Nikoji podaci se neće dijeliti s drugima.",
|
||||
"Please select a notebook first.": "Odaberi bilježnicu.",
|
||||
"Please select the note or notebook to be deleted first.": "Najprije odaberi bilješku ili bilježnicu za brisanje.",
|
||||
@@ -551,11 +568,13 @@
|
||||
"Press Ctrl+D or type \"exit\" to exit the application": "Zatvori program pomoću prečaca Ctrl+D ili upiši „exit”",
|
||||
"Press the shortcut": "Pritisni prečac",
|
||||
"Press the shortcut and then press ENTER. Or, press BACKSPACE to clear the shortcut.": "Pritisni prečac i zatim pritisni ENTER. Ili pritisni BACKSPACE za brisanje prečaca.",
|
||||
"Press to set the decryption password.": "Pritisni za postavljanje lozinke za dešifriranje.",
|
||||
"Previous versions of this note": "Prethodne verzije ove bilješke",
|
||||
"Print": "Ispiši",
|
||||
"Privacy Policy": "Politika privatnosti",
|
||||
"Profile Version: %s": "Verzija profila: %s",
|
||||
"Properties": "Svojstva",
|
||||
"Public-private key pair:": "Javno-privatan par ključa:",
|
||||
"Publish note...": "Objavi bilješku …",
|
||||
"Publish Notes": "Objavi bilješke",
|
||||
"Publish notes to the internet": "Objavi blješke na internetu",
|
||||
@@ -580,6 +599,7 @@
|
||||
"Rename tag:": "Preimenuj oznaku:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "Preimenuje zadani element <item> (bilješka ili bilježnica) u ime <name>.",
|
||||
"Renew token": "Obnovi ključ",
|
||||
"Reset master password": "Obnovi glavnu lozinku",
|
||||
"Resources: %d.": "Resursi: %d.",
|
||||
"Restart and upgrade": "Pokreni ponovo i nadogradi",
|
||||
"Restart now": "Pokreni ponovo",
|
||||
@@ -613,6 +633,7 @@
|
||||
"Server is running on port %d": "Poslužitelj se pokreće na priključku %d",
|
||||
"Set alarm": "Postavi upozorenje",
|
||||
"Set alarm:": "Postavi upozorenje:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "Postavi na 0 kako bi zauzeo cijeli raspoloživi prostor. Preporučena širina je 600.",
|
||||
"Set the password": "Postavi lozinku",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "Postavlja svojstvo imena <name> zadane bilješke <note> na zadanu vrijednost [value]. Moguća svojstva su:\n\n%s",
|
||||
"Share": "Dijeli",
|
||||
@@ -621,7 +642,9 @@
|
||||
"Sharing notebook...": "Dijeljenje bilježnice …",
|
||||
"Shortcuts are not available in CLI mode.": "Prečaci nisu podržani u naredbenom retku.",
|
||||
"Show Advanced Settings": "Prikaži napredne postavke",
|
||||
"Show all": "Prikaži sve",
|
||||
"Show completed to-dos": "Prikaži završene zadatke",
|
||||
"Show disabled keys": "Prikaži deaktivirane ključeve",
|
||||
"Show note counts": "Prikaži broj bilježaka",
|
||||
"Show tray icon": "Prikaži ikonu u programskoj traci",
|
||||
"Sidebar": "Bočna traka",
|
||||
@@ -633,6 +656,7 @@
|
||||
"Solarised Light": "Solarno svijetla",
|
||||
"Some items cannot be decrypted.": "Neki se elementi ne mogu dešifrirati.",
|
||||
"Some items cannot be synchronised.": "Neki se elementi ne mogu sinkronizirati.",
|
||||
"Some items cannot be synchronised. Press for more info.": "Neki elementi se ne mogu sinkronizirati. Pritisni za daljnje inormacije.",
|
||||
"Sort notebooks by": "Razvrstaj bilježnice po",
|
||||
"Sort notes by": "Razvrstaj bilješke po",
|
||||
"Sort selected lines": "Razvrstaj odabrane retke",
|
||||
@@ -707,15 +731,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "Naredba za uređivača teksta (može sadržati argumente) koji će se koristiti za otvaranje bilješke. Ako se ne zada, program će pokušati automatski otkriti standardni uređivač.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Faktorom se određuje povećanje ili smanjenje elementa, kako bi se smjestio u raspoloživ prostor kontejnera u odnosu na ostale elemente. To znači, da će element s faktorom 2 zauzeti dvostruko više prostora od elementa s faktorom 1. Za prikaz promjena ponovo pokreni program.",
|
||||
"The following attachments are being watched for changes:": "Promjene se prate za sljedeće privitke:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "Sljedeći glavni ključevi koriste zastarjeli algoritam šifriranja i preporučujemo da ih nadogradiš. Nadograđeni ključ će i nadalje moći dešifrirati i šifrirati tvoje podatke.",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Joplin program za mobilne uređaje trenutačno ne podržava ovu vrstu poveznice: %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Joplin tim je provjerio ovaj dodatak i on zadovoljava naše standarde za sigurnost i performansu.",
|
||||
"The 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.": "Ključevi s ovim ID-ovima koriste se za šifriranje nekih tvojih elemenata, ali program im trenutačno ne može pristupiti. Vjerojatno će se na kraju preuzeti putem sinkronizacije.",
|
||||
"The master key has been upgraded successfully!": "Glavni ključ je uspješno nadograđen!",
|
||||
"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.": "Glavni ključevi s tim ID-ovima koriste se za šifriranje nekih tvojih elemenata, ali program im trenutačno ne može pristupiti. Vjerojatno će se na kraju preuzeti putem sinkronizacije.",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "Bilješka „%s” je uspješno obnovljena u bilježnicu „%s”.",
|
||||
"The notebook could not be saved: %s": "Bilježnica se ne može spremiti: %s",
|
||||
"The notes have been imported: %s": "Bilješke su uvezene: %s",
|
||||
"The possible commands are:": "Moguće naredbe su:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "Primatelj/ica se ne može ukloniti s popisa. Pokušaj ponovo.\n\nGreška je bila: „% s”",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "Da bi Joplin mogao sinkronizirati, najprije se mora nadograditi cilj sinkronizacije. Postupak može potrajati nekoliko minuta, a nakon toga se program mora ponovo pokrenuti. Za nastavak pritisni poveznicu.",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "Cilj sinkronizacije se mora nadograditi. Za nastavljanje, pritisni ovaj naslov.",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "Oznaka „%s” već postoji. Odaberi jedno drugo ime.",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "Cilj za sinkronizaciju. Svaki cilj sinkronizacije može imati dodatne parametre koji se zovu `sync.NUM.NAME` (niže dolje dokumentirani).",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Web Clipper treba tvoju autorizaciju za pristup podacima.",
|
||||
@@ -742,10 +770,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "Ova usluga omogućuje komunikaciju proširenja preglednika s Joplinom. Kad je aktiviraš, možda ćeš u vatrozidu morati dozvoliti Joplinu pristup određenom priključku.",
|
||||
"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.": "Ovo će omogućiti Joplinu da radi u pozadini. Preporučujemo aktivirati ovu postavku. Time se bilješke neprestano sinkroniziraju, što smanjuje broj konflikata.",
|
||||
"This will open a new screen. Save your current changes?": "Ovo će otvoriti novi prozor. Želiš li spremiti tvoje trenutačne promjene?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "Ovime će se ukloniti bilježnica iz tvoje zbirke i više nećeš imati pristup sadržaju bilježnice. Želiš li nastaviti?",
|
||||
"Time format": "Format vremena",
|
||||
"title": "naslov",
|
||||
"Title": "Naslov",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "Za sinkronizaciju Joplina s Dropboxom slijedi sljedeće korake:",
|
||||
"To continue, please enter your master password below.": "Za nastavljanje, dolje upiši glavnu lozinku.",
|
||||
"To delete a tag, untag the associated notes.": "Za brisanje oznake, ukloni oznaku s povezanih bilježaka.",
|
||||
"To delete: %d": "Za brisanje: %d",
|
||||
"To enter command line mode, press \":\"": "Za otvaranje naredbenog retka, pritisni „:”",
|
||||
@@ -832,6 +862,7 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "Za ponovno šifriranje tvojih podataka koristi dolje navedeni alat, na primjer kad znaš da su neke tvoje bilješke šifrirane zastarjelom metodom šifriranja.",
|
||||
"Your choice: ": "Tvoj izbor: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "Tvoji će se podaci ponovo šifrirati i sinkronizirati.",
|
||||
"Your master password is needed to decrypt some of your data.": "Tvoja glavna lozinka je potrebna za dešifriranje nekih tvojih podataka.",
|
||||
"Your permission to use your camera is required.": "Za korištenje kamere potrebna je tvoja dozvola.",
|
||||
"Your version: %s": "Tvoja verzija: %s",
|
||||
"Zoom In": "Uvećaj",
|
||||
|
@@ -70,11 +70,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Auto-párosítása az idézőjeleknek, zárójeleknek, stb.",
|
||||
"Automatically switch theme to match system theme": "Automatikusan kapcsoljon olyan témára, ami egyezik a rendszer témával",
|
||||
"Automatically update the application": "Automatikusan frissítse az alkalmazást",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Vissza",
|
||||
"Bold": "Félkövér",
|
||||
"Browse all plugins": "Plugin-ok tallózása",
|
||||
@@ -298,6 +293,7 @@
|
||||
"Go to source URL": "Ugrás forrás URL-re",
|
||||
"Goto Anything...": "Ugrás bárhova...",
|
||||
"Heading": "Címsor",
|
||||
"Help": "Segítség",
|
||||
"Hide %s": "%s elrejtése",
|
||||
"Hide Joplin": "Joplin elrejtése",
|
||||
"Horizontal Rule": "Vízszintes vonal",
|
||||
|
@@ -78,11 +78,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Pasangkan secara otomatis kurung kurawal, tanda kurung, kutipan, dll.",
|
||||
"Automatically switch theme to match system theme": "Beralih tema secara otomatis untuk menyesuaikannya dengan tema sistem",
|
||||
"Automatically update the application": "Perbarui aplikasi secara otomatis",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Kembali",
|
||||
"Bold": "Tebal",
|
||||
"Browse all plugins": "Lihat semua plugin",
|
||||
@@ -333,6 +328,7 @@
|
||||
"Goto Anything...": "Pergi ke apa saja...",
|
||||
"Grant authorisation": "Berikan otorisasi",
|
||||
"Heading": "Tajuk",
|
||||
"Help": "Bantuan",
|
||||
"Hide %s": "Sembunyikan %s",
|
||||
"Hide Joplin": "Sembunyikan Joplin",
|
||||
"Highlight": "Sorotan",
|
||||
@@ -340,6 +336,7 @@
|
||||
"HTML Directory": "Direktori HTML",
|
||||
"HTML File": "Berkas HTML",
|
||||
"Hyperlink": "Tautan",
|
||||
"Icon": "Ikon",
|
||||
"ID": "ID",
|
||||
"Idle": "Diam",
|
||||
"Ignore": "Abaikan",
|
||||
|
@@ -41,45 +41,45 @@ locales['uk_UA'] = require('./uk_UA.json');
|
||||
locales['vi'] = require('./vi.json');
|
||||
locales['zh_CN'] = require('./zh_CN.json');
|
||||
locales['zh_TW'] = require('./zh_TW.json');
|
||||
stats['ar'] = {"percentDone":95};
|
||||
stats['ar'] = {"percentDone":93};
|
||||
stats['eu'] = {"percentDone":27};
|
||||
stats['bs_BA'] = {"percentDone":68};
|
||||
stats['bg_BG'] = {"percentDone":54};
|
||||
stats['ca'] = {"percentDone":95};
|
||||
stats['hr_HR'] = {"percentDone":95};
|
||||
stats['cs_CZ'] = {"percentDone":91};
|
||||
stats['da_DK'] = {"percentDone":96};
|
||||
stats['de_DE'] = {"percentDone":96};
|
||||
stats['et_EE'] = {"percentDone":52};
|
||||
stats['bs_BA'] = {"percentDone":67};
|
||||
stats['bg_BG'] = {"percentDone":53};
|
||||
stats['ca'] = {"percentDone":93};
|
||||
stats['hr_HR'] = {"percentDone":97};
|
||||
stats['cs_CZ'] = {"percentDone":89};
|
||||
stats['da_DK'] = {"percentDone":97};
|
||||
stats['de_DE'] = {"percentDone":97};
|
||||
stats['et_EE'] = {"percentDone":51};
|
||||
stats['en_GB'] = {"percentDone":100};
|
||||
stats['en_US'] = {"percentDone":100};
|
||||
stats['es_ES'] = {"percentDone":96};
|
||||
stats['es_ES'] = {"percentDone":93};
|
||||
stats['eo'] = {"percentDone":30};
|
||||
stats['fi_FI'] = {"percentDone":95};
|
||||
stats['fr_FR'] = {"percentDone":96};
|
||||
stats['gl_ES'] = {"percentDone":35};
|
||||
stats['id_ID'] = {"percentDone":94};
|
||||
stats['it_IT'] = {"percentDone":92};
|
||||
stats['hu_HU'] = {"percentDone":80};
|
||||
stats['nl_BE'] = {"percentDone":83};
|
||||
stats['nl_NL'] = {"percentDone":87};
|
||||
stats['nb_NO'] = {"percentDone":93};
|
||||
stats['fa'] = {"percentDone":65};
|
||||
stats['pl_PL'] = {"percentDone":86};
|
||||
stats['pt_BR'] = {"percentDone":96};
|
||||
stats['pt_PT'] = {"percentDone":86};
|
||||
stats['ro'] = {"percentDone":60};
|
||||
stats['sl_SI'] = {"percentDone":96};
|
||||
stats['sv'] = {"percentDone":95};
|
||||
stats['fi_FI'] = {"percentDone":93};
|
||||
stats['fr_FR'] = {"percentDone":100};
|
||||
stats['gl_ES'] = {"percentDone":34};
|
||||
stats['id_ID'] = {"percentDone":92};
|
||||
stats['it_IT'] = {"percentDone":90};
|
||||
stats['hu_HU'] = {"percentDone":78};
|
||||
stats['nl_BE'] = {"percentDone":81};
|
||||
stats['nl_NL'] = {"percentDone":85};
|
||||
stats['nb_NO'] = {"percentDone":90};
|
||||
stats['fa'] = {"percentDone":64};
|
||||
stats['pl_PL'] = {"percentDone":84};
|
||||
stats['pt_BR'] = {"percentDone":94};
|
||||
stats['pt_PT'] = {"percentDone":84};
|
||||
stats['ro'] = {"percentDone":59};
|
||||
stats['sl_SI'] = {"percentDone":93};
|
||||
stats['sv'] = {"percentDone":97};
|
||||
stats['th_TH'] = {"percentDone":43};
|
||||
stats['vi'] = {"percentDone":93};
|
||||
stats['tr_TR'] = {"percentDone":95};
|
||||
stats['uk_UA'] = {"percentDone":85};
|
||||
stats['el_GR'] = {"percentDone":89};
|
||||
stats['ru_RU'] = {"percentDone":95};
|
||||
stats['sr_RS'] = {"percentDone":78};
|
||||
stats['zh_CN'] = {"percentDone":96};
|
||||
stats['zh_TW'] = {"percentDone":92};
|
||||
stats['ja_JP'] = {"percentDone":96};
|
||||
stats['ko'] = {"percentDone":91};
|
||||
stats['vi'] = {"percentDone":90};
|
||||
stats['tr_TR'] = {"percentDone":93};
|
||||
stats['uk_UA'] = {"percentDone":83};
|
||||
stats['el_GR'] = {"percentDone":87};
|
||||
stats['ru_RU'] = {"percentDone":93};
|
||||
stats['sr_RS'] = {"percentDone":76};
|
||||
stats['zh_CN'] = {"percentDone":97};
|
||||
stats['zh_TW'] = {"percentDone":90};
|
||||
stats['ja_JP'] = {"percentDone":98};
|
||||
stats['ko'] = {"percentDone":89};
|
||||
module.exports = { locales: locales, stats: stats };
|
@@ -77,11 +77,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Auto- accoppia parentesi graffe, parentesi, citazione, ecc.",
|
||||
"Automatically switch theme to match system theme": "Usa il tema di sistema",
|
||||
"Automatically update the application": "Aggiorna automaticamente l'applicazione",
|
||||
"AWS key": "Chiave AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "Bucket AWS S3",
|
||||
"AWS S3 URL": "URL AWS S3",
|
||||
"AWS secret": "Secret AWS",
|
||||
"Back": "Indietro",
|
||||
"Bold": "Grassetto",
|
||||
"Browse all plugins": "Sfoglia tutti i plugins",
|
||||
@@ -327,6 +322,7 @@
|
||||
"Goto Anything...": "Cerca ovunque...",
|
||||
"Grant authorisation": "Concedi autorizzazione",
|
||||
"Heading": "Intestazione",
|
||||
"Help": "Aiuto",
|
||||
"Hide %s": "Nascondi %s",
|
||||
"Hide Joplin": "Nascondi Joplin",
|
||||
"Highlight": "Evidenzia",
|
||||
@@ -334,6 +330,7 @@
|
||||
"HTML Directory": "Cartella HTML",
|
||||
"HTML File": "File HTML",
|
||||
"Hyperlink": "Collegamento ipertestuale",
|
||||
"Icon": "Icona",
|
||||
"ID": "ID",
|
||||
"Idle": "Inattivo",
|
||||
"Ignore": "Ignora",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "始めの括弧や引用符入力時に終わりの括弧や引用符を自動入力する。",
|
||||
"Automatically switch theme to match system theme": "システムのテーマにあわせて自動設定",
|
||||
"Automatically update the application": "アプリケーションを自動的にアップデート",
|
||||
"AWS key": "AWS アクセスキーID",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 バケット",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS シークレットアクセスキー",
|
||||
"Back": "戻る",
|
||||
"Bold": "太字",
|
||||
"Browse all plugins": "プラグイン一覧を参照",
|
||||
@@ -106,6 +101,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "トークンの更新ができませんでした。認証データがありません。同期を再度行うことで解決することがあります。",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "%s \"%s\" を保存できません。サイズが上限 (%s) を超えるためです",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "%s \"%s\" を保存できません。このアカウントに許可された合計サイズの上限 (%s) を超えるためです",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "暗号化されたノートブックはエンドツーエンド暗号化を有効にしていない受信者 %s とは共有できません。エンドツーエンド暗号化は設定画面から有効にできます。",
|
||||
"Change application layout": "画面レイアウトをカスタマイズ",
|
||||
"Change language": "言語の切り替え",
|
||||
"Characters": "文字数",
|
||||
@@ -144,10 +140,12 @@
|
||||
"Conflicted: %d": "衝突: %d",
|
||||
"Conflicts": "衝突",
|
||||
"Conflicts (attachments)": "衝突 (添付ファイル)",
|
||||
"Content provided by %s": "%s によって提供されたコンテンツ",
|
||||
"Convert to note": "ノートに変換",
|
||||
"Convert to todo": "ToDoに変換",
|
||||
"Copy": "コピー",
|
||||
"Copy dev mode command to clipboard": "開発モードコマンドをクリップボードにコピー",
|
||||
"Copy external link": "外部リンクをコピー",
|
||||
"Copy Link Address": "リンクアドレスをコピー",
|
||||
"Copy Markdown link": "Markdownのリンクをコピー",
|
||||
"Copy path to clipboard": "クリップボードにパスを保存",
|
||||
@@ -158,7 +156,9 @@
|
||||
"Could not connect to plugin repository.": "プラグインレポジトリに接続できませんでした。",
|
||||
"Could not export notes: %s": "ノートをエクスポートできませんでした: %s",
|
||||
"Could not install plugin: %s": "プラグインをインストールできませんでした: %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "招待に応じることができませんでした。もう一度お試しいただくか、ノートブックの所有者に今でも共有を続けているかご確認ください。\n\nエラーの内容: \"%s\"",
|
||||
"Could not upgrade master key: %s": "マスターキーをアップグレードできませんでした: %s",
|
||||
"Could not verify the share status of this notebook - aborting. Please try again when you are connected to the internet.": "このノートブックの共有状態を確認できなかったため処理を中断します。インターネット接続を確認してから再度お試しください。",
|
||||
"Create a notebook": "ノートブックを作成します",
|
||||
"Created": "作成日時",
|
||||
"created date": "作成日",
|
||||
@@ -229,6 +229,7 @@
|
||||
"Displays version information": "バージョン情報の表示",
|
||||
"Do it now": "今すぐ実行",
|
||||
"Do not ask for confirmation.": "確認を行ないません。",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "パスワードはなくさないようにしてください。セキュリティ上、このパスワードがデータを復号する*唯一*の方法になるためです! 暗号化を有効にするには、下にパスワードを入力してください。",
|
||||
"Download": "ダウンロード",
|
||||
"Download and install the relevant extension for your browser:": "ご使用のブラウザーに対応する拡張機能をインストールします:",
|
||||
"Downloaded": "ダウンロード済み",
|
||||
@@ -280,12 +281,16 @@
|
||||
"Enable Web Clipper Service": "Webクリッパーサービスを有効にする",
|
||||
"Enable ~sub~ syntax": "~下付きテキスト~構文を有効にする",
|
||||
"Enabled": "有効",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "暗号化を有効にするとは、*すべて*のノートや添付ファイルを再同期し、同期先に暗号化した状態で送ることを意味します。",
|
||||
"Encrypted": "暗号化済",
|
||||
"Encrypted items cannot be modified": "暗号化したアイテムは修正できません",
|
||||
"Encrypted notebooks cannot be renamed": "暗号化したアイテムはリネームできません",
|
||||
"Encryption": "暗号化",
|
||||
"Encryption Config": "暗号化の設定",
|
||||
"Encryption is: %s": "暗号化: %s",
|
||||
"Encryption keys": "暗号キー",
|
||||
"Encryption:": "暗号化:",
|
||||
"End-to-end encryption": "エンドツーエンド暗号化",
|
||||
"Enter code here": "コードをここに入力",
|
||||
"Enter master password:": "マスターパスワードを入力してください:",
|
||||
"Enter notebook title": "ノートブックの題名を入力",
|
||||
@@ -332,6 +337,7 @@
|
||||
"FTS enabled: %d": "FTS有効: %d",
|
||||
"Full changelog": "全変更点一覧",
|
||||
"General": "全般",
|
||||
"Generated": "生成済み",
|
||||
"Generating link...": "リンクを生成中...",
|
||||
"Get it now:": "今すぐ取得:",
|
||||
"Get pre-releases when checking for updates": "更新をチェックする時、開発版を取得する",
|
||||
@@ -340,13 +346,16 @@
|
||||
"Goto Anything...": "Goto Anything...",
|
||||
"Grant authorisation": "許可する",
|
||||
"Heading": "見出し",
|
||||
"Help": "ヘルプ",
|
||||
"Hide %s": "%s を隠す",
|
||||
"Hide disabled keys": "無効化したキーを表示しない",
|
||||
"Hide Joplin": "Joplinを隠す",
|
||||
"Highlight": "ハイライト",
|
||||
"Horizontal Rule": "横線",
|
||||
"HTML Directory": "HTMLディレクトリ",
|
||||
"HTML File": "HTMLファイル",
|
||||
"Hyperlink": "ハイパーリンク",
|
||||
"Icon": "アイコン",
|
||||
"ID": "ID",
|
||||
"Idle": "待機中",
|
||||
"Ignore": "無視",
|
||||
@@ -379,6 +388,7 @@
|
||||
"Invalid answer: %s": "無効な入力:%s",
|
||||
"Invalid command: \"%s\"": "無効な命令: \"%s\"",
|
||||
"Invalid option value: \"%s\". Possible values are: %s.": "無効な設定値: \"%s\"。有効な値は: %sです。",
|
||||
"Invalid password": "無効なパスワード",
|
||||
"Italic": "斜体",
|
||||
"Item \"%s\" could not be downloaded: %s": "アイテム \"%s\" はダウンロードできませんでした:%s",
|
||||
"Items that cannot be decrypted": "復号ができなかったアイテム",
|
||||
@@ -403,12 +413,14 @@
|
||||
"Keyboard Shortcut": "ショートカットキー",
|
||||
"Keyboard Shortcuts": "キーボードショートカット",
|
||||
"Keychain Supported: %s": "キーチェーンのサポート: %s",
|
||||
"Keys that need upgrading": "アップグレードが必要なキー",
|
||||
"Landscape": "横",
|
||||
"Language": "言語",
|
||||
"Last error: %s": "最新のエラー: %s",
|
||||
"Later": "あとで",
|
||||
"Layout": "レイアウト",
|
||||
"Layout button sequence": "レイアウトボタンによる切り替え順",
|
||||
"Leave notebook...": "ノートブックを離れる...",
|
||||
"Legal": "Legal",
|
||||
"Letter": "Letter",
|
||||
"Light": "明るい",
|
||||
@@ -425,9 +437,13 @@
|
||||
"Login with Dropbox": "Dropboxでログイン",
|
||||
"Login with OneDrive": "OneDriveログイン",
|
||||
"Make a donation": "寄付する",
|
||||
"Manage master password": "マスターパスワードの管理",
|
||||
"Manage master password...": "マスターパスワードの管理...",
|
||||
"Manage your plugins": "プラグインを管理",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "エンドツーエンド暗号化(E2EE)の設定コマンドです。`enable`, `disable`, `decrypt`, `status`, `decrypt-file`, `target-status` があります。",
|
||||
"Manual": "手動",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + Front Matter",
|
||||
"Marks a to-do as done.": "ToDoを完了としてマークします。",
|
||||
"Marks a to-do as non-completed.": "ToDoを未完としてマークします。",
|
||||
"Markup": "マークアップ",
|
||||
@@ -435,6 +451,7 @@
|
||||
"Master password": "マスターパスワード",
|
||||
"Master password:": "マスターパスワード:",
|
||||
"Max concurrent connections": "最大同時接続数",
|
||||
"Missing keys": "キーがありません",
|
||||
"Missing Master Keys": "マスターキーがありません",
|
||||
"Missing required argument: %s": "引数が足りません:%s",
|
||||
"Mobile data - auto-sync disabled": "モバイルデータ通信 - 自動同期無効",
|
||||
@@ -475,6 +492,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "%s では認証できません。他の資格証明書を使用してください。",
|
||||
"Not downloaded": "未ダウンロード",
|
||||
"Not generated": "生成されていません",
|
||||
"note": "ノート",
|
||||
"Note": "ノート",
|
||||
"Note area growth factor": "ノートエリアのストレッチ係数",
|
||||
@@ -492,11 +510,13 @@
|
||||
"Note&book": "ノートブック(&B)",
|
||||
"Note: Does not work in all desktop environments.": "注意: すべてのデスクトップ環境で動作するわけではありません。",
|
||||
"Note: When a note is shared, it will no longer be encrypted on the server.": "注意: ノートを共有すると、該当ノートはサーバー上で暗号化されなくなります。",
|
||||
"Notebook": "ノートブック",
|
||||
"Notebook list growth factor": "ノートブック一覧のストレッチ係数",
|
||||
"Notebook title:": "ノートブックの題名:",
|
||||
"Notebook: %s": "ノートブック: %s",
|
||||
"Notebooks": "ノートブック",
|
||||
"Notebooks cannot be named \"%s\", which is a reserved title.": "\"%s\" というノートブックの名称はシステムで使用するために予約済みです。名称の変更はできません。",
|
||||
"Notes": "ノート",
|
||||
"Notes and settings are stored in: %s": "ノートと設定は次の場所に保存されます: %s",
|
||||
"Notes can only be created within a notebook.": "ノートは、ノートブック内のみに作ることができます。",
|
||||
"Numbered List": "番号つきリスト",
|
||||
@@ -529,8 +549,10 @@
|
||||
"PDF File": "PDF ファイル",
|
||||
"Permission needed": "許可が必要",
|
||||
"Permission to use camera": "カメラ使用の許可",
|
||||
"Please click on \"%s\" to proceed": "続行するには \"%s\" をクリックしてください",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "データベース全体を暗号化しなおしてもよろしいですか。",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "下記マスターキーをアップグレードするには、マスターキーのパスワードを入力してください。",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "ノートブックに大量のノートが含まれる場合、受信者側にすべてのノートが見えるようになるまで数分かかることがあります。",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "このアプリケーションを認証するためには下記のURLをブラウザで開いてください。アプリケーションは\"Apps/Joplin\"フォルダを作成し、その中のファイルのみを読み書きします。あなたの個人的なファイルや、ディレクトリ外のファイルにはアクセスしません。第三者にデータが共有されることもありません。",
|
||||
"Please select a notebook first.": "まずはノートブックを選択して下さい。",
|
||||
"Please select the note or notebook to be deleted first.": "まず削除するノートかノートブックを選択してください。",
|
||||
@@ -558,6 +580,7 @@
|
||||
"Privacy Policy": "プライバシーポリシー",
|
||||
"Profile Version: %s": "プロファイルバージョン: %s",
|
||||
"Properties": "プロパティ",
|
||||
"Public-private key pair:": "公開鍵・秘密鍵ペア:",
|
||||
"Publish note...": "ノートを公開...",
|
||||
"Publish Notes": "ノートを公開",
|
||||
"Publish notes to the internet": "ノートをインターネットに公開する",
|
||||
@@ -582,6 +605,7 @@
|
||||
"Rename tag:": "タグの変更:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "<item> (ノートまたはノートブック)の名前を、<name>に変更します。",
|
||||
"Renew token": "トークンを更新する",
|
||||
"Reset master password": "マスターパスワードをリセット",
|
||||
"Resources: %d.": "リソース: %d.",
|
||||
"Restart and upgrade": "再起動してアップグレード",
|
||||
"Restart now": "今すぐ再起動",
|
||||
@@ -594,6 +618,7 @@
|
||||
"Reverses the sorting order.": "逆順に並び替えます。",
|
||||
"Revision: %s (%s)": "リビジョン: %s (%s)",
|
||||
"Runs the commands contained in the text file. There should be one command per line.": "テキストファイルに含まれるコマンドを実行します。テキストファイルには1行1コマンドで記述する必要があります。",
|
||||
"S3": "S3",
|
||||
"Safe mode is currently active. Note rendering and all plugins are temporarily disabled.": "セーフモードで実行中。ノートのレンダリングとすべてのプラグインを一時的に無効化しています。",
|
||||
"Save": "保存",
|
||||
"Save alarm": "アラームの保存",
|
||||
@@ -615,6 +640,7 @@
|
||||
"Server is running on port %d": "サーバーはポート %d で実行中です",
|
||||
"Set alarm": "アラームをセット",
|
||||
"Set alarm:": "アラームをセット:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "幅いっぱいに表示させたいときは 0 に設定してください。推奨設定は 600 です。",
|
||||
"Set the password": "パスワードの設定",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "<note>のプロパティ<name> を、指示された[value]に設定します。有効なプロパティは:\n\n%s",
|
||||
"Share": "共有",
|
||||
@@ -625,7 +651,9 @@
|
||||
"Show Advanced Settings": "詳細設定を表示",
|
||||
"Show all": "すべて表示",
|
||||
"Show completed to-dos": "完了したToDoを表示",
|
||||
"Show disabled keys": "無効化したキーを表示する",
|
||||
"Show note counts": "ノートの数を表示",
|
||||
"Show sort order buttons": "ソート方法切り替えボタンを表示",
|
||||
"Show tray icon": "トレイアイコンの表示",
|
||||
"Sidebar": "サイドバー",
|
||||
"Size": "サイズ",
|
||||
@@ -711,15 +739,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "このエディターコマンド(と引数)はノートを開く際に使用されます。空欄の場合は既定のエディターを自動的に検出します。",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "ストレッチ係数プロパティは表示項目間のサイズ比を指定するために使います。たとえば、係数が2の表示項目は、係数が1の項目の2倍の大きさで表示されます。係数の変更はアプリケーションの再起動後に反映されます。",
|
||||
"The following attachments are being watched for changes:": "下記の添付ファイルが変更されたかどうかを監視中です:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "以下のキーは旧式の暗号化アルゴリズムを使用しているため、アップグレードをおすすめします。キーをアップグレードしても既存データはこれまでどおり復号化/暗号化が可能です。",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Joplinモバイルアプリは次のタイプのリンクをまだサポートしていません: %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Joplinチームによる審査済み。このプラグインはJoplinのセキュリティーおよび性能基準を満たしています。",
|
||||
"The 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.": "これらのIDを持つキーはアイテムを暗号化するのに使われていますが、現在このキーで暗号化されたアイテムにはアクセスできません。おそらくこれらのアイテムはまだ同期(ダウンロード)されていないものと考えられます。",
|
||||
"The master key has been upgraded successfully!": "マスターキーのアップグレードに成功しました!",
|
||||
"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.": "これらのIDを持つマスターキーはアイテムを暗号化するのに使われていますが、現在このキーで暗号化されたアイテムにはアクセスできません。おそらくこれらのアイテムはまだ同期(ダウンロード)されていないものと考えられます。",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "ノート \"%s\" のノートブック \"%s\"への復元は成功しました。",
|
||||
"The notebook could not be saved: %s": "ノートブックは保存できませんでした:%s",
|
||||
"The notes have been imported: %s": "ノートはインポートされました:%s",
|
||||
"The possible commands are:": "有効なコマンドは:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "リストから受信者を削除できませんでした。もう一度お試しください。\n\nエラーの内容: \"%s\"",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "同期するには同期先をアップグレードする必要があります。アップグレードには数分かかるかもしれません。またアプリケーションの再起動が必要です。アップグレードするにはリンクをクリックしてください。",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "同期先のアップグレードが必要です。続行するにはこのバナーをクリックしてください。",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "タグ \"%s\" はすでにあります。ほかの名前を選択してください。",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを持つことができるでしょう(すべてのドキュメントは下にあります)。",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Webクリッパーがデータにアクセスすることについてあなたの許可が必要です。",
|
||||
@@ -746,10 +778,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "このサービスはブラウザー拡張機能からJoplinへのアクセスを可能にします。本サービスを有効化する際には、Joplinが特定のポートで接続を待ち受けることについて、お使いのファイアーウォールから許可を求められる場合があります。",
|
||||
"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.": "有効にすると、Joplinがバックグラウンドで動作するようになります。ノートを定期的に同期し、衝突を減らすために強くおすすめする設定です。",
|
||||
"This will open a new screen. Save your current changes?": "新しい画面を開きます。変更を保存しますか?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "ノートブックをあなたのコレクションから削除しようとしています。今後そのコンテンツにアクセスできなくなりますが、続行しますか?",
|
||||
"Time format": "時刻の形式",
|
||||
"title": "題名",
|
||||
"Title": "題名",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "DropboxでJoplinを同期する場合は、次のステップを実行してください:",
|
||||
"To continue, please enter your master password below.": "続行するには、マスターパスワードを入力してください",
|
||||
"To delete a tag, untag the associated notes.": "タグを削除するには、関連するノートからタグを外してください。",
|
||||
"To delete: %d": "削除予定: %d",
|
||||
"To enter command line mode, press \":\"": "コマンドラインモードに入るには、\":\"を入力してください",
|
||||
@@ -766,8 +800,10 @@
|
||||
"Toggle editors": "エディターの切り替え",
|
||||
"Toggle external editing": "外部エディターでの編集を開始・終了",
|
||||
"Toggle note list": "ノート一覧の表示切り替え",
|
||||
"Toggle own sort order": "ノートブック固有のソート設定をオンオフする",
|
||||
"Toggle safe mode": "セーフモードのオンオフを切り替える",
|
||||
"Toggle sidebar": "サイドバーの表示切り替え",
|
||||
"Toggle sort order field": "ソート対象フィールドを切り替える",
|
||||
"Token has been copied to the clipboard!": "トークンをクリップボードにコピーしました!",
|
||||
"Tools": "ツール",
|
||||
"Total: %d/%d": "総数: %d/%d",
|
||||
@@ -836,6 +872,8 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "ここでは既存データの再暗号化を行えます。たとえば、旧式のアルゴリズムで暗号化されたノートがあるとわかっているような場合に新しいアルゴリズムで暗号化しなおすことが可能です。",
|
||||
"Your choice: ": "選択: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "既存データを暗号化しなおし、再同期します。",
|
||||
"Your master password is needed to decrypt some of your data.": "一部のデータを復号化するためにあなたのマスターパスワードが必要です。",
|
||||
"Your password is needed to decrypt some of your data. Type `:e2ee decrypt` to set it.": "一部のデータを復号化するためにあなたのパスワードが必要です。`:e2ee decrypt`と入力し設定してください。",
|
||||
"Your permission to use your camera is required.": "カメラを使用するには権限が必要です。",
|
||||
"Your version: %s": "あなたのバージョン: %s",
|
||||
"Zoom In": "ズームイン",
|
||||
|
@@ -77,11 +77,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "괄호, 중괄호, 인용 부호 등의 자동 완성.",
|
||||
"Automatically switch theme to match system theme": "시스템 테마에 적합한 테마로 자동으로 변경",
|
||||
"Automatically update the application": "자동으로 업데이트하기",
|
||||
"AWS key": "AWS 키",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 버킷",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS 보안 암호",
|
||||
"Back": "뒤로 가기",
|
||||
"Bold": "굵게",
|
||||
"Browse all plugins": "모든 플러그인 보기",
|
||||
@@ -324,6 +319,7 @@
|
||||
"Go to source URL": "소스 URL로 이동",
|
||||
"Goto Anything...": "가고자 하는 곳으로 이동...",
|
||||
"Heading": "표제",
|
||||
"Help": "도움말",
|
||||
"Hide %s": "%s 숨기기",
|
||||
"Hide Joplin": "Joplin 숨기기",
|
||||
"Highlight": "하이라이트",
|
||||
@@ -331,6 +327,7 @@
|
||||
"HTML Directory": "HTML 디렉터리",
|
||||
"HTML File": "HTML 파일",
|
||||
"Hyperlink": "하이퍼링크",
|
||||
"Icon": "Icon",
|
||||
"ID": "식별자",
|
||||
"Idle": "대기",
|
||||
"Ignore": "무시하기",
|
||||
|
@@ -78,11 +78,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Automatisk lukk klammer, paranteser, fnutter, etc.",
|
||||
"Automatically switch theme to match system theme": "Bytt tema automatisk for å matche systemtema",
|
||||
"Automatically update the application": "Oppdater applikasjonen automatisk",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Tilbake",
|
||||
"Bold": "Fet",
|
||||
"Browse all plugins": "Bla igjennom alle utvidelser",
|
||||
@@ -329,6 +324,7 @@
|
||||
"Goto Anything...": "Hopp til...",
|
||||
"Grant authorisation": "Tillat autorisasjon",
|
||||
"Heading": "Overskrift",
|
||||
"Help": "Hjelp",
|
||||
"Hide %s": "Skjul %s",
|
||||
"Hide Joplin": "Skjul Joplin",
|
||||
"Highlight": "Fremheve",
|
||||
@@ -336,6 +332,7 @@
|
||||
"HTML Directory": "HTML-katalog",
|
||||
"HTML File": "HTML-fil",
|
||||
"Hyperlink": "Hyperlenke",
|
||||
"Icon": "Ikon",
|
||||
"ID": "ID",
|
||||
"Idle": "Inaktiv",
|
||||
"Ignore": "Ignorer",
|
||||
|
@@ -68,11 +68,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Haakjes, aanhalingstekens, etc. automatisch aanvullen",
|
||||
"Automatically switch theme to match system theme": "Thema automatisch wisselen overeenkomstig het systeem-thema",
|
||||
"Automatically update the application": "Update de applicatie automatisch",
|
||||
"AWS key": "AWS sleutel",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Terug",
|
||||
"Bold": "Vetjes",
|
||||
"Browse all plugins": "Door alle plugins bladeren",
|
||||
|
@@ -73,11 +73,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Auto-paar accolades, haakjes, citaten, enz.",
|
||||
"Automatically switch theme to match system theme": "Automatisch omschakelen thema op basis van systeemthema",
|
||||
"Automatically update the application": "Applicatie automatisch bijwerken",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Terug",
|
||||
"Bold": "Vetgedrukt",
|
||||
"Browse all plugins": "Blader door alle plugins",
|
||||
@@ -311,6 +306,7 @@
|
||||
"Go to source URL": "Ga naar bron-URL",
|
||||
"Goto Anything...": "Ga naar Alles...",
|
||||
"Heading": "Kop",
|
||||
"Help": "Help",
|
||||
"Hide %s": "%s verbergen",
|
||||
"Hide Joplin": "Joplin verbergen",
|
||||
"Highlight": "Arceren",
|
||||
@@ -318,6 +314,7 @@
|
||||
"HTML Directory": "HTML-map",
|
||||
"HTML File": "HTML-bestand",
|
||||
"Hyperlink": "Hyperlink",
|
||||
"Icon": "Icoon",
|
||||
"ID": "ID",
|
||||
"Idle": "Inactief",
|
||||
"Ignore": "Negeren",
|
||||
|
@@ -72,11 +72,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Zamykaj klamry, nawiasy, cudzysłowy itd.",
|
||||
"Automatically switch theme to match system theme": "Automatycznie dopasuj motyw do motywu systemowego",
|
||||
"Automatically update the application": "Automatycznie aktualizuj aplikację",
|
||||
"AWS key": "Klucz AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "Bucket AWS S3",
|
||||
"AWS S3 URL": "URL AWS S3",
|
||||
"AWS secret": "Tajny klucz AWS",
|
||||
"Back": "Cofnij",
|
||||
"Bold": "Pogrubienie",
|
||||
"Browse all plugins": "Przeglądaj wszystkie wtyczki",
|
||||
@@ -311,12 +306,14 @@
|
||||
"Go to source URL": "Idź do adresu źródłowego odnośnika",
|
||||
"Goto Anything...": "Idź do...",
|
||||
"Heading": "Nagłówek",
|
||||
"Help": "Pomoc",
|
||||
"Hide %s": "Schowaj %s",
|
||||
"Hide Joplin": "Ukryj okno aplikacji",
|
||||
"Horizontal Rule": "Linia horyzontalna",
|
||||
"HTML Directory": "Katalog HTML",
|
||||
"HTML File": "Plik HTML",
|
||||
"Hyperlink": "Hyperlink",
|
||||
"Icon": "Ikona",
|
||||
"ID": "ID",
|
||||
"Idle": "Spoczynek",
|
||||
"Ignore": "Ignoruj",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Parear automaticamente chaves, parênteses, aspas etc.",
|
||||
"Automatically switch theme to match system theme": "Automaticamente alterar o tema para o tema do sistema",
|
||||
"Automatically update the application": "Atualizar automaticamente o aplicativo",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Voltar",
|
||||
"Bold": "Negrito",
|
||||
"Browse all plugins": "Procurar todos os plugins",
|
||||
@@ -340,6 +335,7 @@
|
||||
"Goto Anything...": "Ir para qualquer coisa...",
|
||||
"Grant authorisation": "Conceder autorização",
|
||||
"Heading": "Cabeçalho",
|
||||
"Help": "Ajuda",
|
||||
"Hide %s": "Ocultar %s",
|
||||
"Hide Joplin": "Esconder o Joplin",
|
||||
"Highlight": "Realçar",
|
||||
@@ -347,6 +343,7 @@
|
||||
"HTML Directory": "Pasta HTML",
|
||||
"HTML File": "Arquivo HTML",
|
||||
"Hyperlink": "Hiperlink",
|
||||
"Icon": "Ícone",
|
||||
"ID": "ID",
|
||||
"Idle": "Inativo",
|
||||
"Ignore": "Ignorar",
|
||||
|
@@ -72,11 +72,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Emparelhar automaticamente parênteses curvos, parênteses, citações, etc.",
|
||||
"Automatically switch theme to match system theme": "Mudar automaticamente o tema para combinar com o tema do sistema",
|
||||
"Automatically update the application": "Atualizar a aplicação automaticamente",
|
||||
"AWS key": "Chave AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "Bucket AWS S3",
|
||||
"AWS S3 URL": "AWS S3",
|
||||
"AWS secret": "Segredo AWS",
|
||||
"Back": "Atrás",
|
||||
"Bold": "Negrito",
|
||||
"Browse all plugins": "Procurar todos os plugins",
|
||||
@@ -311,12 +306,14 @@
|
||||
"Go to source URL": "Ir para o endereço de origem",
|
||||
"Goto Anything...": "Saltar para...",
|
||||
"Heading": "Cabeçalho",
|
||||
"Help": "Ajuda",
|
||||
"Hide %s": "Ocultar %s",
|
||||
"Hide Joplin": "Esconder o Joplin",
|
||||
"Horizontal Rule": "Régua Horizontal",
|
||||
"HTML Directory": "Diretório HTML",
|
||||
"HTML File": "Ficheiro HTML",
|
||||
"Hyperlink": "Hiperligação",
|
||||
"Icon": "Ícones",
|
||||
"ID": "ID",
|
||||
"Idle": "Ocioso",
|
||||
"Ignore": "Ignorar",
|
||||
|
@@ -48,10 +48,6 @@
|
||||
"Auto": "Auto",
|
||||
"Automatically switch theme to match system theme": "Comutați automat tema pentru a se potrivi cu tema sistemului",
|
||||
"Automatically update the application": "Actualizați automat aplicația",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Înapoi",
|
||||
"Bold": "Bold",
|
||||
"Browse...": "Căutare...",
|
||||
@@ -208,11 +204,13 @@
|
||||
"Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.": "Obține sau setează o valoare de configurare. Dacă [valoare] nu este furnizată, va afișa valoarea [nume]. Dacă nu este furnizat nici [nume], nici [valoare], va afișa configurația curentă.",
|
||||
"Goto Anything...": "Mergeți la...",
|
||||
"Heading": "Titlu",
|
||||
"Help": "Ajutor",
|
||||
"Hide %s": "Ascundeți %s",
|
||||
"Horizontal Rule": "Linie orizontală",
|
||||
"HTML Directory": "Directoriu HTML",
|
||||
"HTML File": "Fișier HTML",
|
||||
"Hyperlink": "Hyperlink",
|
||||
"Icon": "Icon",
|
||||
"ID": "ID",
|
||||
"Ignore TLS certificate errors": "Ignoră erorile de certificat TLS",
|
||||
"Import": "Importați",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Автоматическое закрытие скобок, кавычек и т. д.",
|
||||
"Automatically switch theme to match system theme": "Автоматическая смена темы в соответствии с настройками системы",
|
||||
"Automatically update the application": "Автоматически обновлять приложение",
|
||||
"AWS key": "Ключ AWS",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "Секрет AWS",
|
||||
"Back": "Назад",
|
||||
"Bold": "Полужирный",
|
||||
"Browse all plugins": "Просмотр всех плагинов",
|
||||
@@ -340,6 +335,7 @@
|
||||
"Goto Anything...": "Перейти к чему-либо…",
|
||||
"Grant authorisation": "Одобрить авторизацию",
|
||||
"Heading": "Заголовок",
|
||||
"Help": "Помощь",
|
||||
"Hide %s": "Скрыть %s",
|
||||
"Hide Joplin": "Скрыть Joplin",
|
||||
"Highlight": "Выделение",
|
||||
@@ -347,6 +343,7 @@
|
||||
"HTML Directory": "HTML каталог",
|
||||
"HTML File": "HTML файл",
|
||||
"Hyperlink": "Гиперссылка",
|
||||
"Icon": "Иконка",
|
||||
"ID": "ID",
|
||||
"Idle": "Простой",
|
||||
"Ignore": "Игнорировать",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Avtomatsko zapri oglate oklepaje, oklepaje, narekovaje, itd.",
|
||||
"Automatically switch theme to match system theme": "Avtomatsko zamenjaj teme glede na sistemski način teme",
|
||||
"Automatically update the application": "Samodejno posodobi aplikacijo",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Nazaj",
|
||||
"Bold": "Krepko",
|
||||
"Browse all plugins": "Brskaj med vsemi dodatki",
|
||||
|
@@ -67,11 +67,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Ауто-упари заграде, цитате, итд.",
|
||||
"Automatically switch theme to match system theme": "Аутоматски пребаци тему на подударање са системском темом",
|
||||
"Automatically update the application": "Аутоматски ажурирај апликацију",
|
||||
"AWS key": "\"AWS\" кључ",
|
||||
"AWS S3": "\"AWS S3\"",
|
||||
"AWS S3 bucket": "\"AWS S3 bucket\"",
|
||||
"AWS S3 URL": "\"AWS S3\" УРЛ",
|
||||
"AWS secret": "\"AWS\" тајна(secret)",
|
||||
"Back": "Назад",
|
||||
"Bold": "Подебљај",
|
||||
"Browse all plugins": "Прегледајте све додатке",
|
||||
@@ -284,6 +279,7 @@
|
||||
"HTML Directory": "HTML Директоријум",
|
||||
"HTML File": "HTML Фајл",
|
||||
"Hyperlink": "Хипер-веза",
|
||||
"Icon": "Икона",
|
||||
"ID": "ИД",
|
||||
"Idle": "Неактивно",
|
||||
"Ignore": "Занемари",
|
||||
|
@@ -80,10 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Para automatiskt hakparenteser, paranteser, situationstecken, etc.",
|
||||
"Automatically switch theme to match system theme": "Växla automatiskt tema för att matcha systemtema",
|
||||
"Automatically update the application": "Uppdatera programmet automatiskt",
|
||||
"AWS key": "AWS-nyckel",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS-hemlighet",
|
||||
"Back": "Tillbaka",
|
||||
"Bold": "Fet",
|
||||
"Browse all plugins": "Bläddra bland alla insticksmoduler",
|
||||
@@ -93,18 +89,19 @@
|
||||
"Cancelling background synchronisation... Please wait.": "Avbryter bakgrundssynkronisering... vänta.",
|
||||
"Cancelling...": "Avbryter...",
|
||||
"Cancelling... Please wait.": "Avbryter... vänta.",
|
||||
"Cannot access %s": "Kan inte komma åt %s",
|
||||
"Cannot change encrypted item": "Kan inte ändra krypterat objekt",
|
||||
"Cannot copy note to \"%s\" notebook": "Kan inte kopiera anteckning till \"%s\" anteckningsbok",
|
||||
"Cannot find \"%s\".": "Kan inte hitta \"%s\".",
|
||||
"Cannot access %s": "Det går inte att komma åt %s",
|
||||
"Cannot change encrypted item": "Det går inte att ändra krypterat objekt",
|
||||
"Cannot copy note to \"%s\" notebook": "Det går inte att kopiera anteckningen till \"%s\" anteckningsbok",
|
||||
"Cannot find \"%s\".": "Det går inte att hitta \"%s\".",
|
||||
"Cannot initialise synchroniser.": "Det går inte att initiera synkroniseraren.",
|
||||
"Cannot load \"%s\" module for format \"%s\" and output \"%s\"": "Det gick inte att läsa in \"%s\"-modulen för formatet \"%s\" och utmatningen \"%s\"",
|
||||
"Cannot load \"%s\" module for format \"%s\" and target \"%s\"": "Det gick inte att läsa in \"%s\"-modulen för formatet \"%s\" och målet \"%s\"",
|
||||
"Cannot move note to \"%s\" notebook": "Kan inte flytta anteckning till \"%s\" anteckningsbok",
|
||||
"Cannot move notebook to this location": "Kan inte flytta anteckningsbok till den här platsen",
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Kan inte uppdatera token: autentiseringsdata saknas. Om du startar synkroniseringen igen kan det lösa problemet.",
|
||||
"Cannot load \"%s\" module for format \"%s\" and output \"%s\"": "Det går inte att läsa in \"%s\"-modulen för formatet \"%s\" och utmatningen \"%s\"",
|
||||
"Cannot load \"%s\" module for format \"%s\" and target \"%s\"": "Det går inte att läsa in \"%s\"-modulen för formatet \"%s\" och målet \"%s\"",
|
||||
"Cannot move note to \"%s\" notebook": "Det går inte att flytta anteckningen till \"%s\" anteckningsbok",
|
||||
"Cannot move notebook to this location": "Det går inte att flytta anteckningsboken till den här platsen",
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "Det går inte att uppdatera token: autentiseringsdata saknas. Om du startar synkroniseringen igen kan det lösa problemet.",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "Det går inte att spara %s \"%s\" eftersom den är större än den tillåtna gränsen (%s)",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "Det går inte att spara%s \"%s\" eftersom det skulle gå över den totala tillåtna storleken (%s) för det här kontot",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "Det går inte att dela krypterad anteckningsbok med mottagaren %s eftersom de inte har aktiverat ände-till-ände-kryptering. De kan göra det från skärmen Inställningar > Kryptering.",
|
||||
"Change application layout": "Ändra applikationslayout",
|
||||
"Change language": "Ändra språk",
|
||||
"Characters": "Tecken",
|
||||
@@ -143,10 +140,12 @@
|
||||
"Conflicted: %d": "Konflikt: %d",
|
||||
"Conflicts": "Konflikter",
|
||||
"Conflicts (attachments)": "Konflikter (bilagor)",
|
||||
"Content provided by %s": "Innehåll tillhandahålls av %s",
|
||||
"Convert to note": "Konvertera till anteckning",
|
||||
"Convert to todo": "Konvertera till att-göra",
|
||||
"Copy": "Kopiera",
|
||||
"Copy dev mode command to clipboard": "Kopiera kommandot för dev-läget till urklipp",
|
||||
"Copy external link": "Kopiera extern länk",
|
||||
"Copy Link Address": "Kopiera länkadress",
|
||||
"Copy Markdown link": "Kopiera Markdown-länk",
|
||||
"Copy path to clipboard": "Kopiera sökväg till urklipp",
|
||||
@@ -157,6 +156,7 @@
|
||||
"Could not connect to plugin repository.": "Det gick inte att ansluta till insticksmodulsförrådet.",
|
||||
"Could not export notes: %s": "Det gick inte att exportera anteckningar: %s",
|
||||
"Could not install plugin: %s": "Det gick inte att installera insticksmodul: %s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "Det gick inte att svara på inbjudan. Vänligen försök igen, eller kontrollera med den anteckningsboksägaren om de fortfarande delar den.\n\nFelet var: \"%s\"",
|
||||
"Could not upgrade master key: %s": "Lyckades inte uppgradera huvudnyckel: %s",
|
||||
"Create a notebook": "Skapar en anteckningsbok",
|
||||
"Created": "Skapad",
|
||||
@@ -228,6 +228,7 @@
|
||||
"Displays version information": "Visar versionsinformation",
|
||||
"Do it now": "Gör det nu",
|
||||
"Do not ask for confirmation.": "Fråga inte om bekräftelse.",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "Förlora inte lösenordet som för säkerhetsändamål kommer det att vara det *enda* sättet att dekryptera data! För att aktivera kryptering, vänligen ange ditt lösenord nedan.",
|
||||
"Download": "Hämta",
|
||||
"Download and install the relevant extension for your browser:": "Hämta och installera det relevanta tillägget för din webbläsare:",
|
||||
"Downloaded": "Hämtad",
|
||||
@@ -279,12 +280,16 @@
|
||||
"Enable Web Clipper Service": "Aktivera Web Clipper-tjänsten",
|
||||
"Enable ~sub~ syntax": "Aktivera ~sub~ syntax",
|
||||
"Enabled": "Aktiverad",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "Aktivera kryptering betyder att *alla* dina anteckningar och bilagor kommer att synkroniseras och skickas krypterade till synkroniseringsmålet.",
|
||||
"Encrypted": "Krypterad",
|
||||
"Encrypted items cannot be modified": "Krypterade objekt kan inte ändras",
|
||||
"Encrypted notebooks cannot be renamed": "Krypterade anteckningsböcker kan inte byta namn",
|
||||
"Encryption": "Kryptering",
|
||||
"Encryption Config": "Kryptering-konfiguration",
|
||||
"Encryption is: %s": "Kryptering är: %s",
|
||||
"Encryption keys": "Krypteringsnycklar",
|
||||
"Encryption:": "Kryptering:",
|
||||
"End-to-end encryption": "Ände-till-ände-kryptering",
|
||||
"Enter code here": "Ange koden här",
|
||||
"Enter master password:": "Ange huvudlösenord:",
|
||||
"Enter notebook title": "Ange anteckningsbokens titel",
|
||||
@@ -331,6 +336,7 @@
|
||||
"FTS enabled: %d": "FTS aktiverat: %d",
|
||||
"Full changelog": "Fullständig ändringslogg",
|
||||
"General": "Allmänt",
|
||||
"Generated": "Skapad",
|
||||
"Generating link...": "Skapar länk...",
|
||||
"Get it now:": "Hämta den nu:",
|
||||
"Get pre-releases when checking for updates": "Inkludera även förhandsversionen vid uppdateringar",
|
||||
@@ -340,12 +346,14 @@
|
||||
"Grant authorisation": "Bevilja auktorisation",
|
||||
"Heading": "Rubrik",
|
||||
"Hide %s": "Dölj %s",
|
||||
"Hide disabled keys": "Dölj inaktiverade nycklar",
|
||||
"Hide Joplin": "Dölj Joplin",
|
||||
"Highlight": "Markera",
|
||||
"Horizontal Rule": "Horisontell regel",
|
||||
"HTML Directory": "HTML-mapp",
|
||||
"HTML File": "HTML-fil",
|
||||
"Hyperlink": "Hyperlänk",
|
||||
"Icon": "Icon",
|
||||
"ID": "ID",
|
||||
"Idle": "Inaktiv",
|
||||
"Ignore": "Ignorera",
|
||||
@@ -402,12 +410,14 @@
|
||||
"Keyboard Shortcut": "Tangentbordsgenväg",
|
||||
"Keyboard Shortcuts": "Tangentbordsgenvägar",
|
||||
"Keychain Supported: %s": "Nyckelring som stöds: %s",
|
||||
"Keys that need upgrading": "Nycklar som behöver uppgradering",
|
||||
"Landscape": "Vågrätt(Landskap)",
|
||||
"Language": "Språk",
|
||||
"Last error: %s": "Senaste fel: %s",
|
||||
"Later": "Senare",
|
||||
"Layout": "Layout",
|
||||
"Layout button sequence": "Knappordning",
|
||||
"Leave notebook...": "Lämna anteckningsbok...",
|
||||
"Legal": "Juridisk",
|
||||
"Letter": "Brev",
|
||||
"Light": "Ljust",
|
||||
@@ -415,6 +425,7 @@
|
||||
"Link has been copied to clipboard!": "Länken har kopierats till urklipp!",
|
||||
"Links with protocol \"%s\" are not supported": "Länkar med protokoll \"%s\" stöds ej",
|
||||
"List item": "Listobjekt",
|
||||
"Loaded": "Inläst",
|
||||
"Location": "Plats",
|
||||
"Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.": "Låsfilen hålls redan. Om du vet att ingen synkronisering sker, kan du ta bort låsfilen vid \"%s\" och återuppta operationen.",
|
||||
"Log": "Logg",
|
||||
@@ -423,7 +434,10 @@
|
||||
"Login with Dropbox": "Logga in med Dropbox",
|
||||
"Login with OneDrive": "Logga in med OneDrive",
|
||||
"Make a donation": "Gör en donation",
|
||||
"Manage master password": "Hantera huvudlösenord",
|
||||
"Manage master password...": "Hantera huvudlösenord...",
|
||||
"Manage your plugins": "Hantera dina insticksmoduler",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "Hanterar E2EE-konfigurationen. Kommandona är `enable`,` disable`, `decrypt`,` status`, `decrypt-file` och `target-status`.",
|
||||
"Manual": "Manuellt",
|
||||
"Markdown": "Markdown",
|
||||
"Marks a to-do as done.": "Märker en att-göra som gjord.",
|
||||
@@ -433,6 +447,7 @@
|
||||
"Master password": "Huvudlösenord",
|
||||
"Master password:": "Huvudlösenord:",
|
||||
"Max concurrent connections": "Max antal samtida anslutningar",
|
||||
"Missing keys": "Saknade nycklar",
|
||||
"Missing Master Keys": "Saknade huvudnycklar",
|
||||
"Missing required argument: %s": "Saknade obligatoriskt argument: %s",
|
||||
"Mobile data - auto-sync disabled": "Mobildata - automatisk synkronisering inaktiverad",
|
||||
@@ -473,6 +488,7 @@
|
||||
"Nord": "Nord",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "Ej autentiserad med %s. Ange eventuella saknade uppgifter.",
|
||||
"Not downloaded": "Inte hämtad",
|
||||
"Not generated": "Inte skapad",
|
||||
"note": "anteckning",
|
||||
"Note": "Anteckning",
|
||||
"Note area growth factor": "Anteckningsområdets tillväxtfaktor",
|
||||
@@ -527,8 +543,10 @@
|
||||
"PDF File": "PDF-fil",
|
||||
"Permission needed": "Tillstånd behövs",
|
||||
"Permission to use camera": "Tillåtelse att använda kameran",
|
||||
"Please click on \"%s\" to proceed": "Vänligen klicka på \"%s\" för att fortsätta",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "Bekräfta att du vill omkryptera hela din databas.",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "Uppge lösenordet i huvudnyckellistan nedan innan du uppgraderar nyckeln.",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "Vänligen observera att om det är en stor anteckningsbok kan det ta några minuter för alla anteckningar att dyka upp på mottagarens enhet.",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "Öppna följande webbadress i webbläsaren för att verifiera programmet. Programmet skapar en katalog i \"Apps/Joplin\" och kommer endast att läsa och skriva filer i den här katalogen. Det kommer inte att ha tillgång till några filer utanför den här katalogen eller till någon annan personlig information. Ingen data kommer att delas med någon tredjepart.",
|
||||
"Please select a notebook first.": "Välj en anteckningsbok först.",
|
||||
"Please select the note or notebook to be deleted first.": "Välj anteckningen eller anteckningsboken som ska tas bort först.",
|
||||
@@ -556,6 +574,7 @@
|
||||
"Privacy Policy": "Integritetspolicy",
|
||||
"Profile Version: %s": "Profilversion: %s",
|
||||
"Properties": "Egenskaper",
|
||||
"Public-private key pair:": "Offentlig-privat nyckelpar:",
|
||||
"Publish note...": "Publisera anteckning...",
|
||||
"Publish Notes": "Publicera anteckningar",
|
||||
"Publish notes to the internet": "Publicera anteckningar till internet",
|
||||
@@ -580,6 +599,7 @@
|
||||
"Rename tag:": "Byt namn på tagg:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "Byter namn på den angivna <item> (anteckning eller anteckningsbok) till <name>.",
|
||||
"Renew token": "Förnya token",
|
||||
"Reset master password": "Återställ huvudlösenord",
|
||||
"Resources: %d.": "Resurser: %d.",
|
||||
"Restart and upgrade": "Starta om och uppgradera",
|
||||
"Restart now": "Starta om nu",
|
||||
@@ -613,6 +633,7 @@
|
||||
"Server is running on port %d": "Servern körs på port %d",
|
||||
"Set alarm": "Ställ in alarm",
|
||||
"Set alarm:": "Ställ in alarm:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "Ställ in det till 0 för att få det att ta det kompletta lediga utrymmet. Rekommenderad bredd är 600.",
|
||||
"Set the password": "Ställ in lösenord",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "Ställer in egenskapen <name> av den givna <note> till det angivna [value]. Möjliga egenskaper är:\n\n%s",
|
||||
"Share": "Dela",
|
||||
@@ -623,6 +644,7 @@
|
||||
"Show Advanced Settings": "Visa avancerade inställningar",
|
||||
"Show all": "Visa alla",
|
||||
"Show completed to-dos": "Visa slutförda att-göra",
|
||||
"Show disabled keys": "Visa inaktiverade nycklar",
|
||||
"Show note counts": "Visa anteckningsantal",
|
||||
"Show tray icon": "Visa fältikon",
|
||||
"Sidebar": "Sidofält",
|
||||
@@ -634,6 +656,7 @@
|
||||
"Solarised Light": "Solariset ljust",
|
||||
"Some items cannot be decrypted.": "Några objekt kan inte dekrypteras.",
|
||||
"Some items cannot be synchronised.": "Några objekt kan inte synkroniseras.",
|
||||
"Some items cannot be synchronised. Press for more info.": "Några objekt kan inte synkroniseras. Tryck för mer info.",
|
||||
"Sort notebooks by": "Sortera anteckningsböcker efter",
|
||||
"Sort notes by": "Sortera anteckningar efter",
|
||||
"Sort selected lines": "Sortera valda rader",
|
||||
@@ -708,15 +731,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "Redigeringskommandot (kan inkludera argument) som används för att öppna en anteckning. Om inget tillhandahålls försöker det automatiskt identifiera standardredigeraren.",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "Faktoregenskapen anger hur objektet kommer att växa eller krympa för att passa det tillgängliga utrymmet i sin behållare i förhållande till de andra artiklarna. Således tar ett objekt med faktorn 2 dubbelt så mycket utrymme som ett objekt med faktorn 1. Starta om appen för att se förändringar.",
|
||||
"The following attachments are being watched for changes:": "Följande bilagor övervakas för ändringar:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "Följande nycklar använder en föråldrad krypteringsalgoritm och det rekommenderas att uppgradera dem. Den uppgraderade nyckeln kommer fortfarande att kunna dekryptera och kryptera dina data som vanligt.",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Den mobila appen Joplin stöder för närvarande inte denna typ av länk: %s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Joplin-teamet har granskat denna insticksmodul och den uppfyller våra standarder för säkerhet och prestanda.",
|
||||
"The 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.": "Nycklarna med dessa ID används för att kryptera några av dina objekt, men programmet har för närvarande inte tillgång till dem. Det är troligt att de så småningom kommer att hämtas via synkronisering.",
|
||||
"The master key has been upgraded successfully!": "Huvudnyckeln har framgångsrikt uppgraderats!",
|
||||
"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.": "Huvudnycklarna med dessa ID används för att kryptera några av dina objekt, men programmet har inte tillgång till dem. Det är troligt att de så småningom kommer att hämtas via synkronisering.",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "Den här anteckningen \"%s\" har framgångsrikt återställts till anteckningsboken \"%s\".",
|
||||
"The notebook could not be saved: %s": "Anteckningsboken kunde inte sparas: %s",
|
||||
"The notes have been imported: %s": "Anteckningarna har importerats: %s",
|
||||
"The possible commands are:": "De möjliga kommandona är:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "Det gick inte att ta bort mottagaren från listan. Vänligen försök igen.\n\nFelet var: \"%s\"",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "Synkroniseringsmålet måste uppgraderas innan Joplin kan synkronisera. Åtgärden kan ta några minuter att slutföra och appen måste startas om. Klicka på länken för att fortsätta.",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "Synkroniseringsmålet måste uppgraderas. Tryck på den här bannern för att fortsätta.",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "Taggen \"%s\" finns redan. Välj ett annat namn.",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan).",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Web Clipper behöver din behörighet för att få åtkomst till dina data.",
|
||||
@@ -743,10 +770,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "Denna tjänst tillåter webbläsarens tillägg att kommunicera med Joplin. När du aktiverar den kan din brandvägg be dig ge tillstånd till Joplin att lyssna på en viss port.",
|
||||
"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.": "Detta tillåter Joplin att köra i bakgrunden. Det är rekommenderat att tillåta detta så att anteckningarna synkroniseras löpande. På det sättet minskas risken för konflikter.",
|
||||
"This will open a new screen. Save your current changes?": "Det här kommer öppna ett nytt fönster. Vill du spara nurvarande förändringar?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "Detta tar bort anteckningsboken från din samling och du kommer inte längre ha tillgång till innehållet. Vill du fortsätta?",
|
||||
"Time format": "Tidsformat",
|
||||
"title": "titel",
|
||||
"Title": "Titel",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "För att tillåta Joplin att synkronisera med Dropbox, följ stegen nedan:",
|
||||
"To continue, please enter your master password below.": "För att fortsätta, vänligen ange ditt huvudlösenord nedan.",
|
||||
"To delete a tag, untag the associated notes.": "För att ta bort en tagg, ta bort de associerade anteckningarna.",
|
||||
"To delete: %d": "För att ta bort: %d",
|
||||
"To enter command line mode, press \":\"": "För att komma in i kommandoradsläget, tryck på \":\"",
|
||||
@@ -833,6 +862,7 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "Du kan använda verktyget nedan för att omkryptera din data, exempelvis om du vill veta om vissa av dina anteckningar är krypterade med en gammal krypteringsmetod.",
|
||||
"Your choice: ": "Ditt val: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "Din data kommer att omkrypteras och synkroniseras igen.",
|
||||
"Your master password is needed to decrypt some of your data.": "Ditt huvudlösenord behövs för att dekryptera några av dina data.",
|
||||
"Your permission to use your camera is required.": "Du måste ge tillåtelse att använda kameran.",
|
||||
"Your version: %s": "Din version: %s",
|
||||
"Zoom In": "Zooma in",
|
||||
|
@@ -170,10 +170,12 @@
|
||||
"Generating link...": "กำลังสร้างลิงก์...",
|
||||
"Go to source URL": "ไปที่ URL แหล่งที่มา",
|
||||
"Heading": "หัวข้อ",
|
||||
"Help": "ช่วยเหลือ",
|
||||
"Hide %s": "ซ่อน %s",
|
||||
"HTML Directory": "ไดเรกทอรี่ HTML",
|
||||
"HTML File": "ไฟล์ HTML",
|
||||
"Hyperlink": "ไฮเปอร์ลิงก์",
|
||||
"Icon": "ไอคอน",
|
||||
"Ignore TLS certificate errors": "เพิกเฉยข้อผิดพลาด TLS certificate",
|
||||
"Import": "นำเข้า",
|
||||
"Importing from \"%s\" as \"%s\" format. Please wait...": "กำลังนำเข้าจาก “%s” ไปเป็นฟอร์แมต “%s” โปรดรอสักครู่...",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Parantez, çift tırnak gibi değerlerin çiftlerini otomatik ekle.",
|
||||
"Automatically switch theme to match system theme": "Temayı system temasına göre otomatik olarak değiştir",
|
||||
"Automatically update the application": "Uygulamayı otomatik olarak güncelle",
|
||||
"AWS key": "AWS anahtarı",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 deposu",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS gizli anahtarı",
|
||||
"Back": "Geri",
|
||||
"Bold": "Kalın",
|
||||
"Browse all plugins": "Tüm eklentilere göz at",
|
||||
@@ -338,6 +333,7 @@
|
||||
"Goto Anything...": "Şuraya Git...",
|
||||
"Grant authorisation": "Yetkilendirme ver",
|
||||
"Heading": "Başlık",
|
||||
"Help": "Yardım",
|
||||
"Hide %s": "Şunu Gizle: %s",
|
||||
"Hide Joplin": "Joplin'i Gizle",
|
||||
"Highlight": "Vurgula",
|
||||
@@ -345,6 +341,7 @@
|
||||
"HTML Directory": "HTML Dizini",
|
||||
"HTML File": "HTML Dosyası",
|
||||
"Hyperlink": "Köprü link",
|
||||
"Icon": "İkon",
|
||||
"ID": "Kimlik",
|
||||
"Idle": "Boşta",
|
||||
"Ignore": "Vazgeç",
|
||||
|
@@ -72,11 +72,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Автоматичне закриття дужок, лапок тощо.",
|
||||
"Automatically switch theme to match system theme": "Автоматично перемикати тему на відповідність системній темі",
|
||||
"Automatically update the application": "Автоматично оновлювати програму",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 посилання",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Назад",
|
||||
"Bold": "Жирний",
|
||||
"Browse all plugins": "Переглянути всі розширення",
|
||||
|
@@ -78,11 +78,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "Tự động đóng ngoặc nhọn, ngoặc đơn, ngoặc kép, v.v...",
|
||||
"Automatically switch theme to match system theme": "Tự động đổi giao diện khớp với giao diện hệ thống",
|
||||
"Automatically update the application": "Tự động cập nhật ứng dụng",
|
||||
"AWS key": "AWS key",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "Quay lại",
|
||||
"Bold": "In đậm",
|
||||
"Browse all plugins": "Duyệt tất cả phần mở rộng",
|
||||
@@ -329,6 +324,7 @@
|
||||
"Goto Anything...": "Đi tới bất kỳ điểm nào...",
|
||||
"Grant authorisation": "Cung cấp uỷ quyền",
|
||||
"Heading": "Tiêu đề",
|
||||
"Help": "Trợ giúp",
|
||||
"Hide %s": "Ẩn %s",
|
||||
"Hide Joplin": "Ẩn Joplin",
|
||||
"Highlight": "Nổi bật",
|
||||
@@ -336,6 +332,7 @@
|
||||
"HTML Directory": "HTML Directory",
|
||||
"HTML File": "HTML File",
|
||||
"Hyperlink": "Hyperlink",
|
||||
"Icon": "Icon",
|
||||
"ID": "ID",
|
||||
"Idle": "Không hoạt động",
|
||||
"Ignore": "Bỏ qua",
|
||||
|
@@ -80,11 +80,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "自动配对花括号、圆括号、引号等。",
|
||||
"Automatically switch theme to match system theme": "根据系统主题自动切换",
|
||||
"Automatically update the application": "自动更新应用",
|
||||
"AWS key": "AWS 密钥",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 存储桶",
|
||||
"AWS S3 URL": "AWS S3 URL",
|
||||
"AWS secret": "AWS 密码",
|
||||
"Back": "返回",
|
||||
"Bold": "加粗",
|
||||
"Browse all plugins": "浏览所有插件",
|
||||
@@ -106,6 +101,7 @@
|
||||
"Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.": "无法刷新令牌:缺少认证数据。重新同步可能会修正此错误。",
|
||||
"Cannot save %s \"%s\" because it is larger than the allowed limit (%s)": "无法保存 %s “%s”,因为超过了允许的限制大小(%s)。",
|
||||
"Cannot save %s \"%s\" because it would go over the total allowed size (%s) for this account": "无法保存 %s “%s”,因为超过了允许的限制大小(%s)",
|
||||
"Cannot share encrypted notebook with recipient %s because they have not enabled end-to-end encryption. They may do so from the screen Configuration > Encryption.": "无法与收件人%s共享加密的笔记本,因为他们没有启用端到端加密。他们可以通过“配置”>“加密”界面来启用。",
|
||||
"Change application layout": "更改应用布局",
|
||||
"Change language": "更改语言",
|
||||
"Characters": "字符数",
|
||||
@@ -144,10 +140,12 @@
|
||||
"Conflicted: %d": "有冲突: %d 条",
|
||||
"Conflicts": "冲突",
|
||||
"Conflicts (attachments)": "冲突(附件)",
|
||||
"Content provided by %s": "内容由%s提供",
|
||||
"Convert to note": "转换为笔记",
|
||||
"Convert to todo": "转换为待办事项",
|
||||
"Copy": "复制",
|
||||
"Copy dev mode command to clipboard": "复制开发者模式命令到剪贴板",
|
||||
"Copy external link": "拷贝外部访问地址",
|
||||
"Copy Link Address": "复制链接地址",
|
||||
"Copy Markdown link": "复制 Markdown 链接",
|
||||
"Copy path to clipboard": "复制路径到剪贴板",
|
||||
@@ -158,6 +156,7 @@
|
||||
"Could not connect to plugin repository.": "无法连接到插件库。",
|
||||
"Could not export notes: %s": "无法导出笔记:%s",
|
||||
"Could not install plugin: %s": "无法安装插件:%s",
|
||||
"Could not respond to the invitation. Please try again, or check with the notebook owner if they are still sharing it.\n\nThe error was: \"%s\"": "无法对邀请作出回应。请再试一次,或向笔记本所有者核实他们是否仍在共享它。\n\n错误是:“%s”",
|
||||
"Could not upgrade master key: %s": "无法升级主密钥:%s",
|
||||
"Create a notebook": "新建笔记本",
|
||||
"Created": "创建日期",
|
||||
@@ -229,6 +228,7 @@
|
||||
"Displays version information": "显示版本信息",
|
||||
"Do it now": "现在完成",
|
||||
"Do not ask for confirmation.": "不再要求确认。",
|
||||
"Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.": "不要丢失密码,因为出于安全考虑,这将是解密数据的*唯一*方式!要启用加密功能,请在下面输入密码。",
|
||||
"Download": "下载",
|
||||
"Download and install the relevant extension for your browser:": "为您的浏览器下载并安装相关的扩展:",
|
||||
"Downloaded": "已下载",
|
||||
@@ -280,12 +280,16 @@
|
||||
"Enable Web Clipper Service": "启用网页剪辑服务",
|
||||
"Enable ~sub~ syntax": "启用 ~sub~ 语法",
|
||||
"Enabled": "已启用",
|
||||
"Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target.": "启用加密意味着您的*所有*笔记与附件都将被重新同步,并被加密发送到同步目标。",
|
||||
"Encrypted": "已加密",
|
||||
"Encrypted items cannot be modified": "无法修改已加密的条目",
|
||||
"Encrypted notebooks cannot be renamed": "无法重命名已加密的笔记本",
|
||||
"Encryption": "加密",
|
||||
"Encryption Config": "加密配置",
|
||||
"Encryption is: %s": "加密状态: %s",
|
||||
"Encryption keys": "加密密钥",
|
||||
"Encryption:": "加密:",
|
||||
"End-to-end encryption": "端到端加密",
|
||||
"Enter code here": "在此输入代码",
|
||||
"Enter master password:": "输入主密码:",
|
||||
"Enter notebook title": "输入笔记本标题",
|
||||
@@ -332,6 +336,7 @@
|
||||
"FTS enabled: %d": "FTS 已开启: %d",
|
||||
"Full changelog": "完整更新记录",
|
||||
"General": "通用选项",
|
||||
"Generated": "已生成",
|
||||
"Generating link...": "生成链接...",
|
||||
"Get it now:": "立即获取:",
|
||||
"Get pre-releases when checking for updates": "检查更新时获取预发行版本",
|
||||
@@ -340,13 +345,16 @@
|
||||
"Goto Anything...": "跳转到任意内容...",
|
||||
"Grant authorisation": "授权令牌",
|
||||
"Heading": "标题",
|
||||
"Help": "帮助",
|
||||
"Hide %s": "隐藏 %s",
|
||||
"Hide disabled keys": "隐藏禁用的密钥",
|
||||
"Hide Joplin": "隐藏 Joplin",
|
||||
"Highlight": "突出显示",
|
||||
"Horizontal Rule": "水平线",
|
||||
"HTML Directory": "HTML 目录",
|
||||
"HTML File": "HTML 文件",
|
||||
"Hyperlink": "超链接",
|
||||
"Icon": "图标",
|
||||
"ID": "ID",
|
||||
"Idle": "空闲",
|
||||
"Ignore": "忽略",
|
||||
@@ -403,12 +411,14 @@
|
||||
"Keyboard Shortcut": "键盘快捷键",
|
||||
"Keyboard Shortcuts": "键盘快捷键",
|
||||
"Keychain Supported: %s": "支持的密钥链: %s",
|
||||
"Keys that need upgrading": "需要升级的密钥",
|
||||
"Landscape": "横板",
|
||||
"Language": "语言",
|
||||
"Last error: %s": "最后错误: %s",
|
||||
"Later": "稍后",
|
||||
"Layout": "布局",
|
||||
"Layout button sequence": "布局按钮序列",
|
||||
"Leave notebook...": "离开笔记本...",
|
||||
"Legal": "法律专用纸 (Legal)",
|
||||
"Letter": "信函 (Letter)",
|
||||
"Light": "明亮",
|
||||
@@ -425,9 +435,13 @@
|
||||
"Login with Dropbox": "通过 Dropbox 登录",
|
||||
"Login with OneDrive": "通过 OneDrive 登录",
|
||||
"Make a donation": "捐助",
|
||||
"Manage master password": "管理主密码",
|
||||
"Manage master password...": "管理主密码……",
|
||||
"Manage your plugins": "管理您的插件",
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file`, and `target-status`.": "管理 E2EE 配置。命令为: `enable`、`disable`、`decrypt`、`status`、`decrypt-file` 和 `target-status`。",
|
||||
"Manual": "手动",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown + Front Matter": "Markdown + 文章前言",
|
||||
"Marks a to-do as done.": "标记待办事项为完成。",
|
||||
"Marks a to-do as non-completed.": "标记待办事项为未完成。",
|
||||
"Markup": "标记语言",
|
||||
@@ -435,7 +449,8 @@
|
||||
"Master password": "主密码",
|
||||
"Master password:": "主密码:",
|
||||
"Max concurrent connections": "最大并发连接数",
|
||||
"Missing Master Keys": "缺少主密码",
|
||||
"Missing keys": "缺少密钥",
|
||||
"Missing Master Keys": "缺少主密钥",
|
||||
"Missing required argument: %s": "缺失必选参数:%s",
|
||||
"Mobile data - auto-sync disabled": "手机数据自动同步被禁用",
|
||||
"More info": "更多信息",
|
||||
@@ -475,6 +490,7 @@
|
||||
"Nord": "北欧 (Nord)",
|
||||
"Not authentified with %s. Please provide any missing credentials.": "未授予 %s 的权限。请提供缺少的凭据。",
|
||||
"Not downloaded": "未下载",
|
||||
"Not generated": "未生成",
|
||||
"note": "笔记",
|
||||
"Note": "笔记",
|
||||
"Note area growth factor": "笔记区域增长因子",
|
||||
@@ -529,8 +545,10 @@
|
||||
"PDF File": "PDF 文件",
|
||||
"Permission needed": "需要的权限",
|
||||
"Permission to use camera": "使用相机的权限",
|
||||
"Please click on \"%s\" to proceed": "请点击“%s”继续",
|
||||
"Please confirm that you would like to re-encrypt your complete database.": "请确认您要重新加密整个数据库。",
|
||||
"Please enter your password in the master key list below before upgrading the key.": "在升级密钥之前,请在下面的主密钥列表中输入您的密码。",
|
||||
"Please note that if it is a large notebook, it may take a few minutes for all the notes to show up on the recipient's device.": "请注意,如果是大型笔记本,可能需要几分钟时间才能在收件人的设备上显示出所有的笔记。",
|
||||
"Please open the following URL in your browser to authenticate the application. The application will create a directory in \"Apps/Joplin\" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.": "请在浏览器中打开以下链接以验证本应用程序。本应用会建立 \"Apps/Joplin\" 文件目录,并只会读写该目录中的文件。本应用没有任何权限访问此目录以外的任何文件或个人信息,也不会与第三方分享任何数据。",
|
||||
"Please select a notebook first.": "请先选择笔记本。",
|
||||
"Please select the note or notebook to be deleted first.": "请先选择需要删除的笔记或笔记本。",
|
||||
@@ -558,6 +576,7 @@
|
||||
"Privacy Policy": "隐私政策",
|
||||
"Profile Version: %s": "配置文件版本: %s",
|
||||
"Properties": "笔记属性",
|
||||
"Public-private key pair:": "公、私密钥对:",
|
||||
"Publish note...": "分享笔记...",
|
||||
"Publish Notes": "分享笔记",
|
||||
"Publish notes to the internet": "把笔记发布到互联网",
|
||||
@@ -582,6 +601,7 @@
|
||||
"Rename tag:": "重命名标签:",
|
||||
"Renames the given <item> (note or notebook) to <name>.": "重命名选定的 <item> (笔记或笔记本) 到 <name>。",
|
||||
"Renew token": "更新令牌",
|
||||
"Reset master password": "重置主密码",
|
||||
"Resources: %d.": "资源: %d。",
|
||||
"Restart and upgrade": "重启后升级",
|
||||
"Restart now": "立即重启",
|
||||
@@ -615,6 +635,7 @@
|
||||
"Server is running on port %d": "服务正在端口 %d 上运行",
|
||||
"Set alarm": "设置提醒",
|
||||
"Set alarm:": "设置提醒:",
|
||||
"Set it to 0 to make it take the complete available space. Recommended width is 600.": "设置为 0 则占用全部可用空间。建议宽度为600。",
|
||||
"Set the password": "设置密码",
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s": "将给定的 <note> 的属性 <name> 设置为 [value]。可用属性有: \n\n%s",
|
||||
"Share": "分享",
|
||||
@@ -625,6 +646,7 @@
|
||||
"Show Advanced Settings": "显示高级选项",
|
||||
"Show all": "显示全部",
|
||||
"Show completed to-dos": "显示已完成待办事项",
|
||||
"Show disabled keys": "显示禁用的密钥",
|
||||
"Show note counts": "显示笔记数",
|
||||
"Show tray icon": "显示托盘图标",
|
||||
"Sidebar": "边栏",
|
||||
@@ -711,15 +733,19 @@
|
||||
"The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.": "该文本编辑器命令 (可包括参数) 将会被用于打开笔记。若未提供将尝试自动检测默认编辑器。",
|
||||
"The factor property sets how the item will grow or shrink to fit the available space in its container with respect to the other items. Thus an item with a factor of 2 will take twice as much space as an item with a factor of 1.Restart app to see changes.": "因子属性决定了列表上的一项如何增长或缩小,以适应其容器中相对于其他项目的可用空间。因此因子为 2 的项是因数为 1 的项占用空间的两倍。重启软件以查看变化。",
|
||||
"The following attachments are being watched for changes:": "下列附件将被监控变化:",
|
||||
"The following keys use an out-dated encryption algorithm and it is recommended to upgrade them. The upgraded key will still be able to decrypt and encrypt your data as usual.": "以下密钥使用了过时的加密算法,建议对其进行升级。 升级后的密钥仍将能够照常解密和加密您的数据。",
|
||||
"The Joplin mobile app does not currently support this type of link: %s": "Joplin 移动应用目前不支持这种类型的链接:%s",
|
||||
"The Joplin team has vetted this plugin and it meets our standards for security and performance.": "Joplin 团队已经通过了该插件的审查,它符合我们对于安全和性能的要求。",
|
||||
"The 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.": "具有这些 ID 的密钥用于加密你的部分项目,但应用程序目前无法访问它们。它们很可能最终会通过同步下载。",
|
||||
"The master key has been upgraded successfully!": "主密钥已成功升级!",
|
||||
"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.": "具有这些 ID 的主密钥用于加密某些项,但应用程序目前无法访问它们。最终它们很可能通过同步下载。",
|
||||
"The note \"%s\" has been successfully restored to the notebook \"%s\".": "笔记“%s”已成功恢复到笔记本“%s”中。",
|
||||
"The notebook could not be saved: %s": "无法保存笔记本:%s",
|
||||
"The notes have been imported: %s": "以下笔记已被导入: %s",
|
||||
"The possible commands are:": "可用的命令有:",
|
||||
"The recipient could not be removed from the list. Please try again.\n\nThe error was: \"%s\"": "收件人无法从列表中删除。请再试一次。\n\n错误:“%s”",
|
||||
"The sync target needs to be upgraded before Joplin can sync. The operation may take a few minutes to complete and the app needs to be restarted. To proceed please click on the link.": "需要更新同步目标以启用 Joplin 同步。该操作可能需要数分钟时间完成,应用也需要重启。单击链接以继续。",
|
||||
"The sync target needs to be upgraded. Press this banner to proceed.": "同步目标需要升级。按这个横幅继续。",
|
||||
"The tag \"%s\" already exists. Please choose a different name.": "标签 \"%s\" 已存在。请选择一个不同的名称。",
|
||||
"The target to synchronise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).": "所要同步的目标。每个同步目标都可能有名为 `sync.NUM.NAME` 的附加参数 (见下文) 。",
|
||||
"The Web Clipper needs your authorisation to access your data.": "Web Clipper 需要你的授权才能访问你的数据。",
|
||||
@@ -746,10 +772,12 @@
|
||||
"This service allows the browser extension to communicate with Joplin. When enabling it your firewall may ask you to give permission to Joplin to listen to a particular port.": "该服务允许浏览器扩展与 Joplin 通信。当启用它时,你的防火墙可能会要求你允许 Joplin 监听一个特定的端口。",
|
||||
"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.": "这将允许 Joplin 在后台运行,如果你经常修改和同步笔记,推荐启用该设置来减少可能的冲突。",
|
||||
"This will open a new screen. Save your current changes?": "这将打开一个新页面。是否保存当前更改?",
|
||||
"This will remove the notebook from your collection and you will no longer have access to its content. Do you wish to continue?": "这将从您的收藏中删除该笔记本,您将不再有机会访问其内容。您希望继续吗?",
|
||||
"Time format": "时间格式",
|
||||
"title": "标题",
|
||||
"Title": "标题",
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:": "要让 Joplin 与 Dropbox 同步,请按下列步骤操作:",
|
||||
"To continue, please enter your master password below.": "若要继续,请在下面输入您的主密码。",
|
||||
"To delete a tag, untag the associated notes.": "移除相关笔记的标签后才可删除此标签。",
|
||||
"To delete: %d": "将删除: %d 条",
|
||||
"To enter command line mode, press \":\"": "按 \":\" 键进入命令行模式",
|
||||
@@ -836,6 +864,7 @@
|
||||
"You may use the tool below to re-encrypt your data, for example if you know that some of your notes are encrypted with an obsolete encryption method.": "您可以使用下面的工具重新加密您的数据。例如,在当您知道某些笔记使用了过时的加密方法时。",
|
||||
"Your choice: ": "您的选择: ",
|
||||
"Your data is going to be re-encrypted and synced again.": "您的数据将被重新加密并再次同步。",
|
||||
"Your master password is needed to decrypt some of your data.": "要解密您的某些数据,必须使用您的主密码。",
|
||||
"Your permission to use your camera is required.": "您需要授予相机权限。",
|
||||
"Your version: %s": "您的版本:%s",
|
||||
"Zoom In": "放大",
|
||||
|
@@ -78,11 +78,6 @@
|
||||
"Auto-pair braces, parenthesis, quotations, etc.": "自動配對大括號、括號、引號等。",
|
||||
"Automatically switch theme to match system theme": "自動切換以配合系統主題",
|
||||
"Automatically update the application": "自動更新應用程式",
|
||||
"AWS key": "AWS 金鑰",
|
||||
"AWS S3": "AWS S3",
|
||||
"AWS S3 bucket": "AWS S3 bucket",
|
||||
"AWS S3 URL": "AWS S3 網址",
|
||||
"AWS secret": "AWS secret",
|
||||
"Back": "返回",
|
||||
"Bold": "粗體",
|
||||
"Browse all plugins": "瀏覽所有延伸模組",
|
||||
@@ -328,6 +323,7 @@
|
||||
"Go to source URL": "前往來源網址",
|
||||
"Goto Anything...": "前往任意內容...",
|
||||
"Heading": "標題",
|
||||
"Help": "說明",
|
||||
"Hide %s": "隱藏 %s",
|
||||
"Hide Joplin": "隱藏 Joplin",
|
||||
"Highlight": "強調標記",
|
||||
@@ -335,6 +331,7 @@
|
||||
"HTML Directory": "HTML 目錄",
|
||||
"HTML File": "HTML 檔案",
|
||||
"Hyperlink": "超連結",
|
||||
"Icon": "圖示",
|
||||
"ID": "ID",
|
||||
"Idle": "閒置",
|
||||
"Ignore": "忽略",
|
||||
|
@@ -503,7 +503,7 @@ class Setting extends BaseModel {
|
||||
return value ? rtrimSlashes(value) : '';
|
||||
},
|
||||
public: true,
|
||||
label: () => _('S3 bucket'),
|
||||
label: () => _('AWS S3 bucket'),
|
||||
description: () => emptyDirWarning,
|
||||
storage: SettingStorage.File,
|
||||
},
|
||||
@@ -518,7 +518,7 @@ class Setting extends BaseModel {
|
||||
return value ? value.trim() : '';
|
||||
},
|
||||
public: true,
|
||||
label: () => _('S3 URL'),
|
||||
label: () => _('AWS S3 URL'),
|
||||
storage: SettingStorage.File,
|
||||
},
|
||||
'sync.8.region': {
|
||||
@@ -532,7 +532,7 @@ class Setting extends BaseModel {
|
||||
return value ? value.trim() : '';
|
||||
},
|
||||
public: true,
|
||||
label: () => _('Region'),
|
||||
label: () => _('AWS region'),
|
||||
storage: SettingStorage.File,
|
||||
},
|
||||
'sync.8.username': {
|
||||
@@ -543,7 +543,7 @@ class Setting extends BaseModel {
|
||||
return settings['sync.target'] == SyncTargetRegistry.nameToId('amazon_s3');
|
||||
},
|
||||
public: true,
|
||||
label: () => _('Access Key'),
|
||||
label: () => _('AWS access key'),
|
||||
storage: SettingStorage.File,
|
||||
},
|
||||
'sync.8.password': {
|
||||
@@ -554,7 +554,7 @@ class Setting extends BaseModel {
|
||||
return settings['sync.target'] == SyncTargetRegistry.nameToId('amazon_s3');
|
||||
},
|
||||
public: true,
|
||||
label: () => _('Secret Key'),
|
||||
label: () => _('AWS secret key'),
|
||||
secure: true,
|
||||
},
|
||||
'sync.8.forcePathStyle': {
|
||||
@@ -565,7 +565,7 @@ class Setting extends BaseModel {
|
||||
return settings['sync.target'] == SyncTargetRegistry.nameToId('amazon_s3');
|
||||
},
|
||||
public: true,
|
||||
label: () => _('Force Path Style'),
|
||||
label: () => _('Force path style'),
|
||||
storage: SettingStorage.File,
|
||||
},
|
||||
'sync.9.path': {
|
||||
@@ -864,7 +864,7 @@ class Setting extends BaseModel {
|
||||
section: 'appearance',
|
||||
public: true,
|
||||
label: () => _('Show sort order buttons'),
|
||||
description: () => _('If true, sort order buttons (field + reverse) for notes are shown at the top of Note List.'),
|
||||
// description: () => _('If true, sort order buttons (field + reverse) for notes are shown at the top of Note List.'),
|
||||
appTypes: [AppType.Desktop],
|
||||
},
|
||||
'notes.perFieldReversalEnabled': {
|
||||
|
@@ -38,8 +38,9 @@ export async function getDeviceTimeDrift(): Promise<number> {
|
||||
break;
|
||||
} catch (error) {
|
||||
if (tryCount >= maxTries) {
|
||||
error.message = `Cannot retrieve the network time: ${error.message}`;
|
||||
throw error;
|
||||
const newError = typeof error === 'string' ? new Error(error) : error;
|
||||
newError.message = `Cannot retrieve the network time from ${server.domain}:${server.port}: ${newError.message}`;
|
||||
throw newError;
|
||||
} else {
|
||||
await time.msleep(tryCount * 1000);
|
||||
}
|
||||
|
@@ -104,6 +104,8 @@ document.addEventListener('click', function(event) {
|
||||
if (webviewLib.handleInternalLink(event, anchor)) return;
|
||||
event.preventDefault();
|
||||
if (anchor.getAttribute('href')) webviewLib.options_.postMessage(anchor.getAttribute('href'));
|
||||
// Depending on the chart type, the generated SVG contains an anchor element with xlink:href attribute.
|
||||
if (anchor.getAttribute('xlink:href')) webviewLib.options_.postMessage(anchor.getAttribute('xlink:href'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,7 @@ import shim from '../../shim';
|
||||
import JoplinError from '../../JoplinError';
|
||||
import time from '../../time';
|
||||
import { FileApi } from '../../file-api';
|
||||
import { AppType } from '../../models/Setting';
|
||||
const { fileExtension, filename } = require('../../path-utils');
|
||||
|
||||
export enum LockType {
|
||||
@@ -46,6 +47,13 @@ export function lockNameToObject(name: string, updatedTime: number = null): Lock
|
||||
return lock;
|
||||
}
|
||||
|
||||
export function appTypeToLockType(appType: AppType): LockClientType {
|
||||
if (appType === AppType.Desktop) return LockClientType.Desktop;
|
||||
if (appType === AppType.Mobile) return LockClientType.Mobile;
|
||||
if (appType === AppType.Cli) return LockClientType.Cli;
|
||||
throw new Error(`Invalid app type: ${appType}`);
|
||||
}
|
||||
|
||||
export function hasActiveLock(locks: Lock[], currentDate: Date, lockTtl: number, lockType: LockType, clientType: LockClientType = null, clientId: string = null) {
|
||||
const lock = activeLock(locks, currentDate, lockTtl, lockType, clientType, clientId);
|
||||
return !!lock;
|
||||
|
@@ -2,6 +2,7 @@ import shim from '../../../shim';
|
||||
import MigrationHandler from '../MigrationHandler';
|
||||
import Setting from '../../../models/Setting';
|
||||
import { reg } from '../../../registry';
|
||||
import { appTypeToLockType } from '../LockHandler';
|
||||
const { useEffect, useState } = shim.react();
|
||||
|
||||
export interface SyncTargetUpgradeResult {
|
||||
@@ -28,7 +29,7 @@ export default function useSyncTargetUpgrade(): SyncTargetUpgradeResult {
|
||||
synchronizer.api(),
|
||||
reg.db(),
|
||||
synchronizer.lockHandler(),
|
||||
Setting.value('appType'),
|
||||
appTypeToLockType(Setting.value('appType')),
|
||||
Setting.value('clientId')
|
||||
);
|
||||
|
||||
|
35
packages/renderer/assets/mermaid/mermaid.min.js
vendored
35
packages/renderer/assets/mermaid/mermaid.min.js
vendored
File diff suppressed because one or more lines are too long
1194
packages/renderer/package-lock.json
generated
1194
packages/renderer/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -45,7 +45,7 @@
|
||||
"markdown-it-sup": "^1.0.0",
|
||||
"markdown-it-toc-done-right": "^4.1.0",
|
||||
"md5": "^2.2.1",
|
||||
"mermaid": "^8.12.1",
|
||||
"mermaid": "^8.13.5",
|
||||
"uslug": "git+https://github.com/laurent22/uslug.git#emoji-support"
|
||||
},
|
||||
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
|
||||
|
@@ -10,7 +10,7 @@ module.exports = {
|
||||
|
||||
testEnvironment: 'node',
|
||||
|
||||
slowTestThreshold: 40,
|
||||
slowTestThreshold: 60,
|
||||
|
||||
setupFilesAfterEnv: [`${__dirname}/jest.setup.js`],
|
||||
};
|
||||
|
4
packages/server/package-lock.json
generated
4
packages/server/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@joplin/server",
|
||||
"version": "2.6.13",
|
||||
"version": "2.6.14",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@joplin/server",
|
||||
"version": "2.6.13",
|
||||
"version": "2.6.14",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.40.0",
|
||||
"@fortawesome/fontawesome-free": "^5.15.1",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@joplin/server",
|
||||
"version": "2.6.13",
|
||||
"version": "2.6.14",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start-dev": "npm run build && JOPLIN_IS_TESTING=1 nodemon --config nodemon.json --ext ts,js,mustache,css,tsx dist/app.js --env dev",
|
||||
|
@@ -23,6 +23,7 @@ import setupCommands from './utils/setupCommands';
|
||||
import { RouteResponseFormat, routeResponseFormat } from './utils/routeUtils';
|
||||
import { parseEnv } from './env';
|
||||
import storageConnectionCheck from './utils/storageConnectionCheck';
|
||||
import { setLocale } from '@joplin/lib/locale';
|
||||
|
||||
interface Argv {
|
||||
env?: Env;
|
||||
@@ -254,11 +255,15 @@ async function main() {
|
||||
if (config().maxTimeDrift) {
|
||||
const timeDrift = await getDeviceTimeDrift();
|
||||
if (Math.abs(timeDrift) > config().maxTimeDrift) {
|
||||
throw new Error(`The device time drift is ${timeDrift}ms (Max allowed: ${config().maxTimeDrift}ms) - cannot continue as it could cause data loss and conflicts on the sync clients. You may increase env var MAX_TIME_DRIFT to pass the check.`);
|
||||
throw new Error(`The device time drift is ${timeDrift}ms (Max allowed: ${config().maxTimeDrift}ms) - cannot continue as it could cause data loss and conflicts on the sync clients. You may increase env var MAX_TIME_DRIFT to pass the check, or set to 0 to disabled the check.`);
|
||||
}
|
||||
appLogger().info(`NTP time offset: ${timeDrift}ms`);
|
||||
} else {
|
||||
appLogger().info('Skipping NTP time check because MAX_TIME_DRIFT is 0.');
|
||||
}
|
||||
|
||||
setLocale('en_GB');
|
||||
|
||||
appLogger().info('Running in Docker:', runningInDocker());
|
||||
appLogger().info('Public base URL:', config().baseUrl);
|
||||
appLogger().info('API base URL:', config().apiBaseUrl);
|
||||
|
@@ -14,9 +14,10 @@ enum ArgvCommand {
|
||||
|
||||
interface Argv {
|
||||
command: ArgvCommand;
|
||||
connection: string;
|
||||
connection?: string;
|
||||
batchSize?: number;
|
||||
maxContentSize?: number;
|
||||
maxProcessedItems?: number;
|
||||
}
|
||||
|
||||
export default class StorageCommand extends BaseCommand {
|
||||
@@ -52,6 +53,10 @@ export default class StorageCommand extends BaseCommand {
|
||||
type: 'number',
|
||||
description: 'Max content size',
|
||||
},
|
||||
'max-processed-items': {
|
||||
type: 'number',
|
||||
description: 'Max number of items to process before stopping',
|
||||
},
|
||||
'connection': {
|
||||
description: 'storage connection string',
|
||||
type: 'string',
|
||||
@@ -85,11 +90,14 @@ export default class StorageCommand extends BaseCommand {
|
||||
},
|
||||
|
||||
[ArgvCommand.DeleteDatabaseContentColumn]: async () => {
|
||||
const maxProcessedItems = argv.maxProcessedItems;
|
||||
|
||||
logger.info(`Batch size: ${batchSize}`);
|
||||
|
||||
await runContext.models.item().deleteDatabaseContentColumn({
|
||||
batchSize,
|
||||
logger,
|
||||
maxProcessedItems,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
@@ -24,7 +24,7 @@ const defaultEnvValues: EnvVariables = {
|
||||
// result in clients generating many conflicts. Set to 0 to disable the
|
||||
// check. https://github.com/laurent22/joplin/issues/5738
|
||||
|
||||
MAX_TIME_DRIFT: 100,
|
||||
MAX_TIME_DRIFT: 2000,
|
||||
|
||||
// ==================================================
|
||||
// URL config
|
||||
|
@@ -462,6 +462,41 @@ describe('ItemModel', function() {
|
||||
expect(await models().item().dbContent(note1.id)).toEqual(Buffer.from(''));
|
||||
});
|
||||
|
||||
test('should delete the database item content - maxProcessedItems handling', async function() {
|
||||
if (isSqlite(db())) {
|
||||
expect(1).toBe(1);
|
||||
return;
|
||||
}
|
||||
|
||||
const { user: user1 } = await createUserAndSession(1);
|
||||
|
||||
await createItemTree3(user1.id, '', '', [
|
||||
{
|
||||
id: '000000000000000000000000000000F1',
|
||||
children: [
|
||||
{ id: '00000000000000000000000000000001' },
|
||||
{ id: '00000000000000000000000000000002' },
|
||||
{ id: '00000000000000000000000000000003' },
|
||||
{ id: '00000000000000000000000000000004' },
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
await models().item().deleteDatabaseContentColumn({ batchSize: 2, maxProcessedItems: 4 });
|
||||
|
||||
const itemIds = (await models().item().all()).map(it => it.id);
|
||||
const contents = await Promise.all([
|
||||
models().item().dbContent(itemIds[0]),
|
||||
models().item().dbContent(itemIds[1]),
|
||||
models().item().dbContent(itemIds[2]),
|
||||
models().item().dbContent(itemIds[3]),
|
||||
models().item().dbContent(itemIds[4]),
|
||||
]);
|
||||
|
||||
const emptyOnes = contents.filter(c => c.toString() === '');
|
||||
expect(emptyOnes.length).toBe(4);
|
||||
});
|
||||
|
||||
// test('should stop importing item if it has been deleted', async function() {
|
||||
// const { user: user1 } = await createUserAndSession(1);
|
||||
|
||||
|
@@ -30,6 +30,7 @@ export interface ImportContentToStorageOptions {
|
||||
export interface DeleteDatabaseContentOptions {
|
||||
batchSize?: number;
|
||||
logger?: Logger | LoggerWrapper;
|
||||
maxProcessedItems?: number;
|
||||
}
|
||||
|
||||
export interface SaveFromRawContentItem {
|
||||
@@ -409,20 +410,21 @@ export default class ItemModel extends BaseModel<Item> {
|
||||
options = {
|
||||
batchSize: 1000,
|
||||
logger: new Logger(),
|
||||
maxProcessedItems: 0,
|
||||
...options,
|
||||
};
|
||||
|
||||
const itemCount = (await this.db(this.tableName)
|
||||
.count('id', { as: 'total' })
|
||||
.where('content', '!=', Buffer.from(''))
|
||||
.first())['total'];
|
||||
// const itemCount = (await this.db(this.tableName)
|
||||
// .count('id', { as: 'total' })
|
||||
// .where('content', '!=', Buffer.from(''))
|
||||
// .first())['total'];
|
||||
|
||||
let totalDone = 0;
|
||||
|
||||
// UPDATE items SET content = '\x' WHERE id IN (SELECT id FROM items WHERE content != '\x' LIMIT 5000);
|
||||
|
||||
while (true) {
|
||||
options.logger.info(`Processing items ${totalDone} / ${itemCount}`);
|
||||
options.logger.info(`Processing items ${totalDone}`);
|
||||
|
||||
const updatedRows = await this
|
||||
.db(this.tableName)
|
||||
@@ -440,6 +442,11 @@ export default class ItemModel extends BaseModel<Item> {
|
||||
return;
|
||||
}
|
||||
|
||||
if (options.maxProcessedItems && totalDone + options.batchSize > options.maxProcessedItems) {
|
||||
options.logger.info(`Processed ${totalDone} items out of requested ${options.maxProcessedItems}`);
|
||||
return;
|
||||
}
|
||||
|
||||
await msleep(1000);
|
||||
}
|
||||
}
|
||||
|
@@ -16,7 +16,7 @@ describe('index_changes', function() {
|
||||
});
|
||||
|
||||
test('should list changes', async function() {
|
||||
const { user: user1, session: session1 } = await createUserAndSession(1);
|
||||
const { user: user1, session: session1 } = await createUserAndSession(1, true);
|
||||
|
||||
const items: any = {};
|
||||
for (let i = 1; i <= 150; i++) {
|
||||
|
@@ -9,10 +9,13 @@ import defaultView from '../../utils/defaultView';
|
||||
import { View } from '../../services/MustacheService';
|
||||
import { makeTablePagination, Table, Row, makeTableView } from '../../utils/views/table';
|
||||
import config, { showItemUrls } from '../../config';
|
||||
import { ErrorForbidden } from '../../utils/errors';
|
||||
|
||||
const router = new Router(RouteType.Web);
|
||||
|
||||
router.get('changes', async (_path: SubPath, ctx: AppContext) => {
|
||||
if (!ctx.joplin.owner.is_admin) throw new ErrorForbidden();
|
||||
|
||||
const pagination = makeTablePagination(ctx.query, 'updated_time', PaginationOrderDir.DESC);
|
||||
const paginatedChanges = await ctx.joplin.models.change().allByUser(ctx.joplin.owner.id, pagination);
|
||||
const items = await ctx.joplin.models.item().loadByIds(paginatedChanges.items.map(i => i.item_id), { fields: ['id'] });
|
||||
|
@@ -16,7 +16,7 @@ describe('index_items', function() {
|
||||
});
|
||||
|
||||
test('should list the user items', async function() {
|
||||
const { user: user1, session: session1 } = await createUserAndSession(1);
|
||||
const { user: user1, session: session1 } = await createUserAndSession(1, true);
|
||||
|
||||
const items: any = {};
|
||||
for (let i = 1; i <= 150; i++) {
|
||||
|
@@ -2,7 +2,7 @@ import { SubPath, respondWithItemContent } from '../../utils/routeUtils';
|
||||
import Router from '../../utils/Router';
|
||||
import { RouteType } from '../../utils/types';
|
||||
import { AppContext } from '../../utils/types';
|
||||
import { ErrorNotFound } from '../../utils/errors';
|
||||
import { ErrorForbidden, ErrorNotFound } from '../../utils/errors';
|
||||
import config, { showItemUrls } from '../../config';
|
||||
import { formatDateTime } from '../../utils/time';
|
||||
import defaultView from '../../utils/defaultView';
|
||||
@@ -14,6 +14,8 @@ import { formatBytes } from '../../utils/bytes';
|
||||
const router = new Router(RouteType.Web);
|
||||
|
||||
router.get('items', async (_path: SubPath, ctx: AppContext) => {
|
||||
if (!ctx.joplin.owner.is_admin) throw new ErrorForbidden();
|
||||
|
||||
const pagination = makeTablePagination(ctx.query, 'name', PaginationOrderDir.ASC);
|
||||
const paginatedItems = await ctx.joplin.models.item().children(ctx.joplin.owner.id, '', pagination, { fields: ['id', 'name', 'updated_time', 'mime_type', 'content_size'] });
|
||||
|
||||
|
@@ -8,6 +8,7 @@ import { User } from '../services/database/types';
|
||||
import { makeUrl, UrlType } from '../utils/routeUtils';
|
||||
import MarkdownIt = require('markdown-it');
|
||||
import { headerAnchor } from '@joplin/renderer';
|
||||
import { _ } from '@joplin/lib/locale';
|
||||
|
||||
export interface RenderOptions {
|
||||
partials?: any;
|
||||
@@ -191,6 +192,15 @@ export default class MustacheService {
|
||||
|
||||
const layoutView: any = {
|
||||
global: globalParams,
|
||||
s: {
|
||||
home: _('Home'),
|
||||
users: _('Users'),
|
||||
items: _('Items'),
|
||||
log: _('Log'),
|
||||
tasks: _('Tasks'),
|
||||
help: _('Help'),
|
||||
logout: _('Logout'),
|
||||
},
|
||||
pageName: view.name,
|
||||
pageTitle: view.titleOverride ? view.title : `${config().appName} - ${view.title}`,
|
||||
contentHtml: contentHtml,
|
||||
|
@@ -5,6 +5,6 @@ const generate = require('nanoid/generate');
|
||||
// > On the other hand, 128 bits (between 21 and 22 characters
|
||||
// > alphanumeric) is beyond the reach of brute-force attacks pretty much
|
||||
// > indefinitely
|
||||
export default function uuidgen(length: number = 32): string {
|
||||
export default function uuidgen(length: number = 22): string {
|
||||
return generate('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', length);
|
||||
}
|
||||
|
@@ -10,23 +10,27 @@
|
||||
{{#global.owner}}
|
||||
<div class="navbar-menu is-active">
|
||||
<div class="navbar-start">
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/home">Home</a>
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/home">{{s.home}}</a>
|
||||
{{#global.owner.is_admin}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/users">Users</a>
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/users">{{s.users}}</a>
|
||||
{{/global.owner.is_admin}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/items">Items</a>
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/changes">Log</a>
|
||||
{{#global.owner.is_admin}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/tasks">Tasks</a>
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/items">{{s.items}}</a>
|
||||
{{/global.owner.is_admin}}
|
||||
{{#global.owner.is_admin}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/changes">{{s.log}}</a>
|
||||
{{/global.owner.is_admin}}
|
||||
{{#global.owner.is_admin}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/tasks">{{s.tasks}}</a>
|
||||
{{/global.owner.is_admin}}
|
||||
</div>
|
||||
<div class="navbar-end">
|
||||
{{#global.isJoplinCloud}}
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/help">Help</a>
|
||||
<a class="navbar-item" href="{{{global.baseUrl}}}/help">{{s.help}}</a>
|
||||
{{/global.isJoplinCloud}}
|
||||
<div class="navbar-item">
|
||||
<form method="post" action="{{{global.baseUrl}}}/logout">
|
||||
<button class="button is-dark">Logout</button>
|
||||
<button class="button is-dark">{{s.logout}}</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="navbar-item">
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user