summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.md24
-rw-r--r--CMakeLists.txt7
-rw-r--r--Depends-Android.cmake2
m---------lib/the_Foundation0
-rwxr-xr-xpo/compile.py1
-rw-r--r--po/cs.po14
-rw-r--r--po/eo.po20
-rw-r--r--po/es.po9
-rw-r--r--po/fi.po15
-rw-r--r--po/gl.po16
-rw-r--r--po/ia.po394
-rw-r--r--po/ie.po22
-rw-r--r--po/nl.po2107
-rw-r--r--po/ru.po11
-rw-r--r--po/sr.po9
-rw-r--r--po/tok.po22
-rw-r--r--po/tr.po25
-rw-r--r--po/uk.po11
-rw-r--r--po/zh_Hant.po198
-rw-r--r--res/about/help.gmi2
-rw-r--r--res/about/version.gmi21
-rw-r--r--res/lang/cs.binbin31806 -> 30937 bytes
-rw-r--r--res/lang/de.binbin30813 -> 29906 bytes
-rw-r--r--res/lang/en.binbin26889 -> 26003 bytes
-rw-r--r--res/lang/eo.binbin25853 -> 24963 bytes
-rw-r--r--res/lang/es.binbin30637 -> 29735 bytes
-rw-r--r--res/lang/es_MX.binbin27959 -> 27062 bytes
-rw-r--r--res/lang/fi.binbin30470 -> 29573 bytes
-rw-r--r--res/lang/fr.binbin31617 -> 30710 bytes
-rw-r--r--res/lang/gl.binbin29822 -> 28913 bytes
-rw-r--r--res/lang/hu.binbin31642 -> 30735 bytes
-rw-r--r--res/lang/ia.binbin28959 -> 28765 bytes
-rw-r--r--res/lang/ie.binbin29557 -> 28672 bytes
-rw-r--r--res/lang/isv.binbin25610 -> 24723 bytes
-rw-r--r--res/lang/nl.binbin0 -> 28092 bytes
-rw-r--r--res/lang/pl.binbin30245 -> 29338 bytes
-rw-r--r--res/lang/ru.binbin45005 -> 44148 bytes
-rw-r--r--res/lang/sk.binbin25946 -> 25059 bytes
-rw-r--r--res/lang/sr.binbin44431 -> 43555 bytes
-rw-r--r--res/lang/tok.binbin27679 -> 26777 bytes
-rw-r--r--res/lang/tr.binbin29863 -> 28911 bytes
-rw-r--r--res/lang/uk.binbin44350 -> 43480 bytes
-rw-r--r--res/lang/zh_Hans.binbin25854 -> 24957 bytes
-rw-r--r--res/lang/zh_Hant.binbin26062 -> 25345 bytes
-rw-r--r--src/app.c49
-rw-r--r--src/lang.c1
-rw-r--r--src/macos.h2
-rw-r--r--src/macos.m49
-rw-r--r--src/resources.c2
-rw-r--r--src/resources.h1
-rw-r--r--src/ui/bindingswidget.c6
-rw-r--r--src/ui/documentwidget.c24
-rw-r--r--src/ui/labelwidget.c25
-rw-r--r--src/ui/sidebarwidget.c148
-rw-r--r--src/ui/util.c124
-rw-r--r--src/ui/util.h1
-rw-r--r--src/ui/widget.c10
-rw-r--r--src/ui/widget.h3
58 files changed, 3117 insertions, 258 deletions
diff --git a/AUTHORS.md b/AUTHORS.md
index c9de6f98..293cf7e5 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -5,29 +5,30 @@ Lagrange was created by Jaakko Keränen (<jaakko.keranen@iki.fi>) in July 2020.
5Legend: `C` code, `T` translation 5Legend: `C` code, `T` translation
6 6
7``` 7```
8C 2847 Jaakko Keränen <jaakko.keranen@iki.fi> 8C 2757 Jaakko Keränen <jaakko.keranen@iki.fi>
9CT 41 Nikolay Korotkiy <sikmir@gmail.com> 9CT 43 Nikolay Korotkiy <sikmir@gmail.com>
10 T 39 Olga Smirnova <mistresssilvara@hotmail.com> 10 T 41 Olga Smirnova <mistresssilvara@hotmail.com>
11 T 35 Alyssa Liddell <e-liss@tuta.io> 11 T 39 Alyssa Liddell <e-liss@tuta.io>
12 T 28 Anna “CyberTailor” <cyber@sysrq.in> 12 T 29 Anna “CyberTailor” <cyber@sysrq.in>
13 T 25 Shibo Lyu <github@of.sb> 13 T 26 Shibo Lyu <github@of.sb>
14 T 23 Страхиња Радић <contact@strahinja.org> 14 T 25 Страхиња Радић <contact@strahinja.org>
15 T 18 MCMic <come@chilliet.eu> 15 T 18 MCMic <come@chilliet.eu>
16 T 17 Wally Hackenslacker <mastor89@protonmail.com> 16 T 18 Wally Hackenslacker <mastor89@protonmail.com>
17 T 11 Tadeš Erban <tadysekerbosek@gmail.com> 17 T 13 Xos M <correoxm@disroot.org>
18 T 11 Xos M <correoxm@disroot.org> 18 T 12 Tadeš Erban <tadysekerbosek@gmail.com>
19 T 9 Aaron Fischer <mail@aaron-fischer.net> 19 T 9 Aaron Fischer <mail@aaron-fischer.net>
20 T 8 El Mau <public@correolibre.net> 20 T 8 El Mau <public@correolibre.net>
21 T 7 Waterrail <maksymiliankrol03@gmail.com> 21 T 7 Waterrail <maksymiliankrol03@gmail.com>
22 T 5 Emir <emir_sari@msn.com>
22 T 5 roy niang <roy@royniang.com> 23 T 5 roy niang <roy@royniang.com>
23 T 3 Alex Schroeder <alex@alexschroeder.ch> 24 T 3 Alex Schroeder <alex@alexschroeder.ch>
24 T 3 Botond Balázs <balazsbotond@gmail.com> 25 T 3 Botond Balázs <balazsbotond@gmail.com>
25 T 3 Emir <emir_sari@msn.com>
26C 2 Alyssa Rosenzweig <alyssa@rosenzweig.io> 26C 2 Alyssa Rosenzweig <alyssa@rosenzweig.io>
27 T 2 Andrij Mizyk <andmizyk@gmail.com> 27 T 2 Andrij Mizyk <andmizyk@gmail.com>
28 T 2 Arns Udovič <zordsdavini@arns.lt> 28 T 2 Arns Udovič <zordsdavini@arns.lt>
29C 2 Br0000k <77938600+Br0000k@users.noreply.github.com> 29C 2 Br0000k <77938600+Br0000k@users.noreply.github.com>
30 T 2 Gabriel de Oliveira Ferreira Machado <goliv04053@tutanota.com> 30 T 2 Gabriel de Oliveira Ferreira Machado <goliv04053@tutanota.com>
31 T 2 Jop Vernooy <jop@jopv.net>
31C 2 Manos Pitsidianakis <el13635@mail.ntua.gr> 32C 2 Manos Pitsidianakis <el13635@mail.ntua.gr>
32 T 2 methbkts <methbkts@gmail.com> 33 T 2 methbkts <methbkts@gmail.com>
33 T 2 tbodt <tblodt@icloud.com> 34 T 2 tbodt <tblodt@icloud.com>
@@ -44,6 +45,7 @@ C 1 Thomas Adam <thomas.adam@smoothwall.net>
44C 1 Waweic <waweic@activ.ism.rocks> 45C 1 Waweic <waweic@activ.ism.rocks>
45C 1 Waweic <waweic@protonmail.com> 46C 1 Waweic <waweic@protonmail.com>
46C 1 Zach DeCook <zachdecook@librem.one> 47C 1 Zach DeCook <zachdecook@librem.one>
48C 1 jcromero <jcromero+github@disconfor.me>
47C 1 zocker <zocker@10zen.eu> 49C 1 zocker <zocker@10zen.eu>
48``` 50```
49 51
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 211da6db..1bb50791 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -90,6 +90,7 @@ set (RESOURCES
90 res/lang/ia.bin 90 res/lang/ia.bin
91 res/lang/ie.bin 91 res/lang/ie.bin
92 res/lang/isv.bin 92 res/lang/isv.bin
93 res/lang/nl.bin
93 res/lang/pl.bin 94 res/lang/pl.bin
94 res/lang/ru.bin 95 res/lang/ru.bin
95 res/lang/sk.bin 96 res/lang/sk.bin
@@ -231,7 +232,7 @@ set (SOURCES
231 src/ui/scrollwidget.c 232 src/ui/scrollwidget.c
232 src/ui/scrollwidget.h 233 src/ui/scrollwidget.h
233 src/ui/sidebarwidget.c 234 src/ui/sidebarwidget.c
234 src/ui/sidebarwidget.h 235 src/ui/sidebarwidget.h
235 src/ui/text.c 236 src/ui/text.c
236 src/ui/text.h 237 src/ui/text.h
237 src/ui/touch.c 238 src/ui/touch.c
@@ -434,7 +435,7 @@ if (APPLE)
434 XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "fi.skyjake.lagrange" 435 XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "fi.skyjake.lagrange"
435 ) 436 )
436 if (IOS) 437 if (IOS)
437 target_compile_definitions (app PUBLIC 438 target_compile_definitions (app PUBLIC
438 LAGRANGE_IOS_VERSION="${IOS_BUNDLE_VERSION}" 439 LAGRANGE_IOS_VERSION="${IOS_BUNDLE_VERSION}"
439 LAGRANGE_IOS_BUILD_DATE="${IOS_BUILD_DATE}" 440 LAGRANGE_IOS_BUILD_DATE="${IOS_BUILD_DATE}"
440 ) 441 )
@@ -463,7 +464,7 @@ endif ()
463if (MSYS) 464if (MSYS)
464 target_link_libraries (app PUBLIC d2d1 uuid dwmapi) # querying DPI 465 target_link_libraries (app PUBLIC d2d1 uuid dwmapi) # querying DPI
465 if (ENABLE_WINSPARKLE) 466 if (ENABLE_WINSPARKLE)
466 target_link_libraries (app PUBLIC winsparkle) 467 target_link_libraries (app PUBLIC winsparkle)
467 endif () 468 endif ()
468endif () 469endif ()
469if (UNIX) 470if (UNIX)
diff --git a/Depends-Android.cmake b/Depends-Android.cmake
index 3bc57f32..cffcf139 100644
--- a/Depends-Android.cmake
+++ b/Depends-Android.cmake
@@ -22,7 +22,7 @@ set (TFDN_ENABLE_INSTALL OFF CACHE BOOL "")
22set (TFDN_ENABLE_TESTS OFF CACHE BOOL "") 22set (TFDN_ENABLE_TESTS OFF CACHE BOOL "")
23set (TFDN_ENABLE_WEBREQUEST OFF CACHE BOOL "") 23set (TFDN_ENABLE_WEBREQUEST OFF CACHE BOOL "")
24set (TFDN_ENABLE_SSE41 OFF CACHE BOOL "") 24set (TFDN_ENABLE_SSE41 OFF CACHE BOOL "")
25add_subdirectory (lib/the_Foundation) 25add_subdirectory (lib/the_Foundation)
26add_library (the_Foundation::the_Foundation ALIAS the_Foundation) 26add_library (the_Foundation::the_Foundation ALIAS the_Foundation)
27if (NOT OPENSSL_FOUND) 27if (NOT OPENSSL_FOUND)
28 message (FATAL_ERROR "Lagrange requires OpenSSL for TLS. Please check if pkg-config can find 'openssl'.") 28 message (FATAL_ERROR "Lagrange requires OpenSSL for TLS. Please check if pkg-config can find 'openssl'.")
diff --git a/lib/the_Foundation b/lib/the_Foundation
Subproject b780063a686a5ef207a9ef940a0200c8a420c5d Subproject cd0a22f5f003b723ecc038f287a320fb9b7c1d8
diff --git a/po/compile.py b/po/compile.py
index d29cbb8b..9daa39f1 100755
--- a/po/compile.py
+++ b/po/compile.py
@@ -17,6 +17,7 @@ BUILD_LANGS = [ 'en', # base strings
17 'ia', 17 'ia',
18 'ie', 18 'ie',
19 'isv', 19 'isv',
20 'nl',
20 'pl', 21 'pl',
21 'ru', 22 'ru',
22 'sk', 23 'sk',
diff --git a/po/cs.po b/po/cs.po
index 02177421..797eeac3 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-25 14:43+0000\n" 4"PO-Revision-Date: 2021-12-01 16:50+0000\n"
5"Last-Translator: Tadeáš Erban <tadysekerbosek@gmail.com>\n" 5"Last-Translator: Tadeáš Erban <tadysekerbosek@gmail.com>\n"
6"Language-Team: Czech <http://weblate.skyjake.fi/projects/lagrange/ui/cs/>\n" 6"Language-Team: Czech <http://weblate.skyjake.fi/projects/lagrange/ui/cs/>\n"
7"Language: cs\n" 7"Language: cs\n"
@@ -336,7 +336,7 @@ msgid "menu.closetab.left"
336msgstr "Zavřít karty vlevo" 336msgstr "Zavřít karty vlevo"
337 337
338msgid "menu.split.merge" 338msgid "menu.split.merge"
339msgstr "Sloučit karty" 339msgstr "Sloučit"
340 340
341msgid "menu.split.vertical" 341msgid "menu.split.vertical"
342msgstr "Svislé" 342msgstr "Svislé"
@@ -2142,3 +2142,13 @@ msgstr "Ukázat:"
2142# Color of text background. 2142# Color of text background.
2143msgid "prefs.gemtext.ansi.bg" 2143msgid "prefs.gemtext.ansi.bg"
2144msgstr "Barva pozadí" 2144msgstr "Barva pozadí"
2145
2146msgid "prefs.time.24h"
2147msgstr "24-hodinový čas"
2148
2149msgid "menu.update"
2150msgstr "Zkontrolovat dostupné aktualizace…"
2151
2152# This label should be fairly short so it fits in a button in the sidebar.
2153msgid "sidebar.action.feeds.markallread"
2154msgstr "Označit vše jako přečtené"
diff --git a/po/eo.po b/po/eo.po
index b7bf16e6..5bbf56c5 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-28 23:50+0000\n" 4"PO-Revision-Date: 2021-12-08 14:50+0000\n"
5"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n" 5"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n"
6"Language-Team: Esperanto <http://weblate.skyjake.fi/projects/lagrange/ui/eo/>" 6"Language-Team: Esperanto <http://weblate.skyjake.fi/projects/lagrange/ui/eo/>"
7"\n" 7"\n"
@@ -728,3 +728,21 @@ msgstr "La ŝarĝado finita."
728 728
729msgid "menu.update" 729msgid "menu.update"
730msgstr "Kontroli ĝisdatigojn…" 730msgstr "Kontroli ĝisdatigojn…"
731
732#, c-format
733msgid "fontpack.meta.version"
734msgstr "Versio %d"
735
736#, c-format
737msgid "fontpack.disable"
738msgstr "Malebligi \"%s\":n"
739
740#, c-format
741msgid "fontpack.enable"
742msgstr "Ebligi \"%s\":n"
743
744msgid "heading.fontpack.meta"
745msgstr "Tiparoj"
746
747msgid "dlg.dismiss.warning"
748msgstr "Ignori averton"
diff --git a/po/es.po b/po/es.po
index 2c051bd0..d790bf2c 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-28 23:50+0000\n" 4"PO-Revision-Date: 2021-12-07 04:50+0000\n"
5"Last-Translator: Wally Hackenslacker <mastor89@protonmail.com>\n" 5"Last-Translator: Wally Hackenslacker <mastor89@protonmail.com>\n"
6"Language-Team: Spanish <http://weblate.skyjake.fi/projects/lagrange/ui/es/>\n" 6"Language-Team: Spanish <http://weblate.skyjake.fi/projects/lagrange/ui/es/>\n"
7"Language: es\n" 7"Language: es\n"
@@ -2148,3 +2148,10 @@ msgstr "Color de Fondo"
2148 2148
2149msgid "menu.update" 2149msgid "menu.update"
2150msgstr "Buscar Actualizaciones…" 2150msgstr "Buscar Actualizaciones…"
2151
2152msgid "prefs.time.24h"
2153msgstr "Hora de 24 Horas"
2154
2155# This label should be fairly short so it fits in a button in the sidebar.
2156msgid "sidebar.action.feeds.markallread"
2157msgstr "Leer Todo"
diff --git a/po/fi.po b/po/fi.po
index bf59b797..f7c68267 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -3,8 +3,8 @@ msgstr ""
3"Project-Id-Version: PACKAGE VERSION\n" 3"Project-Id-Version: PACKAGE VERSION\n"
4"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 4"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
5"POT-Creation-Date: 2021-03-23 09:09+0000\n" 5"POT-Creation-Date: 2021-03-23 09:09+0000\n"
6"PO-Revision-Date: 2021-11-28 23:50+0000\n" 6"PO-Revision-Date: 2021-11-30 05:35+0000\n"
7"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n" 7"Last-Translator: Weblate Admin <jaakko.keranen@iki.fi>\n"
8"Language-Team: Finnish <http://weblate.skyjake.fi/projects/lagrange/ui/fi/>\n" 8"Language-Team: Finnish <http://weblate.skyjake.fi/projects/lagrange/ui/fi/>\n"
9"Language: fi\n" 9"Language: fi\n"
10"MIME-Version: 1.0\n" 10"MIME-Version: 1.0\n"
@@ -419,9 +419,7 @@ msgid "heading.ident.notes"
419msgstr "IDENTITEETIN MUISTIINPANOT" 419msgstr "IDENTITEETIN MUISTIINPANOT"
420 420
421msgid "dlg.ident.notes" 421msgid "dlg.ident.notes"
422msgstr "" 422msgstr "Muistiinpanot liittyen identiteettiin %s:"
423"Muistiinpanot liittyen identiteettiin\n"
424"%s:"
425 423
426msgid "ident.fingerprint" 424msgid "ident.fingerprint"
427msgstr "Kopioi sormenjälki" 425msgstr "Kopioi sormenjälki"
@@ -2135,3 +2133,10 @@ msgstr "Taustan väri"
2135 2133
2136msgid "menu.update" 2134msgid "menu.update"
2137msgstr "Tarkista päivitykset…" 2135msgstr "Tarkista päivitykset…"
2136
2137msgid "prefs.time.24h"
2138msgstr "24 tunnin kellonajat"
2139
2140# This label should be fairly short so it fits in a button in the sidebar.
2141msgid "sidebar.action.feeds.markallread"
2142msgstr "Lue kaikki"
diff --git a/po/gl.po b/po/gl.po
index c25fed3c..55ec7aa2 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-25 14:43+0000\n" 4"PO-Revision-Date: 2021-12-19 06:50+0000\n"
5"Last-Translator: Xosé M. <correoxm@disroot.org>\n" 5"Last-Translator: Xosé M. <correoxm@disroot.org>\n"
6"Language-Team: Galician <http://weblate.skyjake.fi/projects/lagrange/ui/gl/>" 6"Language-Team: Galician <http://weblate.skyjake.fi/projects/lagrange/ui/gl/>"
7"\n" 7"\n"
@@ -288,7 +288,7 @@ msgid "menu.duptab"
288msgstr "Duplicar lapela" 288msgstr "Duplicar lapela"
289 289
290msgid "menu.split.merge" 290msgid "menu.split.merge"
291msgstr "Fusionar lapelas" 291msgstr "Fusionar"
292 292
293msgid "menu.split.swap" 293msgid "menu.split.swap"
294msgstr "Cambiar os lados" 294msgstr "Cambiar os lados"
@@ -542,7 +542,7 @@ msgid "feeds.unsubscribe"
542msgstr "Dar de baixa…" 542msgstr "Dar de baixa…"
543 543
544msgid "feeds.markallread" 544msgid "feeds.markallread"
545msgstr "Marcar todo como lido" 545msgstr "Marcar todo lido"
546 546
547msgid "feeds.refresh" 547msgid "feeds.refresh"
548msgstr "Actualizar fontes" 548msgstr "Actualizar fontes"
@@ -2135,3 +2135,13 @@ msgstr "Cartafol:"
2135# Color of text background. 2135# Color of text background.
2136msgid "prefs.gemtext.ansi.bg" 2136msgid "prefs.gemtext.ansi.bg"
2137msgstr "Cor BG" 2137msgstr "Cor BG"
2138
2139msgid "prefs.time.24h"
2140msgstr "Formato 24-Horas"
2141
2142# This label should be fairly short so it fits in a button in the sidebar.
2143msgid "sidebar.action.feeds.markallread"
2144msgstr "Ler todo"
2145
2146msgid "menu.update"
2147msgstr "Comprobar actualización…"
diff --git a/po/ia.po b/po/ia.po
index a983ca71..c8ddc5ad 100644
--- a/po/ia.po
+++ b/po/ia.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-07-19 19:06+0000\n" 4"PO-Revision-Date: 2022-01-02 15:50+0000\n"
5"Last-Translator: Olga Smirnova <mistresssilvara@hotmail.com>\n" 5"Last-Translator: Olga Smirnova <mistresssilvara@hotmail.com>\n"
6"Language-Team: Interlingua <http://weblate.skyjake.fi/projects/lagrange/ui/" 6"Language-Team: Interlingua <http://weblate.skyjake.fi/projects/lagrange/ui/"
7"ia/>\n" 7"ia/>\n"
@@ -133,7 +133,7 @@ msgid "toolbar.outline"
133msgstr "Structura del pagina" 133msgstr "Structura del pagina"
134 134
135msgid "hint.findtext" 135msgid "hint.findtext"
136msgstr "Trovar texto in le pagina" 136msgstr "trovar texto in le pagina"
137 137
138msgid "status.feeds" 138msgid "status.feeds"
139msgstr "Actualisation del syndicationes" 139msgstr "Actualisation del syndicationes"
@@ -760,8 +760,8 @@ msgstr "Certificato non valide"
760#, c-format 760#, c-format
761msgid "ident.usedonurls" 761msgid "ident.usedonurls"
762msgid_plural "ident.usedonurls.n" 762msgid_plural "ident.usedonurls.n"
763msgstr[0] "Usate por %zu URL" 763msgstr[0] "Usate por %u URL"
764msgstr[1] "Usate por %zu URLs" 764msgstr[1] "Usate por %u URLs"
765 765
766#, c-format 766#, c-format
767msgid "dlg.import.add" 767msgid "dlg.import.add"
@@ -926,9 +926,7 @@ msgstr "Vide %sAdjuta%s por plus de information re certificatos de cliente TLS."
926 926
927#, c-format 927#, c-format
928msgid "dlg.confirm.unsub" 928msgid "dlg.confirm.unsub"
929msgstr "" 929msgstr "Disabonar le syndication «%s»?"
930"Disabonar le syndication\n"
931"«%s»?"
932 930
933msgid "heading.pageinfo" 931msgid "heading.pageinfo"
934msgstr "INFORMATION RE LE PAGINA" 932msgstr "INFORMATION RE LE PAGINA"
@@ -1001,7 +999,7 @@ msgid "error.tls"
1001msgstr "Fallimento del rete o TLS" 999msgstr "Fallimento del rete o TLS"
1002 1000
1003msgid "error.tls.msg" 1001msgid "error.tls.msg"
1004msgstr "Fallite a communicar con le servitor. Ecce le message de error:" 1002msgstr "Fallite a communicar con le servitor."
1005 1003
1006msgid "error.slowdown" 1004msgid "error.slowdown"
1007msgstr "Relentamento" 1005msgstr "Relentamento"
@@ -1020,8 +1018,8 @@ msgstr "Monstrar tote"
1020 1018
1021msgid "num.bytes" 1019msgid "num.bytes"
1022msgid_plural "num.bytes.n" 1020msgid_plural "num.bytes.n"
1023msgstr[0] "%zu byte" 1021msgstr[0] "%u byte"
1024msgstr[1] "%zu bytes" 1022msgstr[1] "%u bytes"
1025 1023
1026msgid "prefs.doctheme.name.colorfuldark" 1024msgid "prefs.doctheme.name.colorfuldark"
1027msgstr "Colorate obscur" 1025msgstr "Colorate obscur"
@@ -1211,9 +1209,8 @@ msgstr "Actualisar marcapaginas remote"
1211#, c-format 1209#, c-format
1212msgid "dlg.confirm.ident.delete" 1210msgid "dlg.confirm.ident.delete"
1213msgstr "" 1211msgstr ""
1214"Vole tu vermente deler le identitate\n" 1212"Vole tu vermente deler le identitate %s«%s»%s con su certificato e clave "
1215"%s%s%s\n" 1213"private?"
1216"con su certificato e clave private?"
1217 1214
1218msgid "lang.ie" 1215msgid "lang.ie"
1219msgstr "Interlingue" 1216msgstr "Interlingue"
@@ -1241,14 +1238,14 @@ msgstr "Le contento del pagina se carga ancora."
1241#, c-format 1238#, c-format
1242msgid "feeds.list.counts" 1239msgid "feeds.list.counts"
1243msgid_plural "feeds.list.counts.n" 1240msgid_plural "feeds.list.counts.n"
1244msgstr[0] "%zu abonate syndication que contine %%s.\n" 1241msgstr[0] "%u abonate syndication que contine %%s.\n"
1245msgstr[1] "%zu abonate syndicationes que contine %%s.\n" 1242msgstr[1] "%u abonate syndicationes que contine %%s.\n"
1246 1243
1247#, c-format 1244#, c-format
1248msgid "feeds.list.entrycount" 1245msgid "feeds.list.entrycount"
1249msgid_plural "feeds.list.entrycount.n" 1246msgid_plural "feeds.list.entrycount.n"
1250msgstr[0] "%zu elemento in toto" 1247msgstr[0] "%u elemento in toto"
1251msgstr[1] "%zu elementos in toto" 1248msgstr[1] "%u elementos in toto"
1252 1249
1253msgid "dlg.autoreload" 1250msgid "dlg.autoreload"
1254msgstr "Interstitio de recarga automatic por iste scheda." 1251msgstr "Interstitio de recarga automatic por iste scheda."
@@ -1458,7 +1455,7 @@ msgid "menu.split.vertical"
1458msgstr "Vertical" 1455msgstr "Vertical"
1459 1456
1460msgid "menu.view.split" 1457msgid "menu.view.split"
1461msgstr "Finder le vista..." 1458msgstr "Finder le vista"
1462 1459
1463msgid "bookmark.tag.linksplit" 1460msgid "bookmark.tag.linksplit"
1464msgstr "Ligamines que aperi al latere" 1461msgstr "Ligamines que aperi al latere"
@@ -1507,9 +1504,8 @@ msgstr "Sortir le archivo"
1507#, c-format 1504#, c-format
1508msgid "archive.summary" 1505msgid "archive.summary"
1509msgid_plural "archive.summary.n" 1506msgid_plural "archive.summary.n"
1510msgstr[0] "Iste archivo contine %zu elemento e su dimension comprimite es %.1f MB." 1507msgstr[0] "Iste archivo contine %u elemento e su dimension comprimite es %.1f MB."
1511msgstr[1] "" 1508msgstr[1] "Iste archivo contine %u elementos e su dimension comprimite es %.1f MB."
1512"Iste archivo contine %zu elementos e su dimension comprimite es %.1f MB."
1513 1509
1514msgid "dir.empty" 1510msgid "dir.empty"
1515msgstr "Iste directorio es vacue." 1511msgstr "Iste directorio es vacue."
@@ -1517,8 +1513,8 @@ msgstr "Iste directorio es vacue."
1517#, c-format 1513#, c-format
1518msgid "dir.summary" 1514msgid "dir.summary"
1519msgid_plural "dir.summary.n" 1515msgid_plural "dir.summary.n"
1520msgstr[0] "Iste directorio contine %zu elemento." 1516msgstr[0] "Iste directorio contine %u elemento."
1521msgstr[1] "Iste directorio contine %zu elementos." 1517msgstr[1] "Iste directorio contine %u elementos."
1522 1518
1523msgid "keys.tab.close.other" 1519msgid "keys.tab.close.other"
1524msgstr "Clauder le altere schedas" 1520msgstr "Clauder le altere schedas"
@@ -1579,3 +1575,355 @@ msgstr "DELER LE FILE"
1579 1575
1580msgid "dlg.file.delete" 1576msgid "dlg.file.delete"
1581msgstr "Deler" 1577msgstr "Deler"
1578
1579msgid "upload.file.name"
1580msgstr "Nomine de file:"
1581
1582msgid "upload.file.drophere"
1583msgstr "(trahe e depone un file al fenestra)"
1584
1585msgid "upload.mime"
1586msgstr "Typo MIME:"
1587
1588msgid "upload.token"
1589msgstr "Token:"
1590
1591msgid "prefs.scrollspeed.mouse"
1592msgstr "Velocitate del mus:"
1593
1594msgid "dlg.newident.more"
1595msgstr "Plus…"
1596
1597msgid "dlg.fontpack.classic"
1598msgstr "Discargar le fontpack (25 MB)"
1599
1600msgid "prefs.returnkey.linebreak"
1601msgstr "Ruptura de linea"
1602
1603msgid "error.certverify"
1604msgstr "Servitor non fidabile"
1605
1606msgid "prefs.imagestyle"
1607msgstr "Colorisar imagines:"
1608
1609msgid "prefs.font.mono"
1610msgstr "Preformattate:"
1611
1612# Font to use for headings and body when Monospace body is enabled.
1613msgid "prefs.font.monodoc"
1614msgstr "Typo de characteres mono-spatio:"
1615
1616msgid "upload.port"
1617msgstr "Porta…"
1618
1619msgid "heading.uploadport"
1620msgstr "PORTA DE INCARGAMENTO DE TITAN"
1621
1622msgid "prefs.returnkey.accept"
1623msgstr "Acceptar"
1624
1625msgid "prefs.returnkey"
1626msgstr "Comportamento del clave Enter:"
1627
1628msgid "prefs.time.24h"
1629msgstr "Tempore a 24-horas"
1630
1631msgid "prefs.imagestyle.original"
1632msgstr "Nulle"
1633
1634msgid "prefs.imagestyle.text"
1635msgstr "Color del texto"
1636
1637msgid "prefs.gemtext.ansi"
1638msgstr "Escappamentos ANSI:"
1639
1640# Color of text background.
1641msgid "prefs.gemtext.ansi.bg"
1642msgstr "Color de fundo"
1643
1644msgid "prefs.gemtext.ansi.fontstyle"
1645msgstr "Stilo del characteres"
1646
1647msgid "prefs.memorysize"
1648msgstr "Dimension de memoria:"
1649
1650msgid "keys.upload"
1651msgstr "Incargar un pagina via Titan"
1652
1653msgid "error.server.msg"
1654msgstr "Le servitor ha respondite:"
1655
1656# Action label
1657msgid "fontpack.meta.viewfile"
1658msgstr "Vider le file"
1659
1660msgid "dlg.newident.scope"
1661msgstr "Usar pro:"
1662
1663msgid "menu.pageinfo"
1664msgstr "Monstrar information re le pagina"
1665
1666msgid "menu.save.downloads.open"
1667msgstr "Salvar a Discargas e aperir le file"
1668
1669msgid "prefs.scrollspeed.keyboard"
1670msgstr "Velocitate de claviero:"
1671
1672msgid "num.files"
1673msgid_plural "num.files.n"
1674msgstr[0] "%u dossier"
1675msgstr[1] "%u dossiers"
1676
1677msgid "prefs.font.ui"
1678msgstr "IdU:"
1679
1680msgid "fontpack.meta.disabled"
1681msgstr ", inactive"
1682
1683#, c-format
1684msgid "fontpack.enable"
1685msgstr "Activar «%s»"
1686
1687#, c-format
1688msgid "fontpack.disable"
1689msgstr "Disactivar «%s»"
1690
1691msgid "fontpack.export"
1692msgstr "Vider un patrono de fontpack.ini"
1693
1694#, c-format
1695msgid "fontpack.install"
1696msgstr "Installar «%s»"
1697
1698#, c-format
1699msgid "fontpack.upgrade"
1700msgstr "Promover «%s» al version %d"
1701
1702msgid "media.untitled.image"
1703msgstr "Imagine"
1704
1705msgid "media.untitled.audio"
1706msgstr "Audio"
1707
1708msgid "dlg.fontpack.delete"
1709msgstr "Deler le fontpack"
1710
1711msgid "prefs.font.body"
1712msgstr "Corpore:"
1713
1714msgid "heading.fontpack.meta.enabled"
1715msgstr "Fontpacks active"
1716
1717msgid "heading.fontpack.meta.disabled"
1718msgstr "Fontpacks inactive"
1719
1720msgid "menu.newfolder"
1721msgstr "Nove dossier…"
1722
1723# used for Preferences on mobile
1724msgid "menu.settings"
1725msgstr "Parametros"
1726
1727# keep this short (3x1 horiz layout)
1728msgid "menu.selectall"
1729msgstr "Seliger toto"
1730
1731# keep this short (3x1 horiz layout)
1732msgid "menu.delete"
1733msgstr "Deler"
1734
1735#, c-format
1736msgid "dlg.bookmarks.delete"
1737msgid_plural "dlg.bookmarks.delete.n"
1738msgstr[0] "Deler le marcapagina"
1739msgstr[1] "Deler %u marcapaginas"
1740
1741msgid "bookmark.export.count"
1742msgid_plural "bookmark.export.count.n"
1743msgstr[0] "Vos have %d marcapagina."
1744msgstr[1] "Vos have %d marcapaginas."
1745
1746msgid "sidebar.action.show"
1747msgstr "Monstrar:"
1748
1749msgid "heading.confirm.bookmarks.delete"
1750msgstr "DELER MARCAPAGINAS"
1751
1752msgid "menu.website"
1753msgstr "Sito web del projecto…"
1754
1755# keep this short (3x1 horiz layout)
1756msgid "menu.undo"
1757msgstr "Disfacer"
1758
1759msgid "fontpack.open.fontsdir"
1760msgstr "Aperir le directorio del typos del usator"
1761
1762msgid "fontpack.open.aboutfonts"
1763msgstr "Monstrar le typos de character installate"
1764
1765msgid "menu.fonts"
1766msgstr "Gerer typos de litteras…"
1767
1768# This label should be fairly short so it fits in a button in the sidebar.
1769msgid "sidebar.action.feeds.markallread"
1770msgstr "Toto legite"
1771
1772msgid "num.fonts"
1773msgid_plural "num.fonts.n"
1774msgstr[0] "%u typo"
1775msgstr[1] "%u typos"
1776
1777msgid "dlg.file.delete.confirm"
1778msgstr "Desira tu vermente deler iste file?"
1779
1780msgid "bookmark.export.format.linklines"
1781msgstr "Cata ligamine representa un marcapagina."
1782
1783msgid "menu.page.upload"
1784msgstr "Incargar un pagina via Titan…"
1785
1786msgid "heading.upload"
1787msgstr "INCARGAR VIA TITAN"
1788
1789msgid "upload.id"
1790msgstr "Identitate:"
1791
1792msgid "dlg.upload.id.none"
1793msgstr "Nulle"
1794
1795msgid "heading.upload.file"
1796msgstr "File"
1797
1798msgid "upload.file.size"
1799msgstr "Dimension de file:"
1800
1801msgid "dlg.upload.send"
1802msgstr "Incargar"
1803
1804# used on mobile
1805msgid "dlg.upload.text"
1806msgstr "Incargar un texto simple"
1807
1808# used on mobile
1809msgid "dlg.upload.file"
1810msgstr "Incargar un file"
1811
1812# used on mobile
1813msgid "dlg.upload.pickfile"
1814msgstr "Seliger un file"
1815
1816msgid "dlg.newident.scope.domain"
1817msgstr "Dominio actual"
1818
1819msgid "dlg.newident.scope.page"
1820msgstr "Pagina actual"
1821
1822msgid "dlg.newident.scope.none"
1823msgstr "Non usate"
1824
1825msgid "dlg.feed.ignoreweb"
1826msgstr "Ignorar ligamines HTTP(S):"
1827
1828msgid "dlg.bookmark.folder"
1829msgstr "Dossier:"
1830
1831msgid "heading.bookmark.tags"
1832msgstr "ETIQUETTAS SPECIAL"
1833
1834msgid "heading.addfolder"
1835msgstr "ADDER UN DOSSIER"
1836
1837msgid "dlg.addfolder.defaulttitle"
1838msgstr "Nove dossier"
1839
1840msgid "menu.update"
1841msgstr "Controlar pro le actualisationes…"
1842
1843msgid "status.query.tight"
1844msgstr "Requesta"
1845
1846msgid "dlg.addfolder"
1847msgstr "Adder un dossier"
1848
1849# used on mobile
1850msgid "heading.settings"
1851msgstr "PARAMETROS"
1852
1853msgid "prefs.font.heading"
1854msgstr "Capites:"
1855
1856msgid "prefs.boldlink.visited"
1857msgstr "Visitate"
1858
1859msgid "prefs.font.warnmissing"
1860msgstr "Advertimentos de glyphos:"
1861
1862msgid "prefs.linespacing"
1863msgstr "Spatiamento inter lineas:"
1864
1865msgid "error.certexpired"
1866msgstr "Certificato perimite"
1867
1868msgid "error.glyphs"
1869msgstr "Glyphos mancante"
1870
1871msgid "heading.fontpack.meta"
1872msgstr "Typos de character"
1873
1874#, c-format
1875msgid "fontpack.meta.version"
1876msgstr "Version %d"
1877
1878msgid "fontpack.meta.installed"
1879msgstr "Installate"
1880
1881msgid "fontpack.meta.notinstalled"
1882msgstr "Non installate"
1883
1884msgid "heading.fontpack.delete"
1885msgstr "DELER UN FONTPACK"
1886
1887msgid "fontpack.install.ttf"
1888msgstr "Installar un typo de litteras TrueType"
1889
1890msgid "dlg.dismiss.warning"
1891msgstr "Dimitter le advertimento"
1892
1893msgid "heading.fontpack.classic"
1894msgstr "DISCARGAR UN FONTPACK"
1895
1896msgid "prefs.imagestyle.preformat"
1897msgstr "Color de preformattate"
1898
1899#, c-format
1900msgid "fontpack.delete"
1901msgstr "Deler permanentemente «%s»"
1902
1903msgid "dlg.certwarn.title"
1904msgstr "Problema de securitate"
1905
1906# button in the mobile New Identity dialog
1907msgid "dlg.certimport.pickfile"
1908msgstr "Importar un certificato o un file clave"
1909
1910msgid "bookmark.export.title.folder"
1911msgstr "Marcapaginas"
1912
1913msgid "bookmark.export.title.tag"
1914msgstr "Etiquettas de marcapaginas"
1915
1916msgid "prefs.imagestyle.grayscale"
1917msgstr "Scala de gris"
1918
1919msgid "error.ansi"
1920msgstr "Emulation de terminal"
1921
1922msgid "dlg.upload.id.default"
1923msgstr "Predefinite"
1924
1925msgid "heading.upload.text"
1926msgstr "Texto"
1927
1928msgid "hint.upload.text"
1929msgstr "Insere texto a incargar"
diff --git a/po/ie.po b/po/ie.po
index 23fa0735..4901cb89 100644
--- a/po/ie.po
+++ b/po/ie.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-10 04:50+0000\n" 4"PO-Revision-Date: 2021-12-04 10:50+0000\n"
5"Last-Translator: Olga Smirnova <mistresssilvara@hotmail.com>\n" 5"Last-Translator: Olga Smirnova <mistresssilvara@hotmail.com>\n"
6"Language-Team: Occidental <http://weblate.skyjake.fi/projects/lagrange/ui/ie/" 6"Language-Team: Occidental <http://weblate.skyjake.fi/projects/lagrange/ui/ie/"
7">\n" 7">\n"
@@ -2099,3 +2099,23 @@ msgid "feeds.atom.translated"
2099msgstr "" 2099msgstr ""
2100"Ti document Atom XML esset convertet in un feed de Gemini por que on vell " 2100"Ti document Atom XML esset convertet in un feed de Gemini por que on vell "
2101"posse abonnar it." 2101"posse abonnar it."
2102
2103# This label should be fairly short so it fits in a button in the sidebar.
2104msgid "sidebar.action.feeds.markallread"
2105msgstr "Leer omni"
2106
2107# Color of text background.
2108msgid "prefs.gemtext.ansi.bg"
2109msgstr "Color del funde"
2110
2111msgid "dlg.bookmark.folder"
2112msgstr "Fólder:"
2113
2114msgid "prefs.time.24h"
2115msgstr "Usar 24 hores"
2116
2117msgid "menu.update"
2118msgstr "Controlar actualisamentes…"
2119
2120msgid "sidebar.action.show"
2121msgstr "Monstrar:"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 00000000..7cfd3eac
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,2107 @@
1msgid ""
2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-12-23 11:10+0000\n"
5"Last-Translator: Jop Vernooy <jop@jopv.net>\n"
6"Language-Team: Dutch <http://weblate.skyjake.fi/projects/lagrange/ui/nl/>\n"
7"Language: nl\n"
8"MIME-Version: 1.0\n"
9"Content-Type: text/plain; charset=UTF-8\n"
10"Content-Transfer-Encoding: 8bit\n"
11"Plural-Forms: nplurals=2; plural=n != 1;\n"
12"X-Generator: Weblate 4.5.1\n"
13
14# Link download progress message.
15msgid "doc.fetching"
16msgstr "Ophalen"
17
18#, c-format
19msgid "doc.archive"
20msgstr "%s is een gecomprimeerd archief."
21
22msgid "doc.archive.view"
23msgstr "Bekijk archiefinhoud"
24
25msgid "media.untitled.image"
26msgstr "Afbeelding"
27
28msgid "media.untitled.audio"
29msgstr "Audio"
30
31# Used in inline audio player metadata popup.
32msgid "audio.meta.title"
33msgstr "Titel"
34
35# Used in inline audio player metadata popup.
36msgid "audio.meta.artist"
37msgstr "Artiest"
38
39# Used in inline audio player metadata popup.
40msgid "audio.meta.genre"
41msgstr "Genre"
42
43# Used in inline audio player metadata popup.
44msgid "audio.meta.date"
45msgstr "Datum"
46
47# used as adjective, n is 8, 16, 24, 32, or 64
48#, c-format
49msgid "n.bit"
50msgstr "%d-bit"
51
52msgid "numbertype.integer"
53msgstr "integer"
54
55# Hertz, unit for frequency values
56msgid "hz"
57msgstr "Hz"
58
59#, c-format
60msgid "feeds.list.entrycount"
61msgid_plural "feeds.list.entrycount.n"
62msgstr[0] "in totaal %u artikel"
63msgstr[1] "in totaal %u artikelen"
64
65msgid "feeds.list.refreshtime.now"
66msgstr "Net ververst."
67
68#, c-format
69msgid "minutes.ago"
70msgid_plural "minutes.ago.n"
71msgstr[0] "%d minuut geleden"
72msgstr[1] "%d minuten geleden"
73
74#, c-format
75msgid "days.ago"
76msgid_plural "days.ago.n"
77msgstr[0] "%d dag geleden"
78msgstr[1] "%d dagen geleden"
79
80msgid "about.tagline"
81msgstr "Een prachtige Gemini-client"
82
83msgid "about.version"
84msgstr "Versie"
85
86msgid "close"
87msgstr "Sluiten"
88
89msgid "dlg.default"
90msgstr " Oké "
91
92msgid "toggle.yes"
93msgstr "JA"
94
95msgid "toggle.no"
96msgstr "NEE"
97
98msgid "menu.title.edit"
99msgstr "Bewerken"
100
101msgid "menu.title.view"
102msgstr "Weergave"
103
104msgid "menu.title.bookmarks"
105msgstr "Bladwijzers"
106
107msgid "menu.title.identity"
108msgstr "Identiteit"
109
110msgid "menu.title.help"
111msgstr "Help"
112
113msgid "menu.closetab"
114msgstr "Sluit tabblad"
115
116msgid "menu.closetab.other"
117msgstr "Sluit andere tabbladen"
118
119msgid "menu.closetab.left"
120msgstr "Sluit tabbladen links"
121
122msgid "menu.closetab.right"
123msgstr "Sluit tabbladen rechts"
124
125msgid "menu.duptab"
126msgstr "Dupliceer tabblad"
127
128msgid "menu.split.swap"
129msgstr "Kanten verwisselen"
130
131msgid "menu.split.horizontal"
132msgstr "Horizontaal"
133
134msgid "menu.split.vertical"
135msgstr "Verticaal"
136
137msgid "menu.openlocation"
138msgstr "Open locatie…"
139
140msgid "menu.downloads"
141msgstr "Toon Downloads"
142
143msgid "menu.unexpire"
144msgstr "Negeer verloopdatum en ga door met laden"
145
146msgid "menu.find"
147msgstr "Zoek in pagina"
148
149msgid "macos.menu.find"
150msgstr "Zoeken"
151
152# Used on desktop operating systems. "Downloads" refers to the user's configured downloads directory.
153msgid "menu.save.downloads"
154msgstr "Opslaan naar Downloads"
155
156msgid "menu.sidebar"
157msgstr "Zijbalk aan/uit"
158
159msgid "menu.sidebar.right"
160msgstr "Rechter-zijbalk aan/uit"
161
162msgid "menu.zoom.in"
163msgstr "Inzoomen"
164
165msgid "menu.zoom.reset"
166msgstr "Zoom resetten"
167
168msgid "menu.view.split"
169msgstr "Gesplitste weergave…"
170
171msgid "menu.bookmarks.list"
172msgstr "Toon alle bladwijzers"
173
174msgid "macos.menu.bookmarks.list"
175msgstr "Toon alle"
176
177msgid "menu.bookmarks.bytag"
178msgstr "Toon bladwijzers op tag"
179
180msgid "macos.menu.bookmarks.bytag"
181msgstr "Toon op tag"
182
183msgid "menu.feeds.entrylist"
184msgstr "Toon feed-artiekelen"
185
186msgid "menu.preferences"
187msgstr "Voorkeuren…"
188
189msgid "menu.update"
190msgstr "Controleer op updates…"
191
192# used for Preferences on mobile
193msgid "menu.settings"
194msgstr "Instellingen"
195
196msgid "menu.help"
197msgstr "Help"
198
199msgid "menu.releasenotes"
200msgstr "Uitgavenotities"
201
202msgid "menu.quit"
203msgstr "Lagrange afsluiten"
204
205msgid "menu.cut"
206msgstr "Knippen"
207
208msgid "menu.copy"
209msgstr "Kopiëren"
210
211# keep this short (3x1 horiz layout)
212msgid "menu.delete"
213msgstr "Verwijder"
214
215# keep this short (3x1 horiz layout)
216msgid "menu.undo"
217msgstr "Ongedaan"
218
219msgid "menu.select.clear"
220msgstr "Ontselecteren"
221
222# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
223msgid "menu.show.identities"
224msgstr "Toon identiteiten"
225
226# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
227msgid "menu.show.outline"
228msgstr "Toon inhoudsopgave"
229
230msgid "menu.parent"
231msgstr "Ga naar bovenliggende"
232
233msgid "menu.root"
234msgstr "Ga naar hoofd"
235
236msgid "menu.reload"
237msgstr "Herlaad pagina"
238
239msgid "menu.autoreload"
240msgstr "Automatisch herladen…"
241
242msgid "menu.aboutpages"
243msgstr "About-pagina's"
244
245msgid "menu.about"
246msgstr "Over"
247
248msgid "menu.fonts"
249msgstr "Beheer lettertypes…"
250
251msgid "menu.debug"
252msgstr "Debug-informatie"
253
254msgid "menu.page.import"
255msgstr "Importeer links als bladwijzers…"
256
257msgid "menu.page.copyurl"
258msgstr "Kopieer pagina-URL"
259
260msgid "menu.page.copysource"
261msgstr "Kopieer paginabron"
262
263msgid "menu.feeds.refresh"
264msgstr "Ververs feeds"
265
266msgid "menu.identity.new"
267msgstr "Nieuwe identiteit…"
268
269msgid "menu.identity.import"
270msgstr "Importeren…"
271
272msgid "sidebar.bookmarks"
273msgstr "Bladwijzers"
274
275msgid "sidebar.feeds"
276msgstr "Feeds"
277
278msgid "sidebar.identities"
279msgstr "Identiteiten"
280
281msgid "sidebar.outline"
282msgstr "Opgave"
283
284# This label should be fairly short so it fits in a button in the sidebar.
285msgid "sidebar.action.feeds.markallread"
286msgstr "Alles gelezen"
287
288msgid "sidebar.action.show"
289msgstr "Toon:"
290
291msgid "sidebar.action.feeds.showunread"
292msgstr "Ongelezen"
293
294msgid "sidebar.action.ident.new"
295msgstr "Nieuwe…"
296
297msgid "sidebar.action.ident.import"
298msgstr "Importeren…"
299
300msgid "hint.findtext"
301msgstr "zoek tekst in pagina"
302
303msgid "status.query"
304msgstr "Zoekopdracht"
305
306msgid "status.query.tight"
307msgstr "Opdracht"
308
309msgid "mb.per.sec"
310msgstr "MB/s"
311
312msgid "num.bytes"
313msgid_plural "num.bytes.n"
314msgstr[0] "%u byte"
315msgstr[1] "%u bytes"
316
317msgid "num.files"
318msgid_plural "num.files.n"
319msgstr[0] "%u bestand"
320msgstr[1] "%u bestanden"
321
322# strftime() formatted
323msgid "sidebar.date.thisyear"
324msgstr "%d %b"
325
326# strftime() formatted
327msgid "sidebar.date.otheryear"
328msgstr "%d %b %Y"
329
330msgid "feeds.today"
331msgstr "Vandaag"
332
333msgid "feeds.entry.newtab"
334msgstr "Open artikel in nieuw tabblad"
335
336msgid "feeds.entry.markread"
337msgstr "Markeer als gelezen"
338
339msgid "feeds.entry.markunread"
340msgstr "Markeer als ongelezen"
341
342msgid "sidebar.entry.bookmark"
343msgstr "Bladwijzer toevoegen…"
344
345msgid "feeds.entry.openfeed"
346msgstr "Open feedpagina"
347
348msgid "feeds.edit"
349msgstr "Feed bewerken…"
350
351msgid "feeds.unsubscribe"
352msgstr "De-abonneren…"
353
354msgid "feeds.markallread"
355msgstr "Markeer alles als gelezen"
356
357msgid "menu.opentab"
358msgstr "Open in nieuw tabblad"
359
360msgid "menu.opentab.background"
361msgstr "Open in achtergrondtabblad"
362
363msgid "menu.edit"
364msgstr "Bewerken…"
365
366msgid "menu.dup"
367msgstr "Dupliceren…"
368
369msgid "menu.copyurl"
370msgstr "Kopieer URL"
371
372msgid "menu.forgeturl"
373msgstr "Vergeet URL"
374
375msgid "history.clear"
376msgstr "Geschiedenis wissen…"
377
378msgid "dlg.history.clear"
379msgstr "Wis geschiedenis"
380
381msgid "heading.confirm.bookmarks.delete"
382msgstr "WIS BLADWIJZERS"
383
384#, c-format
385msgid "dlg.bookmarks.delete"
386msgid_plural "dlg.bookmarks.delete.n"
387msgstr[0] "Verwijder bladwijzer"
388msgstr[1] "Verwijder %u bladwijzers"
389
390msgid "bookmark.tag.sub"
391msgstr "Abonneer op feed"
392
393msgid "bookmark.tag.remote"
394msgstr "Gebruik als bladwijzerbron"
395
396msgid "bookmark.tag.linksplit"
397msgstr "Links openen aan zijkant"
398
399msgid "bookmark.untag.sub"
400msgstr "Deabonneer van feed"
401
402msgid "bookmark.delete"
403msgstr "Verwijder bladwijzer"
404
405msgid "bookmarks.reload"
406msgstr "Externe bronnen verversen"
407
408msgid "ident.using"
409msgstr "Op deze pagina gebruikt"
410
411msgid "ident.notused"
412msgstr "Niet gebruikt"
413
414msgid "ident.temporary"
415msgstr "Tijdelijk"
416
417msgid "ident.use"
418msgstr "Gebruik op deze pagina"
419
420msgid "ident.stopuse"
421msgstr "Stop te gebruiken op deze pagina"
422
423msgid "ident.stopuse.all"
424msgstr "Stop te gebruiken overal"
425
426msgid "ident.export"
427msgstr "Exporteer"
428
429msgid "heading.ident.use"
430msgstr "IDENTITEITSGEBRUIK"
431
432msgid "heading.ident.notes"
433msgstr "IDENTITEITSNOTITIES"
434
435msgid "ident.fingerprint"
436msgstr "Kopieer vingerafdruk"
437
438msgid "ident.delete"
439msgstr "Verwijder identiteit…"
440
441msgid "heading.ident.delete"
442msgstr "VERWIJDER IDENTITEIT"
443
444msgid "sidebar.empty.idents"
445msgstr "Geen identiteiten"
446
447msgid "heading.unsub"
448msgstr "DEABONNEREN"
449
450#, c-format
451msgid "dlg.confirm.unsub"
452msgstr "Weet je zeker dat je van feed \"%s\" wilt deabonneren?"
453
454msgid "dlg.unsub"
455msgstr "Deabonneren"
456
457msgid "error.server.msg"
458msgstr "Server reageerde met bericht:"
459
460msgid "heading.pageinfo"
461msgstr "PAGINA-INFORMATIE"
462
463msgid "pageinfo.header.cached"
464msgstr "(inhoud uit cache)"
465
466msgid "pageinfo.cert.status"
467msgstr "Status certificaat:"
468
469msgid "pageinfo.cert.ca.verified"
470msgstr "Geverifieerd door CA"
471
472msgid "pageinfo.cert.notexpired"
473msgstr "Niet verlopen"
474
475msgid "pageinfo.cert.expired"
476msgstr "Verlopen"
477
478msgid "pageinfo.cert.untrusted"
479msgstr "Niet vertrouwd"
480
481msgid "dlg.cert.trust"
482msgstr "Vertrouw"
483
484msgid "dlg.cert.fingerprint"
485msgstr "Kopieer vingerafdruk"
486
487#, c-format
488msgid "dlg.input.prompt"
489msgstr "Geef invoer voor %s:"
490
491msgid "dlg.input.linebreak"
492msgstr "Regeleinde"
493
494msgid "dlg.input.send"
495msgstr "Verstuur"
496
497msgid "heading.save.incomplete"
498msgstr "PAGINA ONVOLLEDIG"
499
500msgid "dlg.save.size"
501msgstr "Grootte:"
502
503msgid "dlg.save.opendownload"
504msgstr "Open gedownload bestand"
505
506msgid "heading.save.error"
507msgstr "FOUT BIJ OPSLAAN BESTAND"
508
509msgid "heading.import.bookmarks"
510msgstr "IMPORTEER BLADWIJZERS"
511
512#, c-format
513msgid "dlg.import.add"
514msgid_plural "dlg.import.add.n"
515msgstr[0] "%sVoeg bladwijzer toe"
516msgstr[1] "%sVoeg %d bladwijzers toe"
517
518msgid "dlg.import.notnew"
519msgstr "Je hebt al bladwijzers voor alle links op deze pagina."
520
521msgid "heading.autoreload"
522msgstr "AUTO-HERLADEN"
523
524msgid "dlg.autoreload"
525msgstr "Kies het auto-herlaad-interval voor dit tabblad."
526
527msgid "reload.never"
528msgstr "Nooit"
529
530msgid "reload.onceperday"
531msgstr "Eens per dag"
532
533#, c-format
534msgid "num.minutes"
535msgid_plural "num.minutes.n"
536msgstr[0] "%d minuut"
537msgstr[1] "%d minuten"
538
539msgid "link.newtab"
540msgstr "Open link in nieuw tabblad"
541
542msgid "link.newtab.background"
543msgstr "Open link in achtergrondtabblad"
544
545msgid "link.side"
546msgstr "Open link aan de zijkant"
547
548msgid "link.copy"
549msgstr "Kopieer link"
550
551msgid "link.bookmark"
552msgstr "Maak bladwijzer voor link…"
553
554msgid "link.download"
555msgstr "Download gelinkt bestand"
556
557msgid "link.file.delete"
558msgstr "Verwijder bestand"
559
560msgid "heading.file.delete"
561msgstr "VERWIJDER BESTAND"
562
563msgid "dlg.file.delete"
564msgstr "Verwijder"
565
566msgid "heading.openlink"
567msgstr "OPEN LINK"
568
569msgid "dlg.openlink"
570msgstr "Open link"
571
572msgid "dlg.certwarn.title"
573msgstr "Beveiligingsprobleem"
574
575msgid "dlg.certwarn.different"
576msgstr ""
577"Het ontvangen certificaat is geldig, maar anders dan degene die we "
578"vertrouwen."
579
580msgid "dlg.certwarn.domain.expired"
581msgstr ""
582"Het ontvangen certificaat is verlopen en ook nog voor het verkeerde domein."
583
584msgid "heading.certimport"
585msgstr "IMPORTEER IDENTITEIT"
586
587msgid "dlg.certimport.help"
588msgstr ""
589"Plak een certificaat en/of privésleutel in PEM-formaat,\n"
590"of sleep een .crt/.key-bestand naar het venster."
591
592msgid "dlg.certimport.notfound"
593msgstr "Geen certificaat of privésleutel gevonden."
594
595msgid "heading.certimport.dropped"
596msgstr "GEDROPT BESTAND"
597
598msgid "dlg.certimport.import"
599msgstr "Importeer"
600
601msgid "dlg.certimport.notes"
602msgstr "Notities:"
603
604msgid "hint.certimport.description"
605msgstr "omschrijving"
606
607msgid "dlg.certimport.nocert"
608msgstr "Geen certificaat"
609
610msgid "link.hint.audio"
611msgstr "Speel audio"
612
613msgid "link.hint.image"
614msgstr "Toon afbeelding"
615
616msgid "bookmark.title.blank"
617msgstr "Blanco pagina"
618
619msgid "bookmark.export.title.folder"
620msgstr "Bladwijzers"
621
622msgid "bookmark.export.title.time"
623msgstr "Aangemaakte bladwijzers"
624
625msgid "bookmark.export.saving"
626msgstr ""
627"Bewaar deze pagina om ze te exporteren, of kopieer ze naar het klembord."
628
629msgid "bookmark.export.title.tag"
630msgstr "Bladwijzer-tags"
631
632msgid "bookmark.export.format.sub"
633msgstr ""
634"Deze pagina is ingedeeld volgens de \"Subscribing to Gemini pages\""
635"-specificatie."
636
637msgid "bookmark.export.format.linklines"
638msgstr "Elke link staat voor een bladwijzer."
639
640msgid "bookmark.export.format.tags"
641msgstr "Tags worden bepaald door koppen van niveau 2."
642
643msgid "bookmark.export.format.folders"
644msgstr "Mapstructuur wordt bepaald door koppen van niveau 2 en 3."
645
646# Interpret as "Results from bookmarks..."
647msgid "heading.lookup.bookmarks"
648msgstr "BLADWIJZERS"
649
650# Interpret as "Results from feeds..."
651msgid "heading.lookup.feeds"
652msgstr "FEEDS"
653
654# Interpret as "Results from page content..."
655msgid "heading.lookup.pagecontent"
656msgstr "PAGINA-INHOUD"
657
658# Interpret as "Results from identitites..."
659msgid "heading.lookup.identities"
660msgstr "IDENTITEITEN"
661
662# Interpret as "Other results..."
663msgid "heading.lookup.other"
664msgstr "OVERIGE"
665
666msgid "menu.page.upload"
667msgstr "Upload pagina via Titan…"
668
669msgid "heading.upload"
670msgstr "UPLOAD VIA TITAN"
671
672msgid "dlg.upload.id.none"
673msgstr "Geen"
674
675msgid "dlg.upload.id.default"
676msgstr "Standaard"
677
678msgid "heading.upload.text"
679msgstr "Tekst"
680
681msgid "heading.upload.file"
682msgstr "Bestand"
683
684msgid "upload.file.name"
685msgstr "Bestandsnaam:"
686
687msgid "upload.file.size"
688msgstr "Bestandsgrootte:"
689
690msgid "doc.pre.nocaption"
691msgstr "Vooringedeelde tekst zonder bijschrift"
692
693# Inline download status message.
694msgid "media.download.warnclose"
695msgstr "Download wordt geannuleerd als deze tab wordt gesloten."
696
697# Inline download status message.
698msgid "media.download.complete"
699msgstr "Download voltooid."
700
701msgid "numbertype.float"
702msgstr "float"
703
704# Used in about:feeds.
705msgid "feeds.list.title"
706msgstr "Feed-artiekelen"
707
708# The "%%s" in the end of this string is an escaped string c-format (%s) that will be replaced with the translated output of "feeds.list.entrycount". The translation should have "%%s" at the position where that part can be inserted.
709#, c-format
710msgid "feeds.list.counts"
711msgid_plural "feeds.list.counts.n"
712msgstr[0] "Je bent geabbonneerd op %u feed die %%s bevat.\n"
713msgstr[1] "Je bent geabbonneerd op %u feeds die %%s bevatten.\n"
714
715#, c-format
716msgid "feeds.list.refreshtime"
717msgstr "%s ververst."
718
719#, c-format
720msgid "hours.ago"
721msgid_plural "hours.ago.n"
722msgstr[0] "%d uur geleden"
723msgstr[1] "%d uren geleden"
724
725# Alt-text of the preformatted logo.
726msgid "about.logo"
727msgstr "ASCII-kunst: het woord \"Lagrange\" in grote letters"
728
729msgid "about.powered"
730msgstr "Mede mogelijk gemaakt door SDL 2, OpenSSL, en ☕️"
731
732msgid "cancel"
733msgstr "Annuleren"
734
735msgid "dlg.message.ok"
736msgstr "Doorgaan"
737
738msgid "menu.title.file"
739msgstr "Bestand"
740
741msgid "menu.newtab"
742msgstr "Nieuw tabblad"
743
744msgid "menu.split.merge"
745msgstr "Ontsplitsen"
746
747msgid "menu.pageinfo"
748msgstr "Toon pagina-informatie"
749
750# Used on iOS. "Files" refers to Apple's iOS app where you can pick an iCloud folder.
751msgid "menu.save.files"
752msgstr "Opslaan naar Bestanden"
753
754msgid "menu.save.downloads.open"
755msgstr "Sla op naar Downloads en open bestand"
756
757msgid "menu.sidebar.left"
758msgstr "Linker-zijbalk aan/uit"
759
760msgid "menu.zoom.out"
761msgstr "Uitzoomen"
762
763msgid "menu.newfolder"
764msgstr "Nieuwe map…"
765
766msgid "menu.sort.alpha"
767msgstr "Sorteer alfabetisch"
768
769msgid "menu.bookmarks.bytime"
770msgstr "Toon bladwijzers op aanmaakdatum"
771
772msgid "macos.menu.bookmarks.bytime"
773msgstr "Toon op aanmaakdatum"
774
775msgid "menu.website"
776msgstr "Projectwebsite…"
777
778msgid "menu.paste"
779msgstr "Plakken"
780
781# keep this short (3x1 horiz layout)
782msgid "menu.selectall"
783msgstr "Selecteer alles"
784
785# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
786msgid "menu.show.bookmarks"
787msgstr "Toon bladwijzers"
788
789# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
790msgid "menu.show.feeds"
791msgstr "Toon feeds"
792
793# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
794msgid "menu.show.history"
795msgstr "Toon geschiedenis"
796
797msgid "menu.back"
798msgstr "Ga terug"
799
800msgid "menu.forward"
801msgstr "Ga vooruit"
802
803msgid "menu.page.bookmark"
804msgstr "Maak bladwijzer…"
805
806msgid "menu.page.subscribe"
807msgstr "Abonneer op pagina…"
808
809msgid "panel.back"
810msgstr "Terug"
811
812msgid "menu.import.links"
813msgstr "Importeer alle links op pagina…"
814
815msgid "menu.page.translate"
816msgstr "Vertaal…"
817
818# Used in the Edit menu on macOS. Note: could be replaced with menu.page.copyurl.
819msgid "menu.copy.pagelink"
820msgstr "Kopieer link naar pagina"
821
822msgid "menu.bookmarks.refresh"
823msgstr "Ververs externe bladwijzers"
824
825msgid "menu.identity.notactive"
826msgstr "Geen actieve identiteit"
827
828msgid "sidebar.history"
829msgstr "Geschiedenis"
830
831msgid "sidebar.action.feeds.showall"
832msgstr "Alle"
833
834# Usage: "(count) Unread" in the sidebar tab title, referring to feed entries.
835msgid "sidebar.unread"
836msgid_plural "sidebar.unread.n"
837msgstr[0] "ongelezen"
838msgstr[1] "ongelezen"
839
840msgid "toolbar.outline"
841msgstr "Inhoudsopgave"
842
843msgid "status.feeds"
844msgstr "Feeds bijwerken"
845
846# megabytes, used as the unit after a number
847msgid "mb"
848msgstr "MB"
849
850# kilobytes, used as the unit after a number
851msgid "kb"
852msgstr "KB"
853
854msgid "num.fonts"
855msgid_plural "num.fonts.n"
856msgstr[0] "%u lettertype"
857msgstr[1] "%u lettertypes"
858
859# strftime() formatted. Should be split evenly on two lines with a newline character.
860msgid "page.timestamp"
861msgstr ""
862"Ontvangen om %H:%M\n"
863"op %d %b %Y"
864
865msgid "feeds.entry.bookmark"
866msgstr "Bladwijzer toevoegen…"
867
868msgid "feeds.refresh"
869msgstr "Feeds verversen"
870
871msgid "feeds.atom.translated"
872msgstr ""
873"Dit Atom XML-document is automatisch omgezet naar een Gemini-feed zodat je "
874"je er op kunt abonneren."
875
876msgid "menu.openfile"
877msgstr "Open bestand…"
878
879msgid "heading.history.clear"
880msgstr "GESCHIEDENIS WISSEN"
881
882msgid "dlg.confirm.history.clear"
883msgstr ""
884"Weet je zeker dat je de hele geschiedenis van bezochte pagina's wil wissen?"
885
886#, c-format
887msgid "dlg.confirm.bookmarks.delete"
888msgid_plural "dlg.confirm.bookmarks.delete.n"
889msgstr[0] "Wil je echt de bladwijzer in deze map verwijderen?"
890msgstr[1] "Wil je echt alle %u bladwijzers in deze map verwijderen?"
891
892msgid "bookmark.tag.home"
893msgstr "Gebruik als startpagina"
894
895msgid "bookmark.untag.home"
896msgstr "Wis startpagina"
897
898msgid "bookmark.untag.remote"
899msgstr "Verwijder bladwijzerbron"
900
901#, c-format
902msgid "ident.usedonurls"
903msgid_plural "ident.usedonurls.n"
904msgstr[0] "Gebruikt op %u URL"
905msgstr[1] "Gebruikt op %u URL's"
906
907# strftime() formatted
908msgid "ident.expiry"
909msgstr "Verloopt op %d %b %Y"
910
911msgid "menu.edit.notes"
912msgstr "Bewerk notities…"
913
914# %s refers to name of an identity.
915#, c-format
916msgid "dlg.ident.notes"
917msgstr "Notities over %s:"
918
919#, c-format
920msgid "dlg.confirm.ident.delete"
921msgstr ""
922"Weet je zeker dat je de identiteit %s\"%s\"%s wilt verwijderen, inclusief "
923"zijn certificaat- en privésleutel-bestanden?"
924
925msgid "dlg.ident.delete"
926msgstr "Verwijder identiteit en bestanden"
927
928# The %s format characters are used to highlight the word "Help" and must be used in the translation in same way as here.
929#, c-format
930msgid "ident.gotohelp"
931msgstr "Zie %sHelp%s voor meer informatie over TLS-clientcertificaten."
932
933#, c-format
934msgid "error.unsupported.suggestsave"
935msgstr ""
936"Je kan hem opslaan als bestand naar je Downloads-map: druk op %s of "
937"selecteer \"%s\" in het menu."
938
939msgid "pageinfo.cert.ca.unverified"
940msgstr "Niet geverifieerd door CA"
941
942msgid "pageinfo.cert.trusted"
943msgstr "Vertrouwd"
944
945msgid "pageinfo.domain.match"
946msgstr "Domeinnaam komt overeen"
947
948msgid "pageinfo.domain.mismatch"
949msgstr "Domeinnaam komt niet overeen"
950
951msgid "heading.save"
952msgstr "BESTAND OPGESLAGEN"
953
954msgid "dlg.save.incomplete"
955msgstr "De pagina-inhoud wordt nog steeds gedownload."
956
957#, c-format
958msgid "dlg.import.found"
959msgid_plural "dlg.import.found.n"
960msgstr[0] "Er is één nieuwe link gevonden op de pagina."
961msgstr[1] "Er zijn %d nieuwe links gevonden op de pagina."
962
963#, c-format
964msgid "num.hours"
965msgid_plural "num.hours.n"
966msgstr[0] "%d uur"
967msgstr[1] "%d uren"
968
969msgid "link.side.newtab"
970msgstr "Open link in nieuw tabblad aan de zijkant"
971
972msgid "link.browser"
973msgstr "Open link in standaard browser"
974
975msgid "link.noproxy"
976msgstr "Open zonder proxy"
977
978msgid "dlg.file.delete.confirm"
979msgstr "Weet je zeker dat je dit bestand wilt verwijderen?"
980
981#, c-format
982msgid "dlg.openlink.confirm"
983msgstr ""
984"Open deze link in de standaard browser?\n"
985"%s%s"
986
987#, c-format
988msgid "dlg.certwarn.mayberenewed"
989msgid_plural "dlg.certwarn.mayberenewed.n"
990msgstr[0] ""
991"Het ontvangen certificaat is misschien recent vernieuwd — het is voor het "
992"correcte domein en niet verlopen. Het huidig vertrouwde certificaat verloopt "
993"op %s, over één dag."
994msgstr[1] ""
995"Het ontvangen certificaat is misschien recent vernieuwd — het is voor het "
996"correcte domein en niet verlopen. Het huidig vertrouwde certificaat verloopt "
997"op %s, over %d dagen."
998
999#, c-format
1000msgid "dlg.certwarn.expired"
1001msgstr "Het ontvangen certificaat is verlopen op %s."
1002
1003msgid "dlg.certwarn.domain"
1004msgstr ""
1005"Het ontvangen certificaat is voor het verkeerde domein (%s). Dit kan een "
1006"serverconfiguratieprobleem zijn."
1007
1008msgid "dlg.certimport.notfound.page"
1009msgstr "Geen certificaat/sleutel gevonden op deze pagina."
1010
1011msgid "heading.certimport.pasted"
1012msgstr "GEPLAKT UIT KLEMBORD"
1013
1014# button in the mobile New Identity dialog
1015msgid "dlg.certimport.pickfile"
1016msgstr "Importeer certificaat- of sleutel-bestand"
1017
1018msgid "dlg.certimport.nokey"
1019msgstr "Geen privésleutel"
1020
1021msgid "bookmark.export.count"
1022msgid_plural "bookmark.export.count.n"
1023msgstr[0] "Je hebt %d bladwijzer."
1024msgstr[1] "Je hebt %d bladwijzers."
1025
1026msgid "bookmark.export.taginfo"
1027msgstr ""
1028"In deze lijst staat elke kop voor een bladwijzer-tag. Alleen bladwijzers met "
1029"tags worden getoond. Bladwijzers met meerdere tags worden onder elke tag "
1030"herhaald."
1031
1032msgid "bookmark.export.format.otherlines"
1033msgstr ""
1034"Opsommingslijsten en citaten zijn gereserveerd voor extra informatie over de "
1035"voorgaande bladwijzer. Tekstregels en vooringedeelde tekst worden als "
1036"opmerkingen beschouwd en moeten genegeerd worden."
1037
1038# Interpret as "Results from history..."
1039msgid "heading.lookup.history"
1040msgstr "GESCHIEDENIS"
1041
1042msgid "upload.id"
1043msgstr "Identiteit:"
1044
1045msgid "hint.upload.text"
1046msgstr "voer tekst in om te uploaden"
1047
1048msgid "upload.file.drophere"
1049msgstr "(sleep een bestand naar het venster)"
1050
1051msgid "upload.mime"
1052msgstr "MIME-type:"
1053
1054msgid "upload.token"
1055msgstr "Token:"
1056
1057msgid "hint.upload.token"
1058msgstr "zie instructies van server"
1059
1060msgid "dlg.upload.send"
1061msgstr "Upload"
1062
1063msgid "upload.port"
1064msgstr "Poort…"
1065
1066msgid "heading.uploadport"
1067msgstr "TITAN UPLOADPOORT"
1068
1069msgid "dlg.uploadport.set"
1070msgstr "Stel poort in"
1071
1072# used on mobile
1073msgid "dlg.upload.text"
1074msgstr "Upload platte tekst"
1075
1076# used on mobile
1077msgid "dlg.upload.file"
1078msgstr "Upload een bestand"
1079
1080# used on mobile
1081msgid "dlg.upload.pickfile"
1082msgstr "Kies bestand"
1083
1084msgid "heading.translate"
1085msgstr "VERTAAL PAGINA"
1086
1087msgid "dlg.translate.unavail"
1088msgstr "Dienst niet beschikbaar"
1089
1090msgid "dlg.translate.fail"
1091msgstr "Verzoek mislukt"
1092
1093msgid "dlg.translate"
1094msgstr "Vertaal"
1095
1096msgid "dlg.translate.to"
1097msgstr "Naar:"
1098
1099msgid "dlg.translate.from"
1100msgstr "Uit:"
1101
1102# A language choice in the Translation dialog.
1103msgid "lang.ar"
1104msgstr "Arabisch"
1105
1106# A language choice in the Translation dialog.
1107msgid "lang.zh"
1108msgstr "Chinees"
1109
1110# A language choice in the Translation dialog.
1111msgid "lang.de"
1112msgstr "Duits"
1113
1114# A language choice in the Translation dialog.
1115msgid "lang.en"
1116msgstr "Engels"
1117
1118# A language choice in the Translation dialog.
1119msgid "lang.fr"
1120msgstr "Frans"
1121
1122# A language choice in the Translation dialog.
1123msgid "lang.hi"
1124msgstr "Hindi"
1125
1126# A language choice in the Translation dialog.
1127msgid "lang.ja"
1128msgstr "Japans"
1129
1130# A language choice in the Translation dialog.
1131msgid "lang.pt"
1132msgstr "Portugees"
1133
1134# A language choice in the Translation dialog.
1135msgid "lang.ru"
1136msgstr "Russisch"
1137
1138msgid "heading.newident"
1139msgstr "NIEUWE IDENTITEIT"
1140
1141msgid "dlg.newident.rsa.selfsign"
1142msgstr "Er wordt een zelfondertekend 2048-bit RSA-certificaat gemaakt."
1143
1144msgid "dlg.newident.until"
1145msgstr "Geldig tot:"
1146
1147msgid "hint.newident.optional"
1148msgstr "optioneel"
1149
1150msgid "dlg.newident.commonname"
1151msgstr "Gewone naam:"
1152
1153msgid "dlg.newident.temp"
1154msgstr "Tijdelijk:"
1155
1156msgid "dlg.newident.notsaved"
1157msgstr "niet opgeslagen"
1158
1159msgid "dlg.newident.scope"
1160msgstr "Gebruik op:"
1161
1162msgid "dlg.newident.scope.domain"
1163msgstr "Huidig domein"
1164
1165msgid "dlg.newident.scope.none"
1166msgstr "Niet gebruikt"
1167
1168msgid "dlg.newident.email"
1169msgstr "Email:"
1170
1171msgid "dlg.newident.domain"
1172msgstr "Domein:"
1173
1174msgid "dlg.newident.country"
1175msgstr "Land:"
1176
1177msgid "dlg.newident.create"
1178msgstr "Creëer identieit"
1179
1180msgid "heading.newident.date.bad"
1181msgstr "ONGELDIGE DATUM"
1182
1183msgid "dlg.newident.date.past"
1184msgstr "De verloopdatum moet in de toekomst zijn."
1185
1186msgid "heading.feedcfg"
1187msgstr "FEED-INSTELLINGEN"
1188
1189msgid "heading.subscribe"
1190msgstr "ABONNEER OP PAGINA"
1191
1192msgid "dlg.feed.title"
1193msgstr "Titel:"
1194
1195msgid "dlg.feed.entrytype"
1196msgstr "Artikelen gegeven als:"
1197
1198msgid "dlg.feed.type.headings"
1199msgstr "Nieuwe koppen"
1200
1201msgid "dlg.feed.ignoreweb"
1202msgstr "Negeer HTTP(S)-links:"
1203
1204msgid "dlg.feed.save"
1205msgstr "Instellingen opslaan"
1206
1207msgid "heading.bookmark.edit"
1208msgstr "BLADWIJZER BEWERKEN"
1209
1210msgid "dlg.bookmark.title"
1211msgstr "Titel:"
1212
1213msgid "dlg.bookmark.url"
1214msgstr "URL:"
1215
1216msgid "dlg.bookmark.folder"
1217msgstr "Map:"
1218
1219msgid "dlg.bookmark.tags"
1220msgstr "Tags:"
1221
1222msgid "dlg.bookmark.icon"
1223msgstr "Icoon:"
1224
1225msgid "heading.addfolder"
1226msgstr "MAP TOEVOEGEN"
1227
1228msgid "dlg.addfolder.defaulttitle"
1229msgstr "Nieuwe map"
1230
1231msgid "dlg.addfolder"
1232msgstr "Map toevoegen"
1233
1234msgid "heading.prefs"
1235msgstr "VOORKEUREN"
1236
1237msgid "heading.prefs.certs"
1238msgstr "CERTIFICATEN"
1239
1240# tab button
1241msgid "heading.prefs.colors"
1242msgstr "Kleuren"
1243
1244# tab button
1245msgid "heading.prefs.interface"
1246msgstr "Interface"
1247
1248# tab button
1249msgid "heading.prefs.keys"
1250msgstr "Toetsen"
1251
1252msgid "heading.prefs.fonts"
1253msgstr "Lettertypes"
1254
1255# used on mobile
1256msgid "heading.settings"
1257msgstr "INSTELLINGEN"
1258
1259msgid "heading.prefs.paragraph"
1260msgstr "PARAGRAAF"
1261
1262msgid "heading.prefs.uitheme"
1263msgstr "INTERFACE-KLEUREN"
1264
1265msgid "heading.prefs.pagecontent"
1266msgstr "PAGINA-KLEUREN"
1267
1268msgid "heading.prefs.scrolling"
1269msgstr "SCROLLEN"
1270
1271msgid "heading.prefs.sizing"
1272msgstr "GROOTTE"
1273
1274msgid "heading.prefs.widelayout"
1275msgstr "BREDE LAYOUT"
1276
1277# tab button
1278msgid "heading.prefs.userinterface"
1279msgstr "Gebruikersinterface"
1280
1281msgid "prefs.downloads"
1282msgstr "Downloads-map:"
1283
1284msgid "prefs.searchurl"
1285msgstr "Zoek-URL:"
1286
1287msgid "prefs.centershort"
1288msgstr "Verticaal centreren:"
1289
1290msgid "prefs.collapsepreonload"
1291msgstr "Klap vooringedeelde tekst in:"
1292
1293msgid "prefs.pinsplit"
1294msgstr "Gesplitst tabblad pinnen:"
1295
1296msgid "prefs.pinsplit.none"
1297msgstr "Geen"
1298
1299msgid "prefs.pinsplit.left"
1300msgstr "Linkertabblad"
1301
1302msgid "prefs.pinsplit.right"
1303msgstr "Rechtertabblad"
1304
1305msgid "prefs.smoothscroll"
1306msgstr "Vloeiend scrollen:"
1307
1308msgid "prefs.scrollspeed.keyboard"
1309msgstr "Snelheid toetsenbord:"
1310
1311msgid "prefs.scrollspeed.mouse"
1312msgstr "Snelheid muis:"
1313
1314msgid "prefs.hidetoolbarscroll"
1315msgstr "Verberg werkbalk bij scrollen:"
1316
1317msgid "prefs.theme"
1318msgstr "Thema:"
1319
1320msgid "prefs.theme.black"
1321msgstr "Zwart"
1322
1323msgid "prefs.theme.dark"
1324msgstr "Donker"
1325
1326msgid "prefs.theme.light"
1327msgstr "Licht"
1328
1329msgid "prefs.accent"
1330msgstr "Accentkleur:"
1331
1332msgid "prefs.accent.teal"
1333msgstr "Turkoois"
1334
1335msgid "prefs.accent.orange"
1336msgstr "Oranje"
1337
1338msgid "prefs.time.24h"
1339msgstr "24-uurs klok"
1340
1341msgid "prefs.uiscale"
1342msgstr "Interface-schaalfactor:"
1343
1344msgid "prefs.returnkey"
1345msgstr "Gedrag Enter-toets:"
1346
1347msgid "prefs.returnkey.linebreak"
1348msgstr "Regeleinde"
1349
1350msgid "prefs.returnkey.accept"
1351msgstr "Accepteren"
1352
1353msgid "prefs.animate"
1354msgstr "Animaties:"
1355
1356msgid "prefs.sideicon"
1357msgstr "Capsule-icoon:"
1358
1359msgid "prefs.doctheme.light"
1360msgstr "Licht thema:"
1361
1362msgid "prefs.doctheme.name.colorfullight"
1363msgstr "Kleurrijk licht"
1364
1365msgid "prefs.doctheme.name.black"
1366msgstr "Zwart"
1367
1368msgid "prefs.doctheme.name.gray"
1369msgstr "Grijs"
1370
1371msgid "prefs.doctheme.name.white"
1372msgstr "Wit"
1373
1374msgid "prefs.doctheme.name.sepia"
1375msgstr "Sepia"
1376
1377msgid "prefs.saturation"
1378msgstr "Verzadiging:"
1379
1380msgid "prefs.imagestyle"
1381msgstr "Verkleur afbeeldingen:"
1382
1383msgid "prefs.imagestyle.original"
1384msgstr "Niet"
1385
1386msgid "prefs.imagestyle.grayscale"
1387msgstr "Grijstinten"
1388
1389msgid "prefs.imagestyle.preformat"
1390msgstr "Kleur vooringedeelde tekst"
1391
1392msgid "prefs.font.ui"
1393msgstr "Interface:"
1394
1395msgid "prefs.imagestyle.text"
1396msgstr "Kleur hoofdtekst"
1397
1398msgid "prefs.font.body"
1399msgstr "Hoofdtekst:"
1400
1401msgid "prefs.font.mono"
1402msgstr "Vooringedeeld:"
1403
1404msgid "prefs.mono"
1405msgstr "Tekst in vaste breedte:"
1406
1407msgid "prefs.mono.gopher"
1408msgstr "Gopher"
1409
1410msgid "prefs.boldlink"
1411msgstr "Vetgedrukte links:"
1412
1413msgid "prefs.boldlink.visited"
1414msgstr "Bezocht"
1415
1416msgid "prefs.gemtext.ansi"
1417msgstr "ANSI-escapes:"
1418
1419# Color of the text foreground, i.e., the characters.
1420msgid "prefs.gemtext.ansi.fg"
1421msgstr "Voorgrondkleur"
1422
1423msgid "prefs.font.warnmissing"
1424msgstr "Schriftwaarschuwingen:"
1425
1426msgid "prefs.font.smooth"
1427msgstr "Mooi maken:"
1428
1429msgid "prefs.linewidth.normal"
1430msgstr "Normaal"
1431
1432msgid "prefs.gemtext.ansi.fontstyle"
1433msgstr "Letterstijl"
1434
1435msgid "prefs.linespacing"
1436msgstr "Regelafstand:"
1437
1438msgid "prefs.quoteicon"
1439msgstr "Citaat-indicator:"
1440
1441msgid "prefs.quoteicon.line"
1442msgstr "Lijn"
1443
1444msgid "prefs.biglede"
1445msgstr "Grote 1e paragraaf:"
1446
1447msgid "prefs.plaintext.wrap"
1448msgstr "Platte tekst omslaan:"
1449
1450msgid "prefs.decodeurls"
1451msgstr "Decodeer URL's:"
1452
1453msgid "prefs.quoteicon.icon"
1454msgstr "\" icoon"
1455
1456msgid "prefs.memorysize"
1457msgstr "Geheugengrootte:"
1458
1459msgid "prefs.ca.file"
1460msgstr "CA-bestand:"
1461
1462msgid "prefs.ca.path"
1463msgstr "CA-pad:"
1464
1465msgid "prefs.proxy.http"
1466msgstr "HTTP-proxy:"
1467
1468msgid "menu.binding.clear"
1469msgstr "Verwijder"
1470
1471msgid "archive.exit"
1472msgstr "Verlaat archief"
1473
1474msgid "keys.top"
1475msgstr "Spring naar boven"
1476
1477msgid "keys.bottom"
1478msgstr "Spring naar onder"
1479
1480msgid "keys.scroll.up"
1481msgstr "Scrol omhoog"
1482
1483msgid "keys.scroll.halfpage.up"
1484msgstr "Scrol een halve pagina omhoog"
1485
1486msgid "keys.scroll.page.up"
1487msgstr "Scrol een pagina omhoog"
1488
1489msgid "keys.scroll.page.down"
1490msgstr "Scrol een pagina omlaag"
1491
1492msgid "keys.forward"
1493msgstr "Ga vooruit"
1494
1495msgid "keys.root"
1496msgstr "Ga naar beginpagina van capsule"
1497
1498msgid "keys.reload"
1499msgstr "Herlaad pagina"
1500
1501msgid "keys.link.modkey"
1502msgstr "Open link via modificatietoets"
1503
1504msgid "keys.link.homerow.newtab"
1505msgstr "Open link in nieuw tabblad via middenrij-toetsen"
1506
1507msgid "keys.link.homerow.next"
1508msgstr "Volgende set middenrij-toets-links"
1509
1510msgid "keys.bookmark.add"
1511msgstr "Voeg bladwijzer toe"
1512
1513msgid "keys.subscribe"
1514msgstr "Abonneer op pagina"
1515
1516msgid "keys.findtext"
1517msgstr "Zoek tekst op pagina"
1518
1519msgid "keys.zoom.in"
1520msgstr "Inzoomen"
1521
1522msgid "keys.zoom.reset"
1523msgstr "Zoom resetten"
1524
1525msgid "keys.tab.close"
1526msgstr "Sluit tabblad"
1527
1528msgid "keys.tab.next"
1529msgstr "Volgend tabblad"
1530
1531msgid "keys.split.menu"
1532msgstr "Stel gesplitste weergavemodus in"
1533
1534msgid "keys.split.item"
1535msgstr "Menu gesplitste weergave:"
1536
1537msgid "keys.upload"
1538msgstr "Upload pagina via Titan"
1539
1540msgid "error.badstatus"
1541msgstr "Onbekende statuscode"
1542
1543msgid "error.badresource"
1544msgstr "Ongeldige bron"
1545
1546msgid "error.unsupported.media"
1547msgstr "Inhoudstype niet ondersteund"
1548
1549msgid "error.unsupported.media.msg"
1550msgstr "De ontvangen inhoud kan niet worden weergegeven met deze applicatie."
1551
1552msgid "error.unsupported.protocol"
1553msgstr "Niet ondersteund protocol"
1554
1555msgid "error.badheader"
1556msgstr "Ongeldige header"
1557
1558msgid "error.badredirect"
1559msgstr "Ongeldige doorverwijzing"
1560
1561msgid "error.manyredirects"
1562msgstr "Teveel doorverwijzingen"
1563
1564msgid "error.tls"
1565msgstr "Netwerk/TLS-fout"
1566
1567msgid "error.tls.msg"
1568msgstr "Communiceren met de server mislukt."
1569
1570msgid "error.certexpired.msg"
1571msgstr ""
1572"De verbinding met de server werd geannuleerd omdat zijn TLS-certificaat "
1573"verlopen is."
1574
1575msgid "error.certverify"
1576msgstr "Niet vertrouwde server"
1577
1578msgid "error.temporary"
1579msgstr "Tijdelijke fout"
1580
1581msgid "error.unavail"
1582msgstr "Server niet beschikbaar"
1583
1584msgid "error.cgi"
1585msgstr "CGI-fout"
1586
1587msgid "error.cgi.msg"
1588msgstr ""
1589"Fout opgetreden bij dynamische inhoudsgeneratie op de server. De software op "
1590"de server werkt mogelijk niet zoals het hoort."
1591
1592msgid "error.proxy"
1593msgstr "Proxy-fout"
1594
1595msgid "error.slowdown"
1596msgstr "Niet zo snel"
1597
1598msgid "error.permanent"
1599msgstr "Permanente fout"
1600
1601msgid "error.notfound"
1602msgstr "Niet gevonden"
1603
1604msgid "error.gone"
1605msgstr "Verdwenen"
1606
1607msgid "error.proxyrefusal"
1608msgstr "Proxy-verzoek geweigerd"
1609
1610msgid "error.badrequest"
1611msgstr "Verkeerd verzoek"
1612
1613msgid "error.cert.needed"
1614msgstr "Certificaat vereist"
1615
1616msgid "error.cert.auth"
1617msgstr "Certificaat niet goedgekeurd"
1618
1619msgid "error.ansi"
1620msgstr "Terminal-emulatie"
1621
1622msgid "gempub.cover.untitled"
1623msgstr "Naamloos boek"
1624
1625msgid "gempub.cover.view"
1626msgstr "Toon Gempub-inhoud"
1627
1628msgid "gempub.cover.image"
1629msgstr "Kaft-afbeelding"
1630
1631msgid "gempub.meta.author"
1632msgstr "Auteur"
1633
1634msgid "gempub.meta.revdate"
1635msgstr "Herzieningsdatum"
1636
1637msgid "gempub.meta.lang"
1638msgstr "Taal"
1639
1640msgid "gempub.meta.license"
1641msgstr "Licentie"
1642
1643msgid "heading.fontpack.meta"
1644msgstr "Lettertypes"
1645
1646msgid "heading.fontpack.meta.disabled"
1647msgstr "Inactieve lettertypepakketten"
1648
1649msgid "fontpack.meta.installed"
1650msgstr "Geïnstalleerd"
1651
1652msgid "fontpack.meta.notinstalled"
1653msgstr "Niet geïnstalleerd"
1654
1655msgid "fontpack.meta.disabled"
1656msgstr ", inactief"
1657
1658#, c-format
1659msgid "fontpack.enable"
1660msgstr "Activeer \"%s\""
1661
1662#, c-format
1663msgid "fontpack.disable"
1664msgstr "Deactiveer \"%s\""
1665
1666#, c-format
1667msgid "fontpack.upgrade"
1668msgstr "Upgrade \"%s\" naar versie %d"
1669
1670#, c-format
1671msgid "fontpack.delete"
1672msgstr "\"%s\" permanent verwijderen"
1673
1674#, c-format
1675msgid "dlg.fontpack.delete.confirm"
1676msgstr ""
1677"Weet je zeker dat je het lettertypepakket \"%s\" permanent wilt verwijderen?"
1678
1679msgid "dlg.fontpack.delete"
1680msgstr "Verwijder lettertypepakket"
1681
1682msgid "fontpack.install.ttf"
1683msgstr "Installeer TrueType-lettertype"
1684
1685msgid "fontpack.open.fontsdir"
1686msgstr "Open gebruikerslettertypemap"
1687
1688msgid "heading.dismiss.warning"
1689msgstr "NEGEER WAARSCHUWING?"
1690
1691msgid "dlg.dismiss.warning"
1692msgstr "Negeer waarschuwing"
1693
1694msgid "heading.fontpack.classic"
1695msgstr "DOWNLOAD LETTERTYPEPAKKET"
1696
1697msgid "dlg.fontpack.classic"
1698msgstr "Download lettertypepakket (25 MB)"
1699
1700msgid "dlg.uploadport.msg"
1701msgstr ""
1702"Stel de Titan-serverpoort in om te gebruiken voor deze URL. De poort wordt "
1703"opgeslagen in de site-specifieke configuratie."
1704
1705# A language choice in the Translation dialog.
1706msgid "lang.it"
1707msgstr "Italiaans"
1708
1709# A language choice in the Translation dialog.
1710msgid "lang.es"
1711msgstr "Spaans"
1712
1713msgid "hint.newident.date"
1714msgstr "JJJJ of JJJJ-MM-DD"
1715
1716msgid "dlg.newident.scope.page"
1717msgstr "Huidige pagina"
1718
1719msgid "dlg.newident.userid"
1720msgstr "Gebruikers-ID:"
1721
1722msgid "dlg.newident.org"
1723msgstr "Organisatie:"
1724
1725msgid "dlg.newident.more"
1726msgstr "Meer…"
1727
1728msgid "heading.newident.missing"
1729msgstr "INFO ONTBREEKT"
1730
1731msgid "dlg.newindent.missing.commonname"
1732msgstr "Een \"Gewone naam\" moet zijn ingesteld."
1733
1734msgid "dlg.newident.date.example"
1735msgstr ""
1736"Controleer de \"Geldig tot\"-datum. Voorbeelden:\n"
1737"• 2030\n"
1738"• 2025-06-30\n"
1739"• 2021-12-31 23:59:59"
1740
1741msgid "dlg.feed.type.gemini"
1742msgstr "JJJJ-MM-DD links"
1743
1744msgid "dlg.feed.sub"
1745msgstr "Abonneren"
1746
1747msgid "heading.bookmark.add"
1748msgstr "BLADWIJZER TOEVOEGEN"
1749
1750msgid "dlg.bookmark.save"
1751msgstr "Bladwijzer opslaan"
1752
1753msgid "heading.bookmark.tags"
1754msgstr "SPECIALE TAGS"
1755
1756msgid "dlg.addfolder.prompt"
1757msgstr "Voer de naam van de nieuwe map in:"
1758
1759# tab button
1760msgid "heading.prefs.general"
1761msgstr "Algemeen"
1762
1763# tab button
1764msgid "heading.prefs.network"
1765msgstr "Netwerk"
1766
1767msgid "heading.prefs.proxies"
1768msgstr "PROXIES"
1769
1770# tab button
1771msgid "heading.prefs.style"
1772msgstr "Stijl"
1773
1774msgid "prefs.hoverlink"
1775msgstr "Toon URL bij aanwijzen:"
1776
1777msgid "prefs.bookmarks.addbottom"
1778msgstr "Voeg bladwijzers onder toe:"
1779
1780# User preference that controls whether index.gmi pages get automatically opened when browsing the contents of a directory inside a compressed archive.
1781msgid "prefs.archive.openindex"
1782msgstr "Open archief-indexen:"
1783
1784msgid "prefs.imageloadscroll"
1785msgstr "Laad afbeelding bij scrollen:"
1786
1787msgid "prefs.ostheme"
1788msgstr "Gebruik systeemthema:"
1789
1790msgid "prefs.theme.white"
1791msgstr "Wit"
1792
1793msgid "prefs.uilang"
1794msgstr "Taal:"
1795
1796msgid "prefs.customframe"
1797msgstr "Aangepast vensterframe:"
1798
1799msgid "prefs.retainwindow"
1800msgstr "Behoud plek:"
1801
1802msgid "prefs.doctheme.dark"
1803msgstr "Donker thema:"
1804
1805msgid "prefs.doctheme.name.colorfuldark"
1806msgstr "Kleurrijk donker"
1807
1808msgid "prefs.doctheme.name.highcontrast"
1809msgstr "Hoog contrast"
1810
1811# Abbrevation: background-to-foreground
1812msgid "prefs.imagestyle.bgfg"
1813msgstr "Achter-naar-voorgrondkleur"
1814
1815msgid "prefs.font.heading"
1816msgstr "Koppen:"
1817
1818msgid "prefs.font"
1819msgstr "Hoofdtekst-lettertype:"
1820
1821# Font to use for headings and body when Monospace body is enabled.
1822msgid "prefs.font.monodoc"
1823msgstr "Vaste-breedte-lettertype:"
1824
1825msgid "prefs.mono.gemini"
1826msgstr "Gemini"
1827
1828# Interpretation: (Bold links) on dark (background).
1829msgid "prefs.boldlink.dark"
1830msgstr "Op donker"
1831
1832# Interpretation: (Bold links) on light (background).
1833msgid "prefs.boldlink.light"
1834msgstr "Op licht"
1835
1836# Color of text background.
1837msgid "prefs.gemtext.ansi.bg"
1838msgstr "Achtergrondkleur"
1839
1840msgid "prefs.linewidth"
1841msgstr "Regelbreedte:"
1842
1843msgid "prefs.linewidth.fill"
1844msgstr "Vullen"
1845
1846msgid "prefs.cachesize"
1847msgstr "Cache-grootte:"
1848
1849msgid "prefs.proxy.gemini"
1850msgstr "Gemini-proxy:"
1851
1852msgid "prefs.proxy.gopher"
1853msgstr "Gopher-proxy:"
1854
1855msgid "menu.binding.reset"
1856msgstr "Herstel standaard"
1857
1858#, c-format
1859msgid "archive.summary"
1860msgid_plural "archive.summary.n"
1861msgstr[0] "Dit archief bevat %u item en de gecomprimeerde grootte is %.1f MB."
1862msgstr[1] "Dit archief bevat %u items en de gecomprimeerde grootte is %.1f MB."
1863
1864msgid "dir.empty"
1865msgstr "Deze map is leeg."
1866
1867#, c-format
1868msgid "dir.summary"
1869msgid_plural "dir.summary.n"
1870msgstr[0] "Deze map bevat %u item."
1871msgstr[1] "Deze map bevat %u items."
1872
1873msgid "keys.scroll.down"
1874msgstr "Scrol omlaag"
1875
1876msgid "keys.scroll.halfpage.down"
1877msgstr "Scrol een halve pagina omlaag"
1878
1879msgid "keys.back"
1880msgstr "Ga terug"
1881
1882msgid "keys.parent"
1883msgstr "Ga naar bovenliggende map"
1884
1885msgid "keys.link.homerow"
1886msgstr "Open link via middenrij-toetsen"
1887
1888msgid "keys.link.homerow.hover"
1889msgstr "Hang boven link via middenrij-toetsen"
1890
1891msgid "keys.bookmark.addfolder"
1892msgstr "Voeg bladwijzermap toe"
1893
1894msgid "keys.zoom.out"
1895msgstr "Uitzoomen"
1896
1897msgid "keys.fullscreen"
1898msgstr "Volledig scherm aan/uit"
1899
1900msgid "keys.tab.new"
1901msgstr "Nieuw tabblad"
1902
1903msgid "keys.tab.close.other"
1904msgstr "Sluit andere tabbladen"
1905
1906msgid "keys.tab.prev"
1907msgstr "Vorig tabblad"
1908
1909msgid "keys.split.next"
1910msgstr "Wissel focus naar volgende splitsing"
1911
1912msgid "keys.hoverurl"
1913msgstr "URL bij muisaanwijzer tonen aan/uit"
1914
1915msgid "error.badstatus.msg"
1916msgstr ""
1917"De server reageerde met een statuscode die niet in de Gemini-specificatie "
1918"staat. Misschien is de server uit de toekomst? Of hij werkt gewoon niet "
1919"zoals hij hoort."
1920
1921msgid "error.openfile"
1922msgstr "Bestand openen mislukt"
1923
1924msgid "error.unsupported.protocol.msg"
1925msgstr "Het gevraagde protocol wordt niet ondersteund door deze applicatie."
1926
1927msgid "error.openfile.msg"
1928msgstr ""
1929"Het gevraagde bestand bestaat niet of is ontoegankelijk. Controleer het "
1930"bestandspad."
1931
1932msgid "error.badresource.msg"
1933msgstr "De gevraagde bron bestaat niet."
1934
1935msgid "error.badheader.msg"
1936msgstr ""
1937"De ontvangen header voldoet niet aan de specificatie van het Gemini-"
1938"protocol. Misschien werkt de server niet zoals hij hoort, of probeerde je "
1939"iets anders dan een Gemini-server te bereiken."
1940
1941msgid "error.badredirect.msg"
1942msgstr ""
1943"De server reageerde met een doorverwijzing, maar gaf geen geldige doel-URL. "
1944"Misschien werkt de server niet zoals hij hoort."
1945
1946msgid "error.schemeredirect"
1947msgstr "Doorverwijzing met ander schema"
1948
1949msgid "error.schemeredirect.msg"
1950msgstr ""
1951"De server probeerde ons door te verwijzen naar een URL met een ander schema "
1952"dan de oorspronkelijke URL. Hier is de link zodat je hem handmatig kan "
1953"openen als dat de bedoeling is."
1954
1955msgid "error.manyredirects.msg"
1956msgstr ""
1957"Het lijkt erop dat je in een doorverwijzingslus zit. De volgende URL waar je "
1958"naar doorverwezen bent staat hieronder, voor als je handmatig door wilt gaan."
1959
1960msgid "error.certexpired"
1961msgstr "Verlopen certificaat"
1962
1963msgid "error.certverify.msg"
1964msgstr ""
1965"De verbinding met de server werd geannuleerd omdat zijn TLS-certificaat niet "
1966"overeen komt met degene die we vertrouwen. Controleer of de server een "
1967"certificaatvervanging heeft aangekondigd. Zo niet, dan kan het zijn dat een "
1968"kwaadaardige derde partij zich voordoet als de server die je probeerde te "
1969"bereiken.\n"
1970"\n"
1971"Je kan het certificaat als vertrouwd markeren in Pagina-informatie."
1972
1973msgid "error.temporary.msg"
1974msgstr ""
1975"Het verzoek is mislukt, probeer het later opnieuw en misschien lukt het dan "
1976"wel."
1977
1978msgid "error.unavail.msg"
1979msgstr ""
1980"De server is niet beschikbaar vanwege overbelasting of onderhoud. Kijk later "
1981"nog eens."
1982
1983msgid "error.proxy.msg"
1984msgstr ""
1985"Een proxy-verzoek mislukte omdat de server geen succesvolle transactie met "
1986"het doelsysteem kon voltooien. Misschien zijn er problemen met de "
1987"netwerkverbinding."
1988
1989msgid "error.slowdown.msg"
1990msgstr ""
1991"De server stelt een limiet op het aantal verzoeken achter elkaar. Even "
1992"wachten…"
1993
1994msgid "error.permanent.msg"
1995msgstr ""
1996"Je verzoek is mislukt en zal blijven mislukken als je het opnieuw probeert."
1997
1998msgid "error.notfound.msg"
1999msgstr "De gevraagde bron kon niet gevonden worden."
2000
2001msgid "error.gone.msg"
2002msgstr "De gevraagde bron is niet meer beschikbaar."
2003
2004msgid "error.proxyrefusal.msg"
2005msgstr ""
2006"Het verzoek was voor een bron op een domein dat niet door deze server "
2007"verzorgd wordt, en de server accepteert geen proxyverzoeken."
2008
2009msgid "error.badrequest.msg"
2010msgstr "De server snapte je verzoek niet."
2011
2012msgid "error.cert.needed.msg"
2013msgstr ""
2014"Toegang tot de gevraagde bron vereist identificatie met een "
2015"clientcertificaat."
2016
2017msgid "error.cert.auth.msg"
2018msgstr ""
2019"Het gegeven clientcertificaat is geldig, maar heeft geen toestemming voor "
2020"toegang tot de gevraagde bron."
2021
2022msgid "error.cert.invalid"
2023msgstr "Ongeldig certificaat"
2024
2025msgid "error.cert.invalid.msg"
2026msgstr "Het gegeven clientcertificaat is verlopen of ongeldig."
2027
2028msgid "error.ansi.msg"
2029msgstr ""
2030"Deze pagina wordt misschien niet goed weergegeven. Er worden ANSI-escape-"
2031"sequences gebruikt om tekst op te maken, wat slechts gedeeltelijk "
2032"ondersteund wordt. Je kan een terminal-emulator gebruiken om de pagina als "
2033"bedoeld te zien."
2034
2035msgid "error.glyphs"
2036msgstr "Tekens ontbreken"
2037
2038msgid "error.glyphs.msg"
2039msgstr ""
2040"Sommige tekens op deze pagina kunnen niet worden weergegeven. Je kan "
2041"lettertypes met extra schriften installeren om dit op te lossen."
2042
2043msgid "gempub.cover.viewlocal"
2044msgstr ""
2045"Dit Gempub-boek kan worden weergegeven nadat je het lokaal hebt opgeslagen."
2046
2047msgid "gempub.cover.aboutbook"
2048msgstr "Over dit boek"
2049
2050msgid "gempub.meta.version"
2051msgstr "Versie"
2052
2053msgid "gempub.meta.pub"
2054msgstr "Gepubliceerd"
2055
2056msgid "gempub.meta.pubdate"
2057msgstr "Publicatiedatum"
2058
2059msgid "heading.fontpack.meta.enabled"
2060msgstr "Actieve lettertypepakketten"
2061
2062# Action label
2063msgid "fontpack.meta.viewfile"
2064msgstr "Toon bestand"
2065
2066#, c-format
2067msgid "fontpack.meta.version"
2068msgstr "Versie %d"
2069
2070msgid "fontpack.export"
2071msgstr "Toon sjabloon voor fontpack.ini"
2072
2073#, c-format
2074msgid "fontpack.install"
2075msgstr "Installeer \"%s\""
2076
2077msgid "heading.fontpack.delete"
2078msgstr "VERWIJDER LETTERTYPEPAKKET"
2079
2080msgid "fontpack.help"
2081msgstr ""
2082"Lagrange lettertypepakketten zijn ZIP-archieven die een set "
2083"lettertypebestanden en bijbehorende configuratieparameters bevatten. Eenmaal "
2084"geïnstalleerd kunnen de lettertypes zowel voor documentinhoud als de "
2085"gebruikersinterface worden gebruikt. Je kunt de actieve lettertypes "
2086"selecteren in Voorkeuren > Lettertypes."
2087
2088msgid "fontpack.open.aboutfonts"
2089msgstr "Toon geïnstalleerde lettertypes"
2090
2091msgid "truetype.help"
2092msgstr ""
2093"Lagrange probeert alle individuele TrueType-lettertypes te importeren die "
2094"naar de gebruikerslettertypemap worden gekopieerd."
2095
2096msgid "truetype.help.installed"
2097msgstr "Dit lettertype is geïnstalleerd in de gebruikerslettertypemap."
2098
2099#, c-format
2100msgid "dlg.dismiss.ansi"
2101msgstr "Wil je permanent de waarschuwing over terminal-emulatie negeren op %s?"
2102
2103msgid "dlg.fontpack.classic.msg"
2104msgstr ""
2105"De lettertypes die vroeger bij de app inbegrepen waren, zijn nu als aparte "
2106"download beschikbaar. Wil je nu het \"Classic set\"-lettertypepakket "
2107"downloaden?"
diff --git a/po/ru.po b/po/ru.po
index 97c607e8..05cfc315 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,8 +3,8 @@ msgstr ""
3"Project-Id-Version: PACKAGE VERSION\n" 3"Project-Id-Version: PACKAGE VERSION\n"
4"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 4"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
5"POT-Creation-Date: 2021-03-23 19:02+0000\n" 5"POT-Creation-Date: 2021-03-23 19:02+0000\n"
6"PO-Revision-Date: 2021-11-27 04:58+0000\n" 6"PO-Revision-Date: 2021-12-08 14:50+0000\n"
7"Last-Translator: Alyssa Liddell <e-liss@tuta.io>\n" 7"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n"
8"Language-Team: Russian <http://weblate.skyjake.fi/projects/lagrange/ui/ru/>\n" 8"Language-Team: Russian <http://weblate.skyjake.fi/projects/lagrange/ui/ru/>\n"
9"Language: ru\n" 9"Language: ru\n"
10"MIME-Version: 1.0\n" 10"MIME-Version: 1.0\n"
@@ -2135,3 +2135,10 @@ msgstr "Показать:"
2135# Color of text background. 2135# Color of text background.
2136msgid "prefs.gemtext.ansi.bg" 2136msgid "prefs.gemtext.ansi.bg"
2137msgstr "Цвет фона" 2137msgstr "Цвет фона"
2138
2139msgid "prefs.time.24h"
2140msgstr "24-часовой формат времени"
2141
2142# This label should be fairly short so it fits in a button in the sidebar.
2143msgid "sidebar.action.feeds.markallread"
2144msgstr "Прочитать все"
diff --git a/po/sr.po b/po/sr.po
index ca63ab85..a28f5bb7 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-28 23:50+0000\n" 4"PO-Revision-Date: 2021-12-01 16:50+0000\n"
5"Last-Translator: Страхиња Радић <contact@strahinja.org>\n" 5"Last-Translator: Страхиња Радић <contact@strahinja.org>\n"
6"Language-Team: Serbian <http://weblate.skyjake.fi/projects/lagrange/ui/sr/>\n" 6"Language-Team: Serbian <http://weblate.skyjake.fi/projects/lagrange/ui/sr/>\n"
7"Language: sr\n" 7"Language: sr\n"
@@ -2182,3 +2182,10 @@ msgstr "Прикажи:"
2182# Color of text background. 2182# Color of text background.
2183msgid "prefs.gemtext.ansi.bg" 2183msgid "prefs.gemtext.ansi.bg"
2184msgstr "Боја позадине" 2184msgstr "Боја позадине"
2185
2186msgid "prefs.time.24h"
2187msgstr "24-часовно време"
2188
2189# This label should be fairly short so it fits in a button in the sidebar.
2190msgid "sidebar.action.feeds.markallread"
2191msgstr "Прочитај све"
diff --git a/po/tok.po b/po/tok.po
index cec21f48..a8e7e901 100644
--- a/po/tok.po
+++ b/po/tok.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-06 09:34+0000\n" 4"PO-Revision-Date: 2021-12-08 14:50+0000\n"
5"Last-Translator: jan Anja <cyber@sysrq.in>\n" 5"Last-Translator: jan Anja <cyber@sysrq.in>\n"
6"Language-Team: Toki Pona <http://weblate.skyjake.fi/projects/lagrange/ui/tok/" 6"Language-Team: Toki Pona <http://weblate.skyjake.fi/projects/lagrange/ui/tok/"
7">\n" 7">\n"
@@ -2048,3 +2048,23 @@ msgstr ""
2048 2048
2049msgid "lang.hu" 2049msgid "lang.hu"
2050msgstr "toki Mosijo" 2050msgstr "toki Mosijo"
2051
2052msgid "prefs.time.24h"
2053msgstr "tenpo 24"
2054
2055# This label should be fairly short so it fits in a button in the sidebar.
2056msgid "sidebar.action.feeds.markallread"
2057msgstr "o lukin ala"
2058
2059# Color of text background.
2060msgid "prefs.gemtext.ansi.bg"
2061msgstr "lipu kule"
2062
2063msgid "menu.update"
2064msgstr "o sin e ilo Lakelan…"
2065
2066msgid "dlg.bookmark.folder"
2067msgstr "poki:"
2068
2069msgid "sidebar.action.show"
2070msgstr "o len ala:"
diff --git a/po/tr.po b/po/tr.po
index 74470a45..f317eb7d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-28 23:50+0000\n" 4"PO-Revision-Date: 2021-12-27 13:50+0000\n"
5"Last-Translator: Emir <emir_sari@msn.com>\n" 5"Last-Translator: Emir <emir_sari@msn.com>\n"
6"Language-Team: Turkish <http://weblate.skyjake.fi/projects/lagrange/ui/tr/>\n" 6"Language-Team: Turkish <http://weblate.skyjake.fi/projects/lagrange/ui/tr/>\n"
7"Language: tr\n" 7"Language: tr\n"
@@ -365,7 +365,7 @@ msgid "feeds.edit"
365msgstr "Beslemeyi düzenle…" 365msgstr "Beslemeyi düzenle…"
366 366
367msgid "feeds.markallread" 367msgid "feeds.markallread"
368msgstr "Tümü okundu olarak imle" 368msgstr "Tümü okundu"
369 369
370msgid "feeds.refresh" 370msgid "feeds.refresh"
371msgstr "Beslemeleri yenile" 371msgstr "Beslemeleri yenile"
@@ -1562,7 +1562,7 @@ msgid "menu.show.identities"
1562msgstr "Kimlikleri göster" 1562msgstr "Kimlikleri göster"
1563 1563
1564msgid "menu.autoreload" 1564msgid "menu.autoreload"
1565msgstr "Kendiliğinden yeniden yüklemeyi ayarla…" 1565msgstr "Kendiliğinden yeniden yükle…"
1566 1566
1567msgid "menu.fonts" 1567msgid "menu.fonts"
1568msgstr "Yazıtiplerini yönet…" 1568msgstr "Yazıtiplerini yönet…"
@@ -1596,8 +1596,8 @@ msgstr "KB"
1596#, c-format 1596#, c-format
1597msgid "page.timestamp" 1597msgid "page.timestamp"
1598msgstr "" 1598msgstr ""
1599"Alınma zamanı ve tarihi: %I:%M %p,\n" 1599"Alındı: %d %b %Y,\n"
1600" %b %d, %Y" 1600"%I.%M %p"
1601 1601
1602msgid "feeds.entry.markread" 1602msgid "feeds.entry.markread"
1603msgstr "Okundu olarak imle" 1603msgstr "Okundu olarak imle"
@@ -1653,8 +1653,8 @@ msgstr ""
1653#, c-format 1653#, c-format
1654msgid "error.unsupported.suggestsave" 1654msgid "error.unsupported.suggestsave"
1655msgstr "" 1655msgstr ""
1656"İndirilenler klasörünüze bir dosya olarak kaydedebilirsiniz: %s düğmelerine " 1656"İndirilenler klasörünüze bir dosya olarak kaydedin: %s düğmelerine basın "
1657"basın veya menüden \"%s\" ögesini seçin." 1657"veya menüden \"%s\" ögesini seçin."
1658 1658
1659msgid "error.server.msg" 1659msgid "error.server.msg"
1660msgstr "Sunucu şu iletiyle yanıtladı:" 1660msgstr "Sunucu şu iletiyle yanıtladı:"
@@ -2061,8 +2061,8 @@ msgstr "\"%s\" yazıtipi paketini kalıcı olarak silmek istiyor musunuz?"
2061 2061
2062msgid "fontpack.help" 2062msgid "fontpack.help"
2063msgstr "" 2063msgstr ""
2064"Lagrange yazıtipi paketleri bir yazıtipi paketini ve ilişkin yapılandırma " 2064"Lagrange yazıtipi paketleri, bir yazıtipi paketini ve ilişkin yapılandırma "
2065"parametrelerini içeren ZIP arşivleridir. Yüklendikten sonra, yazıtipleri " 2065"parametrelerini içeren ZIP arşivleridir. Yüklendikten sonra yazıtipleri, "
2066"belge içeriği ve kullanıcı arabirimi için kullanılabilir. Etkin " 2066"belge içeriği ve kullanıcı arabirimi için kullanılabilir. Etkin "
2067"yazıtiplerini Tercihler > Yazıtipleri bölümünden seçebilirsiniz." 2067"yazıtiplerini Tercihler > Yazıtipleri bölümünden seçebilirsiniz."
2068 2068
@@ -2087,3 +2087,10 @@ msgstr "Arka plan rengi"
2087 2087
2088msgid "sidebar.action.show" 2088msgid "sidebar.action.show"
2089msgstr "Göster:" 2089msgstr "Göster:"
2090
2091msgid "prefs.time.24h"
2092msgstr "24 saat biçimi"
2093
2094# This label should be fairly short so it fits in a button in the sidebar.
2095msgid "sidebar.action.feeds.markallread"
2096msgstr "Tümünü oku"
diff --git a/po/uk.po b/po/uk.po
index 80061050..d064f795 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-11-28 23:50+0000\n" 4"PO-Revision-Date: 2021-12-23 11:10+0000\n"
5"Last-Translator: Alyssa Liddell <e-liss@tuta.io>\n" 5"Last-Translator: Alyssa Liddell <e-liss@tuta.io>\n"
6"Language-Team: Ukrainian <http://weblate.skyjake.fi/projects/lagrange/ui/uk/>" 6"Language-Team: Ukrainian <http://weblate.skyjake.fi/projects/lagrange/ui/uk/>"
7"\n" 7"\n"
@@ -1139,7 +1139,7 @@ msgid "lang.pt"
1139msgstr "Португальська" 1139msgstr "Португальська"
1140 1140
1141msgid "lang.ru" 1141msgid "lang.ru"
1142msgstr "осіська" 1142msgstr "осовиька"
1143 1143
1144msgid "lang.eo" 1144msgid "lang.eo"
1145msgstr "Есперанто" 1145msgstr "Есперанто"
@@ -2163,3 +2163,10 @@ msgstr "Колір фону"
2163 2163
2164msgid "menu.update" 2164msgid "menu.update"
2165msgstr "Перевірити наявність оновлень…" 2165msgstr "Перевірити наявність оновлень…"
2166
2167msgid "prefs.time.24h"
2168msgstr "24-годинний час"
2169
2170# This label should be fairly short so it fits in a button in the sidebar.
2171msgid "sidebar.action.feeds.markallread"
2172msgstr "Прочитати всі"
diff --git a/po/zh_Hant.po b/po/zh_Hant.po
index 129abfda..820c40e2 100644
--- a/po/zh_Hant.po
+++ b/po/zh_Hant.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-09-06 10:49+0000\n" 4"PO-Revision-Date: 2021-12-23 11:10+0000\n"
5"Last-Translator: Shibo Lyu <github@of.sb>\n" 5"Last-Translator: Shibo Lyu <github@of.sb>\n"
6"Language-Team: Chinese (Traditional) <http://weblate.skyjake.fi/projects/" 6"Language-Team: Chinese (Traditional) <http://weblate.skyjake.fi/projects/"
7"lagrange/ui/zh_Hant/>\n" 7"lagrange/ui/zh_Hant/>\n"
@@ -68,7 +68,7 @@ msgstr "通用名稱(CN):"
68msgid "dlg.confirm.ident.delete" 68msgid "dlg.confirm.ident.delete"
69msgstr "" 69msgstr ""
70"確定要刪除這個身分嗎?\n" 70"確定要刪除這個身分嗎?\n"
71"%s%s%s\n" 71"%s\"%s\"%s\n"
72"此操作亦將刪除它對應的憑證和私鑰檔案。" 72"此操作亦將刪除它對應的憑證和私鑰檔案。"
73 73
74# The %s format characters are used to highlight the word "Help" and must be used in the translation in same way as here. 74# The %s format characters are used to highlight the word "Help" and must be used in the translation in same way as here.
@@ -555,7 +555,7 @@ msgstr "未使用"
555#, c-format 555#, c-format
556msgid "ident.usedonurls" 556msgid "ident.usedonurls"
557msgid_plural "ident.usedonurls.n" 557msgid_plural "ident.usedonurls.n"
558msgstr[0] "在 %zu 個地址上使用" 558msgstr[0] "在 %u 個地址上使用"
559 559
560# strftime() formatted 560# strftime() formatted
561#, c-format 561#, c-format
@@ -611,13 +611,11 @@ msgstr "退訂"
611 611
612#, c-format 612#, c-format
613msgid "dlg.confirm.unsub" 613msgid "dlg.confirm.unsub"
614msgstr "" 614msgstr "確定要退訂「%s」嗎?"
615"確定要退訂\n"
616"「%s」嗎?"
617 615
618msgid "num.bytes" 616msgid "num.bytes"
619msgid_plural "num.bytes.n" 617msgid_plural "num.bytes.n"
620msgstr[0] "%zu 位元組" 618msgstr[0] "%u 位元組"
621 619
622msgid "dlg.unsub" 620msgid "dlg.unsub"
623msgstr "退訂" 621msgstr "退訂"
@@ -1304,12 +1302,12 @@ msgstr "塞爾維亞語"
1304#, c-format 1302#, c-format
1305msgid "feeds.list.counts" 1303msgid "feeds.list.counts"
1306msgid_plural "feeds.list.counts.n" 1304msgid_plural "feeds.list.counts.n"
1307msgstr[0] "您訂閱了 %zu 個源,%%s。\n" 1305msgstr[0] "您訂閱了 %u 個源,%%s。\n"
1308 1306
1309#, c-format 1307#, c-format
1310msgid "feeds.list.entrycount" 1308msgid "feeds.list.entrycount"
1311msgid_plural "feeds.list.entrycount.n" 1309msgid_plural "feeds.list.entrycount.n"
1312msgstr[0] "共 %zu 項" 1310msgstr[0] "共 %u 項"
1313 1311
1314msgid "prefs.boldlink" 1312msgid "prefs.boldlink"
1315msgstr "加粗展示連結:" 1313msgstr "加粗展示連結:"
@@ -1477,7 +1475,7 @@ msgstr ""
1477"• 2021-12-31 23:59:59" 1475"• 2021-12-31 23:59:59"
1478 1476
1479msgid "menu.split.merge" 1477msgid "menu.split.merge"
1480msgstr "籤頁" 1478msgstr ""
1481 1479
1482msgid "menu.split.swap" 1480msgid "menu.split.swap"
1483msgstr "交換位置" 1481msgstr "交換位置"
@@ -1489,7 +1487,7 @@ msgid "menu.split.vertical"
1489msgstr "縱向" 1487msgstr "縱向"
1490 1488
1491msgid "menu.view.split" 1489msgid "menu.view.split"
1492msgstr "分…" 1490msgstr "分…"
1493 1491
1494msgid "gempub.cover.untitled" 1492msgid "gempub.cover.untitled"
1495msgstr "未名書" 1493msgstr "未名書"
@@ -1628,9 +1626,7 @@ msgid "heading.uploadport"
1628msgstr "TITAN 上載埠號" 1626msgstr "TITAN 上載埠號"
1629 1627
1630msgid "dlg.uploadport.msg" 1628msgid "dlg.uploadport.msg"
1631msgstr "" 1629msgstr "為此 URL 設定 Titan 伺服器埠號。埠號設定分站點儲存。"
1632"為此 URL 設定 Titan 伺服器埠號。\n"
1633"埠號設定分站點儲存。"
1634 1630
1635msgid "dlg.uploadport.set" 1631msgid "dlg.uploadport.set"
1636msgstr "設定埠號" 1632msgstr "設定埠號"
@@ -1694,7 +1690,7 @@ msgid "bookmark.export.format.tags"
1694msgstr "標籤以二級標題呈現。" 1690msgstr "標籤以二級標題呈現。"
1695 1691
1696msgid "menu.page.upload" 1692msgid "menu.page.upload"
1697msgstr "透過 Titan 上載頁面" 1693msgstr "透過 Titan 上載頁面"
1698 1694
1699msgid "heading.upload" 1695msgid "heading.upload"
1700msgstr "透過 TITAN 上載" 1696msgstr "透過 TITAN 上載"
@@ -1721,7 +1717,7 @@ msgid "upload.mime"
1721msgstr "MIME 類型:" 1717msgstr "MIME 類型:"
1722 1718
1723msgid "upload.token" 1719msgid "upload.token"
1724msgstr "牌:" 1720msgstr "令牌:"
1725 1721
1726msgid "hint.upload.token" 1722msgid "hint.upload.token"
1727msgstr "參見伺服器的指引" 1723msgstr "參見伺服器的指引"
@@ -1752,3 +1748,173 @@ msgstr "行距:"
1752 1748
1753msgid "prefs.memorysize" 1749msgid "prefs.memorysize"
1754msgstr "記憶體大小:" 1750msgstr "記憶體大小:"
1751
1752msgid "prefs.imagestyle.text"
1753msgstr "文字顏色"
1754
1755msgid "prefs.imagestyle.preformat"
1756msgstr "預格式顏色"
1757
1758msgid "prefs.boldlink.visited"
1759msgstr "訪問過"
1760
1761msgid "menu.newfolder"
1762msgstr "創建檔案夾…"
1763
1764msgid "menu.sort.alpha"
1765msgstr "依字母序排序"
1766
1767# used for Preferences on mobile
1768msgid "menu.settings"
1769msgstr "設定"
1770
1771# keep this short (3x1 horiz layout)
1772msgid "menu.selectall"
1773msgstr "全選"
1774
1775# keep this short (3x1 horiz layout)
1776msgid "menu.delete"
1777msgstr "刪去"
1778
1779# keep this short (3x1 horiz layout)
1780msgid "menu.undo"
1781msgstr "還原"
1782
1783#, c-format
1784msgid "dlg.confirm.bookmarks.delete"
1785msgid_plural "dlg.confirm.bookmarks.delete.n"
1786msgstr[0] "確實要移除此檔案夾中全部 %u 個書籤嗎?"
1787
1788#, c-format
1789msgid "dlg.bookmarks.delete"
1790msgid_plural "dlg.bookmarks.delete.n"
1791msgstr[0] "移除 %u 個書籤"
1792
1793# button in the mobile New Identity dialog
1794msgid "dlg.certimport.pickfile"
1795msgstr "匯入憑證或金鑰檔案"
1796
1797msgid "upload.id"
1798msgstr "身份:"
1799
1800# used on mobile
1801msgid "dlg.upload.file"
1802msgstr "上載一個檔案"
1803
1804# used on mobile
1805msgid "dlg.upload.pickfile"
1806msgstr "選取檔案"
1807
1808msgid "dlg.feed.ignoreweb"
1809msgstr "忽略 HTTP(S) 連結:"
1810
1811msgid "dlg.bookmark.folder"
1812msgstr "檔案夾:"
1813
1814msgid "prefs.bookmarks.addbottom"
1815msgstr "在底部添加書籤:"
1816
1817msgid "prefs.time.24h"
1818msgstr "24小時制"
1819
1820msgid "prefs.imagestyle"
1821msgstr "影像著色:"
1822
1823msgid "prefs.imagestyle.original"
1824msgstr "無"
1825
1826msgid "prefs.imagestyle.grayscale"
1827msgstr "灰度"
1828
1829# Abbrevation: background-to-foreground
1830msgid "prefs.imagestyle.bgfg"
1831msgstr "背景至前景"
1832
1833msgid "prefs.font.ui"
1834msgstr "UI:"
1835
1836msgid "prefs.font.heading"
1837msgstr "標題:"
1838
1839msgid "prefs.font.body"
1840msgstr "內文:"
1841
1842msgid "prefs.font.mono"
1843msgstr "預格式文本:"
1844
1845# Color of text background.
1846msgid "prefs.gemtext.ansi.bg"
1847msgstr "背景色"
1848
1849msgid "prefs.gemtext.ansi.fontstyle"
1850msgstr "字體樣式"
1851
1852msgid "menu.website"
1853msgstr "專案網站…"
1854
1855msgid "menu.fonts"
1856msgstr "管理字體…"
1857
1858msgid "num.files"
1859msgid_plural "num.files.n"
1860msgstr[0] "%u 檔案"
1861
1862msgid "num.fonts"
1863msgid_plural "num.fonts.n"
1864msgstr[0] "%u 字體"
1865
1866msgid "dlg.certwarn.title"
1867msgstr "安全問題"
1868
1869# This label should be fairly short so it fits in a button in the sidebar.
1870msgid "sidebar.action.feeds.markallread"
1871msgstr "全部已讀"
1872
1873msgid "sidebar.action.show"
1874msgstr "顯示:"
1875
1876msgid "dlg.upload.id.default"
1877msgstr "預設"
1878
1879# used on mobile
1880msgid "dlg.upload.text"
1881msgstr "上載純文本"
1882
1883msgid "prefs.gemtext.ansi"
1884msgstr "ANSI 跳脫:"
1885
1886# Color of the text foreground, i.e., the characters.
1887msgid "prefs.gemtext.ansi.fg"
1888msgstr "前景色"
1889
1890msgid "dlg.upload.id.none"
1891msgstr "無"
1892
1893msgid "dlg.addfolder.defaulttitle"
1894msgstr "新檔案夾"
1895
1896msgid "dlg.addfolder.prompt"
1897msgstr "填寫新檔案夾名稱:"
1898
1899# Font to use for headings and body when Monospace body is enabled.
1900msgid "prefs.font.monodoc"
1901msgstr "等寬字體:"
1902
1903msgid "menu.update"
1904msgstr "檢查更新…"
1905
1906msgid "heading.confirm.bookmarks.delete"
1907msgstr "移除書籤"
1908
1909msgid "heading.bookmark.tags"
1910msgstr "特殊標籤"
1911
1912msgid "heading.addfolder"
1913msgstr "新增檔案夾"
1914
1915msgid "dlg.addfolder"
1916msgstr "創建檔案夾"
1917
1918# used on mobile
1919msgid "heading.settings"
1920msgstr "設定"
diff --git a/res/about/help.gmi b/res/about/help.gmi
index b753cb39..7949b775 100644
--- a/res/about/help.gmi
+++ b/res/about/help.gmi
@@ -529,7 +529,7 @@ On macOS and Windows, Lagrange registers itself as a "gemini:" URL scheme handle
529 529
530Likewise (on macOS), .gmi/.gemini file extensions are registered as file formats that Lagrange can view so Finder will know how to open those automatically using Lagrange. 530Likewise (on macOS), .gmi/.gemini file extensions are registered as file formats that Lagrange can view so Finder will know how to open those automatically using Lagrange.
531 531
532## 3.3 Drop and drop 532## 3.3 Drag and drop
533 533
534You can drag and drop .gmi files on the Lagrange window to open them in the current tab. Dropping multiple files opens them in separate tabs. This is the recommended way to view local files, because there is no "Open File" menu item. You may also type "file://" URLs in the URL field. 534You can drag and drop .gmi files on the Lagrange window to open them in the current tab. Dropping multiple files opens them in separate tabs. This is the recommended way to view local files, because there is no "Open File" menu item. You may also type "file://" URLs in the URL field.
535 535
diff --git a/res/about/version.gmi b/res/about/version.gmi
index d363d195..ff954fc6 100644
--- a/res/about/version.gmi
+++ b/res/about/version.gmi
@@ -30,9 +30,30 @@ Fixes:
30* Fixed initial scroll position in multiline input fields. 30* Fixed initial scroll position in multiline input fields.
31* Fixed lookup results list becoming too narrow. 31* Fixed lookup results list becoming too narrow.
32 32
33## 1.9.5
34* Fixed misshapen button borders (SDL 2.0.16 line drawing workaround).
35* Fixed actions being triggered when navigating via home row keys.
36* macOS: Fixed native menu items being triggered when navigating via home row keys.
37* macOS: Fixed native menu items triggering when changing key bindings.
38
39## 1.9.4
40* Fixed crash when a link is missing both URL and label (just a `=>`).
41* Fixed handling of foreground color escapes in the simple text renderer.
42* Updated UI translations.
43* Upgraded SDL to 2.0.18.
44
45## 1.9.3
46* Added UI language for Dutch.
47* Updated UI translations.
48* Fixed the simple text renderer (build error, hanging).
49* Fixed time zone of the "valid from" time in created client certificates.
50* macOS: Fixed selecting scope for a newly created identity.
51
33## 1.9.2 52## 1.9.2
34* Windows: Use the correct version number for update checks. 53* Windows: Use the correct version number for update checks.
54* Fixed possible crash when switching Feeds sidebar filter mode via the popup menu.
35* Shorter label for "Mark All as Read" in Feeds sidebar actions. 55* Shorter label for "Mark All as Read" in Feeds sidebar actions.
56* In popup menus, differentiate between selected item and hover item.
36* Updated UI translations. 57* Updated UI translations.
37 58
38## 1.9.1 59## 1.9.1
diff --git a/res/lang/cs.bin b/res/lang/cs.bin
index 9069f4b0..22043934 100644
--- a/res/lang/cs.bin
+++ b/res/lang/cs.bin
Binary files differ
diff --git a/res/lang/de.bin b/res/lang/de.bin
index 62893c64..b2bb35a0 100644
--- a/res/lang/de.bin
+++ b/res/lang/de.bin
Binary files differ
diff --git a/res/lang/en.bin b/res/lang/en.bin
index 1b26e61e..fbf4c73c 100644
--- a/res/lang/en.bin
+++ b/res/lang/en.bin
Binary files differ
diff --git a/res/lang/eo.bin b/res/lang/eo.bin
index 3b734982..d7f9cebf 100644
--- a/res/lang/eo.bin
+++ b/res/lang/eo.bin
Binary files differ
diff --git a/res/lang/es.bin b/res/lang/es.bin
index feb0b8ea..749645bf 100644
--- a/res/lang/es.bin
+++ b/res/lang/es.bin
Binary files differ
diff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin
index 3de1f106..078de89d 100644
--- a/res/lang/es_MX.bin
+++ b/res/lang/es_MX.bin
Binary files differ
diff --git a/res/lang/fi.bin b/res/lang/fi.bin
index 86efb862..dee3561f 100644
--- a/res/lang/fi.bin
+++ b/res/lang/fi.bin
Binary files differ
diff --git a/res/lang/fr.bin b/res/lang/fr.bin
index e6977fd9..96c1148e 100644
--- a/res/lang/fr.bin
+++ b/res/lang/fr.bin
Binary files differ
diff --git a/res/lang/gl.bin b/res/lang/gl.bin
index f282366d..02482f3a 100644
--- a/res/lang/gl.bin
+++ b/res/lang/gl.bin
Binary files differ
diff --git a/res/lang/hu.bin b/res/lang/hu.bin
index 3ca7ee30..7b7edb50 100644
--- a/res/lang/hu.bin
+++ b/res/lang/hu.bin
Binary files differ
diff --git a/res/lang/ia.bin b/res/lang/ia.bin
index 7772f7d0..c8e00d5e 100644
--- a/res/lang/ia.bin
+++ b/res/lang/ia.bin
Binary files differ
diff --git a/res/lang/ie.bin b/res/lang/ie.bin
index 648fb372..14f16e5d 100644
--- a/res/lang/ie.bin
+++ b/res/lang/ie.bin
Binary files differ
diff --git a/res/lang/isv.bin b/res/lang/isv.bin
index adeeb8cd..80754fc5 100644
--- a/res/lang/isv.bin
+++ b/res/lang/isv.bin
Binary files differ
diff --git a/res/lang/nl.bin b/res/lang/nl.bin
new file mode 100644
index 00000000..6ae01202
--- /dev/null
+++ b/res/lang/nl.bin
Binary files differ
diff --git a/res/lang/pl.bin b/res/lang/pl.bin
index fab560a5..c0affedf 100644
--- a/res/lang/pl.bin
+++ b/res/lang/pl.bin
Binary files differ
diff --git a/res/lang/ru.bin b/res/lang/ru.bin
index 1166b064..f0762eea 100644
--- a/res/lang/ru.bin
+++ b/res/lang/ru.bin
Binary files differ
diff --git a/res/lang/sk.bin b/res/lang/sk.bin
index ec171de2..deda3b69 100644
--- a/res/lang/sk.bin
+++ b/res/lang/sk.bin
Binary files differ
diff --git a/res/lang/sr.bin b/res/lang/sr.bin
index eec114aa..dc13d2e1 100644
--- a/res/lang/sr.bin
+++ b/res/lang/sr.bin
Binary files differ
diff --git a/res/lang/tok.bin b/res/lang/tok.bin
index 95532b2a..6a93803c 100644
--- a/res/lang/tok.bin
+++ b/res/lang/tok.bin
Binary files differ
diff --git a/res/lang/tr.bin b/res/lang/tr.bin
index 95bdffdc..1dd9733b 100644
--- a/res/lang/tr.bin
+++ b/res/lang/tr.bin
Binary files differ
diff --git a/res/lang/uk.bin b/res/lang/uk.bin
index e222a609..4154c354 100644
--- a/res/lang/uk.bin
+++ b/res/lang/uk.bin
Binary files differ
diff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin
index 0a12f0dd..3a83dd40 100644
--- a/res/lang/zh_Hans.bin
+++ b/res/lang/zh_Hans.bin
Binary files differ
diff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin
index ba1ff8c9..ffad7072 100644
--- a/res/lang/zh_Hant.bin
+++ b/res/lang/zh_Hant.bin
Binary files differ
diff --git a/src/app.c b/src/app.c
index 7497d6f8..883ced60 100644
--- a/src/app.c
+++ b/src/app.c
@@ -124,7 +124,7 @@ struct Impl_App {
124 iMimeHooks * mimehooks; 124 iMimeHooks * mimehooks;
125 iGmCerts * certs; 125 iGmCerts * certs;
126 iVisited * visited; 126 iVisited * visited;
127 iBookmarks * bookmarks; 127 iBookmarks * bookmarks;
128 iMainWindow *window; 128 iMainWindow *window;
129 iPtrArray popupWindows; 129 iPtrArray popupWindows;
130 iSortedArray tickers; /* per-frame callbacks, used for animations */ 130 iSortedArray tickers; /* per-frame callbacks, used for animations */
@@ -752,7 +752,7 @@ static void init_App_(iApp *d, int argc, char **argv) {
752 d->isSuspended = iFalse; 752 d->isSuspended = iFalse;
753 d->tempFilesPendingDeletion = new_StringSet(); 753 d->tempFilesPendingDeletion = new_StringSet();
754 init_CommandLine(&d->args, argc, argv); 754 init_CommandLine(&d->args, argc, argv);
755 /* Where was the app started from? We ask SDL first because the command line alone 755 /* Where was the app started from? We ask SDL first because the command line alone
756 cannot be relied on (behavior differs depending on OS). */ { 756 cannot be relied on (behavior differs depending on OS). */ {
757 char *exec = SDL_GetBasePath(); 757 char *exec = SDL_GetBasePath();
758 if (exec) { 758 if (exec) {
@@ -1021,12 +1021,12 @@ static void deinit_App(iApp *d) {
1021#endif 1021#endif
1022 deinit_SortedArray(&d->tickers); 1022 deinit_SortedArray(&d->tickers);
1023 deinit_Periodic(&d->periodic); 1023 deinit_Periodic(&d->periodic);
1024 deinit_Lang(); 1024 deinit_Lang();
1025 iRecycle(); 1025 iRecycle();
1026 /* Delete all temporary files created while running. */ 1026 /* Delete all temporary files created while running. */
1027 iConstForEach(StringSet, tmp, d->tempFilesPendingDeletion) { 1027 iConstForEach(StringSet, tmp, d->tempFilesPendingDeletion) {
1028 remove(cstr_String(tmp.value)); 1028 remove(cstr_String(tmp.value));
1029 } 1029}
1030 iRelease(d->tempFilesPendingDeletion); 1030 iRelease(d->tempFilesPendingDeletion);
1031} 1031}
1032 1032
@@ -1305,7 +1305,7 @@ void processEvents_App(enum iAppEventMode eventMode) {
1305#if defined (LAGRANGE_ENABLE_IDLE_SLEEP) 1305#if defined (LAGRANGE_ENABLE_IDLE_SLEEP)
1306 d->isIdling = iFalse; 1306 d->isIdling = iFalse;
1307 d->lastEventTime = SDL_GetTicks(); 1307 d->lastEventTime = SDL_GetTicks();
1308#endif 1308#endif
1309 postRefresh_App(); 1309 postRefresh_App();
1310 break; 1310 break;
1311 case SDL_APP_WILLENTERBACKGROUND: 1311 case SDL_APP_WILLENTERBACKGROUND:
@@ -1511,7 +1511,7 @@ backToMainLoop:;
1511static void runTickers_App_(iApp *d) { 1511static void runTickers_App_(iApp *d) {
1512 const uint32_t now = SDL_GetTicks(); 1512 const uint32_t now = SDL_GetTicks();
1513 d->elapsedSinceLastTicker = (d->lastTickerTime ? now - d->lastTickerTime : 0); 1513 d->elapsedSinceLastTicker = (d->lastTickerTime ? now - d->lastTickerTime : 0);
1514 d->lastTickerTime = now; 1514 d->lastTickerTime = now;
1515 if (isEmpty_SortedArray(&d->tickers)) { 1515 if (isEmpty_SortedArray(&d->tickers)) {
1516 d->lastTickerTime = 0; 1516 d->lastTickerTime = 0;
1517 return; 1517 return;
@@ -2105,9 +2105,8 @@ static iBool handleIdentityCreationCommands_(iWidget *dlg, const char *cmd) {
2105 } 2105 }
2106 if (equal_Command(cmd, "ident.scope")) { 2106 if (equal_Command(cmd, "ident.scope")) {
2107 iLabelWidget *scope = findChild_Widget(dlg, "ident.scope"); 2107 iLabelWidget *scope = findChild_Widget(dlg, "ident.scope");
2108 setText_LabelWidget(scope, 2108 updateDropdownSelection_LabelWidget(scope, format_CStr(" arg:%d", arg_Command(cmd)));
2109 text_LabelWidget(child_Widget( 2109 updateSize_LabelWidget(scope);
2110 findChild_Widget(as_Widget(scope), "menu"), arg_Command(cmd))));
2111 arrange_Widget(findWidget_App("ident")); 2110 arrange_Widget(findWidget_App("ident"));
2112 return iTrue; 2111 return iTrue;
2113 } 2112 }
@@ -2174,19 +2173,11 @@ static iBool handleIdentityCreationCommands_(iWidget *dlg, const char *cmd) {
2174 organization, 2173 organization,
2175 country); 2174 country);
2176 /* Use in the chosen scope. */ { 2175 /* Use in the chosen scope. */ {
2177 const iLabelWidget *scope = findChild_Widget(dlg, "ident.scope"); 2176 int selScope = 2;
2178 const iString * selLabel = text_LabelWidget(scope); 2177 const char *scopeCmd =
2179 int selScope = 0; 2178 selectedDropdownCommand_LabelWidget(findChild_Widget(dlg, "ident.scope"));
2180 iConstForEach(ObjectList, 2179 if (startsWith_CStr(scopeCmd, "ident.scope arg:")) {
2181 i, 2180 selScope = arg_Command(scopeCmd);
2182 children_Widget(findChild_Widget(constAs_Widget(scope), "menu"))) {
2183 if (isInstance_Object(i.object, &Class_LabelWidget)) {
2184 const iLabelWidget *item = i.object;
2185 if (equal_String(text_LabelWidget(item), selLabel)) {
2186 break;
2187 }
2188 selScope++;
2189 }
2190 } 2181 }
2191 const iString *docUrl = url_DocumentWidget(document_Root(dlg->root)); 2182 const iString *docUrl = url_DocumentWidget(document_Root(dlg->root));
2192 iString *useUrl = NULL; 2183 iString *useUrl = NULL;
@@ -3107,7 +3098,7 @@ iBool handleCommand_App(const char *cmd) {
3107 iWidget *idPanel = panel_Mobile(dlg, 2); 3098 iWidget *idPanel = panel_Mobile(dlg, 2);
3108 iWidget *button = findUserData_Widget(findChild_Widget(dlg, "panel.top"), idPanel); 3099 iWidget *button = findUserData_Widget(findChild_Widget(dlg, "panel.top"), idPanel);
3109 postCommand_Widget(button, "panel.open"); 3100 postCommand_Widget(button, "panel.open");
3110 } 3101 }
3111 } 3102 }
3112 else if (equal_Command(cmd, "navigate.home")) { 3103 else if (equal_Command(cmd, "navigate.home")) {
3113 /* Look for bookmarks tagged "homepage". */ 3104 /* Look for bookmarks tagged "homepage". */
@@ -3413,8 +3404,8 @@ void openInDefaultBrowser_App(const iString *url) {
3413 "xdg-open", 3404 "xdg-open",
3414 cstr_String(url), 3405 cstr_String(url),
3415#elif defined (iPlatformMsys) 3406#elif defined (iPlatformMsys)
3416 concatPath_CStr(cstr_String(execPath_App()), "../urlopen.bat"), 3407 concatPath_CStr(cstr_String(execPath_App()), "../urlopen.bat"),
3417 cstr_String(url), 3408 cstr_String(url),
3418 /* TODO: The prompt window is shown momentarily... */ 3409 /* TODO: The prompt window is shown momentarily... */
3419#endif 3410#endif
3420 NULL)) 3411 NULL))
@@ -3426,11 +3417,11 @@ void openInDefaultBrowser_App(const iString *url) {
3426 3417
3427void revealPath_App(const iString *path) { 3418void revealPath_App(const iString *path) {
3428#if defined (iPlatformAppleDesktop) 3419#if defined (iPlatformAppleDesktop)
3429 iProcess *proc = new_Process(); 3420 iProcess *proc = new_Process();
3430 setArguments_Process( 3421 setArguments_Process(
3431 proc, iClob(newStringsCStr_StringList("/usr/bin/open", "-R", cstr_String(path), NULL))); 3422 proc, iClob(newStringsCStr_StringList("/usr/bin/open", "-R", cstr_String(path), NULL)));
3432 start_Process(proc); 3423 start_Process(proc);
3433 iRelease(proc); 3424 iRelease(proc);
3434#elif defined (iPlatformAppleMobile) 3425#elif defined (iPlatformAppleMobile)
3435 /* Use a share sheet. */ 3426 /* Use a share sheet. */
3436 openFileActivityView_iOS(path); 3427 openFileActivityView_iOS(path);
diff --git a/src/lang.c b/src/lang.c
index 831fa58f..9c458b4e 100644
--- a/src/lang.c
+++ b/src/lang.c
@@ -101,6 +101,7 @@ static void load_Lang_(iLang *d, const char *id) {
101 : equal_CStr(id, "ia") ? &blobIa_Resources 101 : equal_CStr(id, "ia") ? &blobIa_Resources
102 : equal_CStr(id, "ie") ? &blobIe_Resources 102 : equal_CStr(id, "ie") ? &blobIe_Resources
103 : equal_CStr(id, "isv") ? &blobIsv_Resources 103 : equal_CStr(id, "isv") ? &blobIsv_Resources
104 : equal_CStr(id, "nl") ? &blobNl_Resources
104 : equal_CStr(id, "pl") ? &blobPl_Resources 105 : equal_CStr(id, "pl") ? &blobPl_Resources
105 : equal_CStr(id, "sk") ? &blobSk_Resources 106 : equal_CStr(id, "sk") ? &blobSk_Resources
106 : equal_CStr(id, "sr") ? &blobSr_Resources 107 : equal_CStr(id, "sr") ? &blobSr_Resources
diff --git a/src/macos.h b/src/macos.h
index 22a6dfff..10cbba81 100644
--- a/src/macos.h
+++ b/src/macos.h
@@ -39,8 +39,10 @@ void hideTitleBar_MacOS (iWindow *window);
39void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count); 39void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count);
40void removeMenu_MacOS (int atIndex); 40void removeMenu_MacOS (int atIndex);
41void enableMenu_MacOS (const char *menuLabel, iBool enable); 41void enableMenu_MacOS (const char *menuLabel, iBool enable);
42void enableMenuIndex_MacOS (int index, iBool enable);
42void enableMenuItem_MacOS (const char *menuItemCommand, iBool enable); 43void enableMenuItem_MacOS (const char *menuItemCommand, iBool enable);
43void enableMenuItemsByKey_MacOS (int key, int kmods, iBool enable); 44void enableMenuItemsByKey_MacOS (int key, int kmods, iBool enable);
45void enableMenuItemsOnHomeRow_MacOS(iBool enable);
44void handleCommand_MacOS (const char *cmd); 46void handleCommand_MacOS (const char *cmd);
45 47
46void showPopupMenu_MacOS (iWidget *source, iInt2 windowCoord, const iMenuItem *items, size_t n); 48void showPopupMenu_MacOS (iWidget *source, iInt2 windowCoord, const iMenuItem *items, size_t n);
diff --git a/src/macos.m b/src/macos.m
index e05222a0..911f5e3a 100644
--- a/src/macos.m
+++ b/src/macos.m
@@ -31,6 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
31 31
32#include <SDL_timer.h> 32#include <SDL_timer.h>
33#include <SDL_syswm.h> 33#include <SDL_syswm.h>
34#include <the_Foundation/stringset.h>
34 35
35#import <AppKit/AppKit.h> 36#import <AppKit/AppKit.h>
36 37
@@ -543,6 +544,13 @@ void enableMenu_MacOS(const char *menuLabel, iBool enable) {
543 [menuItem setEnabled:enable]; 544 [menuItem setEnabled:enable];
544} 545}
545 546
547void enableMenuIndex_MacOS(int index, iBool enable) {
548 NSApplication *app = [NSApplication sharedApplication];
549 NSMenu *appMenu = [app mainMenu];
550 NSMenuItem *menuItem = [appMenu itemAtIndex:index];
551 [menuItem setEnabled:enable];
552}
553
546void enableMenuItem_MacOS(const char *menuItemCommand, iBool enable) { 554void enableMenuItem_MacOS(const char *menuItemCommand, iBool enable) {
547 NSApplication *app = [NSApplication sharedApplication]; 555 NSApplication *app = [NSApplication sharedApplication];
548 NSMenu *appMenu = [app mainMenu]; 556 NSMenu *appMenu = [app mainMenu];
@@ -617,6 +625,47 @@ void enableMenuItemsByKey_MacOS(int key, int kmods, iBool enable) {
617 delete_String(keyEquiv); 625 delete_String(keyEquiv);
618} 626}
619 627
628void enableMenuItemsOnHomeRow_MacOS(iBool enable) {
629 iStringSet *homeRowKeys = new_StringSet();
630 const char *keys[] = { /* Note: another array in documentwidget.c */
631 "f", "d", "s", "a",
632 "j", "k", "l",
633 "r", "e", "w", "q",
634 "u", "i", "o", "p",
635 "v", "c", "x", "z",
636 "m", "n",
637 "g", "h",
638 "b",
639 "t", "y"
640 };
641 iForIndices(i, keys) {
642 iString str;
643 initCStr_String(&str, keys[i]);
644 insert_StringSet(homeRowKeys, &str);
645 deinit_String(&str);
646 }
647 NSApplication *app = [NSApplication sharedApplication];
648 NSMenu *appMenu = [app mainMenu];
649 for (NSMenuItem *mainMenuItem in appMenu.itemArray) {
650 NSMenu *menu = mainMenuItem.submenu;
651 if (menu) {
652 for (NSMenuItem *menuItem in menu.itemArray) {
653 if (menuItem.keyEquivalentModifierMask == 0) {
654 iString equiv;
655 initCStr_String(&equiv, [menuItem.keyEquivalent
656 cStringUsingEncoding:NSUTF8StringEncoding]);
657 if (contains_StringSet(homeRowKeys, &equiv)) {
658 [menuItem setEnabled:enable];
659 [menu setAutoenablesItems:NO];
660 }
661 deinit_String(&equiv);
662 }
663 }
664 }
665 }
666 iRelease(homeRowKeys);
667}
668
620static void setShortcut_NSMenuItem_(NSMenuItem *item, int key, int kmods) { 669static void setShortcut_NSMenuItem_(NSMenuItem *item, int key, int kmods) {
621 NSEventModifierFlags modMask; 670 NSEventModifierFlags modMask;
622 iString *str = composeKeyEquivalent_(key, kmods, &modMask); 671 iString *str = composeKeyEquivalent_(key, kmods, &modMask);
diff --git a/src/resources.c b/src/resources.c
index fb234f6a..ae85463a 100644
--- a/src/resources.c
+++ b/src/resources.c
@@ -48,6 +48,7 @@ iBlock blobHu_Resources;
48iBlock blobIa_Resources; 48iBlock blobIa_Resources;
49iBlock blobIe_Resources; 49iBlock blobIe_Resources;
50iBlock blobIsv_Resources; 50iBlock blobIsv_Resources;
51iBlock blobNl_Resources;
51iBlock blobPl_Resources; 52iBlock blobPl_Resources;
52iBlock blobRu_Resources; 53iBlock blobRu_Resources;
53iBlock blobSk_Resources; 54iBlock blobSk_Resources;
@@ -91,6 +92,7 @@ static struct {
91 { &blobIa_Resources, "lang/ia.bin" }, 92 { &blobIa_Resources, "lang/ia.bin" },
92 { &blobIe_Resources, "lang/ie.bin" }, 93 { &blobIe_Resources, "lang/ie.bin" },
93 { &blobIsv_Resources, "lang/isv.bin" }, 94 { &blobIsv_Resources, "lang/isv.bin" },
95 { &blobNl_Resources, "lang/nl.bin" },
94 { &blobPl_Resources, "lang/pl.bin" }, 96 { &blobPl_Resources, "lang/pl.bin" },
95 { &blobRu_Resources, "lang/ru.bin" }, 97 { &blobRu_Resources, "lang/ru.bin" },
96 { &blobSk_Resources, "lang/sk.bin" }, 98 { &blobSk_Resources, "lang/sk.bin" },
diff --git a/src/resources.h b/src/resources.h
index b00fde51..3852cc3e 100644
--- a/src/resources.h
+++ b/src/resources.h
@@ -50,6 +50,7 @@ extern iBlock blobHu_Resources;
50extern iBlock blobIa_Resources; 50extern iBlock blobIa_Resources;
51extern iBlock blobIe_Resources; 51extern iBlock blobIe_Resources;
52extern iBlock blobIsv_Resources; 52extern iBlock blobIsv_Resources;
53extern iBlock blobNl_Resources;
53extern iBlock blobPl_Resources; 54extern iBlock blobPl_Resources;
54extern iBlock blobRu_Resources; 55extern iBlock blobRu_Resources;
55extern iBlock blobSk_Resources; 56extern iBlock blobSk_Resources;
diff --git a/src/ui/bindingswidget.c b/src/ui/bindingswidget.c
index 4cf8df8e..13f9434e 100644
--- a/src/ui/bindingswidget.c
+++ b/src/ui/bindingswidget.c
@@ -143,12 +143,16 @@ static void setActiveItem_BindingsWidget_(iBindingsWidget *d, size_t pos) {
143 item->isWaitingForEvent = iTrue; 143 item->isWaitingForEvent = iTrue;
144 invalidateItem_ListWidget(d->list, d->activePos); 144 invalidateItem_ListWidget(d->list, d->activePos);
145 } 145 }
146#if defined (iPlatformAppleDesktop) 146#if defined (iPlatformAppleDesktop) && defined (iHaveNativeContextMenus)
147 /* Native menus must be disabled while grabbing keys so the shortcuts don't trigger. */ 147 /* Native menus must be disabled while grabbing keys so the shortcuts don't trigger. */
148 const iBool enableNativeMenus = (d->activePos == iInvalidPos); 148 const iBool enableNativeMenus = (d->activePos == iInvalidPos);
149 enableMenu_MacOS("${menu.title.file}", enableNativeMenus);
149 enableMenu_MacOS("${menu.title.edit}", enableNativeMenus); 150 enableMenu_MacOS("${menu.title.edit}", enableNativeMenus);
150 enableMenu_MacOS("${menu.title.view}", enableNativeMenus); 151 enableMenu_MacOS("${menu.title.view}", enableNativeMenus);
152 enableMenu_MacOS("${menu.title.bookmarks}", enableNativeMenus);
151 enableMenu_MacOS("${menu.title.identity}", enableNativeMenus); 153 enableMenu_MacOS("${menu.title.identity}", enableNativeMenus);
154 enableMenuIndex_MacOS(6, enableNativeMenus);
155 enableMenuIndex_MacOS(7, enableNativeMenus);
152#endif 156#endif
153} 157}
154 158
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 88e016f3..9b531957 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -56,6 +56,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
56#include "visbuf.h" 56#include "visbuf.h"
57#include "visited.h" 57#include "visited.h"
58 58
59#if defined (iPlatformAppleDesktop)
60# include "macos.h"
61#endif
59#if defined (iPlatformAppleMobile) 62#if defined (iPlatformAppleMobile)
60# include "ios.h" 63# include "ios.h"
61#endif 64#endif
@@ -1934,11 +1937,18 @@ static void enableActions_DocumentWidget_(iDocumentWidget *d, iBool enable) {
1934} 1937}
1935 1938
1936static void setLinkNumberMode_DocumentWidget_(iDocumentWidget *d, iBool set) { 1939static void setLinkNumberMode_DocumentWidget_(iDocumentWidget *d, iBool set) {
1937 iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, set); 1940 if (((d->flags & showLinkNumbers_DocumentWidgetFlag) != 0) != set) {
1938 /* Children have priority when handling events. */ 1941 iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, set);
1939 enableActions_DocumentWidget_(d, !set); 1942 /* Children have priority when handling events. */
1940 if (d->menu) { 1943 enableActions_DocumentWidget_(d, !set);
1941 setFlags_Widget(d->menu, disabled_WidgetFlag, set); 1944#if defined (iPlatformAppleDesktop)
1945 enableMenuItemsOnHomeRow_MacOS(!set);
1946#endif
1947 /* Ensure all keyboard events come here first. */
1948 setKeyboardGrab_Widget(set ? as_Widget(d) : NULL);
1949 if (d->menu) {
1950 setFlags_Widget(d->menu, disabled_WidgetFlag, set);
1951 }
1942 } 1952 }
1943} 1953}
1944 1954
@@ -2252,10 +2262,6 @@ static void showErrorPage_DocumentWidget_(iDocumentWidget *d, enum iGmStatusCode
2252 case tooManyRedirects_GmStatusCode: 2262 case tooManyRedirects_GmStatusCode:
2253 appendFormat_String(src, "=> %s\n", cstr_String(meta)); 2263 appendFormat_String(src, "=> %s\n", cstr_String(meta));
2254 break; 2264 break;
2255 case tlsFailure_GmStatusCode:
2256// useBanner = iFalse; /* valid data wasn't received from host */
2257// appendFormat_String(src, ">%s\n", cstr_String(meta));
2258 break;
2259 case tlsServerCertificateExpired_GmStatusCode: 2265 case tlsServerCertificateExpired_GmStatusCode:
2260 makeFooterButtons_DocumentWidget_( 2266 makeFooterButtons_DocumentWidget_(
2261 d, 2267 d,
diff --git a/src/ui/labelwidget.c b/src/ui/labelwidget.c
index 44ae3eec..89e95c85 100644
--- a/src/ui/labelwidget.c
+++ b/src/ui/labelwidget.c
@@ -205,6 +205,7 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
205 const iBool isSel = (flags & selected_WidgetFlag) != 0; 205 const iBool isSel = (flags & selected_WidgetFlag) != 0;
206 const iBool isFrameless = (flags & frameless_WidgetFlag) != 0; 206 const iBool isFrameless = (flags & frameless_WidgetFlag) != 0;
207 const iBool isButton = d->click.button != 0; 207 const iBool isButton = d->click.button != 0;
208 const iBool isMenuItem = !cmp_String(id_Widget(parent_Widget(d)), "menu");
208 const iBool isKeyRoot = (w->root == get_Window()->keyRoot); 209 const iBool isKeyRoot = (w->root == get_Window()->keyRoot);
209 const iBool isDarkTheme = isDark_ColorTheme(colorTheme_App()); 210 const iBool isDarkTheme = isDark_ColorTheme(colorTheme_App());
210 /* Default color state. */ 211 /* Default color state. */
@@ -229,7 +230,7 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
229 *bg = uiBackgroundSelected_ColorId; 230 *bg = uiBackgroundSelected_ColorId;
230 if (!isKeyRoot) { 231 if (!isKeyRoot) {
231 *bg = isDark_ColorTheme(colorTheme_App()) ? uiBackgroundUnfocusedSelection_ColorId 232 *bg = isDark_ColorTheme(colorTheme_App()) ? uiBackgroundUnfocusedSelection_ColorId
232 : uiMarked_ColorId; 233 : uiMarked_ColorId;
233 } 234 }
234 } 235 }
235 *fg = uiTextSelected_ColorId; 236 *fg = uiTextSelected_ColorId;
@@ -294,7 +295,7 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
294 } 295 }
295 *fg = *icon = *meta = uiTextPressed_ColorId | permanent_ColorId; 296 *fg = *icon = *meta = uiTextPressed_ColorId | permanent_ColorId;
296 } 297 }
297 } 298 }
298 if (((isSel || isHover) && isFrameless) || isPress) { 299 if (((isSel || isHover) && isFrameless) || isPress) {
299 /* Ensure that the full label text remains readable. */ 300 /* Ensure that the full label text remains readable. */
300 *fg |= permanent_ColorId; 301 *fg |= permanent_ColorId;
@@ -429,7 +430,7 @@ static void draw_LabelWidget_(const iLabelWidget *d) {
429 moved_Rect( 430 moved_Rect(
430 adjusted_Rect(bounds, 431 adjusted_Rect(bounds,
431 init_I2(iconPad * (flags & tight_WidgetFlag ? 1.0f : 1.5f), 0), 432 init_I2(iconPad * (flags & tight_WidgetFlag ? 1.0f : 1.5f), 0),
432 init_I2(-iconPad * (flags & tight_WidgetFlag ? 0.5f : 1.0f), 0)), 433 init_I2(-iconPad * (flags & tight_WidgetFlag ? 0.5f : 1.0f), 0)),
433 d->labelOffset), 434 d->labelOffset),
434 d->flags.alignVisual, 435 d->flags.alignVisual,
435 d->flags.drawAsOutline ? fg : none_ColorId, 436 d->flags.drawAsOutline ? fg : none_ColorId,
@@ -566,20 +567,20 @@ void setTextColor_LabelWidget(iLabelWidget *d, int color) {
566 567
567void setText_LabelWidget(iLabelWidget *d, const iString *text) { 568void setText_LabelWidget(iLabelWidget *d, const iString *text) {
568 if (d) { 569 if (d) {
569 updateText_LabelWidget(d, text); 570 updateText_LabelWidget(d, text);
570 updateSize_LabelWidget(d); 571 updateSize_LabelWidget(d);
571 if (isWrapped_LabelWidget(d)) { 572 if (isWrapped_LabelWidget(d)) {
572 sizeChanged_LabelWidget_(d); 573 sizeChanged_LabelWidget_(d);
573 } 574}
574 } 575 }
575} 576}
576 577
577void setTextCStr_LabelWidget(iLabelWidget *d, const char *text) { 578void setTextCStr_LabelWidget(iLabelWidget *d, const char *text) {
578 if (d) { 579 if (d) {
579 updateTextCStr_LabelWidget(d, text); 580 updateTextCStr_LabelWidget(d, text);
580 updateSize_LabelWidget(d); 581 updateSize_LabelWidget(d);
581 if (isWrapped_LabelWidget(d)) { 582 if (isWrapped_LabelWidget(d)) {
582 sizeChanged_LabelWidget_(d); 583 sizeChanged_LabelWidget_(d);
583 } 584 }
584 } 585 }
585} 586}
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c
index fe8ec939..409d749c 100644
--- a/src/ui/sidebarwidget.c
+++ b/src/ui/sidebarwidget.c
@@ -125,7 +125,7 @@ struct Impl_SidebarWidget {
125 float widthAsGaps; 125 float widthAsGaps;
126 int buttonFont; 126 int buttonFont;
127 int itemFonts[2]; 127 int itemFonts[2];
128 size_t numUnreadEntries; 128 size_t numUnreadEntries;
129 iWidget * resizer; 129 iWidget * resizer;
130 iWidget * menu; /* context menu for an item */ 130 iWidget * menu; /* context menu for an item */
131 iWidget * modeMenu; /* context menu for the sidebar mode (no item) */ 131 iWidget * modeMenu; /* context menu for the sidebar mode (no item) */
@@ -266,7 +266,7 @@ static void updateItemsWithFlags_SidebarWidget_(iSidebarWidget *d, iBool keepAct
266 clear_ListWidget(d->list); 266 clear_ListWidget(d->list);
267 releaseChildren_Widget(d->blank); 267 releaseChildren_Widget(d->blank);
268 if (!keepActions) { 268 if (!keepActions) {
269 releaseChildren_Widget(d->actions); 269 releaseChildren_Widget(d->actions);
270 } 270 }
271 d->actions->rect.size.y = 0; 271 d->actions->rect.size.y = 0;
272 destroy_Widget(d->menu); 272 destroy_Widget(d->menu);
@@ -350,37 +350,37 @@ static void updateItemsWithFlags_SidebarWidget_(iSidebarWidget *d, iBool keepAct
350 } 350 }
351 /* Actions. */ 351 /* Actions. */
352 if (!isMobile) { 352 if (!isMobile) {
353 if (!keepActions) { 353 if (!keepActions) {
354 addActionButton_SidebarWidget_(d, 354 addActionButton_SidebarWidget_(d,
355 check_Icon " ${sidebar.action.feeds.markallread}", 355 check_Icon " ${sidebar.action.feeds.markallread}",
356 "feeds.markallread", 356 "feeds.markallread",
357 expand_WidgetFlag | tight_WidgetFlag); 357 expand_WidgetFlag | tight_WidgetFlag);
358 updateSize_LabelWidget(addChildFlags_Widget(d->actions, 358 updateSize_LabelWidget(addChildFlags_Widget(d->actions,
359 iClob(new_LabelWidget("${sidebar.action.show}", NULL)), 359 iClob(new_LabelWidget("${sidebar.action.show}", NULL)),
360 frameless_WidgetFlag | tight_WidgetFlag)); 360 frameless_WidgetFlag | tight_WidgetFlag));
361 const iMenuItem items[] = { 361 const iMenuItem items[] = {
362 { page_Icon " ${sidebar.action.feeds.showall}", SDLK_u, KMOD_SHIFT, "feeds.mode arg:0" }, 362 { page_Icon " ${sidebar.action.feeds.showall}", SDLK_u, KMOD_SHIFT, "feeds.mode arg:0" },
363 { circle_Icon " ${sidebar.action.feeds.showunread}", SDLK_u, 0, "feeds.mode arg:1" }, 363 { circle_Icon " ${sidebar.action.feeds.showunread}", SDLK_u, 0, "feeds.mode arg:1" },
364 }; 364 };
365 iWidget *dropButton = addChild_Widget( 365 iWidget *dropButton = addChild_Widget(
366 d->actions, 366 d->actions,
367 iClob(makeMenuButton_LabelWidget(items[d->feedsMode].label, items, 2))); 367 iClob(makeMenuButton_LabelWidget(items[d->feedsMode].label, items, 2)));
368 setId_Widget(dropButton, "feeds.modebutton"); 368 setId_Widget(dropButton, "feeds.modebutton");
369 checkIcon_LabelWidget((iLabelWidget *) dropButton); 369 checkIcon_LabelWidget((iLabelWidget *) dropButton);
370 setFixedSize_Widget( 370 setFixedSize_Widget(
371 dropButton, 371 dropButton,
372 init_I2(iMaxi(20 * gap_UI, 372 init_I2(iMaxi(20 * gap_UI,
373 measure_Text(default_FontId, 373 measure_Text(default_FontId,
374 translateCStr_Lang( 374 translateCStr_Lang(
375 items[findWidestLabel_MenuItem(items, 2)].label)) 375 items[findWidestLabel_MenuItem(items, 2)].label))
376 .advance.x + 376 .advance.x +
377 13 * gap_UI), 377 13 * gap_UI),
378 -1)); 378 -1));
379 } 379 }
380 else { 380 else {
381 updateDropdownSelection_LabelWidget(findChild_Widget(d->actions, "feeds.modebutton"), 381 updateDropdownSelection_LabelWidget(findChild_Widget(d->actions, "feeds.modebutton"),
382 format_CStr(" arg:%d", d->feedsMode)); 382 format_CStr(" arg:%d", d->feedsMode));
383 } 383 }
384 } 384 }
385 else { 385 else {
386 if (!keepActions) { 386 if (!keepActions) {
@@ -605,7 +605,7 @@ static void updateItemsWithFlags_SidebarWidget_(iSidebarWidget *d, iBool keepAct
605 setPadding_Widget(div, 0, 0, 0, height_Widget(d->actions)); 605 setPadding_Widget(div, 0, 0, 0, height_Widget(d->actions));
606 addChildFlags_Widget(div, iClob(new_Widget()), expand_WidgetFlag); /* pad */ 606 addChildFlags_Widget(div, iClob(new_Widget()), expand_WidgetFlag); /* pad */
607 if (d->feedsMode == all_FeedsMode) { 607 if (d->feedsMode == all_FeedsMode) {
608 addChild_Widget(div, iClob(new_LabelWidget("${menu.feeds.refresh}", "feeds.refresh"))); 608 addChild_Widget(div, iClob(new_LabelWidget("${menu.feeds.refresh}", "feeds.refresh")));
609 } 609 }
610 else { 610 else {
611 iLabelWidget *msg = addChildFlags_Widget(div, iClob(new_LabelWidget("${sidebar.empty.unread}", NULL)), 611 iLabelWidget *msg = addChildFlags_Widget(div, iClob(new_LabelWidget("${sidebar.empty.unread}", NULL)),
@@ -719,8 +719,8 @@ iBool setMode_SidebarWidget(iSidebarWidget *d, enum iSidebarMode mode) {
719 719
720void setClosedFolders_SidebarWidget(iSidebarWidget *d, const iIntSet *closedFolders) { 720void setClosedFolders_SidebarWidget(iSidebarWidget *d, const iIntSet *closedFolders) {
721 if (d) { 721 if (d) {
722 delete_IntSet(d->closedFolders); 722 delete_IntSet(d->closedFolders);
723 d->closedFolders = copy_IntSet(closedFolders); 723 d->closedFolders = copy_IntSet(closedFolders);
724 } 724 }
725} 725}
726 726
@@ -840,35 +840,35 @@ void init_SidebarWidget(iSidebarWidget *d, enum iSidebarSide side) {
840 setFont_LabelWidget(closeButton, uiLabelBigBold_FontId); 840 setFont_LabelWidget(closeButton, uiLabelBigBold_FontId);
841 iConnect(Root, get_Root(), visualOffsetsChanged, d, updateSlidingSheetHeight_SidebarWidget_); 841 iConnect(Root, get_Root(), visualOffsetsChanged, d, updateSlidingSheetHeight_SidebarWidget_);
842 } 842 }
843 iWidget *buttons = new_Widget(); 843 iWidget *buttons = new_Widget();
844 setId_Widget(buttons, "buttons"); 844 setId_Widget(buttons, "buttons");
845 setDrawBufferEnabled_Widget(buttons, iTrue); 845 setDrawBufferEnabled_Widget(buttons, iTrue);
846 for (int i = 0; i < max_SidebarMode; i++) { 846 for (int i = 0; i < max_SidebarMode; i++) {
847 if (i == identities_SidebarMode && deviceType_App() != desktop_AppDeviceType) { 847 if (i == identities_SidebarMode && deviceType_App() != desktop_AppDeviceType) {
848 /* On mobile, identities are managed via Settings. */ 848 /* On mobile, identities are managed via Settings. */
849 continue; 849 continue;
850 } 850 }
851 d->modeButtons[i] = addChildFlags_Widget( 851 d->modeButtons[i] = addChildFlags_Widget(
852 buttons, 852 buttons,
853 iClob(new_LabelWidget( 853 iClob(new_LabelWidget(
854 tightModeLabels_[i], 854 tightModeLabels_[i],
855 format_CStr("%s.mode arg:%d", cstr_String(id_Widget(w)), i))), 855 format_CStr("%s.mode arg:%d", cstr_String(id_Widget(w)), i))),
856 frameless_WidgetFlag | noBackground_WidgetFlag); 856 frameless_WidgetFlag | noBackground_WidgetFlag);
857 as_Widget(d->modeButtons[i])->flags2 |= slidingSheetDraggable_WidgetFlag2; /* phone */ 857 as_Widget(d->modeButtons[i])->flags2 |= slidingSheetDraggable_WidgetFlag2; /* phone */
858 } 858 }
859 setButtonFont_SidebarWidget(d, isPhone ? uiLabelBig_FontId : uiLabel_FontId); 859 setButtonFont_SidebarWidget(d, isPhone ? uiLabelBig_FontId : uiLabel_FontId);
860 addChildFlags_Widget(vdiv, 860 addChildFlags_Widget(vdiv,
861 iClob(buttons), 861 iClob(buttons),
862 arrangeHorizontal_WidgetFlag | resizeWidthOfChildren_WidgetFlag | 862 arrangeHorizontal_WidgetFlag | resizeWidthOfChildren_WidgetFlag |
863 arrangeHeight_WidgetFlag | resizeToParentWidth_WidgetFlag); 863 arrangeHeight_WidgetFlag | resizeToParentWidth_WidgetFlag);
864 setBackgroundColor_Widget(buttons, uiBackgroundSidebar_ColorId); 864 setBackgroundColor_Widget(buttons, uiBackgroundSidebar_ColorId);
865 iWidget *content = new_Widget(); 865 iWidget *content = new_Widget();
866 setFlags_Widget(content, resizeChildren_WidgetFlag, iTrue); 866 setFlags_Widget(content, resizeChildren_WidgetFlag, iTrue);
867 iWidget *listAndActions = makeVDiv_Widget(); 867 iWidget *listAndActions = makeVDiv_Widget();
868 addChild_Widget(content, iClob(listAndActions)); 868 addChild_Widget(content, iClob(listAndActions));
869 iWidget *listArea = new_Widget(); 869 iWidget *listArea = new_Widget();
870 setFlags_Widget(listArea, resizeChildren_WidgetFlag, iTrue); 870 setFlags_Widget(listArea, resizeChildren_WidgetFlag, iTrue);
871 d->list = new_ListWidget(); 871 d->list = new_ListWidget();
872 setPadding_Widget(as_Widget(d->list), 0, gap_UI, 0, gap_UI); 872 setPadding_Widget(as_Widget(d->list), 0, gap_UI, 0, gap_UI);
873 addChild_Widget(listArea, iClob(d->list)); 873 addChild_Widget(listArea, iClob(d->list));
874 if (!isPhone) { 874 if (!isPhone) {
@@ -892,7 +892,7 @@ void init_SidebarWidget(iSidebarWidget *d, enum iSidebarSide side) {
892 setBackgroundColor_Widget(d->actions, uiBackground_ColorId); 892 setBackgroundColor_Widget(d->actions, uiBackground_ColorId);
893 } 893 }
894 else { 894 else {
895 setBackgroundColor_Widget(d->actions, uiBackgroundSidebar_ColorId); 895 setBackgroundColor_Widget(d->actions, uiBackgroundSidebar_ColorId);
896 } 896 }
897 d->contextItem = NULL; 897 d->contextItem = NULL;
898 d->contextIndex = iInvalidPos; 898 d->contextIndex = iInvalidPos;
@@ -945,7 +945,7 @@ iBool setButtonFont_SidebarWidget(iSidebarWidget *d, int font) {
945static const iGmIdentity *constHoverIdentity_SidebarWidget_(const iSidebarWidget *d) { 945static const iGmIdentity *constHoverIdentity_SidebarWidget_(const iSidebarWidget *d) {
946 if (d->mode == identities_SidebarMode) { 946 if (d->mode == identities_SidebarMode) {
947 return constHoverIdentity_CertListWidget(d->certList); 947 return constHoverIdentity_CertListWidget(d->certList);
948 } 948 }
949 return NULL; 949 return NULL;
950} 950}
951 951
@@ -1182,26 +1182,26 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char *
1182 const int animFlags = easeOut_AnimFlag | softer_AnimFlag; 1182 const int animFlags = easeOut_AnimFlag | softer_AnimFlag;
1183 if (!isPortraitPhone_App()) { 1183 if (!isPortraitPhone_App()) {
1184 if (!isHiding) { 1184 if (!isHiding) {
1185 setFlags_Widget(w, keepOnTop_WidgetFlag, iFalse); 1185 setFlags_Widget(w, keepOnTop_WidgetFlag, iFalse);
1186 w->rect.size.x = d->widthAsGaps * gap_UI; 1186 w->rect.size.x = d->widthAsGaps * gap_UI;
1187 invalidate_ListWidget(d->list); 1187 invalidate_ListWidget(d->list);
1188 if (isAnimated) { 1188 if (isAnimated) {
1189 setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); 1189 setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue);
1190 setVisualOffset_Widget( 1190 setVisualOffset_Widget(
1191 w, (d->side == left_SidebarSide ? -1 : 1) * (w->rect.size.x + safePad), 0, 0); 1191 w, (d->side == left_SidebarSide ? -1 : 1) * (w->rect.size.x + safePad), 0, 0);
1192 setVisualOffset_Widget(w, 0, 300, animFlags); 1192 setVisualOffset_Widget(w, 0, 300, animFlags);
1193 }
1194 } 1193 }
1195 else if (isAnimated) { 1194 }
1196 setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); 1195 else if (isAnimated) {
1197 if (d->side == right_SidebarSide) { 1196 setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue);
1198 setVisualOffset_Widget(w, visX, 0, 0); 1197 if (d->side == right_SidebarSide) {
1199 setVisualOffset_Widget( 1198 setVisualOffset_Widget(w, visX, 0, 0);
1199 setVisualOffset_Widget(
1200 w, visX + w->rect.size.x + safePad, 300, animFlags); 1200 w, visX + w->rect.size.x + safePad, 300, animFlags);
1201 } 1201 }
1202 else { 1202 else {
1203 setFlags_Widget(w, keepOnTop_WidgetFlag, iTrue); 1203 setFlags_Widget(w, keepOnTop_WidgetFlag, iTrue);
1204 setVisualOffset_Widget( 1204 setVisualOffset_Widget(
1205 w, -w->rect.size.x - safePad, 300, animFlags); 1205 w, -w->rect.size.x - safePad, 300, animFlags);
1206 } 1206 }
1207 } 1207 }
@@ -1222,8 +1222,8 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char *
1222 setVisualOffset_Widget(w, bottom_Rect(rect_Root(w->root)) - w->rect.pos.y, 300, animFlags); 1222 setVisualOffset_Widget(w, bottom_Rect(rect_Root(w->root)) - w->rect.pos.y, 300, animFlags);
1223 if (d->isEditing) { 1223 if (d->isEditing) {
1224 setMobileEditMode_SidebarWidget_(d, iFalse); 1224 setMobileEditMode_SidebarWidget_(d, iFalse);
1225 }
1226 } 1225 }
1226 }
1227 showToolbar_Root(w->root, isHiding); 1227 showToolbar_Root(w->root, isHiding);
1228 } 1228 }
1229 updateToolbarColors_Root(w->root); 1229 updateToolbarColors_Root(w->root);
@@ -1231,7 +1231,7 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char *
1231 /* BUG: Rearranging because the arrange above didn't fully resolve the height. */ 1231 /* BUG: Rearranging because the arrange above didn't fully resolve the height. */
1232 arrange_Widget(w); 1232 arrange_Widget(w);
1233 if (!isPortraitPhone_App()) { 1233 if (!isPortraitPhone_App()) {
1234 updateSize_DocumentWidget(document_App()); 1234 updateSize_DocumentWidget(document_App());
1235 } 1235 }
1236 if (isVisible_Widget(w)) { 1236 if (isVisible_Widget(w)) {
1237 updateItems_SidebarWidget_(d); 1237 updateItems_SidebarWidget_(d);
@@ -1337,7 +1337,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1337 /* In sliding sheet mode, sidebar is resized to fit in the safe area. */ 1337 /* In sliding sheet mode, sidebar is resized to fit in the safe area. */
1338 setPadding_Widget(d->actions, 0, 0, 0, bottomSafeInset_Mobile()); 1338 setPadding_Widget(d->actions, 0, 0, 0, bottomSafeInset_Mobile());
1339 } 1339 }
1340 return iFalse; 1340 return iFalse;
1341 } 1341 }
1342 else if (isMetricsChange_UserEvent(ev)) { 1342 else if (isMetricsChange_UserEvent(ev)) {
1343 if (isVisible_Widget(w)) { 1343 if (isVisible_Widget(w)) {
@@ -1521,8 +1521,8 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1521 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); 1521 iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id);
1522 if (flag == subscribed_BookmarkFlag && (bm->flags & flag)) { 1522 if (flag == subscribed_BookmarkFlag && (bm->flags & flag)) {
1523 removeEntries_Feeds(item->id); /* get rid of unsubscribed entries */ 1523 removeEntries_Feeds(item->id); /* get rid of unsubscribed entries */
1524 }
1525 bm->flags ^= flag; 1524 bm->flags ^= flag;
1525 }
1526 postCommand_App("bookmarks.changed"); 1526 postCommand_App("bookmarks.changed");
1527 } 1527 }
1528 return iTrue; 1528 return iTrue;
@@ -1672,10 +1672,10 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1672 0, 1672 0,
1673 format_CStr("!feed.entry.unsubscribe arg:1 ptr:%p", d) } }, 1673 format_CStr("!feed.entry.unsubscribe arg:1 ptr:%p", d) } },
1674 2); 1674 2);
1675 } 1675 }
1676 return iTrue; 1676 return iTrue;
1677 } 1677 }
1678 } 1678 }
1679 } 1679 }
1680 } 1680 }
1681 else if (isCommand_Widget(w, ev, "history.delete")) { 1681 else if (isCommand_Widget(w, ev, "history.delete")) {
@@ -1731,7 +1731,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1731 /* Update cursor. */ 1731 /* Update cursor. */
1732 else if (contains_Widget(w, mouse)) { 1732 else if (contains_Widget(w, mouse)) {
1733 const iSidebarItem *item = constHoverItem_ListWidget(d->list); 1733 const iSidebarItem *item = constHoverItem_ListWidget(d->list);
1734 setCursor_Window(get_Window(), 1734 setCursor_Window(get_Window(),
1735 item ? (item->listItem.isSeparator ? SDL_SYSTEM_CURSOR_ARROW 1735 item ? (item->listItem.isSeparator ? SDL_SYSTEM_CURSOR_ARROW
1736 : SDL_SYSTEM_CURSOR_HAND) 1736 : SDL_SYSTEM_CURSOR_HAND)
1737 : SDL_SYSTEM_CURSOR_ARROW); 1737 : SDL_SYSTEM_CURSOR_ARROW);
@@ -1791,9 +1791,9 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev)
1791 isRead ? circle_Icon " ${feeds.entry.markunread}" 1791 isRead ? circle_Icon " ${feeds.entry.markunread}"
1792 : circleWhite_Icon " ${feeds.entry.markread}"); 1792 : circleWhite_Icon " ${feeds.entry.markread}");
1793 } 1793 }
1794 } 1794 }
1795 } 1795 }
1796 } 1796 }
1797 if (ev->type == SDL_KEYDOWN) { 1797 if (ev->type == SDL_KEYDOWN) {
1798 const int key = ev->key.keysym.sym; 1798 const int key = ev->key.keysym.sym;
1799 const int kmods = keyMods_Sym(ev->key.keysym.mod); 1799 const int kmods = keyMods_Sym(ev->key.keysym.mod);
diff --git a/src/ui/util.c b/src/ui/util.c
index e631a092..13bfd92f 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -775,7 +775,7 @@ void makeMenuItems_Widget(iWidget *menu, const iMenuItem *items, size_t n) {
775 drawKey_WidgetFlag | itemFlags); 775 drawKey_WidgetFlag | itemFlags);
776 setWrap_LabelWidget(label, isInfo); 776 setWrap_LabelWidget(label, isInfo);
777 if (!isInfo) { 777 if (!isInfo) {
778 haveIcons |= checkIcon_LabelWidget(label); 778 haveIcons |= checkIcon_LabelWidget(label);
779 } 779 }
780 setFlags_Widget(as_Widget(label), disabled_WidgetFlag, isDisabled); 780 setFlags_Widget(as_Widget(label), disabled_WidgetFlag, isDisabled);
781 if (isInfo) { 781 if (isInfo) {
@@ -935,7 +935,7 @@ static void updateMenuItemFonts_Widget_(iWidget *d) {
935 } 935 }
936 switch (deviceType_App()) { 936 switch (deviceType_App()) {
937 case desktop_AppDeviceType: 937 case desktop_AppDeviceType:
938 setFont_LabelWidget(label, isCaution ? uiLabelBold_FontId : uiLabel_FontId); 938 setFont_LabelWidget(label, isCaution ? uiLabelBold_FontId : uiLabel_FontId);
939 break; 939 break;
940 case tablet_AppDeviceType: 940 case tablet_AppDeviceType:
941 setFont_LabelWidget(label, isCaution ? uiLabelMediumBold_FontId : uiLabelMedium_FontId); 941 setFont_LabelWidget(label, isCaution ? uiLabelMediumBold_FontId : uiLabelMedium_FontId);
@@ -1084,8 +1084,9 @@ void openMenuFlags_Widget(iWidget *d, iInt2 windowCoord, int menuOpenFlags) {
1084 } 1084 }
1085 arrange_Widget(d); /* need to know the height */ 1085 arrange_Widget(d); /* need to know the height */
1086 iBool allowOverflow = iFalse; 1086 iBool allowOverflow = iFalse;
1087 /* A vertical offset determined by a possible selected label in the menu. */ 1087 /* A vertical offset determined by a possible selected label in the menu. */
1088 if (deviceType_App() == desktop_AppDeviceType) { 1088 if (deviceType_App() == desktop_AppDeviceType &&
1089 windowCoord.y < rootSize.y - lineHeight_Text(uiNormal_FontSize) * 3) {
1089 iConstForEach(ObjectList, child, children_Widget(d)) { 1090 iConstForEach(ObjectList, child, children_Widget(d)) {
1090 const iWidget *item = constAs_Widget(child.object); 1091 const iWidget *item = constAs_Widget(child.object);
1091 if (flags_Widget(item) & selected_WidgetFlag) { 1092 if (flags_Widget(item) & selected_WidgetFlag) {
@@ -1171,7 +1172,7 @@ void openMenuFlags_Widget(iWidget *d, iInt2 windowCoord, int menuOpenFlags) {
1171 arrange_Widget(d); 1172 arrange_Widget(d);
1172 if (!isSlidePanel) { 1173 if (!isSlidePanel) {
1173 /* LAYOUT BUG: Height of wrapped menu items is incorrect with a single arrange! */ 1174 /* LAYOUT BUG: Height of wrapped menu items is incorrect with a single arrange! */
1174 arrange_Widget(d); 1175 arrange_Widget(d);
1175 } 1176 }
1176 if (deviceType_App() == phone_AppDeviceType) { 1177 if (deviceType_App() == phone_AppDeviceType) {
1177 if (isSlidePanel) { 1178 if (isSlidePanel) {
@@ -1379,6 +1380,32 @@ void updateDropdownSelection_LabelWidget(iLabelWidget *dropButton, const char *s
1379 } 1380 }
1380} 1381}
1381 1382
1383const char *selectedDropdownCommand_LabelWidget(const iLabelWidget *dropButton) {
1384 if (!dropButton) {
1385 return "";
1386 }
1387 iWidget *menu = findChild_Widget(constAs_Widget(dropButton), "menu");
1388 if (flags_Widget(menu) & nativeMenu_WidgetFlag) {
1389 iConstForEach(Array, i, userData_Object(menu)) {
1390 const iMenuItem *item = i.value;
1391 if (item->label && startsWithCase_CStr(item->label, "###")) {
1392 return item->command ? item->command : "";
1393 }
1394 }
1395 }
1396 else {
1397 iForEach(ObjectList, i, children_Widget(menu)) {
1398 if (isInstance_Object(i.object, &Class_LabelWidget)) {
1399 iLabelWidget *item = i.object;
1400 if (flags_Widget(i.object) & selected_WidgetFlag) {
1401 return cstr_String(command_LabelWidget(item));
1402 }
1403 }
1404 }
1405 }
1406 return "";
1407}
1408
1382/*-----------------------------------------------------------------------------------------------*/ 1409/*-----------------------------------------------------------------------------------------------*/
1383 1410
1384static iBool isTabPage_Widget_(const iWidget *tabs, const iWidget *page) { 1411static iBool isTabPage_Widget_(const iWidget *tabs, const iWidget *page) {
@@ -1831,10 +1858,10 @@ iWidget *makeValueInput_Widget(iWidget *parent, const iString *initialValue, con
1831 addChild_Widget(parent, iClob(dlg)); 1858 addChild_Widget(parent, iClob(dlg));
1832 } 1859 }
1833 if (deviceType_App() == desktop_AppDeviceType) { /* conserve space on mobile */ 1860 if (deviceType_App() == desktop_AppDeviceType) { /* conserve space on mobile */
1834 setId_Widget( 1861 setId_Widget(
1835 addChildFlags_Widget(dlg, iClob(new_LabelWidget(title, NULL)), 1862 addChildFlags_Widget(dlg, iClob(new_LabelWidget(title, NULL)),
1836 frameless_WidgetFlag), 1863 frameless_WidgetFlag),
1837 "valueinput.title"); 1864 "valueinput.title");
1838 } 1865 }
1839 iLabelWidget *promptLabel; 1866 iLabelWidget *promptLabel;
1840 setId_Widget(addChildFlags_Widget( 1867 setId_Widget(addChildFlags_Widget(
@@ -1864,8 +1891,8 @@ iWidget *makeValueInput_Widget(iWidget *parent, const iString *initialValue, con
1864 } 1891 }
1865 pushBack_Array(&actions, &(iMenuItem){ 1892 pushBack_Array(&actions, &(iMenuItem){
1866 acceptLabel, 1893 acceptLabel,
1867 SDLK_RETURN, 1894 SDLK_RETURN,
1868 acceptKeyMod_ReturnKeyBehavior(prefs_App()->returnKey), 1895 acceptKeyMod_ReturnKeyBehavior(prefs_App()->returnKey),
1869 "valueinput.accept" 1896 "valueinput.accept"
1870 }); 1897 });
1871 addChildPos_Widget(dlg, 1898 addChildPos_Widget(dlg,
@@ -2352,6 +2379,7 @@ iWidget *makePreferences_Widget(void) {
2352 { u8"Interlingua - ia", 0, 0, "uilang id:ia" }, 2379 { u8"Interlingua - ia", 0, 0, "uilang id:ia" },
2353 { u8"Interlingue - ie", 0, 0, "uilang id:ie" }, 2380 { u8"Interlingue - ie", 0, 0, "uilang id:ie" },
2354 { u8"Interslavic - isv", 0, 0, "uilang id:isv" }, 2381 { u8"Interslavic - isv", 0, 0, "uilang id:isv" },
2382 { u8"Nederlands - nl", 0, 0, "uilang id:nl" },
2355 { u8"Polski - pl", 0, 0, "uilang id:pl" }, 2383 { u8"Polski - pl", 0, 0, "uilang id:pl" },
2356 { u8"Русский - ru", 0, 0, "uilang id:ru" }, 2384 { u8"Русский - ru", 0, 0, "uilang id:ru" },
2357 { u8"Slovak - sk", 0, 0, "uilang id:sk" }, 2385 { u8"Slovak - sk", 0, 0, "uilang id:sk" },
@@ -2519,8 +2547,8 @@ iWidget *makePreferences_Widget(void) {
2519 { "buttons id:prefs.mono", 0, 0, (const void *) monoFontItems }, 2547 { "buttons id:prefs.mono", 0, 0, (const void *) monoFontItems },
2520 { "padding" }, 2548 { "padding" },
2521 { "dropdown id:prefs.font.monodoc", 0, 0, (const void *) constData_Array(makeFontItems_("monodoc")) }, 2549 { "dropdown id:prefs.font.monodoc", 0, 0, (const void *) constData_Array(makeFontItems_("monodoc")) },
2522 { "padding" },
2523 { "toggle id:prefs.font.warnmissing" }, 2550 { "toggle id:prefs.font.warnmissing" },
2551 { "padding" },
2524 { "heading id:prefs.gemtext.ansi" }, 2552 { "heading id:prefs.gemtext.ansi" },
2525 { "toggle id:prefs.gemtext.ansi.fg" }, 2553 { "toggle id:prefs.gemtext.ansi.fg" },
2526 { "toggle id:prefs.gemtext.ansi.bg" }, 2554 { "toggle id:prefs.gemtext.ansi.bg" },
@@ -2528,8 +2556,8 @@ iWidget *makePreferences_Widget(void) {
2528// { "toggle id:prefs.font.smooth" }, 2556// { "toggle id:prefs.font.smooth" },
2529// { "padding" }, 2557// { "padding" },
2530// { "dropdown id:prefs.font.ui", 0, 0, (const void *) constData_Array(makeFontItems_("ui")) }, 2558// { "dropdown id:prefs.font.ui", 0, 0, (const void *) constData_Array(makeFontItems_("ui")) },
2531 { "padding" },
2532 { "button text:" fontpack_Icon " " uiTextAction_ColorEscape "${menu.fonts}", 0, 0, "!open url:about:fonts" }, 2559 { "button text:" fontpack_Icon " " uiTextAction_ColorEscape "${menu.fonts}", 0, 0, "!open url:about:fonts" },
2560 { "padding" },
2533 { NULL } 2561 { NULL }
2534 }; 2562 };
2535 const iMenuItem stylePanelItems[] = { 2563 const iMenuItem stylePanelItems[] = {
@@ -2994,47 +3022,47 @@ iWidget *makeBookmarkEditor_Widget(void) {
2994 } 3022 }
2995 else { 3023 else {
2996 dlg = makeSheet_Widget("bmed"); 3024 dlg = makeSheet_Widget("bmed");
2997 setId_Widget(addChildFlags_Widget( 3025 setId_Widget(addChildFlags_Widget(
2998 dlg, 3026 dlg,
2999 iClob(new_LabelWidget(uiHeading_ColorEscape "${heading.bookmark.edit}", NULL)), 3027 iClob(new_LabelWidget(uiHeading_ColorEscape "${heading.bookmark.edit}", NULL)),
3000 frameless_WidgetFlag), 3028 frameless_WidgetFlag),
3001 "bmed.heading"); 3029 "bmed.heading");
3002 iWidget *headings, *values; 3030 iWidget *headings, *values;
3003 addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values))); 3031 addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values)));
3004 iInputWidget *inputs[4]; 3032 iInputWidget *inputs[4];
3005 /* Folder to add to. */ { 3033 /* Folder to add to. */ {
3006 addChild_Widget(headings, iClob(makeHeading_Widget("${dlg.bookmark.folder}"))); 3034 addChild_Widget(headings, iClob(makeHeading_Widget("${dlg.bookmark.folder}")));
3007 const iArray *folderItems = makeBookmarkFolderItems_(iFalse); 3035 const iArray *folderItems = makeBookmarkFolderItems_(iFalse);
3008 iLabelWidget *folderButton; 3036 iLabelWidget *folderButton;
3009 setId_Widget(addChildFlags_Widget(values, 3037 setId_Widget(addChildFlags_Widget(values,
3010 iClob(folderButton = makeMenuButton_LabelWidget( 3038 iClob(folderButton = makeMenuButton_LabelWidget(
3011 widestLabel_MenuItemArray(folderItems), 3039 widestLabel_MenuItemArray(folderItems),
3012 constData_Array(folderItems), 3040 constData_Array(folderItems),
3013 size_Array(folderItems))), alignLeft_WidgetFlag), 3041 size_Array(folderItems))), alignLeft_WidgetFlag),
3014 "bmed.folder"); 3042 "bmed.folder");
3015 } 3043 }
3016 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.title}", "bmed.title", iClob(inputs[0] = new_InputWidget(0))); 3044 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.title}", "bmed.title", iClob(inputs[0] = new_InputWidget(0)));
3017 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.url}", "bmed.url", iClob(inputs[1] = new_InputWidget(0))); 3045 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.url}", "bmed.url", iClob(inputs[1] = new_InputWidget(0)));
3018 setUrlContent_InputWidget(inputs[1], iTrue); 3046 setUrlContent_InputWidget(inputs[1], iTrue);
3019 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.tags}", "bmed.tags", iClob(inputs[2] = new_InputWidget(0))); 3047 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.tags}", "bmed.tags", iClob(inputs[2] = new_InputWidget(0)));
3020 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.icon}", "bmed.icon", iClob(inputs[3] = new_InputWidget(1))); 3048 addDialogInputWithHeading_(headings, values, "${dlg.bookmark.icon}", "bmed.icon", iClob(inputs[3] = new_InputWidget(1)));
3021 /* Buttons for special tags. */ 3049 /* Buttons for special tags. */
3022 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI))); 3050 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI)));
3023 iWidget *special = addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values))); 3051 iWidget *special = addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values)));
3024 setFlags_Widget(special, collapse_WidgetFlag, iTrue); 3052 setFlags_Widget(special, collapse_WidgetFlag, iTrue);
3025 setId_Widget(special, "bmed.special"); 3053 setId_Widget(special, "bmed.special");
3026 makeTwoColumnHeading_("${heading.bookmark.tags}", headings, values); 3054 makeTwoColumnHeading_("${heading.bookmark.tags}", headings, values);
3027 addDialogToggle_(headings, values, "${bookmark.tag.home}", "bmed.tag.home"); 3055 addDialogToggle_(headings, values, "${bookmark.tag.home}", "bmed.tag.home");
3028 addDialogToggle_(headings, values, "${bookmark.tag.remote}", "bmed.tag.remote"); 3056 addDialogToggle_(headings, values, "${bookmark.tag.remote}", "bmed.tag.remote");
3029 addDialogToggle_(headings, values, "${bookmark.tag.linksplit}", "bmed.tag.linksplit"); 3057 addDialogToggle_(headings, values, "${bookmark.tag.linksplit}", "bmed.tag.linksplit");
3030 arrange_Widget(dlg); 3058 arrange_Widget(dlg);
3031 for (int i = 0; i < 3; ++i) { 3059 for (int i = 0; i < 3; ++i) {
3032 as_Widget(inputs[i])->rect.size.x = 100 * gap_UI - headings->rect.size.x; 3060 as_Widget(inputs[i])->rect.size.x = 100 * gap_UI - headings->rect.size.x;
3033 } 3061 }
3034 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI))); 3062 addChild_Widget(dlg, iClob(makePadding_Widget(gap_UI)));
3035 addChild_Widget(dlg, iClob(makeDialogButtons_Widget(actions, iElemCount(actions)))); 3063 addChild_Widget(dlg, iClob(makeDialogButtons_Widget(actions, iElemCount(actions))));
3036 addChild_Widget(get_Root()->widget, iClob(dlg)); 3064 addChild_Widget(get_Root()->widget, iClob(dlg));
3037 setupSheetTransition_Mobile(dlg, iTrue); 3065 setupSheetTransition_Mobile(dlg, iTrue);
3038 } 3066 }
3039 /* Use a recently accessed folder as the default. */ 3067 /* Use a recently accessed folder as the default. */
3040 const uint32_t recentFolderId = recentFolder_Bookmarks(bookmarks_App()); 3068 const uint32_t recentFolderId = recentFolder_Bookmarks(bookmarks_App());
diff --git a/src/ui/util.h b/src/ui/util.h
index 4fedd083..618022b9 100644
--- a/src/ui/util.h
+++ b/src/ui/util.h
@@ -285,6 +285,7 @@ int checkContextMenu_Widget (iWidget *, const SDL_Event *ev)
285 285
286iLabelWidget * makeMenuButton_LabelWidget (const char *label, const iMenuItem *items, size_t n); 286iLabelWidget * makeMenuButton_LabelWidget (const char *label, const iMenuItem *items, size_t n);
287void updateDropdownSelection_LabelWidget (iLabelWidget *dropButton, const char *selectedCommand); 287void updateDropdownSelection_LabelWidget (iLabelWidget *dropButton, const char *selectedCommand);
288const char * selectedDropdownCommand_LabelWidget (const iLabelWidget *dropButton);
288 289
289/*-----------------------------------------------------------------------------------------------*/ 290/*-----------------------------------------------------------------------------------------------*/
290 291
diff --git a/src/ui/widget.c b/src/ui/widget.c
index 1ac4326a..9f67b1c7 100644
--- a/src/ui/widget.c
+++ b/src/ui/widget.c
@@ -2023,7 +2023,8 @@ iBool isAffectedByVisualOffset_Widget(const iWidget *d) {
2023} 2023}
2024 2024
2025void setFocus_Widget(iWidget *d) { 2025void setFocus_Widget(iWidget *d) {
2026 iWindow *win = get_Window(); 2026 iWindow *win = d ? window_Widget(d) : get_Window();
2027 iAssert(win);
2027 if (win->focus != d) { 2028 if (win->focus != d) {
2028 if (win->focus) { 2029 if (win->focus) {
2029 iAssert(!contains_PtrSet(win->focus->root->pendingDestruction, win->focus)); 2030 iAssert(!contains_PtrSet(win->focus->root->pendingDestruction, win->focus));
@@ -2038,6 +2039,13 @@ void setFocus_Widget(iWidget *d) {
2038 } 2039 }
2039} 2040}
2040 2041
2042void setKeyboardGrab_Widget(iWidget *d) {
2043 iWindow *win = d ? window_Widget(d) : get_Window();
2044 iAssert(win);
2045 win->focus = d;
2046 /* no notifications sent */
2047}
2048
2041iWidget *focus_Widget(void) { 2049iWidget *focus_Widget(void) {
2042 return get_Window()->focus; 2050 return get_Window()->focus;
2043} 2051}
diff --git a/src/ui/widget.h b/src/ui/widget.h
index eb3004dc..fb7eb5e2 100644
--- a/src/ui/widget.h
+++ b/src/ui/widget.h
@@ -327,7 +327,8 @@ void scrollInfo_Widget (const iWidget *, iWidgetScrollInfo *inf
327 327
328int backgroundFadeColor_Widget (void); 328int backgroundFadeColor_Widget (void);
329 329
330void setFocus_Widget (iWidget *); 330void setFocus_Widget (iWidget *); /* widget must be flagged `focusable` */
331void setKeyboardGrab_Widget (iWidget *); /* sets focus on any widget */
331iWidget * focus_Widget (void); 332iWidget * focus_Widget (void);
332void setHover_Widget (iWidget *); 333void setHover_Widget (iWidget *);
333iWidget * hover_Widget (void); 334iWidget * hover_Widget (void);