summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-11-14 07:01:48 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-11-14 07:01:48 +0200
commit7ad1d4686e0a454570bc6ad9e8b7bde49fcf04d6 (patch)
tree2643b7e0272b626a4b18c18bfc65ac77094e7505
parent8e85ed281348f286a332c23cae7470cde8f6b9ec (diff)
parent78de5577096bd81d6da152d9f819851c2f8ef260 (diff)
Merge branch 'dev' into work/v1.9
# Conflicts: # CMakeLists.txt # Depends.cmake # src/lang.c
-rw-r--r--AUTHORS.md38
-rw-r--r--CMakeLists.txt1
-rw-r--r--Depends.cmake69
-rwxr-xr-xpo/compile.py17
-rw-r--r--po/cs.po991
-rw-r--r--po/en.po36
-rw-r--r--po/es.po40
-rw-r--r--po/fi.po40
-rw-r--r--po/gl.po44
-rw-r--r--po/hu.po58
-rw-r--r--po/ie.po225
-rw-r--r--po/ru.po56
-rw-r--r--po/sr.po56
-rw-r--r--po/tok.po54
-rw-r--r--po/uk.po58
-rw-r--r--res/about/version.gmi10
-rw-r--r--res/fi.skyjake.Lagrange.appdata.xml50
-rw-r--r--res/lang/cs.binbin0 -> 30703 bytes
-rw-r--r--res/lang/de.binbin28684 -> 28698 bytes
-rw-r--r--res/lang/en.binbin26144 -> 26142 bytes
-rw-r--r--res/lang/eo.binbin24921 -> 24935 bytes
-rw-r--r--res/lang/es.binbin29538 -> 29535 bytes
-rw-r--r--res/lang/es_MX.binbin27009 -> 27023 bytes
-rw-r--r--res/lang/fi.binbin29373 -> 29370 bytes
-rw-r--r--res/lang/fr.binbin29890 -> 29904 bytes
-rw-r--r--res/lang/gl.binbin28728 -> 28724 bytes
-rw-r--r--res/lang/hu.binbin30570 -> 30547 bytes
-rw-r--r--res/lang/ia.binbin28009 -> 28023 bytes
-rw-r--r--res/lang/ie.binbin28214 -> 28462 bytes
-rw-r--r--res/lang/isv.binbin24848 -> 24862 bytes
-rw-r--r--res/lang/pl.binbin29285 -> 29299 bytes
-rw-r--r--res/lang/ru.binbin43838 -> 43848 bytes
-rw-r--r--res/lang/sk.binbin25181 -> 25195 bytes
-rw-r--r--res/lang/sr.binbin43296 -> 43298 bytes
-rw-r--r--res/lang/tok.binbin26566 -> 26584 bytes
-rw-r--r--res/lang/uk.binbin43172 -> 43179 bytes
-rw-r--r--res/lang/zh_Hans.binbin24961 -> 24975 bytes
-rw-r--r--res/lang/zh_Hant.binbin25102 -> 25116 bytes
-rw-r--r--src/app.c6
-rw-r--r--src/fontpack.c21
-rw-r--r--src/gmcerts.c8
-rw-r--r--src/gmutil.c4
-rw-r--r--src/lang.c3
-rw-r--r--src/ui/documentwidget.c37
-rw-r--r--src/ui/lookupwidget.c3
-rw-r--r--src/ui/root.c33
-rw-r--r--src/ui/root.h2
-rw-r--r--src/ui/text.c2
-rw-r--r--src/ui/util.c7
-rw-r--r--src/ui/widget.c32
-rw-r--r--src/ui/window.c6
51 files changed, 1672 insertions, 335 deletions
diff --git a/AUTHORS.md b/AUTHORS.md
index 06b4041b..81f3bb45 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -5,43 +5,43 @@ 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 2596 Jaakko Keränen <jaakko.keranen@iki.fi> 8C 2609 Jaakko Keränen <jaakko.keranen@iki.fi>
9CT 39 Nikolay Korotkiy <sikmir@gmail.com> 9CT 39 Nikolay Korotkiy <sikmir@gmail.com>
10 T 34 Olga Smirnova <mistresssilvara@hotmail.com> 10 T 38 Olga Smirnova <mistresssilvara@hotmail.com>
11 T 25 Alyssa Liddell <e-liss@tuta.io> 11 T 27 jan Anja <cyber@sysrq.in>
12 T 26 Alyssa Liddell <e-liss@tuta.io>
12 T 25 Shibo Lyu <github@of.sb> 13 T 25 Shibo Lyu <github@of.sb>
13 T 24 jan Anja <cyber@sysrq.in> 14 T 21 Страхиња Радић <contact@strahinja.org>
14 T 20 Страхиња Радић <contact@strahinja.org>
15 T 17 MCMic <come@chilliet.eu> 15 T 17 MCMic <come@chilliet.eu>
16 T 14 Wally Hackenslacker <mastor89@protonmail.com> 16 T 14 Wally Hackenslacker <mastor89@protonmail.com>
17 T 9 Xosé M <correoxm@disroot.org>
18 T 9 Aaron Fischer <mail@aaron-fischer.net> 17 T 9 Aaron Fischer <mail@aaron-fischer.net>
18 T 9 Xosé M <correoxm@disroot.org>
19 T 8 El Mau <public@correolibre.net> 19 T 8 El Mau <public@correolibre.net>
20 T 8 Tadeáš Erban <tadysekerbosek@gmail.com>
20 T 7 Waterrail <maksymiliankrol03@gmail.com> 21 T 7 Waterrail <maksymiliankrol03@gmail.com>
21 T 6 Tadeáš Erban <tadysekerbosek@gmail.com>
22 T 5 roy niang <roy@royniang.com> 22 T 5 roy niang <roy@royniang.com>
23 T 2 Arns Udovič <zordsdavini@arns.lt>
24C 2 Manos Pitsidianakis <el13635@mail.ntua.gr>
25 T 2 tbodt <tblodt@icloud.com>
26 T 2 Alex Schroeder <alex@alexschroeder.ch> 23 T 2 Alex Schroeder <alex@alexschroeder.ch>
27 T 2 methbkts <methbkts@gmail.com>
28C 2 Alyssa Rosenzweig <alyssa@rosenzweig.io> 24C 2 Alyssa Rosenzweig <alyssa@rosenzweig.io>
29 T 2 Gabriel de Oliveira Ferreira Machado <goliv04053@tutanota.com> 25 T 2 Arns Udovič <zordsdavini@arns.lt>
26 T 2 Botond Balázs <balazsbotond@gmail.com>
30C 2 Br0000k <77938600+Br0000k@users.noreply.github.com> 27C 2 Br0000k <77938600+Br0000k@users.noreply.github.com>
28 T 2 Gabriel de Oliveira Ferreira Machado <goliv04053@tutanota.com>
29C 2 Manos Pitsidianakis <el13635@mail.ntua.gr>
30 T 2 methbkts <methbkts@gmail.com>
31 T 2 tbodt <tblodt@icloud.com>
32C 1 Adam Mizerski <adam@mizerski.pl>
31C 1 Charles <charles@cdaniels.net> 33C 1 Charles <charles@cdaniels.net>
32C 1 Thomas Adam <thomas.adam@smoothwall.net>
33C 1 Dario Vladovic <d.vladimyr@gmail.com> 34C 1 Dario Vladovic <d.vladimyr@gmail.com>
34C 1 SolidHal <hal@halemmerich.com>
35C 1 David Gillies <dave.gillies@gmail.com> 35C 1 David Gillies <dave.gillies@gmail.com>
36C 1 Raph M <raph@raphm.com>
37 T 1 Eric <spice2wolf@gmail.com> 36 T 1 Eric <spice2wolf@gmail.com>
38C 1 Adam Mizerski <adam@mizerski.pl>
39 T 1 Marek Ľach <mareklachbc@tutanota.com> 37 T 1 Marek Ľach <mareklachbc@tutanota.com>
40C 1 zocker <zocker@10zen.eu> 38C 1 Raph M <raph@raphm.com>
41C 1 Zach DeCook <zachdecook@librem.one> 39C 1 SolidHal <hal@halemmerich.com>
42 T 1 Botond Balázs <balazsbotond@gmail.com> 40C 1 Thomas Adam <thomas.adam@smoothwall.net>
43C 1 Waweic <waweic@protonmail.com> 41C 1 Waweic <waweic@protonmail.com>
44C 1 Waweic <waweic@activ.ism.rocks> 42C 1 Waweic <waweic@activ.ism.rocks>
43C 1 Zach DeCook <zachdecook@librem.one>
44C 1 zocker <zocker@10zen.eu>
45``` 45```
46 46
47This table of contributors has been extracted from Git history and is sorted by commit count. \ No newline at end of file 47This table of contributors has been extracted from Git history and is sorted by commit count. \ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 21cf1c7d..b0a8ba04 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -71,6 +71,7 @@ set (RESOURCES
71 res/about/license.gmi 71 res/about/license.gmi
72 res/about/version.gmi 72 res/about/version.gmi
73 res/arg-help.txt 73 res/arg-help.txt
74 res/lang/cs.bin
74 res/lang/de.bin 75 res/lang/de.bin
75 res/lang/en.bin 76 res/lang/en.bin
76 res/lang/eo.bin 77 res/lang/eo.bin
diff --git a/Depends.cmake b/Depends.cmake
index c6e4495f..d7031035 100644
--- a/Depends.cmake
+++ b/Depends.cmake
@@ -7,9 +7,42 @@ find_package (PkgConfig)
7find_program (MESON_EXECUTABLE meson DOC "Meson build system") 7find_program (MESON_EXECUTABLE meson DOC "Meson build system")
8find_program (NINJA_EXECUTABLE ninja DOC "Ninja build tool") 8find_program (NINJA_EXECUTABLE ninja DOC "Ninja build tool")
9include (ExternalProject) 9include (ExternalProject)
10
11set (_dependsToBuild) 10set (_dependsToBuild)
12 11
12if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/CMakeLists.txt)
13 set (INSTALL_THE_FOUNDATION YES)
14 find_package (the_Foundation 1.0.1 REQUIRED)
15else ()
16 if (EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/.git)
17 # the_Foundation is checked out as a submodule, make sure it's up to date.
18 find_package (Git)
19 if (GIT_FOUND)
20 execute_process (
21 COMMAND ${GIT_EXECUTABLE} submodule update
22 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
23 OUTPUT_VARIABLE subout
24 OUTPUT_STRIP_TRAILING_WHITESPACE
25 )
26 if (subout)
27 message (FATAL_ERROR "'lib/the_Foundation' Git submodule has been updated, please re-run CMake.\n")
28 endif ()
29 endif ()
30 endif ()
31 set (INSTALL_THE_FOUNDATION OFF)
32 set (TFDN_STATIC_LIBRARY ON CACHE BOOL "")
33 set (TFDN_ENABLE_INSTALL OFF CACHE BOOL "")
34 set (TFDN_ENABLE_TESTS OFF CACHE BOOL "")
35 set (TFDN_ENABLE_WEBREQUEST OFF CACHE BOOL "")
36 add_subdirectory (lib/the_Foundation)
37 add_library (the_Foundation::the_Foundation ALIAS the_Foundation)
38 if (NOT OPENSSL_FOUND)
39 message (FATAL_ERROR "Lagrange requires OpenSSL for TLS. Please check if pkg-config can find 'openssl'.")
40 endif ()
41 if (NOT ZLIB_FOUND)
42 message (FATAL_ERROR "Lagrange requires zlib for reading compressed archives. Please check if pkg-config can find 'zlib'.")
43 endif ()
44endif ()
45
13if (ENABLE_HARFBUZZ AND EXISTS ${CMAKE_SOURCE_DIR}/lib/harfbuzz/CMakeLists.txt) 46if (ENABLE_HARFBUZZ AND EXISTS ${CMAKE_SOURCE_DIR}/lib/harfbuzz/CMakeLists.txt)
14 # Find HarfBuzz with pkg-config. 47 # Find HarfBuzz with pkg-config.
15 if (NOT ENABLE_HARFBUZZ_MINIMAL AND PKG_CONFIG_FOUND) 48 if (NOT ENABLE_HARFBUZZ_MINIMAL AND PKG_CONFIG_FOUND)
@@ -112,40 +145,6 @@ endif ()
112 145
113add_custom_target (ext-deps DEPENDS ${_dependsToBuild}) 146add_custom_target (ext-deps DEPENDS ${_dependsToBuild})
114 147
115if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/CMakeLists.txt)
116 set (INSTALL_THE_FOUNDATION YES)
117 find_package (the_Foundation 1.0.0 REQUIRED)
118else ()
119 if (EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/.git)
120 # the_Foundation is checked out as a submodule, make sure it's up to date.
121 find_package (Git)
122 if (GIT_FOUND)
123 execute_process (
124 COMMAND ${GIT_EXECUTABLE} submodule update
125 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
126 OUTPUT_VARIABLE subout
127 OUTPUT_STRIP_TRAILING_WHITESPACE
128 )
129 if (subout)
130 message (FATAL_ERROR "'lib/the_Foundation' Git submodule has been updated, please re-run CMake.\n")
131 endif ()
132 endif ()
133 endif ()
134 set (INSTALL_THE_FOUNDATION OFF)
135 set (TFDN_STATIC_LIBRARY ON CACHE BOOL "")
136 set (TFDN_ENABLE_INSTALL OFF CACHE BOOL "")
137 set (TFDN_ENABLE_TESTS OFF CACHE BOOL "")
138 set (TFDN_ENABLE_WEBREQUEST OFF CACHE BOOL "")
139 add_subdirectory (lib/the_Foundation)
140 add_library (the_Foundation::the_Foundation ALIAS the_Foundation)
141 if (NOT OPENSSL_FOUND)
142 message (FATAL_ERROR "Lagrange requires OpenSSL for TLS. Please check if pkg-config can find 'openssl'.")
143 endif ()
144 if (NOT ZLIB_FOUND)
145 message (FATAL_ERROR "Lagrange requires zlib for reading compressed archives. Please check if pkg-config can find 'zlib'.")
146 endif ()
147endif ()
148
149if (ENABLE_SPARKLE) 148if (ENABLE_SPARKLE)
150 # macOS only. 149 # macOS only.
151 add_library (sparkle INTERFACE) 150 add_library (sparkle INTERFACE)
diff --git a/po/compile.py b/po/compile.py
index f046ca96..adf5a403 100755
--- a/po/compile.py
+++ b/po/compile.py
@@ -4,8 +4,8 @@
4 4
5import os, sys 5import os, sys
6 6
7BUILD_LANGS = [ 7BUILD_LANGS = [ 'en', # base strings
8 'en', # base strings 8 'cs',
9 'de', 9 'de',
10 'eo', 10 'eo',
11 'es', 11 'es',
@@ -35,6 +35,9 @@ ESCAPES = {
35 't': '\t', 35 't': '\t',
36 'v': '\v', 36 'v': '\v',
37} 37}
38missing_count = {}
39for lang in BUILD_LANGS:
40 missing_count[lang] = 0
38 41
39if '--new' in sys.argv: 42if '--new' in sys.argv:
40 MODE = 'new' 43 MODE = 'new'
@@ -122,6 +125,7 @@ if MODE == 'compile':
122 for src in os.listdir('.'): 125 for src in os.listdir('.'):
123 if src.endswith('.po') and src.split('.')[0] in BUILD_LANGS: 126 if src.endswith('.po') and src.split('.')[0] in BUILD_LANGS:
124 # Make a binary blob with strings sorted by ID. 127 # Make a binary blob with strings sorted by ID.
128 lang_id = src[:-3]
125 have_ids = set() 129 have_ids = set()
126 compiled = bytes() 130 compiled = bytes()
127 lang = parse_po(src) 131 lang = parse_po(src)
@@ -130,11 +134,16 @@ if MODE == 'compile':
130 # Take missing strings from the base language. 134 # Take missing strings from the base language.
131 for msg_id in BASE_STRINGS: 135 for msg_id in BASE_STRINGS:
132 if msg_id not in have_ids and not msg_id[:-2] in PLURALS: 136 if msg_id not in have_ids and not msg_id[:-2] in PLURALS:
133 print('%10s' % src, 'missing:', msg_id) 137 #print('%10s' % src, 'missing:', msg_id)
138 missing_count[lang_id] += 1
134 lang.append((msg_id, BASE_STRINGS[msg_id])) 139 lang.append((msg_id, BASE_STRINGS[msg_id]))
135 for msg_id, msg_str in sorted(lang): 140 for msg_id, msg_str in sorted(lang):
136 compiled += compile_string(msg_id, msg_str) 141 compiled += compile_string(msg_id, msg_str)
137 open(f'../res/lang/{src[:-3]}.bin', 'wb').write(compiled) 142 open(f'../res/lang/{lang_id}.bin', 'wb').write(compiled)
143 # Show statistics.
144 for lang_id in missing_count:
145 if missing_count[lang_id] > 0:
146 print('%7s: %4d missing' % (lang_id, missing_count[lang_id]))
138 147
139elif MODE == 'new': 148elif MODE == 'new':
140 messages = parse_po('en.po') 149 messages = parse_po('en.po')
diff --git a/po/cs.po b/po/cs.po
index 0f8b3d4b..c94703b8 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-11 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"
@@ -297,16 +297,16 @@ msgstr "Hz"
297#, c-format 297#, c-format
298msgid "feeds.list.counts" 298msgid "feeds.list.counts"
299msgid_plural "feeds.list.counts.n" 299msgid_plural "feeds.list.counts.n"
300msgstr[0] "Odebíráte %z kanál, který obsahuje %%.\n" 300msgstr[0] "Odebíráte %u kanál, který obsahuje %%s.\n"
301msgstr[1] "Odebíráte %z kanály, které obsahují %%.\n" 301msgstr[1] "Odebíráte %u kanály, které obsahují %%s.\n"
302msgstr[2] "Odebíráte %z kanálů, které obsahují %%.\n" 302msgstr[2] "Odebíráte %u kanálů, které obsahují %%s.\n"
303 303
304#, c-format 304#, c-format
305msgid "feeds.list.entrycount" 305msgid "feeds.list.entrycount"
306msgid_plural "feeds.list.entrycount.n" 306msgid_plural "feeds.list.entrycount.n"
307msgstr[0] "celkem %zu položka" 307msgstr[0] "celkem %u položka"
308msgstr[1] "celkem %zu položky" 308msgstr[1] "celkem %u položky"
309msgstr[2] "celkem %zu položek" 309msgstr[2] "celkem %u položek"
310 310
311#, c-format 311#, c-format
312msgid "minutes.ago" 312msgid "minutes.ago"
@@ -382,7 +382,7 @@ msgstr "Ukázat kanály"
382 382
383# Used in the View menu on macOS. Shows sidebar and switches sidebar tab. 383# Used in the View menu on macOS. Shows sidebar and switches sidebar tab.
384msgid "menu.show.outline" 384msgid "menu.show.outline"
385msgstr "Ukázat obrys stránky" 385msgstr "Ukázat rozložení stránky"
386 386
387msgid "menu.back" 387msgid "menu.back"
388msgstr "Jít zpět" 388msgstr "Jít zpět"
@@ -456,8 +456,8 @@ msgstr "KB"
456msgid "num.bytes" 456msgid "num.bytes"
457msgid_plural "num.bytes.n" 457msgid_plural "num.bytes.n"
458msgstr[0] "Jeden bajt" 458msgstr[0] "Jeden bajt"
459msgstr[1] "%zu bajty" 459msgstr[1] "%u bajty"
460msgstr[2] "%zu bajtů" 460msgstr[2] "%u bajtů"
461 461
462# strftime() formatted 462# strftime() formatted
463#, c-format 463#, c-format
@@ -510,14 +510,14 @@ msgid "dlg.history.clear"
510msgstr "Vymazat historii" 510msgstr "Vymazat historii"
511 511
512msgid "heading.confirm.bookmarks.delete" 512msgid "heading.confirm.bookmarks.delete"
513msgstr "VYMAZAT ZÁLOŽKY" 513msgstr "ODSTRANIT ZÁLOŽKY"
514 514
515#, c-format 515#, c-format
516msgid "dlg.bookmarks.delete" 516msgid "dlg.bookmarks.delete"
517msgid_plural "dlg.bookmarks.delete.n" 517msgid_plural "dlg.bookmarks.delete.n"
518msgstr[0] "Vymazat záložku" 518msgstr[0] "Odstranit záložku"
519msgstr[1] "Vymazat %u záložek" 519msgstr[1] "Odstranit %u záložek"
520msgstr[2] "Vymazat %u záložky" 520msgstr[2] "Odstranit %u záložky"
521 521
522msgid "bookmark.tag.home" 522msgid "bookmark.tag.home"
523msgstr "Nastavit jako domovskou stránku" 523msgstr "Nastavit jako domovskou stránku"
@@ -575,9 +575,9 @@ msgstr "Opravdu chcete vymazat historii všech navštívených stránek?"
575#, c-format 575#, c-format
576msgid "dlg.confirm.bookmarks.delete" 576msgid "dlg.confirm.bookmarks.delete"
577msgid_plural "dlg.confirm.bookmarks.delete.n" 577msgid_plural "dlg.confirm.bookmarks.delete.n"
578msgstr[0] "Opravdu chcete smazat tu záložku v této složce?" 578msgstr[0] "Opravdu chcete odstranit tu záložku v této složce?"
579msgstr[1] "Opravdu chcete smazat všech %u záložek v této složce?" 579msgstr[1] "Opravdu chcete odstranit všech %u záložek v této složce?"
580msgstr[2] "Opravdu chcete smazat všechny %u záložky v této složce?" 580msgstr[2] "Opravdu chcete odstranit všechny %u záložky v této složce?"
581 581
582msgid "bookmark.tag.remote" 582msgid "bookmark.tag.remote"
583msgstr "Použít jako zdroj záložek" 583msgstr "Použít jako zdroj záložek"
@@ -610,8 +610,8 @@ msgstr "Používá se na této stránce"
610msgid "ident.usedonurls" 610msgid "ident.usedonurls"
611msgid_plural "ident.usedonurls.n" 611msgid_plural "ident.usedonurls.n"
612msgstr[0] "Používá se na jedné adrese URL" 612msgstr[0] "Používá se na jedné adrese URL"
613msgstr[1] "Používá se na %zu adresách URL" 613msgstr[1] "Používá se na %u adresách URL"
614msgstr[2] "Používá se na %zu adresách URL" 614msgstr[2] "Používá se na %u adresách URL"
615 615
616msgid "ident.temporary" 616msgid "ident.temporary"
617msgstr "Dočasná" 617msgstr "Dočasná"
@@ -803,18 +803,18 @@ msgstr "Stránka projektu…"
803 803
804msgid "num.fonts" 804msgid "num.fonts"
805msgid_plural "num.fonts.n" 805msgid_plural "num.fonts.n"
806msgstr[0] "%zu písmo" 806msgstr[0] "%u písmo"
807msgstr[1] "%zu písma" 807msgstr[1] "%u písma"
808msgstr[2] "%zu písem" 808msgstr[2] "%u písem"
809 809
810msgid "menu.fonts" 810msgid "menu.fonts"
811msgstr "Spravovat písma…" 811msgstr "Spravovat písma…"
812 812
813msgid "num.files" 813msgid "num.files"
814msgid_plural "num.files.n" 814msgid_plural "num.files.n"
815msgstr[0] "%zu soubor" 815msgstr[0] "%u soubor"
816msgstr[1] "%zu soubory" 816msgstr[1] "%u soubory"
817msgstr[2] "%zu souborů" 817msgstr[2] "%u souborů"
818 818
819msgid "ident.use" 819msgid "ident.use"
820msgstr "Používat na této stránce" 820msgstr "Používat na této stránce"
@@ -1191,3 +1191,944 @@ msgstr "Slovenština"
1191 1191
1192msgid "keys.upload" 1192msgid "keys.upload"
1193msgstr "Nahrát stránku pomocí Titanu" 1193msgstr "Nahrát stránku pomocí Titanu"
1194
1195msgid "error.proxy.msg"
1196msgstr ""
1197"Požadavek pomocí proxy selhal, protože server nebyl schopen utvořit spojení "
1198"s vzdáleným hostitelem. Je možné, že existují problémy s konektivitou."
1199
1200msgid "error.proxyrefusal.msg"
1201msgstr ""
1202"Váš požadavek byl pro zdroj na doméně, která není obsluhována tímto serverem "
1203"a ten server nepřijímá proxy požadavky."
1204
1205msgid "heading.bookmark.add"
1206msgstr "PŘIDAT ZÁLOŽKU"
1207
1208msgid "heading.bookmark.edit"
1209msgstr "UPRAVIT ZÁLOŽKU"
1210
1211msgid "dlg.bookmark.save"
1212msgstr "Uložit záložku"
1213
1214msgid "dlg.bookmark.title"
1215msgstr "Název:"
1216
1217msgid "dlg.bookmark.tags"
1218msgstr "Značení:"
1219
1220msgid "dlg.newident.notsaved"
1221msgstr "není uložena na disk"
1222
1223msgid "dlg.addfolder.defaulttitle"
1224msgstr "Nová složka"
1225
1226msgid "dlg.addfolder.prompt"
1227msgstr "Zadejte jméno nové složky:"
1228
1229msgid "heading.addfolder"
1230msgstr "PŘIDAT SLOŽKU"
1231
1232msgid "dlg.bookmark.url"
1233msgstr "URL:"
1234
1235msgid "heading.prefs.certs"
1236msgstr "CERTIFIKÁTY"
1237
1238# used on mobile
1239msgid "heading.settings"
1240msgstr "NASTAVENÍ"
1241
1242msgid "heading.prefs.uitheme"
1243msgstr "BARVY ROZHRANÍ"
1244
1245msgid "prefs.searchurl"
1246msgstr "URL vyhledávání:"
1247
1248msgid "prefs.hoverlink"
1249msgstr "Ukázat URL po najetí kurzorem:"
1250
1251msgid "prefs.centershort"
1252msgstr "Svislé vystředění:"
1253
1254msgid "prefs.retainwindow"
1255msgstr "Zachovat umístění:"
1256
1257msgid "prefs.pinsplit.none"
1258msgstr "Žádné"
1259
1260# Font to use for headings and body when Monospace body is enabled.
1261msgid "prefs.font.monodoc"
1262msgstr "Neproporcionální písmo:"
1263
1264msgid "prefs.biglede"
1265msgstr "Velký první odstavec:"
1266
1267msgid "prefs.linewidth.normal"
1268msgstr "Normální"
1269
1270msgid "prefs.linewidth"
1271msgstr "Šířka textu:"
1272
1273msgid "keys.tab.new"
1274msgstr "Nová karta"
1275
1276msgid "keys.split.item"
1277msgstr "Nabídka rozpůleného pohledu:"
1278
1279msgid "error.tls.msg"
1280msgstr "Nepodařilo se komunikovat se serverem."
1281
1282msgid "error.tls"
1283msgstr "Selhání sítě/TLS"
1284
1285msgid "error.unavail"
1286msgstr "Server nedostupný"
1287
1288msgid "error.cgi"
1289msgstr "CGI chyba"
1290
1291msgid "error.proxy"
1292msgstr "Chyba proxy"
1293
1294msgid "error.permanent"
1295msgstr "Trvalé selhání"
1296
1297msgid "error.permanent.msg"
1298msgstr "Váš požadavek selhal a selže i v budoucnosti pokud jej zopakujete."
1299
1300msgid "error.notfound"
1301msgstr "Nenalezen"
1302
1303msgid "error.gone"
1304msgstr "Fuč"
1305
1306msgid "error.badrequest"
1307msgstr "Špatný požadavek"
1308
1309#, c-format
1310msgid "archive.summary"
1311msgid_plural "archive.summary.n"
1312msgstr[0] ""
1313"Tento archiv obsahuje %u soubor a jeho zkomprimovaná velikost je %.1f MB."
1314msgstr[1] ""
1315"Tento archiv obsahuje %u soubory a jeho zkomprimovaná velikost je %.1f MB."
1316msgstr[2] ""
1317"Tento archiv obsahuje %u souborů a jeho zkomprimovaná velikost je %.1f MB."
1318
1319msgid "keys.link.modkey"
1320msgstr "Otevřít odkaz pomocí modifikační klávesy"
1321
1322msgid "keys.link.homerow.newtab"
1323msgstr "Otevírat odkazy v nové kartě pomocí kláves na kterých spočívají prsty"
1324
1325msgid "keys.link.homerow.hover"
1326msgstr "Najet na odkaz pomocí kláves na kterých spočívají prsty"
1327
1328msgid "lang.isv"
1329msgstr "Interslavic"
1330
1331msgid "lang.tok"
1332msgstr "Toki Pona"
1333
1334msgid "dlg.newident.rsa.selfsign"
1335msgstr "Vytváří se vlastně podepsaný 2048-bitový RSA certifikát."
1336
1337msgid "hint.newident.date"
1338msgstr "RRRR nebo RRRR-MM-DD"
1339
1340msgid "hint.newident.optional"
1341msgstr "volitelný"
1342
1343msgid "dlg.newident.until"
1344msgstr "Platná do:"
1345
1346msgid "keys.fullscreen"
1347msgstr "Zapnout/vypnout zobrazení na celou obrazovky"
1348
1349msgid "dlg.newident.commonname"
1350msgstr "Obecné jméno:"
1351
1352msgid "dlg.newident.temp"
1353msgstr "Dočasná:"
1354
1355msgid "dlg.newident.scope"
1356msgstr "Použita na:"
1357
1358msgid "dlg.newident.scope.domain"
1359msgstr "Aktuální doméně"
1360
1361msgid "dlg.newident.scope.page"
1362msgstr "Aktuální stránce"
1363
1364msgid "dlg.newident.scope.none"
1365msgstr "Nepoužívána"
1366
1367msgid "dlg.newident.email"
1368msgstr "Email:"
1369
1370msgid "dlg.newident.userid"
1371msgstr "ID uživatele:"
1372
1373msgid "dlg.newident.domain"
1374msgstr "Doména:"
1375
1376msgid "dlg.newident.org"
1377msgstr "Organizace:"
1378
1379msgid "keys.tab.close"
1380msgstr "Zavřít kartu"
1381
1382msgid "dlg.newident.country"
1383msgstr "Stát:"
1384
1385msgid "dlg.newident.more"
1386msgstr "Více…"
1387
1388msgid "heading.newident.missing"
1389msgstr "CHYBĚJÍCÍ INFORMACE"
1390
1391msgid "dlg.newindent.missing.commonname"
1392msgstr "\"Obecné jméno\" musí být specifikováno."
1393
1394msgid "heading.newident.date.bad"
1395msgstr "NEPLATNÉ DATUM"
1396
1397msgid "dlg.newident.date.past"
1398msgstr "Datum vypršení platnosti musí být v budoucnosti."
1399
1400msgid "dlg.newident.date.example"
1401msgstr ""
1402"Zkontrolujte prosím datum konce platnosti. Příklady:\n"
1403"• 2030\n"
1404"• 2025-06-30\n"
1405"• 2021-12-31 23:59:59"
1406
1407msgid "keys.split.menu"
1408msgstr "Nastavit režim rozpůleného okna"
1409
1410msgid "heading.feedcfg"
1411msgstr "NASTAVENÍ KANÁLU"
1412
1413msgid "heading.subscribe"
1414msgstr "ODEBÍRAT STRÁNKU"
1415
1416msgid "dlg.feed.title"
1417msgstr "Název:"
1418
1419msgid "dlg.feed.entrytype"
1420msgstr "Typ zápisu:"
1421
1422msgid "dlg.feed.type.gemini"
1423msgstr "YYYY-MM-DD odkazy"
1424
1425msgid "keys.split.next"
1426msgstr "Přepnout zaměření na následující polovinu"
1427
1428# tab button
1429msgid "heading.prefs.interface"
1430msgstr "Rozhraní"
1431
1432# tab button
1433msgid "heading.prefs.keys"
1434msgstr "Klávesy"
1435
1436# tab button
1437msgid "heading.prefs.network"
1438msgstr "Síť"
1439
1440msgid "heading.prefs.paragraph"
1441msgstr "ODSTAVEC"
1442
1443msgid "heading.prefs.pagecontent"
1444msgstr "BARVY STRÁNKY"
1445
1446msgid "heading.prefs.proxies"
1447msgstr "PROXY"
1448
1449msgid "heading.prefs.scrolling"
1450msgstr "POSOUVÁNÍ STRÁNKY"
1451
1452msgid "heading.prefs.sizing"
1453msgstr "DIMENZOVÁNÍ"
1454
1455msgid "heading.prefs.widelayout"
1456msgstr "ŠIROKÉ ROZLOŽENÍ"
1457
1458# tab button
1459msgid "heading.prefs.style"
1460msgstr "Styl"
1461
1462# tab button
1463msgid "heading.prefs.userinterface"
1464msgstr "Rozhraní"
1465
1466msgid "prefs.downloads"
1467msgstr "Složka stažených souborů:"
1468
1469msgid "prefs.collapsepreonload"
1470msgstr "Smrštit předformátovaný text:"
1471
1472msgid "prefs.bookmarks.addbottom"
1473msgstr "Přidat záložky ke spodku:"
1474
1475# User preference that controls whether index.gmi pages get automatically opened when browsing the contents of a directory inside a compressed archive.
1476msgid "prefs.archive.openindex"
1477msgstr "Otevírat archivní indexy:"
1478
1479msgid "prefs.pinsplit.left"
1480msgstr "Levé karty"
1481
1482msgid "prefs.pinsplit.right"
1483msgstr "Pravé karty"
1484
1485msgid "prefs.pinsplit"
1486msgstr "Přišpendlení v rozpůleném pohledu:"
1487
1488msgid "prefs.smoothscroll"
1489msgstr "Plynulé posouvání:"
1490
1491msgid "prefs.scrollspeed.keyboard"
1492msgstr "Rychlost posouvání klávesnicí:"
1493
1494msgid "prefs.scrollspeed.mouse"
1495msgstr "Rychlost posouvání myší:"
1496
1497msgid "prefs.imageloadscroll"
1498msgstr "Načítat obrázky při posuvu:"
1499
1500msgid "prefs.hidetoolbarscroll"
1501msgstr "Skrýt nástrojovou lištu při posuvu:"
1502
1503msgid "prefs.ostheme"
1504msgstr "Použít systémové téma:"
1505
1506msgid "prefs.theme.black"
1507msgstr "Černé"
1508
1509msgid "prefs.theme.dark"
1510msgstr "Tmavé"
1511
1512msgid "prefs.theme.light"
1513msgstr "Světlé"
1514
1515msgid "prefs.theme.white"
1516msgstr "Bílé"
1517
1518msgid "prefs.accent"
1519msgstr "Doplňková barva:"
1520
1521msgid "prefs.accent.teal"
1522msgstr "Špinavě modrá"
1523
1524msgid "prefs.accent.orange"
1525msgstr "Oranžová"
1526
1527msgid "prefs.uilang"
1528msgstr "Jazyk:"
1529
1530msgid "prefs.doctheme.name.sepia"
1531msgstr "Sépiové"
1532
1533msgid "prefs.imagestyle"
1534msgstr "Zbarvit obrázky:"
1535
1536msgid "prefs.imagestyle.original"
1537msgstr "Nijak"
1538
1539msgid "prefs.imagestyle.grayscale"
1540msgstr "Černobíle"
1541
1542# Abbrevation: background-to-foreground
1543msgid "prefs.imagestyle.bgfg"
1544msgstr "Pozadí do popředí"
1545
1546msgid "prefs.imagestyle.text"
1547msgstr "Do barvy textu"
1548
1549msgid "prefs.imagestyle.preformat"
1550msgstr "Do barvy předformátovaného textu"
1551
1552msgid "prefs.font.ui"
1553msgstr "Rozhraní:"
1554
1555msgid "prefs.font.heading"
1556msgstr "Nadpisy:"
1557
1558msgid "prefs.font.body"
1559msgstr "Tělo:"
1560
1561msgid "prefs.font.mono"
1562msgstr "Předformátovaný text:"
1563
1564msgid "prefs.font"
1565msgstr "Písmo těla:"
1566
1567msgid "prefs.mono"
1568msgstr "Používat neproporcionální písmo pro tělo:"
1569
1570msgid "prefs.mono.gemini"
1571msgstr "Gemini"
1572
1573msgid "prefs.linewidth.fill"
1574msgstr "Vyplnit"
1575
1576msgid "prefs.quoteicon.icon"
1577msgstr "Ikona \""
1578
1579msgid "prefs.linespacing"
1580msgstr "Rozestup mezi řádky:"
1581
1582msgid "prefs.quoteicon"
1583msgstr "Ukazatel citátu:"
1584
1585msgid "prefs.decodeurls"
1586msgstr "Dekódovat URL adresy:"
1587
1588msgid "prefs.memorysize"
1589msgstr "Velikost paměti:"
1590
1591msgid "prefs.cachesize"
1592msgstr "Velikost mezipaměti:"
1593
1594msgid "prefs.ca.file"
1595msgstr "Soubor CA:"
1596
1597msgid "prefs.ca.path"
1598msgstr "Cesta k CA:"
1599
1600msgid "prefs.proxy.gemini"
1601msgstr "Proxy pro Gemini:"
1602
1603msgid "prefs.proxy.gopher"
1604msgstr "Proxy pro Gopher:"
1605
1606msgid "prefs.proxy.http"
1607msgstr "Proxy pro HTTP:"
1608
1609msgid "menu.binding.reset"
1610msgstr "Obnovit výchozí"
1611
1612msgid "menu.binding.clear"
1613msgstr "Odstranit"
1614
1615msgid "archive.exit"
1616msgstr "Odejít z archivu"
1617
1618msgid "dir.empty"
1619msgstr "Tato složka je prázdná."
1620
1621#, c-format
1622msgid "dir.summary"
1623msgid_plural "dir.summary.n"
1624msgstr[0] "Tato složka obsahuje %u položku."
1625msgstr[1] "Tato složka obsahuje %u položky."
1626msgstr[2] "Tato složka obsahuje %u položek."
1627
1628msgid "keys.top"
1629msgstr "Přeskočit na začátek"
1630
1631msgid "keys.bottom"
1632msgstr "Přeskočit na konec"
1633
1634msgid "keys.scroll.up"
1635msgstr "Posunout nahoru"
1636
1637msgid "keys.scroll.down"
1638msgstr "Posunout dolů"
1639
1640msgid "keys.scroll.halfpage.up"
1641msgstr "Posunout nahoru o půl stránky"
1642
1643msgid "keys.scroll.halfpage.down"
1644msgstr "Posunout dolů o půl stránky"
1645
1646msgid "keys.scroll.page.down"
1647msgstr "Posunout stránku nahoru"
1648
1649msgid "keys.scroll.page.up"
1650msgstr "Posunout stránku dolů"
1651
1652msgid "keys.back"
1653msgstr "Jít zpět"
1654
1655msgid "keys.forward"
1656msgstr "Jít vpřed"
1657
1658msgid "keys.parent"
1659msgstr "Přejít na rodičovský adresář"
1660
1661msgid "keys.root"
1662msgstr "Přejít na kořen kapsule"
1663
1664msgid "keys.reload"
1665msgstr "Obnovit stránku"
1666
1667msgid "error.badstatus.msg"
1668msgstr ""
1669"Server odpověděl se stavovým kódem, který není ve specifikaci protokolu "
1670"Gemini. Možná je z budoucnosti? Nebo prostě nefunguje."
1671
1672msgid "keys.link.homerow"
1673msgstr "Otevřít odkaz pomocí kláves na kterých spočívají prsty"
1674
1675msgid "keys.link.homerow.next"
1676msgstr "Následující sada kláves na kterých spočívají prsty"
1677
1678msgid "keys.bookmark.add"
1679msgstr "Přidat záložku"
1680
1681msgid "keys.bookmark.addfolder"
1682msgstr "Přidat složku záložek"
1683
1684msgid "keys.subscribe"
1685msgstr "Odebírat stránku"
1686
1687msgid "keys.findtext"
1688msgstr "Najít text na stránce"
1689
1690msgid "error.certexpired.msg"
1691msgstr ""
1692"Připojení k serveru bylo přerušeno, neboť platnost jeho TLS certifikátu "
1693"vypršela."
1694
1695msgid "error.certverify"
1696msgstr "Nedůvěryhodný server"
1697
1698msgid "error.unsupported.protocol.msg"
1699msgstr "Požadovaný protokol není podporovaný touto aplikací."
1700
1701msgid "error.temporary.msg"
1702msgstr ""
1703"Váš požadavek selhal, ale může uspět pokud to zkusíte znovu v budoucnosti."
1704
1705msgid "error.cgi.msg"
1706msgstr ""
1707"Chyba při dynamickém generování obsahu na serveru. Může to být způsobeno "
1708"nefunkčním softwarem na straně serveru."
1709
1710msgid "error.slowdown"
1711msgstr "Zpomalte"
1712
1713msgid "error.slowdown.msg"
1714msgstr "Server omezuje množství požadavků, které zpracuje. Počkejte prosím…"
1715
1716msgid "error.notfound.msg"
1717msgstr "Požadovaný zdroj v této chvíli nebylo možné nalézt."
1718
1719msgid "error.gone.msg"
1720msgstr "Požadovaný zdroj již není dostupný."
1721
1722msgid "error.proxyrefusal"
1723msgstr "Proxy požadavek byl odmítnut"
1724
1725msgid "error.badheader.msg"
1726msgstr ""
1727"Přijatá hlavička neodpovídá specifikaci protokolu Gemini. Možná server "
1728"nefunguje, nebo jste se pokusili kontaktovat ne-Gemini server."
1729
1730msgid "error.schemeredirect.msg"
1731msgstr ""
1732"Server se pokusil přesměrovat vás na URL, jehož schéma je jiné než schéma "
1733"počáteční URL. Zde je ten odkaz, aby jste jej mohli otevřít ručně je li to "
1734"vhodné."
1735
1736msgid "error.manyredirects.msg"
1737msgstr ""
1738"Je možné, že jste se ocitli v cyklu přesměrování. Následující URL je níže, "
1739"chcete-li pokračovat ručně."
1740
1741msgid "error.certverify.msg"
1742msgstr ""
1743"Připojení k serveru bylo zrušeno, protože jeho TLS certifikát se neshoduje s "
1744"tím, jemuž důvěřujeme. Zkontrolujte, zdali server neoznámil změnu "
1745"certifikátu. Pokud ne, je možné že zlomyslná třetí strana se vydává se "
1746"server k němuž se pokoušíte připojit.\n"
1747"\n"
1748"Tento certifikát můžete označit jako důvěryhodný v informacích o stránce."
1749
1750msgid "error.temporary"
1751msgstr "Dočasné selhání"
1752
1753msgid "error.unavail.msg"
1754msgstr "Server není dostupný kvůli přetížení nebo údržbě. Přijďte později."
1755
1756msgid "dlg.feed.type.headings"
1757msgstr "Nové nadpisy"
1758
1759msgid "dlg.feed.ignoreweb"
1760msgstr "Ignorovat HTTP(S) odkazy:"
1761
1762msgid "dlg.feed.save"
1763msgstr "Uložit nastavení"
1764
1765msgid "dlg.feed.sub"
1766msgstr "Odebírat"
1767
1768msgid "dlg.bookmark.icon"
1769msgstr "Ikona:"
1770
1771msgid "heading.bookmark.tags"
1772msgstr "SPECIÁLNÍ ZNAČENÍ"
1773
1774msgid "dlg.addfolder"
1775msgstr "Přidat složku"
1776
1777msgid "heading.prefs"
1778msgstr "PŘEDVOLBY"
1779
1780# tab button
1781msgid "heading.prefs.colors"
1782msgstr "Barvy"
1783
1784msgid "heading.prefs.fonts"
1785msgstr "Písma"
1786
1787# tab button
1788msgid "heading.prefs.general"
1789msgstr "Obecné"
1790
1791msgid "prefs.theme"
1792msgstr "Téma:"
1793
1794msgid "prefs.uiscale"
1795msgstr "Faktor velikosti rozhraní:"
1796
1797msgid "prefs.customframe"
1798msgstr "Vlastní rámeček okna:"
1799
1800msgid "prefs.returnkey"
1801msgstr "Chování klávesy Enter:"
1802
1803msgid "prefs.returnkey.linebreak"
1804msgstr "Zalomení stránky"
1805
1806msgid "prefs.returnkey.accept"
1807msgstr "Přijmout"
1808
1809msgid "prefs.animate"
1810msgstr "Animace:"
1811
1812msgid "prefs.sideicon"
1813msgstr "Ikona kapsule:"
1814
1815msgid "prefs.doctheme.dark"
1816msgstr "Temné téma:"
1817
1818msgid "prefs.doctheme.light"
1819msgstr "Světlé téma:"
1820
1821msgid "prefs.doctheme.name.colorfuldark"
1822msgstr "Barevná temné"
1823
1824msgid "prefs.doctheme.name.colorfullight"
1825msgstr "Barevné světlé"
1826
1827msgid "prefs.doctheme.name.black"
1828msgstr "Černé"
1829
1830msgid "prefs.doctheme.name.gray"
1831msgstr "Šedé"
1832
1833msgid "prefs.doctheme.name.white"
1834msgstr "Bílé"
1835
1836msgid "prefs.doctheme.name.highcontrast"
1837msgstr "Vysoký kontrast"
1838
1839msgid "prefs.saturation"
1840msgstr "Sytost:"
1841
1842msgid "prefs.mono.gopher"
1843msgstr "Gopher"
1844
1845msgid "prefs.boldlink"
1846msgstr "Tlusté odkazy:"
1847
1848msgid "prefs.boldlink.visited"
1849msgstr "Navštívené"
1850
1851# Interpretation: (Bold links) on dark (background).
1852msgid "prefs.boldlink.dark"
1853msgstr "V temném tématu"
1854
1855# Interpretation: (Bold links) on light (background).
1856msgid "prefs.boldlink.light"
1857msgstr "Ve světlém tématu"
1858
1859msgid "prefs.gemtext.ansi"
1860msgstr "Únikové znaky ANSI:"
1861
1862msgid "prefs.gemtext.ansi.fg"
1863msgstr "Barva popředí"
1864
1865msgid "prefs.gemtext.ansi.fontstyle"
1866msgstr "Styl písma"
1867
1868msgid "prefs.font.warnmissing"
1869msgstr "Varovat při chybějících znacích:"
1870
1871msgid "prefs.font.smooth"
1872msgstr "Vyhlazování:"
1873
1874msgid "prefs.quoteicon.line"
1875msgstr "Čára"
1876
1877msgid "prefs.plaintext.wrap"
1878msgstr "Zalamovat prostý text:"
1879
1880msgid "keys.zoom.in"
1881msgstr "Přiblížit"
1882
1883msgid "keys.zoom.out"
1884msgstr "Oddálit"
1885
1886msgid "keys.zoom.reset"
1887msgstr "Obnovit přiblížení"
1888
1889msgid "keys.tab.close.other"
1890msgstr "Zavřít ostatní karty"
1891
1892msgid "keys.tab.prev"
1893msgstr "Předchozí karta"
1894
1895msgid "keys.tab.next"
1896msgstr "Následující karta"
1897
1898msgid "keys.hoverurl"
1899msgstr "Zobrazit/skrýt URL při přejetí kurzorem"
1900
1901msgid "error.badstatus"
1902msgstr "Neznámý stavový kód"
1903
1904msgid "error.openfile"
1905msgstr "Nepodařilo se otevřít soubor"
1906
1907msgid "error.openfile.msg"
1908msgstr ""
1909"Požadovaný soubor neexistuje nebo je nedostupný. Prosím zkontrolujte adresu "
1910"souboru."
1911
1912msgid "error.badresource"
1913msgstr "Neplatný zdroj"
1914
1915msgid "error.badresource.msg"
1916msgstr "Požadovaný zdroj neexistuje."
1917
1918msgid "error.unsupported.media"
1919msgstr "Nepodporovaný typ obsahu"
1920
1921msgid "error.unsupported.media.msg"
1922msgstr "Přijatý obsah nelze zobrazit pomocí této aplikace."
1923
1924msgid "error.unsupported.protocol"
1925msgstr "Nepodporovaný protokol"
1926
1927msgid "error.badheader"
1928msgstr "Neplatná hlavička"
1929
1930msgid "error.badredirect"
1931msgstr "Neplatné přesměrování"
1932
1933msgid "error.badredirect.msg"
1934msgstr ""
1935"Server odpověděl s přesměrováním, ale neposkytl platnou konečnou URL. Možná "
1936"server nefunguje."
1937
1938msgid "error.schemeredirect"
1939msgstr "Schéma-měnící přesměrování"
1940
1941msgid "error.manyredirects"
1942msgstr "Příliš mnoho přesměrování"
1943
1944msgid "error.certexpired"
1945msgstr "Certifikát s vypršenou platností"
1946
1947msgid "lang.cs"
1948msgstr "Čeština"
1949
1950msgid "error.glyphs"
1951msgstr "Chybějící znaky"
1952
1953msgid "error.glyphs.msg"
1954msgstr ""
1955"Tato stránka nebude plně vykreslena, jelikož některé znaky chybí. Můžete "
1956"instalovat dodatečné písma aby jste to vyřešili."
1957
1958msgid "gempub.cover.viewlocal"
1959msgstr "Tuto Gempub knihu lze zobrazit pouze po tom co byla uložena lokálně."
1960
1961msgid "gempub.cover.untitled"
1962msgstr "Kniha beze jména"
1963
1964msgid "gempub.meta.revdate"
1965msgstr "Datum revize"
1966
1967msgid "gempub.meta.pub"
1968msgstr "Publikována"
1969
1970msgid "gempub.meta.pubdate"
1971msgstr "Datum publikace"
1972
1973msgid "gempub.meta.lang"
1974msgstr "Jazyk"
1975
1976msgid "gempub.meta.license"
1977msgstr "Licence"
1978
1979msgid "heading.fontpack.meta"
1980msgstr "Písma"
1981
1982msgid "fontpack.meta.notinstalled"
1983msgstr "Nenainstalován"
1984
1985msgid "fontpack.meta.disabled"
1986msgstr ", zakázán"
1987
1988#, c-format
1989msgid "fontpack.enable"
1990msgstr "Povolit \"%s\""
1991
1992#, c-format
1993msgid "fontpack.disable"
1994msgstr "Zakázat \"%s\""
1995
1996msgid "fontpack.export"
1997msgstr "Zobrazit šablonu fontpack.ini"
1998
1999#, c-format
2000msgid "fontpack.install"
2001msgstr "Instalovat \"%s\""
2002
2003#, c-format
2004msgid "fontpack.upgrade"
2005msgstr "Aktualizovat \"%s\" na verzi %d"
2006
2007#, c-format
2008msgid "fontpack.delete"
2009msgstr "Trvale odstranit \"%s\""
2010
2011msgid "heading.fontpack.delete"
2012msgstr "ODSTRANIT PÍSMOVÝ BALÍČEK"
2013
2014#, c-format
2015msgid "dlg.fontpack.delete.confirm"
2016msgstr "Chcete opravdu trvale odstranit písmový balíček \"%s\"?"
2017
2018msgid "dlg.fontpack.delete"
2019msgstr "Odstranit písmový balíček"
2020
2021msgid "fontpack.install.ttf"
2022msgstr "Instalovat TrueType písmo"
2023
2024msgid "fontpack.open.fontsdir"
2025msgstr "Otevřít složku uživatelských písem"
2026
2027msgid "truetype.help"
2028msgstr ""
2029"Lagrange se pokouší načíst všechny jednotlivé TrueType soubory, které jsou "
2030"zkopírovány do složky uživatelských písem."
2031
2032msgid "heading.dismiss.warning"
2033msgstr "PŘESTAT UKAZOVAT VAROVÁNÍ?"
2034
2035#, c-format
2036msgid "dlg.dismiss.ansi"
2037msgstr "Trvale přestat zobrazovat varování o emulaci terminálu na %s?"
2038
2039msgid "dlg.dismiss.warning"
2040msgstr "Přestat ukazovat varování"
2041
2042msgid "heading.fontpack.classic"
2043msgstr "STÁHNOUT PÍSMOVÝ BALÍČEK"
2044
2045msgid "dlg.fontpack.classic.msg"
2046msgstr ""
2047"Písma, které byly dříve přibaleny s aplikací jsou nyní dostupné odděleně. "
2048"Chtěli byste nyní stáhnout písmový balíček \"Klasická sada\"?"
2049
2050msgid "dlg.fontpack.classic"
2051msgstr "Stáhnout písmový balíček (25MB)"
2052
2053msgid "error.badrequest.msg"
2054msgstr "Server nepochopil váš požadavek."
2055
2056msgid "error.cert.needed"
2057msgstr "Certifikát vyžadován"
2058
2059msgid "error.cert.auth"
2060msgstr "Certifikát není autorizován"
2061
2062msgid "error.cert.auth.msg"
2063msgstr ""
2064"Předkládaný klientský certifikát je platný, ale není autorizován pro "
2065"přistupování k danému zdroji."
2066
2067msgid "error.cert.invalid"
2068msgstr "Neplatný certifikát"
2069
2070msgid "gempub.meta.version"
2071msgstr "Verze"
2072
2073msgid "error.ansi"
2074msgstr "Emulace terminálu"
2075
2076msgid "gempub.cover.image"
2077msgstr "Titulní obrázek"
2078
2079msgid "gempub.meta.author"
2080msgstr "Autor"
2081
2082msgid "heading.fontpack.meta.enabled"
2083msgstr "Povolené písmové balíčky"
2084
2085msgid "heading.fontpack.meta.disabled"
2086msgstr "Zakázané písmové balíčky"
2087
2088# Action label
2089msgid "fontpack.meta.viewfile"
2090msgstr "Zobrazit soubor"
2091
2092#, c-format
2093msgid "fontpack.meta.version"
2094msgstr "Verze %d"
2095
2096msgid "fontpack.meta.installed"
2097msgstr "Instalován"
2098
2099msgid "error.cert.needed.msg"
2100msgstr ""
2101"Přístup k vyžádanému zdroji vyžaduje, aby jste prokázali totožnost pomocí "
2102"klientského certifikátu."
2103
2104msgid "error.cert.invalid.msg"
2105msgstr ""
2106"Předkládanému klientskému certifikátu vypršela platnost nebo je neplatný."
2107
2108msgid "error.ansi.msg"
2109msgstr ""
2110"Tato stránka nemusí být správně vykreslena, používá totiž únikové znaky ANSI "
2111"ke stylování textu, což je jen částečně podporováno. Můžete se ji pokusit "
2112"zobrazit pomocí terminálového emulátoru."
2113
2114msgid "gempub.cover.view"
2115msgstr "Zobrazit Gempub obsah"
2116
2117msgid "fontpack.help"
2118msgstr ""
2119"Písmové balíčky v Lagrange jsou archivy ZIP, které obsahují sadu písmových "
2120"souborů a jejich příslušných konfiguračních parametrů. Po instalaci můžete "
2121"písma použít pro obsah dokumentu a v rozhraní. Aktivní písma se vybírají v "
2122"Předvolby > Písma."
2123
2124msgid "fontpack.open.aboutfonts"
2125msgstr "Zobrazit instalovaná písma"
2126
2127msgid "truetype.help.installed"
2128msgstr "Toto písmo je nainstalováno ve složce uživatelských písem."
2129
2130msgid "lang.hu"
2131msgstr "Maďarština"
2132
2133msgid "gempub.cover.aboutbook"
2134msgstr "O této knize"
diff --git a/po/en.po b/po/en.po
index 83dec03f..24fed59f 100644
--- a/po/en.po
+++ b/po/en.po
@@ -61,17 +61,18 @@ msgstr "Hz"
61msgid "feeds.list.title" 61msgid "feeds.list.title"
62msgstr "Feed entries" 62msgstr "Feed entries"
63 63
64# 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.
64#, c-format 65#, c-format
65msgid "feeds.list.counts" 66msgid "feeds.list.counts"
66msgid_plural "feeds.list.counts.n" 67msgid_plural "feeds.list.counts.n"
67msgstr[0] "You are subscribed to %zu feed that contains %%s.\n" 68msgstr[0] "You are subscribed to %u feed that contains %%s.\n"
68msgstr[1] "You are subscribed to %zu feeds that contain %%s.\n" 69msgstr[1] "You are subscribed to %u feeds that contain %%s.\n"
69 70
70#, c-format 71#, c-format
71msgid "feeds.list.entrycount" 72msgid "feeds.list.entrycount"
72msgid_plural "feeds.list.entrycount.n" 73msgid_plural "feeds.list.entrycount.n"
73msgstr[0] "a total of %zu entry" 74msgstr[0] "a total of %u entry"
74msgstr[1] "a total of %zu entries" 75msgstr[1] "a total of %u entries"
75 76
76msgid "feeds.list.refreshtime.now" 77msgid "feeds.list.refreshtime.now"
77msgstr "The latest refresh occurred just a moment ago." 78msgstr "The latest refresh occurred just a moment ago."
@@ -451,18 +452,18 @@ msgstr "KB"
451 452
452msgid "num.bytes" 453msgid "num.bytes"
453msgid_plural "num.bytes.n" 454msgid_plural "num.bytes.n"
454msgstr[0] "%zu byte" 455msgstr[0] "%u byte"
455msgstr[1] "%zu bytes" 456msgstr[1] "%u bytes"
456 457
457msgid "num.files" 458msgid "num.files"
458msgid_plural "num.files.n" 459msgid_plural "num.files.n"
459msgstr[0] "%zu file" 460msgstr[0] "%u file"
460msgstr[1] "%zu files" 461msgstr[1] "%u files"
461 462
462msgid "num.fonts" 463msgid "num.fonts"
463msgid_plural "num.fonts.n" 464msgid_plural "num.fonts.n"
464msgstr[0] "%zu font" 465msgstr[0] "%u font"
465msgstr[1] "%zu fonts" 466msgstr[1] "%u fonts"
466 467
467# strftime() formatted, split on two lines 468# strftime() formatted, split on two lines
468#, c-format 469#, c-format
@@ -599,8 +600,8 @@ msgstr "Not used"
599#, c-format 600#, c-format
600msgid "ident.usedonurls" 601msgid "ident.usedonurls"
601msgid_plural "ident.usedonurls.n" 602msgid_plural "ident.usedonurls.n"
602msgstr[0] "Used on %zu URL" 603msgstr[0] "Used on %u URL"
603msgstr[1] "Used on %zu URLs" 604msgstr[1] "Used on %u URLs"
604 605
605msgid "ident.temporary" 606msgid "ident.temporary"
606msgstr "Temporary" 607msgstr "Temporary"
@@ -1115,6 +1116,9 @@ msgstr "Spanish"
1115msgid "lang.es.mx" 1116msgid "lang.es.mx"
1116msgstr "Spanish (Mexico)" 1117msgstr "Spanish (Mexico)"
1117 1118
1119msgid "lang.cs"
1120msgstr "Czech"
1121
1118msgid "lang.sk" 1122msgid "lang.sk"
1119msgstr "Slovak" 1123msgstr "Slovak"
1120 1124
@@ -1596,8 +1600,8 @@ msgstr "Exit the archive"
1596#, c-format 1600#, c-format
1597msgid "archive.summary" 1601msgid "archive.summary"
1598msgid_plural "archive.summary.n" 1602msgid_plural "archive.summary.n"
1599msgstr[0] "This archive contains %zu item and its compressed size is %.1f MB." 1603msgstr[0] "This archive contains %u item and its compressed size is %.1f MB."
1600msgstr[1] "This archive contains %zu items and its compressed size is %.1f MB." 1604msgstr[1] "This archive contains %u items and its compressed size is %.1f MB."
1601 1605
1602msgid "dir.empty" 1606msgid "dir.empty"
1603msgstr "This directory is empty." 1607msgstr "This directory is empty."
@@ -1605,8 +1609,8 @@ msgstr "This directory is empty."
1605#, c-format 1609#, c-format
1606msgid "dir.summary" 1610msgid "dir.summary"
1607msgid_plural "dir.summary.n" 1611msgid_plural "dir.summary.n"
1608msgstr[0] "This directory contains %zu item." 1612msgstr[0] "This directory contains %u item."
1609msgstr[1] "This directory contains %zu items." 1613msgstr[1] "This directory contains %u items."
1610 1614
1611msgid "keys.top" 1615msgid "keys.top"
1612msgstr "Jump to top" 1616msgstr "Jump to top"
diff --git a/po/es.po b/po/es.po
index c8537b45..cc762216 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-10 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"
@@ -779,14 +779,14 @@ msgstr "Nueva pestaña"
779 779
780msgid "num.bytes" 780msgid "num.bytes"
781msgid_plural "num.bytes.n" 781msgid_plural "num.bytes.n"
782msgstr[0] "%zu byte" 782msgstr[0] "%u byte"
783msgstr[1] "%zu bytes" 783msgstr[1] "%u bytes"
784 784
785#, c-format 785#, c-format
786msgid "ident.usedonurls" 786msgid "ident.usedonurls"
787msgid_plural "ident.usedonurls.n" 787msgid_plural "ident.usedonurls.n"
788msgstr[0] "Usado en %zu URL" 788msgstr[0] "Usado en %u URL"
789msgstr[1] "Usado en %zu URLs" 789msgstr[1] "Usado en %u URLs"
790 790
791#, c-format 791#, c-format
792msgid "dlg.import.found" 792msgid "dlg.import.found"
@@ -1406,14 +1406,14 @@ msgstr "Entradas de las suscripciones"
1406#, c-format 1406#, c-format
1407msgid "feeds.list.counts" 1407msgid "feeds.list.counts"
1408msgid_plural "feeds.list.counts.n" 1408msgid_plural "feeds.list.counts.n"
1409msgstr[0] "Está suscrito a %zu suscripción que contiene %%s.\n" 1409msgstr[0] "Está suscrito a %u suscripción que contiene %%s.\n"
1410msgstr[1] "Está suscrito a %zu suscripciones que contienen %%s.\n" 1410msgstr[1] "Está suscrito a %u suscripciones que contienen %%s.\n"
1411 1411
1412#, c-format 1412#, c-format
1413msgid "feeds.list.entrycount" 1413msgid "feeds.list.entrycount"
1414msgid_plural "feeds.list.entrycount.n" 1414msgid_plural "feeds.list.entrycount.n"
1415msgstr[0] "un total de %zu entrada" 1415msgstr[0] "un total de %u entrada"
1416msgstr[1] "un total de %zu entradas" 1416msgstr[1] "un total de %u entradas"
1417 1417
1418msgid "feeds.list.refreshtime.now" 1418msgid "feeds.list.refreshtime.now"
1419msgstr "La última actualización ocurrió hace un momento." 1419msgstr "La última actualización ocurrió hace un momento."
@@ -1580,14 +1580,14 @@ msgstr "Salir del archivo"
1580#, c-format 1580#, c-format
1581msgid "archive.summary" 1581msgid "archive.summary"
1582msgid_plural "archive.summary.n" 1582msgid_plural "archive.summary.n"
1583msgstr[0] "Este archivo contiene %zu item y su tamaño comprimido es de %.1f MB." 1583msgstr[0] "Este archivo contiene %u item y su tamaño comprimido es de %.1f MB."
1584msgstr[1] "Este archivo contiene %zu items y su tamaño comprimido es de %.1f MB." 1584msgstr[1] "Este archivo contiene %u items y su tamaño comprimido es de %.1f MB."
1585 1585
1586#, c-format 1586#, c-format
1587msgid "dir.summary" 1587msgid "dir.summary"
1588msgid_plural "dir.summary.n" 1588msgid_plural "dir.summary.n"
1589msgstr[0] "Este directorio contiene %zu item." 1589msgstr[0] "Este directorio contiene %u item."
1590msgstr[1] "Este directorio contiene %zu items." 1590msgstr[1] "Este directorio contiene %u items."
1591 1591
1592msgid "keys.tab.close.other" 1592msgid "keys.tab.close.other"
1593msgstr "Cerrar otras pestañas" 1593msgstr "Cerrar otras pestañas"
@@ -2059,13 +2059,13 @@ msgstr "Administrar Fuentes…"
2059 2059
2060msgid "num.files" 2060msgid "num.files"
2061msgid_plural "num.files.n" 2061msgid_plural "num.files.n"
2062msgstr[0] "%zu archivo" 2062msgstr[0] "%u archivo"
2063msgstr[1] "%zu archivos" 2063msgstr[1] "%u archivos"
2064 2064
2065msgid "num.fonts" 2065msgid "num.fonts"
2066msgid_plural "num.fonts.n" 2066msgid_plural "num.fonts.n"
2067msgstr[0] "%zu fuente" 2067msgstr[0] "%u fuente"
2068msgstr[1] "%zu fuentes" 2068msgstr[1] "%u fuentes"
2069 2069
2070msgid "dlg.certwarn.title" 2070msgid "dlg.certwarn.title"
2071msgstr "Incidencia de Seguridad" 2071msgstr "Incidencia de Seguridad"
@@ -2129,3 +2129,9 @@ msgstr "BORRAR PAQUETE DE FUENTES"
2129 2129
2130msgid "lang.uk" 2130msgid "lang.uk"
2131msgstr "Ucraniano" 2131msgstr "Ucraniano"
2132
2133msgid "lang.cs"
2134msgstr "Checo"
2135
2136msgid "lang.hu"
2137msgstr "Húngaro"
diff --git a/po/fi.po b/po/fi.po
index 848bb836..eb2e2d6f 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -3,7 +3,7 @@ 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-02 23:51+0000\n" 6"PO-Revision-Date: 2021-11-06 04:44+0000\n"
7"Last-Translator: Weblate Admin <jaakko.keranen@iki.fi>\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"
@@ -388,8 +388,8 @@ msgstr "Ei käytössä"
388 388
389msgid "ident.usedonurls" 389msgid "ident.usedonurls"
390msgid_plural "ident.usedonurls.n" 390msgid_plural "ident.usedonurls.n"
391msgstr[0] "Käytössä %zu URL:ssa" 391msgstr[0] "Käytössä %u URL:ssa"
392msgstr[1] "Käytössä %zu URL:ssa" 392msgstr[1] "Käytössä %u URL:ssa"
393 393
394msgid "ident.temporary" 394msgid "ident.temporary"
395msgstr "Tilapäinen" 395msgstr "Tilapäinen"
@@ -1281,8 +1281,8 @@ msgstr "MUUT"
1281 1281
1282msgid "num.bytes" 1282msgid "num.bytes"
1283msgid_plural "num.bytes.n" 1283msgid_plural "num.bytes.n"
1284msgstr[0] "%zu tavu" 1284msgstr[0] "%u tavu"
1285msgstr[1] "%zu tavua" 1285msgstr[1] "%u tavua"
1286 1286
1287msgid "reload.never" 1287msgid "reload.never"
1288msgstr "Ei koskaan" 1288msgstr "Ei koskaan"
@@ -1324,8 +1324,8 @@ msgstr "Syötteiden artikkelit"
1324#, c-format 1324#, c-format
1325msgid "feeds.list.counts" 1325msgid "feeds.list.counts"
1326msgid_plural "feeds.list.counts.n" 1326msgid_plural "feeds.list.counts.n"
1327msgstr[0] "Olet tilannut %zu syötteen, joka sisältää %%s.\n" 1327msgstr[0] "Olet tilannut %u syötteen, joka sisältää %%s.\n"
1328msgstr[1] "Olet tilannut %zu syötettä, jotka sisältävät %%s.\n" 1328msgstr[1] "Olet tilannut %u syötettä, jotka sisältävät %%s.\n"
1329 1329
1330# Link download progress message. 1330# Link download progress message.
1331msgid "doc.fetching" 1331msgid "doc.fetching"
@@ -1373,8 +1373,8 @@ msgstr "Hz"
1373#, c-format 1373#, c-format
1374msgid "feeds.list.entrycount" 1374msgid "feeds.list.entrycount"
1375msgid_plural "feeds.list.entrycount.n" 1375msgid_plural "feeds.list.entrycount.n"
1376msgstr[0] "yhteensä %zu artikkelin" 1376msgstr[0] "yhteensä %u artikkelin"
1377msgstr[1] "yhteensä %zu artikkelia" 1377msgstr[1] "yhteensä %u artikkelia"
1378 1378
1379msgid "feeds.list.refreshtime.now" 1379msgid "feeds.list.refreshtime.now"
1380msgstr "Viimeinen päivitys tehtiin hetki sitten." 1380msgstr "Viimeinen päivitys tehtiin hetki sitten."
@@ -1538,8 +1538,8 @@ msgstr "Poistu arkistosta"
1538 1538
1539msgid "archive.summary" 1539msgid "archive.summary"
1540msgid_plural "archive.summary.n" 1540msgid_plural "archive.summary.n"
1541msgstr[0] "Tämä arkisto sisältää %zu tiedoston ja sen pakattu koko on %.1f Mt." 1541msgstr[0] "Tämä arkisto sisältää %u tiedoston ja sen pakattu koko on %.1f Mt."
1542msgstr[1] "Tämä arkisto sisältää %zu tiedostoa ja sen pakattu koko on %.1f Mt." 1542msgstr[1] "Tämä arkisto sisältää %u tiedostoa ja sen pakattu koko on %.1f Mt."
1543 1543
1544msgid "dir.empty" 1544msgid "dir.empty"
1545msgstr "Tämä hakemisto on tyhjä." 1545msgstr "Tämä hakemisto on tyhjä."
@@ -1551,8 +1551,8 @@ msgstr "Avaa arkistojen index-sivut:"
1551#, c-format 1551#, c-format
1552msgid "dir.summary" 1552msgid "dir.summary"
1553msgid_plural "dir.summary.n" 1553msgid_plural "dir.summary.n"
1554msgstr[0] "Tämä hakemisto sisältää %zu nimikkeen." 1554msgstr[0] "Tämä hakemisto sisältää %u nimikkeen."
1555msgstr[1] "Tämä hakemisto sisältää %zu nimikettä." 1555msgstr[1] "Tämä hakemisto sisältää %u nimikettä."
1556 1556
1557msgid "keys.tab.close.other" 1557msgid "keys.tab.close.other"
1558msgstr "Sulje muut välilehdet" 1558msgstr "Sulje muut välilehdet"
@@ -1978,13 +1978,13 @@ msgstr "Hallinnoi fontteja…"
1978 1978
1979msgid "num.files" 1979msgid "num.files"
1980msgid_plural "num.files.n" 1980msgid_plural "num.files.n"
1981msgstr[0] "%zu tiedosto" 1981msgstr[0] "%u tiedosto"
1982msgstr[1] "%zu tiedostoa" 1982msgstr[1] "%u tiedostoa"
1983 1983
1984msgid "num.fonts" 1984msgid "num.fonts"
1985msgid_plural "num.fonts.n" 1985msgid_plural "num.fonts.n"
1986msgstr[0] "%zu fontti" 1986msgstr[0] "%u fontti"
1987msgstr[1] "%zu fonttia" 1987msgstr[1] "%u fonttia"
1988 1988
1989msgid "bookmark.export.taginfo" 1989msgid "bookmark.export.taginfo"
1990msgstr "" 1990msgstr ""
@@ -2116,3 +2116,9 @@ msgstr ""
2116 2116
2117msgid "lang.uk" 2117msgid "lang.uk"
2118msgstr "Ukraina" 2118msgstr "Ukraina"
2119
2120msgid "lang.hu"
2121msgstr "Unkari"
2122
2123msgid "lang.cs"
2124msgstr "Tšekki"
diff --git a/po/gl.po b/po/gl.po
index ea1bb6f7..53ef9a25 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-10 04: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"
@@ -203,13 +203,13 @@ msgstr "Hz"
203 203
204# Used in about:feeds. 204# Used in about:feeds.
205msgid "feeds.list.title" 205msgid "feeds.list.title"
206msgstr "Entradas da fonte" 206msgstr "Artigos das Fontes"
207 207
208#, c-format 208#, c-format
209msgid "feeds.list.entrycount" 209msgid "feeds.list.entrycount"
210msgid_plural "feeds.list.entrycount.n" 210msgid_plural "feeds.list.entrycount.n"
211msgstr[0] "un total de %zu entrada" 211msgstr[0] "un total de %u entrada"
212msgstr[1] "un total de %zu entradas" 212msgstr[1] "un total de %u entradas"
213 213
214msgid "feeds.list.refreshtime.now" 214msgid "feeds.list.refreshtime.now"
215msgstr "A última actualización fíxose hai xusto un intre." 215msgstr "A última actualización fíxose hai xusto un intre."
@@ -355,7 +355,7 @@ msgid "macos.menu.bookmarks.bytime"
355msgstr "Lista por Data de creación" 355msgstr "Lista por Data de creación"
356 356
357msgid "menu.feeds.entrylist" 357msgid "menu.feeds.entrylist"
358msgstr "Mostrar entrada da Fonte" 358msgstr "Ver Artigos das Fontes"
359 359
360msgid "menu.preferences" 360msgid "menu.preferences"
361msgstr "Preferencias…" 361msgstr "Preferencias…"
@@ -501,8 +501,8 @@ msgstr "KB"
501 501
502msgid "num.bytes" 502msgid "num.bytes"
503msgid_plural "num.bytes.n" 503msgid_plural "num.bytes.n"
504msgstr[0] "%zu byte" 504msgstr[0] "%u byte"
505msgstr[1] "%zu bytes" 505msgstr[1] "%u bytes"
506 506
507# strftime() formatted 507# strftime() formatted
508#, c-format 508#, c-format
@@ -610,8 +610,8 @@ msgstr "Non utilizado"
610#, c-format 610#, c-format
611msgid "ident.usedonurls" 611msgid "ident.usedonurls"
612msgid_plural "ident.usedonurls.n" 612msgid_plural "ident.usedonurls.n"
613msgstr[0] "Utilizado en %zu URL" 613msgstr[0] "Utilizado en %u URL"
614msgstr[1] "Utilizado en %zu URLs" 614msgstr[1] "Utilizado en %u URLs"
615 615
616msgid "ident.temporary" 616msgid "ident.temporary"
617msgstr "Temporalmente" 617msgstr "Temporalmente"
@@ -1389,8 +1389,8 @@ msgstr "Xénero"
1389#, c-format 1389#, c-format
1390msgid "feeds.list.counts" 1390msgid "feeds.list.counts"
1391msgid_plural "feeds.list.counts.n" 1391msgid_plural "feeds.list.counts.n"
1392msgstr[0] "Estás subscrita a %zu fonte que contén %%s.\n" 1392msgstr[0] "Estás subscrita a %u fonte que contén %%s.\n"
1393msgstr[1] "Estás subscrita a %zu fontes que conteñen %%s.\n" 1393msgstr[1] "Estás subscrita a %u fontes que conteñen %%s.\n"
1394 1394
1395#, c-format 1395#, c-format
1396msgid "hours.ago" 1396msgid "hours.ago"
@@ -1532,8 +1532,8 @@ msgstr "Reter situación:"
1532#, c-format 1532#, c-format
1533msgid "archive.summary" 1533msgid "archive.summary"
1534msgid_plural "archive.summary.n" 1534msgid_plural "archive.summary.n"
1535msgstr[0] "Este arquivo contén %zu elemento e o seu tamaño comprimido é %.1f MB." 1535msgstr[0] "Este arquivo contén %u elemento e o seu tamaño comprimido é %.1f MB."
1536msgstr[1] "Este arquivo contén %zu elementos e o seu tamaño comprimido é %.1f MB." 1536msgstr[1] "Este arquivo contén %u elementos e o seu tamaño comprimido é %.1f MB."
1537 1537
1538msgid "dir.empty" 1538msgid "dir.empty"
1539msgstr "O directorio está baleiro." 1539msgstr "O directorio está baleiro."
@@ -1541,8 +1541,8 @@ msgstr "O directorio está baleiro."
1541#, c-format 1541#, c-format
1542msgid "dir.summary" 1542msgid "dir.summary"
1543msgid_plural "dir.summary.n" 1543msgid_plural "dir.summary.n"
1544msgstr[0] "O directorio contén %zu elemento." 1544msgstr[0] "O directorio contén %u elemento."
1545msgstr[1] "O directorio contén %zu elementos." 1545msgstr[1] "O directorio contén %u elementos."
1546 1546
1547msgid "keys.top" 1547msgid "keys.top"
1548msgstr "Ir arriba" 1548msgstr "Ir arriba"
@@ -1937,13 +1937,13 @@ msgstr "Esperanto"
1937 1937
1938msgid "num.files" 1938msgid "num.files"
1939msgid_plural "num.files.n" 1939msgid_plural "num.files.n"
1940msgstr[0] "%zu ficheiro" 1940msgstr[0] "%u ficheiro"
1941msgstr[1] "%zu ficheiros" 1941msgstr[1] "%u ficheiros"
1942 1942
1943msgid "num.fonts" 1943msgid "num.fonts"
1944msgid_plural "num.fonts.n" 1944msgid_plural "num.fonts.n"
1945msgstr[0] "%zu tipografía" 1945msgstr[0] "%u tipografía"
1946msgstr[1] "%zu tipografías" 1946msgstr[1] "%u tipografías"
1947 1947
1948msgid "heading.fontpack.classic" 1948msgid "heading.fontpack.classic"
1949msgstr "DESCARGAR PAQUETE TIPOGRAFÍA" 1949msgstr "DESCARGAR PAQUETE TIPOGRAFÍA"
@@ -2119,3 +2119,9 @@ msgstr "Desbotar aviso"
2119 2119
2120msgid "lang.uk" 2120msgid "lang.uk"
2121msgstr "Ucraniano" 2121msgstr "Ucraniano"
2122
2123msgid "lang.cs"
2124msgstr "Checo"
2125
2126msgid "lang.hu"
2127msgstr "Húngaro"
diff --git a/po/hu.po b/po/hu.po
index 42d74483..453b7b07 100644
--- a/po/hu.po
+++ b/po/hu.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-04 13:12+0000\n" 4"PO-Revision-Date: 2021-11-11 16:50+0000\n"
5"Last-Translator: Botond Balázs <balazsbotond@gmail.com>\n" 5"Last-Translator: Botond Balázs <balazsbotond@gmail.com>\n"
6"Language-Team: Hungarian <http://weblate.skyjake.fi/projects/lagrange/ui/hu/>" 6"Language-Team: Hungarian <http://weblate.skyjake.fi/projects/lagrange/ui/hu/>"
7"\n" 7"\n"
@@ -119,8 +119,8 @@ msgstr "Hírfolyam bejegyzései"
119#, c-format 119#, c-format
120msgid "feeds.list.entrycount" 120msgid "feeds.list.entrycount"
121msgid_plural "feeds.list.entrycount.n" 121msgid_plural "feeds.list.entrycount.n"
122msgstr[0] "összesen %zu bejegyzés" 122msgstr[0] "összesen %u bejegyzés"
123msgstr[1] "összesen %zu bejegyzés" 123msgstr[1] "összesen %u bejegyzés"
124 124
125msgid "feeds.list.refreshtime.now" 125msgid "feeds.list.refreshtime.now"
126msgstr "Az utolsó frissítés pillanatokkal ezelőtt történt." 126msgstr "Az utolsó frissítés pillanatokkal ezelőtt történt."
@@ -262,7 +262,7 @@ msgid "macos.menu.bookmarks.bytime"
262msgstr "Listázás a létrehozás időrendjében" 262msgstr "Listázás a létrehozás időrendjében"
263 263
264msgid "menu.feeds.entrylist" 264msgid "menu.feeds.entrylist"
265msgstr "Hírfolyam bejegyzéseinek megtekintse" 265msgstr "Hírfolyambejegyzések listja"
266 266
267msgid "menu.preferences" 267msgid "menu.preferences"
268msgstr "Beállítások…" 268msgstr "Beállítások…"
@@ -420,18 +420,18 @@ msgstr "KB"
420 420
421msgid "num.bytes" 421msgid "num.bytes"
422msgid_plural "num.bytes.n" 422msgid_plural "num.bytes.n"
423msgstr[0] "%zu bájt" 423msgstr[0] "%u bájt"
424msgstr[1] "%zu bájt" 424msgstr[1] "%u bájt"
425 425
426msgid "num.files" 426msgid "num.files"
427msgid_plural "num.files.n" 427msgid_plural "num.files.n"
428msgstr[0] "%zu fájl" 428msgstr[0] "%u fájl"
429msgstr[1] "%zu fájl" 429msgstr[1] "%u fájl"
430 430
431msgid "num.fonts" 431msgid "num.fonts"
432msgid_plural "num.fonts.n" 432msgid_plural "num.fonts.n"
433msgstr[0] "%zu betűtípus" 433msgstr[0] "%u betűtípus"
434msgstr[1] "%zu betűtípus" 434msgstr[1] "%u betűtípus"
435 435
436# strftime() formatted 436# strftime() formatted
437#, c-format 437#, c-format
@@ -459,7 +459,7 @@ msgid "feeds.entry.bookmark"
459msgstr "Könyvjelző hozzáadása…" 459msgstr "Könyvjelző hozzáadása…"
460 460
461msgid "feeds.entry.openfeed" 461msgid "feeds.entry.openfeed"
462msgstr "rfolyamok megnyitása" 462msgstr "Forrásoldal megnyitása"
463 463
464msgid "feeds.edit" 464msgid "feeds.edit"
465msgstr "Hírfolyam szerkesztése…" 465msgstr "Hírfolyam szerkesztése…"
@@ -524,8 +524,8 @@ msgstr "Nincs használatban"
524#, c-format 524#, c-format
525msgid "ident.usedonurls" 525msgid "ident.usedonurls"
526msgid_plural "ident.usedonurls.n" 526msgid_plural "ident.usedonurls.n"
527msgstr[0] "%zu URL-en használva" 527msgstr[0] "%u URL-en használva"
528msgstr[1] "%zu URL-en használva" 528msgstr[1] "%u URL-en használva"
529 529
530msgid "ident.temporary" 530msgid "ident.temporary"
531msgstr "Ideiglenes" 531msgstr "Ideiglenes"
@@ -654,7 +654,7 @@ msgstr "Naponta"
654#, c-format 654#, c-format
655msgid "num.minutes" 655msgid "num.minutes"
656msgid_plural "num.minutes.n" 656msgid_plural "num.minutes.n"
657msgstr[0] "%d percenként" 657msgstr[0] "Percenként"
658msgstr[1] "%d percenként" 658msgstr[1] "%d percenként"
659 659
660msgid "link.newtab.background" 660msgid "link.newtab.background"
@@ -664,7 +664,7 @@ msgid "link.side"
664msgstr "Hivatkozás megnyitása oldalt" 664msgstr "Hivatkozás megnyitása oldalt"
665 665
666msgid "link.side.newtab" 666msgid "link.side.newtab"
667msgstr "Hivatkozás megnyitása új lapon, oldalt" 667msgstr "Hivatkozás megnyitása oldalt, új lapon"
668 668
669msgid "link.noproxy" 669msgid "link.noproxy"
670msgstr "Megnyitás proxy nélkül" 670msgstr "Megnyitás proxy nélkül"
@@ -739,8 +739,8 @@ msgstr "Könyvjelzőcímkék"
739 739
740msgid "bookmark.export.format.sub" 740msgid "bookmark.export.format.sub"
741msgstr "" 741msgstr ""
742"Az oldal formátuma megfelel a \"Feliratkozás Gemini oldalakra\" " 742"Az oldal formátuma megfelel a \"Feliratkozás Gemini oldalakra\" kiegészítő "
743"társspecifikáció előírásainak." 743"specifikáció előírásainak."
744 744
745msgid "bookmark.export.format.folders" 745msgid "bookmark.export.format.folders"
746msgstr "A mappaszerkezetet a 2. és 3. szintű fejezetcímek határozzák meg." 746msgstr "A mappaszerkezetet a 2. és 3. szintű fejezetcímek határozzák meg."
@@ -927,7 +927,7 @@ msgid "dlg.newident.country"
927msgstr "Ország:" 927msgstr "Ország:"
928 928
929msgid "dlg.newident.more" 929msgid "dlg.newident.more"
930msgstr "Egyb…" 930msgstr "Tovbbiak…"
931 931
932msgid "heading.newident.date.bad" 932msgid "heading.newident.date.bad"
933msgstr "ÉRVÉNYTELEN DÁTUM" 933msgstr "ÉRVÉNYTELEN DÁTUM"
@@ -1005,7 +1005,7 @@ msgstr "Általános"
1005 1005
1006# tab button 1006# tab button
1007msgid "heading.prefs.interface" 1007msgid "heading.prefs.interface"
1008msgstr "Felhasznlói fellet" 1008msgstr "Felület"
1009 1009
1010# tab button 1010# tab button
1011msgid "heading.prefs.keys" 1011msgid "heading.prefs.keys"
@@ -1211,7 +1211,7 @@ msgid "prefs.linewidth"
1211msgstr "Sorszélesség:" 1211msgstr "Sorszélesség:"
1212 1212
1213msgid "prefs.linewidth.fill" 1213msgid "prefs.linewidth.fill"
1214msgstr "Kitöls" 1214msgstr "Teljes"
1215 1215
1216msgid "prefs.linespacing" 1216msgid "prefs.linespacing"
1217msgstr "Sorköz:" 1217msgstr "Sorköz:"
@@ -1259,7 +1259,7 @@ msgstr "Ez a mappa üres."
1259msgid "dir.summary" 1259msgid "dir.summary"
1260msgid_plural "dir.summary.n" 1260msgid_plural "dir.summary.n"
1261msgstr[0] "Ez a könyvtár egy elemet tartalmaz." 1261msgstr[0] "Ez a könyvtár egy elemet tartalmaz."
1262msgstr[1] "Ez a könyvtár %zu elemet tartalmaz." 1262msgstr[1] "Ez a könyvtár %u elemet tartalmaz."
1263 1263
1264msgid "keys.top" 1264msgid "keys.top"
1265msgstr "Ugrás az oldal tetejére" 1265msgstr "Ugrás az oldal tetejére"
@@ -1556,8 +1556,8 @@ msgstr "lebegőpontos szám"
1556#, c-format 1556#, c-format
1557msgid "feeds.list.counts" 1557msgid "feeds.list.counts"
1558msgid_plural "feeds.list.counts.n" 1558msgid_plural "feeds.list.counts.n"
1559msgstr[0] "%zu hírfolyamra iratkoztál fel, amely %%s-t tartalmaz.\n" 1559msgstr[0] "%u hírfolyamra iratkozott fel, amely %%st tartalmaz.\n"
1560msgstr[1] "%zu hírfolyamra iratkoztál fel, amelyek %%s-t tartalmaznak.\n" 1560msgstr[1] "%u hírfolyamra iratkozott fel, amelyek %%st tartalmaznak.\n"
1561 1561
1562#, c-format 1562#, c-format
1563msgid "hours.ago" 1563msgid "hours.ago"
@@ -1742,7 +1742,7 @@ msgstr "Az oldal összes hivatkozása szerepel már a könyvjelzők között."
1742#, c-format 1742#, c-format
1743msgid "num.hours" 1743msgid "num.hours"
1744msgid_plural "num.hours.n" 1744msgid_plural "num.hours.n"
1745msgstr[0] "%d ránként" 1745msgstr[0] "ránként"
1746msgstr[1] "%d óránként" 1746msgstr[1] "%d óránként"
1747 1747
1748msgid "link.newtab" 1748msgid "link.newtab"
@@ -1987,7 +1987,7 @@ msgstr "Alapértékek visszaállítása"
1987msgid "archive.summary" 1987msgid "archive.summary"
1988msgid_plural "archive.summary.n" 1988msgid_plural "archive.summary.n"
1989msgstr[0] "Ez az archívum egy elemet tartalmaz, és %.1f MB méretű." 1989msgstr[0] "Ez az archívum egy elemet tartalmaz, és %.1f MB méretű."
1990msgstr[1] "Ez az archívum %zu elemet tartalmaz, és %.1f méretű." 1990msgstr[1] "Ez az archívum %u elemet tartalmaz, és %.1f méretű."
1991 1991
1992msgid "keys.scroll.halfpage.up" 1992msgid "keys.scroll.halfpage.up"
1993msgstr "Görgetés fél oldallal feljebb" 1993msgstr "Görgetés fél oldallal feljebb"
@@ -2091,7 +2091,7 @@ msgstr "A kapott ügyféltanúsítvány lejárt vagy érvénytelen."
2091 2091
2092msgid "error.ansi.msg" 2092msgid "error.ansi.msg"
2093msgstr "" 2093msgstr ""
2094"Elképzelhető, hogy az oldal helytelenül jelenik meg. ANSI escape " 2094"Elképzelhető, hogy az oldal helytelenül jelenik meg, mivel ANSI escape "
2095"szekvenciákat használ a szöveg formázására, és ez jelenleg csak részben " 2095"szekvenciákat használ a szöveg formázására, és ez jelenleg csak részben "
2096"támogatott. Próbálja terminálemulátorban megnyitni." 2096"támogatott. Próbálja terminálemulátorban megnyitni."
2097 2097
@@ -2109,3 +2109,9 @@ msgstr "Gempub tartalom megtekintése"
2109 2109
2110msgid "gempub.meta.author" 2110msgid "gempub.meta.author"
2111msgstr "Szerző" 2111msgstr "Szerző"
2112
2113msgid "lang.hu"
2114msgstr "Magyar"
2115
2116msgid "lang.cs"
2117msgstr "Cseh"
diff --git a/po/ie.po b/po/ie.po
index 9191068c..23fa0735 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-10-07 16:50+0000\n" 4"PO-Revision-Date: 2021-11-10 04: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"
@@ -259,14 +259,14 @@ msgstr ""
259 259
260msgid "num.bytes" 260msgid "num.bytes"
261msgid_plural "num.bytes.n" 261msgid_plural "num.bytes.n"
262msgstr[0] "%zu octete" 262msgstr[0] "%u octete"
263msgstr[1] "%zu octetes" 263msgstr[1] "%u octetes"
264 264
265#, c-format 265#, c-format
266msgid "ident.usedonurls" 266msgid "ident.usedonurls"
267msgid_plural "ident.usedonurls.n" 267msgid_plural "ident.usedonurls.n"
268msgstr[0] "Usat por %zu URL" 268msgstr[0] "Usat por %u URL"
269msgstr[1] "Usat por %zu URLs" 269msgstr[1] "Usat por %u URLs"
270 270
271msgid "error.cert.invalid.msg" 271msgid "error.cert.invalid.msg"
272msgstr "Li providet certificate de cliente es expirat o ínvalid." 272msgstr "Li providet certificate de cliente es expirat o ínvalid."
@@ -503,9 +503,7 @@ msgstr "DESABONNAR"
503 503
504#, c-format 504#, c-format
505msgid "dlg.confirm.unsub" 505msgid "dlg.confirm.unsub"
506msgstr "" 506msgstr "Esque desabonnar li feed «%s»?"
507"Esque desabonnar li feed\n"
508"«%s»?"
509 507
510msgid "dlg.unsub" 508msgid "dlg.unsub"
511msgstr "Desabonnar" 509msgstr "Desabonnar"
@@ -1027,9 +1025,7 @@ msgstr "REMOVER LI IDENTITÁ"
1027#, c-format 1025#, c-format
1028msgid "dlg.confirm.ident.delete" 1026msgid "dlg.confirm.ident.delete"
1029msgstr "" 1027msgstr ""
1030"Esque vu vole remover li identitá\n" 1028"Esque vu vole remover li identitá %s«%s»%s con su certificate e clave privat?"
1031"%s%s%s\n"
1032"con su certificate e clave privat?"
1033 1029
1034msgid "dlg.ident.delete" 1030msgid "dlg.ident.delete"
1035msgstr "Remover li identitá e files" 1031msgstr "Remover li identitá e files"
@@ -1186,7 +1182,7 @@ msgid "error.tls"
1186msgstr "Dessuccesse del rete o TLS" 1182msgstr "Dessuccesse del rete o TLS"
1187 1183
1188msgid "error.tls.msg" 1184msgid "error.tls.msg"
1189msgstr "Ne successat communicar con li servitor. Vi li textu de errore:" 1185msgstr "Ne successat communicar con li servitor."
1190 1186
1191msgid "error.temporary" 1187msgid "error.temporary"
1192msgstr "Temporari dessuccesse" 1188msgstr "Temporari dessuccesse"
@@ -1345,14 +1341,14 @@ msgstr "Serbian"
1345#, c-format 1341#, c-format
1346msgid "feeds.list.counts" 1342msgid "feeds.list.counts"
1347msgid_plural "feeds.list.counts.n" 1343msgid_plural "feeds.list.counts.n"
1348msgstr[0] "Vu abonat %zu feed quel contene %%s.\n" 1344msgstr[0] "Vu abonat %u feed quel contene %%s.\n"
1349msgstr[1] "Vu abonat %zu feedes quel contene %%s.\n" 1345msgstr[1] "Vu abonat %u feedes quel contene %%s.\n"
1350 1346
1351#, c-format 1347#, c-format
1352msgid "feeds.list.entrycount" 1348msgid "feeds.list.entrycount"
1353msgid_plural "feeds.list.entrycount.n" 1349msgid_plural "feeds.list.entrycount.n"
1354msgstr[0] "%zu element in tot" 1350msgstr[0] "%u element in tot"
1355msgstr[1] "%zu elementes in tot" 1351msgstr[1] "%u elementes in tot"
1356 1352
1357#, c-format 1353#, c-format
1358msgid "minutes.ago" 1354msgid "minutes.ago"
@@ -1544,14 +1540,14 @@ msgstr "On posse leer ti libre Gempub pos que it ha esset gardat localmen."
1544#, c-format 1540#, c-format
1545msgid "dir.summary" 1541msgid "dir.summary"
1546msgid_plural "dir.summary.n" 1542msgid_plural "dir.summary.n"
1547msgstr[0] "Ti fólder contene %zu element." 1543msgstr[0] "Ti fólder contene %u element."
1548msgstr[1] "Ti fólder contene %zu elementes." 1544msgstr[1] "Ti fólder contene %u elementes."
1549 1545
1550#, c-format 1546#, c-format
1551msgid "archive.summary" 1547msgid "archive.summary"
1552msgid_plural "archive.summary.n" 1548msgid_plural "archive.summary.n"
1553msgstr[0] "Ti archive contene %zu element e su compresset grandore es %.1f Mo." 1549msgstr[0] "Ti archive contene %u element e su compresset grandore es %.1f Mo."
1554msgstr[1] "Ti archive contene %zu elementes e su compresset grandore es %.1f Mo." 1550msgstr[1] "Ti archive contene %u elementes e su compresset grandore es %.1f Mo."
1555 1551
1556msgid "link.side" 1552msgid "link.side"
1557msgstr "Aperter li ligament láteralmen" 1553msgstr "Aperter li ligament láteralmen"
@@ -1712,8 +1708,8 @@ msgstr "Assignar li portu"
1712 1708
1713msgid "dlg.uploadport.msg" 1709msgid "dlg.uploadport.msg"
1714msgstr "" 1710msgstr ""
1715"Assignar li portu de Titan por ti-ci adresse.\n" 1711"Assignar li portu de Titan por ti-ci adresse. Li portu es gardat in li "
1716"Li portu es gardat in li preferenties del site." 1712"preferenties del site."
1717 1713
1718msgid "prefs.returnkey" 1714msgid "prefs.returnkey"
1719msgstr "Coduida del taste Enter:" 1715msgstr "Coduida del taste Enter:"
@@ -1918,3 +1914,188 @@ msgstr "Sel. omni"
1918# keep this short (3x1 horiz layout) 1914# keep this short (3x1 horiz layout)
1919msgid "menu.delete" 1915msgid "menu.delete"
1920msgstr "Remov." 1916msgstr "Remov."
1917
1918msgid "dlg.feed.ignoreweb"
1919msgstr "Ignorar ligamentes HTTP(s):"
1920
1921msgid "truetype.help.installed"
1922msgstr "Ti-ci fonde es installat in li fólder de personal fondes."
1923
1924msgid "dlg.fontpack.classic.msg"
1925msgstr ""
1926"Li fondes quel esser includet in li app es nu disponibil quam un separat "
1927"discarga. Esque vu vole descargar li «classic» collection ho-témpor?"
1928
1929msgid "lang.hu"
1930msgstr "Hungarian"
1931
1932msgid "prefs.bookmarks.addbottom"
1933msgstr "Adjunter marca-págines a bass:"
1934
1935msgid "prefs.font.ui"
1936msgstr "IdU:"
1937
1938msgid "prefs.font.heading"
1939msgstr "Rubricas:"
1940
1941msgid "prefs.font.body"
1942msgstr "Córpore:"
1943
1944msgid "prefs.font.mono"
1945msgstr "Formatat:"
1946
1947msgid "prefs.boldlink.visited"
1948msgstr "Visitat"
1949
1950msgid "prefs.gemtext.ansi"
1951msgstr "Codes escape de ANSI:"
1952
1953msgid "prefs.gemtext.ansi.fg"
1954msgstr "Avanplan"
1955
1956msgid "prefs.gemtext.ansi.fontstyle"
1957msgstr "Stil de fonde"
1958
1959msgid "prefs.font.warnmissing"
1960msgstr "Avise de glifes:"
1961
1962msgid "num.files"
1963msgid_plural "num.files.n"
1964msgstr[0] "%u file"
1965msgstr[1] "%u files"
1966
1967msgid "num.fonts"
1968msgid_plural "num.fonts.n"
1969msgstr[0] "%u fonde"
1970msgstr[1] "%u fondes"
1971
1972msgid "heading.fontpack.classic"
1973msgstr "DESCARGAR UN FONDPAC"
1974
1975msgid "error.ansi"
1976msgstr "Emulation del terminal"
1977
1978msgid "error.glyphs"
1979msgstr "Glifes mancant"
1980
1981msgid "heading.fontpack.meta"
1982msgstr "Fondes"
1983
1984# Action label
1985msgid "fontpack.meta.viewfile"
1986msgstr "Monstrar li file"
1987
1988msgid "heading.fontpack.meta.enabled"
1989msgstr "Activ fondpacs"
1990
1991msgid "heading.fontpack.meta.disabled"
1992msgstr "Ínactiv fondpacs"
1993
1994#, c-format
1995msgid "fontpack.meta.version"
1996msgstr "Version %d"
1997
1998msgid "fontpack.meta.installed"
1999msgstr "Installat"
2000
2001msgid "fontpack.meta.notinstalled"
2002msgstr "Ne installat"
2003
2004msgid "fontpack.meta.disabled"
2005msgstr ", ínactiv"
2006
2007#, c-format
2008msgid "fontpack.disable"
2009msgstr "Desactivar «%s»"
2010
2011msgid "fontpack.export"
2012msgstr "Monstrar li modelle fontpack.ini"
2013
2014#, c-format
2015msgid "fontpack.install"
2016msgstr "Installar «%s»"
2017
2018#, c-format
2019msgid "fontpack.upgrade"
2020msgstr "Actualisar «%s» al version %d"
2021
2022#, c-format
2023msgid "fontpack.delete"
2024msgstr "Remover «%s» permanentmen"
2025
2026msgid "dlg.fontpack.delete"
2027msgstr "Remover li fondpac"
2028
2029msgid "fontpack.install.ttf"
2030msgstr "Installar un fonde TrueType"
2031
2032msgid "fontpack.open.fontsdir"
2033msgstr "Aperter li fólder de personal fondes"
2034
2035msgid "fontpack.open.aboutfonts"
2036msgstr "Monstrar installat fondes"
2037
2038msgid "dlg.fontpack.classic"
2039msgstr "Descargar li fondpac (25 Mo)"
2040
2041msgid "lang.uk"
2042msgstr "Ukrainan"
2043
2044msgid "heading.fontpack.delete"
2045msgstr "REMOVER LI FONDPAC"
2046
2047#, c-format
2048msgid "dlg.fontpack.delete.confirm"
2049msgstr "Esque vu vole remover li fondpac «%s» permanentmen?"
2050
2051msgid "menu.fonts"
2052msgstr "Gerentie de fondes…"
2053
2054msgid "dlg.certwarn.title"
2055msgstr "Problema de securitá"
2056
2057msgid "menu.website"
2058msgstr "Website del projecte…"
2059
2060#, c-format
2061msgid "fontpack.enable"
2062msgstr "Activar «%s»"
2063
2064msgid "lang.cs"
2065msgstr "Tchec"
2066
2067msgid "prefs.font.smooth"
2068msgstr "Glattar:"
2069
2070msgid "bookmark.export.taginfo"
2071msgstr ""
2072"In ti-ci liste chascun rubrica representa un etiquette de marca-págines. "
2073"Solmen marca-págines con un etiquette es monstrat. Marca-págines con "
2074"multiplic etiquettes es duplicat sub chascun etiquette."
2075
2076msgid "error.glyphs.msg"
2077msgstr ""
2078"Ti-ci págine ne es monstrat completmen pro que alcun caracteres es mancant. "
2079"On posse installar suplementari fondes por correcter to."
2080
2081msgid "truetype.help"
2082msgstr ""
2083"Lagrange pena cargar omni files de fondes TrueType quel esset copiat al "
2084"fólder de personal fondes."
2085
2086msgid "fontpack.help"
2087msgstr ""
2088"Fondpacs de Lagrange es archives ZIP quel contene files de fondes e li "
2089"associat configuration. Pos li installation, on posse usar ti fondes por "
2090"contenete de documentes e li interfacie. On posse selecter li activ fondes "
2091"in Preferenties > Fondes."
2092
2093msgid "bookmark.export.format.sub"
2094msgstr ""
2095"Ti-ci págine es formatat secun li specification suplementari «Subscribing to "
2096"Gemini pages»."
2097
2098msgid "feeds.atom.translated"
2099msgstr ""
2100"Ti document Atom XML esset convertet in un feed de Gemini por que on vell "
2101"posse abonnar it."
diff --git a/po/ru.po b/po/ru.po
index 53db897b..d2d52614 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,7 +3,7 @@ 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-02 23:51+0000\n" 6"PO-Revision-Date: 2021-11-06 09:34+0000\n"
7"Last-Translator: jan Anja <cyber@sysrq.in>\n" 7"Last-Translator: jan Anja <cyber@sysrq.in>\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"
@@ -390,9 +390,9 @@ msgstr "Не используется"
390 390
391msgid "ident.usedonurls" 391msgid "ident.usedonurls"
392msgid_plural "ident.usedonurls.n" 392msgid_plural "ident.usedonurls.n"
393msgstr[0] "Используется на %zu URL" 393msgstr[0] "Используется на %u URL"
394msgstr[1] "Используется на %zu URL" 394msgstr[1] "Используется на %u URL"
395msgstr[2] "Используется на %zu URL" 395msgstr[2] "Используется на %u URL"
396 396
397msgid "ident.temporary" 397msgid "ident.temporary"
398msgstr "Временный" 398msgstr "Временный"
@@ -1293,9 +1293,9 @@ msgstr "ДРУГИЕ"
1293 1293
1294msgid "num.bytes" 1294msgid "num.bytes"
1295msgid_plural "num.bytes.n" 1295msgid_plural "num.bytes.n"
1296msgstr[0] "%zu байт" 1296msgstr[0] "%u байт"
1297msgstr[1] "%zu байта" 1297msgstr[1] "%u байта"
1298msgstr[2] "%zu байтов" 1298msgstr[2] "%u байтов"
1299 1299
1300msgid "reload.never" 1300msgid "reload.never"
1301msgstr "Никогда" 1301msgstr "Никогда"
@@ -1359,16 +1359,16 @@ msgstr "МБ/с"
1359#, c-format 1359#, c-format
1360msgid "feeds.list.entrycount" 1360msgid "feeds.list.entrycount"
1361msgid_plural "feeds.list.entrycount.n" 1361msgid_plural "feeds.list.entrycount.n"
1362msgstr[0] "всего %zu статья" 1362msgstr[0] "всего %u статья"
1363msgstr[1] "всего %zu статьи" 1363msgstr[1] "всего %u статьи"
1364msgstr[2] "всего %zu статей" 1364msgstr[2] "всего %u статей"
1365 1365
1366#, c-format 1366#, c-format
1367msgid "feeds.list.counts" 1367msgid "feeds.list.counts"
1368msgid_plural "feeds.list.counts.n" 1368msgid_plural "feeds.list.counts.n"
1369msgstr[0] "Вы подписаны на %zu ленту, содержащую %%s.\n" 1369msgstr[0] "Вы подписаны на %u ленту, содержащую %%s.\n"
1370msgstr[1] "Вы подписаны на %zu ленты, содержащие %%s.\n" 1370msgstr[1] "Вы подписаны на %u ленты, содержащие %%s.\n"
1371msgstr[2] "Вы подписаны на %zu лент, содержащих %%s.\n" 1371msgstr[2] "Вы подписаны на %u лент, содержащих %%s.\n"
1372 1372
1373# Interpretation: (Bold links) on dark (background). 1373# Interpretation: (Bold links) on dark (background).
1374msgid "prefs.boldlink.dark" 1374msgid "prefs.boldlink.dark"
@@ -1576,9 +1576,9 @@ msgstr "Выйти из архива"
1576#, c-format 1576#, c-format
1577msgid "archive.summary" 1577msgid "archive.summary"
1578msgid_plural "archive.summary.n" 1578msgid_plural "archive.summary.n"
1579msgstr[0] "Архив содержит %zu элемент и занимает %.1f МБ в сжатом виде." 1579msgstr[0] "Архив содержит %u элемент и занимает %.1f МБ в сжатом виде."
1580msgstr[1] "Архив содержит %zu элемента и занимает %.1f МБ в сжатом виде." 1580msgstr[1] "Архив содержит %u элемента и занимает %.1f МБ в сжатом виде."
1581msgstr[2] "Архив содержит %zu элементов и занимает %.1f МБ в сжатом виде." 1581msgstr[2] "Архив содержит %u элементов и занимает %.1f МБ в сжатом виде."
1582 1582
1583msgid "dir.empty" 1583msgid "dir.empty"
1584msgstr "Каталог пуст." 1584msgstr "Каталог пуст."
@@ -1586,9 +1586,9 @@ msgstr "Каталог пуст."
1586#, c-format 1586#, c-format
1587msgid "dir.summary" 1587msgid "dir.summary"
1588msgid_plural "dir.summary.n" 1588msgid_plural "dir.summary.n"
1589msgstr[0] "Каталог содержит %zu элемент." 1589msgstr[0] "Каталог содержит %u элемент."
1590msgstr[1] "Каталог содержит %zu элемента." 1590msgstr[1] "Каталог содержит %u элемента."
1591msgstr[2] "Каталог содержит %zu элементов." 1591msgstr[2] "Каталог содержит %u элементов."
1592 1592
1593msgid "keys.tab.close.other" 1593msgid "keys.tab.close.other"
1594msgstr "Закрыть другие владки" 1594msgstr "Закрыть другие владки"
@@ -1930,15 +1930,15 @@ msgstr "Загрузить пакет шрифтов (25 МБ)"
1930 1930
1931msgid "num.files" 1931msgid "num.files"
1932msgid_plural "num.files.n" 1932msgid_plural "num.files.n"
1933msgstr[0] "%zu файл" 1933msgstr[0] "%u файл"
1934msgstr[1] "%zu файла" 1934msgstr[1] "%u файла"
1935msgstr[2] "%zu файлов" 1935msgstr[2] "%u файлов"
1936 1936
1937msgid "num.fonts" 1937msgid "num.fonts"
1938msgid_plural "num.fonts.n" 1938msgid_plural "num.fonts.n"
1939msgstr[0] "%zu шрифт" 1939msgstr[0] "%u шрифт"
1940msgstr[1] "%zu шрифта" 1940msgstr[1] "%u шрифта"
1941msgstr[2] "%zu шрифтов" 1941msgstr[2] "%u шрифтов"
1942 1942
1943msgid "heading.fontpack.classic" 1943msgid "heading.fontpack.classic"
1944msgstr "ЗАГРУЗИТЬ ПАКЕТ ШРИФТОВ" 1944msgstr "ЗАГРУЗИТЬ ПАКЕТ ШРИФТОВ"
@@ -2116,3 +2116,9 @@ msgstr "Навсегда скрыть предупреждение об эмул
2116 2116
2117msgid "lang.uk" 2117msgid "lang.uk"
2118msgstr "Украинский" 2118msgstr "Украинский"
2119
2120msgid "lang.hu"
2121msgstr "Венгерский"
2122
2123msgid "lang.cs"
2124msgstr "Чешский"
diff --git a/po/sr.po b/po/sr.po
index d9cb9e9a..8a6d36d8 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-10 04: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"
@@ -193,9 +193,9 @@ msgstr "КБ"
193 193
194msgid "num.bytes" 194msgid "num.bytes"
195msgid_plural "num.bytes.n" 195msgid_plural "num.bytes.n"
196msgstr[0] "%zu бајт" 196msgstr[0] "%u бајт"
197msgstr[1] "%zu бајта" 197msgstr[1] "%u бајта"
198msgstr[2] "%zu бајтова" 198msgstr[2] "%u бајтова"
199 199
200# strftime() formatted 200# strftime() formatted
201#, c-format 201#, c-format
@@ -1191,9 +1191,9 @@ msgstr "Икона за \""
1191#, c-format 1191#, c-format
1192msgid "ident.usedonurls" 1192msgid "ident.usedonurls"
1193msgid_plural "ident.usedonurls.n" 1193msgid_plural "ident.usedonurls.n"
1194msgstr[0] "Користи се на %zu УРЛ-у" 1194msgstr[0] "Користи се на %u УРЛ-у"
1195msgstr[1] "Користи се на %zu УРЛ-а" 1195msgstr[1] "Користи се на %u УРЛ-а"
1196msgstr[2] "Користи се на %zu УРЛ-ова" 1196msgstr[2] "Користи се на %u УРЛ-ова"
1197 1197
1198msgid "prefs.plaintext.wrap" 1198msgid "prefs.plaintext.wrap"
1199msgstr "Прелом чистог текста:" 1199msgstr "Прелом чистог текста:"
@@ -1356,16 +1356,16 @@ msgstr "Интерлингве"
1356#, c-format 1356#, c-format
1357msgid "feeds.list.counts" 1357msgid "feeds.list.counts"
1358msgid_plural "feeds.list.counts.n" 1358msgid_plural "feeds.list.counts.n"
1359msgstr[0] "Претплаћени сте на %zu фид који садржи %%s.\n" 1359msgstr[0] "Претплаћени сте на %u фид који садржи %%s.\n"
1360msgstr[1] "Претплаћени сте на %zu фида који садрже %%s.\n" 1360msgstr[1] "Претплаћени сте на %u фида који садрже %%s.\n"
1361msgstr[2] "Претплаћени сте на %zu фидова који садрже %%s.\n" 1361msgstr[2] "Претплаћени сте на %u фидова који садрже %%s.\n"
1362 1362
1363#, c-format 1363#, c-format
1364msgid "feeds.list.entrycount" 1364msgid "feeds.list.entrycount"
1365msgid_plural "feeds.list.entrycount.n" 1365msgid_plural "feeds.list.entrycount.n"
1366msgstr[0] "укупно %zu ставку" 1366msgstr[0] "укупно %u ставку"
1367msgstr[1] "укупно %zu ставке" 1367msgstr[1] "укупно %u ставке"
1368msgstr[2] "укупно %zu ставки" 1368msgstr[2] "укупно %u ставки"
1369 1369
1370#, c-format 1370#, c-format
1371msgid "minutes.ago" 1371msgid "minutes.ago"
@@ -1594,9 +1594,9 @@ msgstr "У десној картици"
1594#, c-format 1594#, c-format
1595msgid "archive.summary" 1595msgid "archive.summary"
1596msgid_plural "archive.summary.n" 1596msgid_plural "archive.summary.n"
1597msgstr[0] "Ова архива садржи %zu ставку, а њена компресована величина је %.1f МБ." 1597msgstr[0] "Ова архива садржи %u ставку, а њена компресована величина је %.1f МБ."
1598msgstr[1] "Ова архива садржи %zu ставке, а њена компресована величина је %.1f МБ." 1598msgstr[1] "Ова архива садржи %u ставке, а њена компресована величина је %.1f МБ."
1599msgstr[2] "Ова архива садржи %zu ставки, а њена компресована величина је %.1f МБ." 1599msgstr[2] "Ова архива садржи %u ставки, а њена компресована величина је %.1f МБ."
1600 1600
1601msgid "archive.exit" 1601msgid "archive.exit"
1602msgstr "Изађи из архиве" 1602msgstr "Изађи из архиве"
@@ -1607,9 +1607,9 @@ msgstr "Овај директоријум је празан."
1607#, c-format 1607#, c-format
1608msgid "dir.summary" 1608msgid "dir.summary"
1609msgid_plural "dir.summary.n" 1609msgid_plural "dir.summary.n"
1610msgstr[0] "Овај директоријум садржи %zu ставку." 1610msgstr[0] "Овај директоријум садржи %u ставку."
1611msgstr[1] "Овај директоријум садржи %zu ставке." 1611msgstr[1] "Овај директоријум садржи %u ставке."
1612msgstr[2] "Овај директоријум садржи %zu ставки." 1612msgstr[2] "Овај директоријум садржи %u ставки."
1613 1613
1614msgid "keys.tab.close.other" 1614msgid "keys.tab.close.other"
1615msgstr "Затварање осталих картица" 1615msgstr "Затварање осталих картица"
@@ -1996,15 +1996,15 @@ msgstr "Управљај фонтовима…"
1996 1996
1997msgid "num.fonts" 1997msgid "num.fonts"
1998msgid_plural "num.fonts.n" 1998msgid_plural "num.fonts.n"
1999msgstr[0] "%zu фонт" 1999msgstr[0] "%u фонт"
2000msgstr[1] "%zu фонта" 2000msgstr[1] "%u фонта"
2001msgstr[2] "%zu фонтова" 2001msgstr[2] "%u фонтова"
2002 2002
2003msgid "num.files" 2003msgid "num.files"
2004msgid_plural "num.files.n" 2004msgid_plural "num.files.n"
2005msgstr[0] "%zu датотека" 2005msgstr[0] "%u датотека"
2006msgstr[1] "%zu датотеке" 2006msgstr[1] "%u датотеке"
2007msgstr[2] "%zu датотека" 2007msgstr[2] "%u датотека"
2008 2008
2009msgid "dlg.certwarn.title" 2009msgid "dlg.certwarn.title"
2010msgstr "Безбедносни проблем" 2010msgstr "Безбедносни проблем"
@@ -2163,3 +2163,9 @@ msgstr "Трајно отклонити упозорење о емулацији
2163 2163
2164msgid "lang.uk" 2164msgid "lang.uk"
2165msgstr "Украјински" 2165msgstr "Украјински"
2166
2167msgid "lang.cs"
2168msgstr "Чешки"
2169
2170msgid "lang.hu"
2171msgstr "Мађарски"
diff --git a/po/tok.po b/po/tok.po
index cdfa110f..cec21f48 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-06 09:34+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"
@@ -54,7 +54,7 @@ msgstr "Hz"
54#, c-format 54#, c-format
55msgid "feeds.list.entrycount" 55msgid "feeds.list.entrycount"
56msgid_plural "feeds.list.entrycount.n" 56msgid_plural "feeds.list.entrycount.n"
57msgstr[0] "lipu %zu" 57msgstr[0] "lipu %u"
58 58
59msgid "feeds.list.refreshtime.now" 59msgid "feeds.list.refreshtime.now"
60msgstr "tenpo pini lili la lipu lukin li sin." 60msgstr "tenpo pini lili la lipu lukin li sin."
@@ -294,7 +294,7 @@ msgstr "MB/s"
294 294
295msgid "num.bytes" 295msgid "num.bytes"
296msgid_plural "num.bytes.n" 296msgid_plural "num.bytes.n"
297msgstr[0] "tu suli %zu" 297msgstr[0] "tu suli %u"
298 298
299# megabytes, used as the unit after a number 299# megabytes, used as the unit after a number
300msgid "mb" 300msgid "mb"
@@ -400,7 +400,7 @@ msgstr "lipu ala li kepeken e ona"
400#, c-format 400#, c-format
401msgid "ident.usedonurls" 401msgid "ident.usedonurls"
402msgid_plural "ident.usedonurls.n" 402msgid_plural "ident.usedonurls.n"
403msgstr[0] "lipu %zu li kepeken" 403msgstr[0] "lipu %u li kepeken"
404 404
405msgid "ident.temporary" 405msgid "ident.temporary"
406msgstr "nimi tawa tenpo lili" 406msgstr "nimi tawa tenpo lili"
@@ -496,7 +496,7 @@ msgid "pageinfo.domain.mismatch"
496msgstr "nimi li sama ala" 496msgstr "nimi li sama ala"
497 497
498msgid "dlg.cert.trust" 498msgid "dlg.cert.trust"
499msgstr "o pona" 499msgstr "o kepeken"
500 500
501msgid "heading.save" 501msgid "heading.save"
502msgstr "IJO LI AWEN" 502msgstr "IJO LI AWEN"
@@ -1231,7 +1231,7 @@ msgstr[0] "nimi tawa sin %d li lon lipu ni."
1231#, c-format 1231#, c-format
1232msgid "feeds.list.counts" 1232msgid "feeds.list.counts"
1233msgid_plural "feeds.list.counts.n" 1233msgid_plural "feeds.list.counts.n"
1234msgstr[0] "lipu lukin %zu li lon. ona ale li jo e %%s.\n" 1234msgstr[0] "lipu lukin %u li lon. ona ale li jo e %%s.\n"
1235 1235
1236msgid "macos.menu.bookmarks.list" 1236msgid "macos.menu.bookmarks.list"
1237msgstr "lipu awen ali" 1237msgstr "lipu awen ali"
@@ -1305,8 +1305,7 @@ msgstr[0] ""
1305"%d la sitelen len pona li wile tawa weka." 1305"%d la sitelen len pona li wile tawa weka."
1306 1306
1307msgid "dlg.certwarn.different" 1307msgid "dlg.certwarn.different"
1308msgstr "" 1308msgstr "sitelen len ni li pakala ala. taso ona li sama ala sitelen len pini."
1309"sitelen len ni li pakala ala. taso ona li sama ala sitelen len pi pona lukin."
1310 1309
1311msgid "dlg.certwarn.domain" 1310msgid "dlg.certwarn.domain"
1312msgstr "nimi pi sitelen len li ante. ken la jan lawa mun ni li pakala." 1311msgstr "nimi pi sitelen len li ante. ken la jan lawa mun ni li pakala."
@@ -1550,7 +1549,7 @@ msgstr "poki nanpa tu"
1550#, c-format 1549#, c-format
1551msgid "archive.summary" 1550msgid "archive.summary"
1552msgid_plural "archive.summary.n" 1551msgid_plural "archive.summary.n"
1553msgstr[0] "ijo %zu li lon ijo ni (tu suli Meka %.1f)." 1552msgstr[0] "ijo %u li lon ijo ni (tu suli Meka %.1f)."
1554 1553
1555msgid "archive.exit" 1554msgid "archive.exit"
1556msgstr "o pini e ijo" 1555msgstr "o pini e ijo"
@@ -1564,7 +1563,7 @@ msgstr "poki sama"
1564#, c-format 1563#, c-format
1565msgid "dir.summary" 1564msgid "dir.summary"
1566msgid_plural "dir.summary.n" 1565msgid_plural "dir.summary.n"
1567msgstr[0] "ijo %zu li lon poki ni." 1566msgstr[0] "ijo %u li lon poki ni."
1568 1567
1569msgid "keys.tab.close.other" 1568msgid "keys.tab.close.other"
1570msgstr "o pini e poki ante" 1569msgstr "o pini e poki ante"
@@ -1885,11 +1884,11 @@ msgstr "o ante e sitelen…"
1885 1884
1886msgid "num.files" 1885msgid "num.files"
1887msgid_plural "num.files.n" 1886msgid_plural "num.files.n"
1888msgstr[0] "ijo %zu" 1887msgstr[0] "ijo %u"
1889 1888
1890msgid "num.fonts" 1889msgid "num.fonts"
1891msgid_plural "num.fonts.n" 1890msgid_plural "num.fonts.n"
1892msgstr[0] "sitelen %zu" 1891msgstr[0] "sitelen %u"
1893 1892
1894msgid "dlg.certwarn.title" 1893msgid "dlg.certwarn.title"
1895msgstr "pakala len suli" 1894msgstr "pakala len suli"
@@ -2018,3 +2017,34 @@ msgstr "o pali kepeken nasin nimi"
2018 2017
2019msgid "bookmark.export.saving" 2018msgid "bookmark.export.saving"
2020msgstr "" 2019msgstr ""
2020"sina wile pana e lipu awen la o awen e lipu ni. sina ken kama sona e nimi "
2021"tawa lon lipu ni kin."
2022
2023msgid "bookmark.export.format.folders"
2024msgstr "sitelen suli pi nanpa 2/3 li sama poki."
2025
2026msgid "bookmark.export.format.tags"
2027msgstr "sitelen suli pi nanpa 2 li sama nimi lili."
2028
2029msgid "lang.cs"
2030msgstr "toki Seki"
2031
2032msgid "lang.uk"
2033msgstr "toki Ukawina"
2034
2035msgid "bookmark.export.format.otherlines"
2036msgstr ""
2037"linja kulupu en linja toki li jo e sona namako pi lipu awen sewi. ilo "
2038"Lakelan li lukin ala e linja sitelen en sitelen namako tan ni: ona li jo e "
2039"toki lili."
2040
2041msgid "error.certverify.msg"
2042msgstr ""
2043"mi pakala toki tawa ilo pana tan ni: sitelen len ona li sama ala sitelen len "
2044"pini. o kama sona e ni: jan lawa mun li toki ala toki e ante pi sitelen len? "
2045"ante la jan ike li ken lukin sama ilo pana.\n"
2046"\n"
2047"sina wile lukin e lipu kepeken len ni la o open e ijo \"sona lipu\"."
2048
2049msgid "lang.hu"
2050msgstr "toki Mosijo"
diff --git a/po/uk.po b/po/uk.po
index 6731e103..9e360eeb 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-02 23:51+0000\n" 4"PO-Revision-Date: 2021-11-10 04:50+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"
@@ -59,9 +59,9 @@ msgstr "Гц"
59#, c-format 59#, c-format
60msgid "feeds.list.entrycount" 60msgid "feeds.list.entrycount"
61msgid_plural "feeds.list.entrycount.n" 61msgid_plural "feeds.list.entrycount.n"
62msgstr[0] "загалом %zu допис" 62msgstr[0] "загалом %u допис"
63msgstr[1] "загалом %zu дописи" 63msgstr[1] "загалом %u дописи"
64msgstr[2] "загалом %zu дописів" 64msgstr[2] "загалом %u дописів"
65 65
66#, c-format 66#, c-format
67msgid "feeds.list.refreshtime" 67msgid "feeds.list.refreshtime"
@@ -310,9 +310,9 @@ msgstr "МБ/с"
310 310
311msgid "num.bytes" 311msgid "num.bytes"
312msgid_plural "num.bytes.n" 312msgid_plural "num.bytes.n"
313msgstr[0] "%zu байт" 313msgstr[0] "%u байт"
314msgstr[1] "%zu байти" 314msgstr[1] "%u байти"
315msgstr[2] "%zu байтів" 315msgstr[2] "%u байтів"
316 316
317# strftime() formatted 317# strftime() formatted
318#, c-format 318#, c-format
@@ -368,9 +368,9 @@ msgstr "Записи стрічки новин"
368#, c-format 368#, c-format
369msgid "feeds.list.counts" 369msgid "feeds.list.counts"
370msgid_plural "feeds.list.counts.n" 370msgid_plural "feeds.list.counts.n"
371msgstr[0] "Ви підписані на %zu стрічку, що містить %%s.\n" 371msgstr[0] "Ви підписані на %u стрічку, що містить %%s.\n"
372msgstr[1] "Ви підписані на %zu стрічки, що містять %%s.\n" 372msgstr[1] "Ви підписані на %u стрічки, що містять %%s.\n"
373msgstr[2] "Ви підписані на %zu стрічок, що містять %%s.\n" 373msgstr[2] "Ви підписані на %u стрічок, що містять %%s.\n"
374 374
375msgid "feeds.list.refreshtime.now" 375msgid "feeds.list.refreshtime.now"
376msgstr "Востаннє оновлено мить тому." 376msgstr "Востаннє оновлено мить тому."
@@ -542,7 +542,7 @@ msgstr[2] "На сторінці знайдено %d нових посилань
542#, c-format 542#, c-format
543msgid "dlg.import.add" 543msgid "dlg.import.add"
544msgid_plural "dlg.import.add.n" 544msgid_plural "dlg.import.add.n"
545msgstr[0] "%sДодати закладку" 545msgstr[0] "%sДодати %d закладку"
546msgstr[1] "%sДодати %d закладки" 546msgstr[1] "%sДодати %d закладки"
547msgstr[2] "%sДодати %d закладок" 547msgstr[2] "%sДодати %d закладок"
548 548
@@ -912,9 +912,9 @@ msgstr "Використовується на цій сторінці"
912#, c-format 912#, c-format
913msgid "ident.usedonurls" 913msgid "ident.usedonurls"
914msgid_plural "ident.usedonurls.n" 914msgid_plural "ident.usedonurls.n"
915msgstr[0] "Використовується на %zu URL" 915msgstr[0] "Використовується на %u URL"
916msgstr[1] "Використовується на %zu URL" 916msgstr[1] "Використовується на %u URL"
917msgstr[2] "Використовується на %zu URL" 917msgstr[2] "Використовується на %u URL"
918 918
919msgid "ident.stopuse" 919msgid "ident.stopuse"
920msgstr "Припинити використання на цій сторінці" 920msgstr "Припинити використання на цій сторінці"
@@ -1580,9 +1580,9 @@ msgstr "Gemini-проксі:"
1580#, c-format 1580#, c-format
1581msgid "archive.summary" 1581msgid "archive.summary"
1582msgid_plural "archive.summary.n" 1582msgid_plural "archive.summary.n"
1583msgstr[0] "Архів містить %zu елемент, а його стиснутий розмір %.1f МБ." 1583msgstr[0] "Архів містить %u елемент, а його стиснутий розмір %.1f МБ."
1584msgstr[1] "Архів містить %zu елементи, а його стиснутий розмір %.1f МБ." 1584msgstr[1] "Архів містить %u елементи, а його стиснутий розмір %.1f МБ."
1585msgstr[2] "Архів містить %zu елементів, а його стиснутий розмір %.1f МБ." 1585msgstr[2] "Архів містить %u елементів, а його стиснутий розмір %.1f МБ."
1586 1586
1587msgid "keys.scroll.down" 1587msgid "keys.scroll.down"
1588msgstr "Прокрутити донизу" 1588msgstr "Прокрутити донизу"
@@ -1724,9 +1724,9 @@ msgstr "Цей каталог порожній."
1724#, c-format 1724#, c-format
1725msgid "dir.summary" 1725msgid "dir.summary"
1726msgid_plural "dir.summary.n" 1726msgid_plural "dir.summary.n"
1727msgstr[0] "Каталог містить %zu об'єкт." 1727msgstr[0] "Каталог містить %u об'єкт."
1728msgstr[1] "Каталог містить %zu об'єкти." 1728msgstr[1] "Каталог містить %u об'єкти."
1729msgstr[2] "Каталог містить %zu об'єктів." 1729msgstr[2] "Каталог містить %u об'єктів."
1730 1730
1731msgid "keys.top" 1731msgid "keys.top"
1732msgstr "На початок" 1732msgstr "На початок"
@@ -1996,15 +1996,15 @@ msgstr "Керування шрифтами…"
1996 1996
1997msgid "num.files" 1997msgid "num.files"
1998msgid_plural "num.files.n" 1998msgid_plural "num.files.n"
1999msgstr[0] "%zu файл" 1999msgstr[0] "%u файл"
2000msgstr[1] "%zu файли" 2000msgstr[1] "%u файли"
2001msgstr[2] "%zu файлів" 2001msgstr[2] "%u файлів"
2002 2002
2003msgid "num.fonts" 2003msgid "num.fonts"
2004msgid_plural "num.fonts.n" 2004msgid_plural "num.fonts.n"
2005msgstr[0] "%zu шрифт" 2005msgstr[0] "%u шрифт"
2006msgstr[1] "%zu шрифти" 2006msgstr[1] "%u шрифти"
2007msgstr[2] "%zu шрифтів" 2007msgstr[2] "%u шрифтів"
2008 2008
2009msgid "dlg.certwarn.title" 2009msgid "dlg.certwarn.title"
2010msgstr "Проблема з сертифікатом безпеки" 2010msgstr "Проблема з сертифікатом безпеки"
@@ -2144,3 +2144,9 @@ msgstr ""
2144 2144
2145msgid "lang.uk" 2145msgid "lang.uk"
2146msgstr "Українська" 2146msgstr "Українська"
2147
2148msgid "lang.cs"
2149msgstr "Чеська"
2150
2151msgid "lang.hu"
2152msgstr "Угорська"
diff --git a/res/about/version.gmi b/res/about/version.gmi
index d179c821..fb66b793 100644
--- a/res/about/version.gmi
+++ b/res/about/version.gmi
@@ -6,9 +6,19 @@
6``` 6```
7# Release notes 7# Release notes
8 8
9## 1.8.2
10* Fixed encoding of `+` characters in URLs as per RFC 3986.
11* Fixed crash when fontpack.ini specifies a file that cannot be found.
12* Fixed incorrect title of some error messages (was showing response meta info).
13* Fixed ambiguous font dropdown menu items if some fonts have the same name. Now the unique font ID will be included in these cases.
14* Made it possible to manually trust a certificate whose subject doesn't match domain name.
15* Updated UI translations.
16
9## 1.8.1 17## 1.8.1
18* Added UI translations: Hungarian, Czech.
10* Added the `zip` utility as a build requirement. It is used for making fontpacks. 19* Added the `zip` utility as a build requirement. It is used for making fontpacks.
11* Fixed build failure with the simple text renderer, i.e., when HarfBuzz is disabled. 20* Fixed build failure with the simple text renderer, i.e., when HarfBuzz is disabled.
21* Fixed issues scrolling tall popup menus (e.g., UI language selection).
12* Fixed a line spacing artifact in long headings. With some fonts, the lines were clipping each other so the spacing was restored to normal. 22* Fixed a line spacing artifact in long headings. With some fonts, the lines were clipping each other so the spacing was restored to normal.
13* Fixed a socket I/O issue that caused received data to be ignored when the peer closed the connection prematurely. 23* Fixed a socket I/O issue that caused received data to be ignored when the peer closed the connection prematurely.
14* macOS: Tab close buttons are on the left side (platform UI convention). 24* macOS: Tab close buttons are on the left side (platform UI convention).
diff --git a/res/fi.skyjake.Lagrange.appdata.xml b/res/fi.skyjake.Lagrange.appdata.xml
index 02c2ec02..7cb12f2e 100644
--- a/res/fi.skyjake.Lagrange.appdata.xml
+++ b/res/fi.skyjake.Lagrange.appdata.xml
@@ -45,6 +45,56 @@
45 <update_contact>jaakko.keranen@iki.fi</update_contact> 45 <update_contact>jaakko.keranen@iki.fi</update_contact>
46 46
47 <releases> 47 <releases>
48 <release version="1.8.2" date="2021-11-13">
49 <description>
50 <p>Version 1.8 adds a customizable font library and improves warning
51 and errors messages. The bundled hardcoded fonts have been
52 removed, and font configuration is now more flexible. Tabs have
53 close buttons that appear on mouse hover.</p>
54 <p>Changes in v1.8.2:</p>
55 <ul>
56 <li>Fixed encoding of `+` characters in URLs as per
57 RFC 3986.</li>
58 <li>Fixed crash when fontpack.ini specifies a file that cannot
59 be found.</li>
60 <li>Fixed incorrect title of some error messages (was showing
61 response meta info).</li>
62 <li>Fixed ambiguous font dropdown menu items if some fonts have
63 the same name. Now the unique font ID will be included in
64 these cases.</li>
65 <li>Made it possible to manually trust a certificate whose
66 subject doesn't match domain name.</li>
67 <li>Updated UI translations.</li>
68 </ul>
69 <p>The full release notes can be viewed inside the app by opening
70 the "about:version" page.</p>
71 </description>
72 <url>https://github.com/skyjake/lagrange/releases/tag/v1.8.2</url>
73 </release>
74 <release version="1.8.1" date="2021-11-06">
75 <description>
76 <p>Version 1.8 adds a customizable font library and improves warning
77 and errors messages. The bundled hardcoded fonts have been
78 removed, and font configuration is now more flexible. Tabs have
79 close buttons that appear on mouse hover.</p>
80 <p>Changes in v1.8.1:</p>
81 <ul>
82 <li>Added UI translations: Hungarian, Czech.</li>
83 <li>Fixed issues scrolling tall popup menus (e.g., UI language
84 selection).</li>
85 <li>Fixed a line spacing artifact in long headings. With some
86 fonts, the lines were clipping each other so the spacing was
87 restored to normal.</li>
88 <li>Fixed a socket I/O issue that caused received data to be
89 ignored when the peer closed the connection prematurely.</li>
90 <li>Gopher: Recognize both LF and CRLF line endings in page
91 content.</li>
92 </ul>
93 <p>The full release notes can be viewed inside the app by opening
94 the "about:version" page.</p>
95 </description>
96 <url>https://github.com/skyjake/lagrange/releases/tag/v1.8.1</url>
97 </release>
48 <release version="1.8" date="2021-10-30"> 98 <release version="1.8" date="2021-10-30">
49 <description> 99 <description>
50 <p>Version 1.8 adds a customizable font library and improves warning 100 <p>Version 1.8 adds a customizable font library and improves warning
diff --git a/res/lang/cs.bin b/res/lang/cs.bin
new file mode 100644
index 00000000..d0dcabcd
--- /dev/null
+++ b/res/lang/cs.bin
Binary files differ
diff --git a/res/lang/de.bin b/res/lang/de.bin
index ab8b61e9..e3ea2835 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 f50c59e4..63a9d6c7 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 8f7415e1..a69a9f3f 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 fa58e37f..edd37672 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 7b7be4b6..ffb53cba 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 ea724c52..fc83470b 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 163488b7..bda6f4f6 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 fbd94fb4..23d9e952 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 104a1134..1470aea2 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 94d6264a..9c4ba6b5 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 ccf39a78..19687852 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 5cb76e7e..b501166c 100644
--- a/res/lang/isv.bin
+++ b/res/lang/isv.bin
Binary files differ
diff --git a/res/lang/pl.bin b/res/lang/pl.bin
index b2ac897c..f44d90fc 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 290c101f..4febb613 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 1f8f2817..402ab526 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 dac8a99f..12cc399f 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 b66ff147..9e36f8b0 100644
--- a/res/lang/tok.bin
+++ b/res/lang/tok.bin
Binary files differ
diff --git a/res/lang/uk.bin b/res/lang/uk.bin
index dc68bb4a..9e19b644 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 bd503eef..7a59c620 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 c4dc5896..76ac592a 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 78754d5d..abcf95da 100644
--- a/src/app.c
+++ b/src/app.c
@@ -2625,7 +2625,11 @@ iBool handleCommand_App(const char *cmd) {
2625 return iTrue; 2625 return iTrue;
2626 } 2626 }
2627 else if (equal_Command(cmd, "open")) { 2627 else if (equal_Command(cmd, "open")) {
2628 iString *url = collectNewCStr_String(suffixPtr_Command(cmd, "url")); 2628 const char *urlArg = suffixPtr_Command(cmd, "url");
2629 if (!urlArg) {
2630 return iTrue; /* invalid command */
2631 }
2632 iString *url = collectNewCStr_String(urlArg);
2629 const iBool noProxy = argLabel_Command(cmd, "noproxy") != 0; 2633 const iBool noProxy = argLabel_Command(cmd, "noproxy") != 0;
2630 const iBool fromSidebar = argLabel_Command(cmd, "fromsidebar") != 0; 2634 const iBool fromSidebar = argLabel_Command(cmd, "fromsidebar") != 0;
2631 iUrl parts; 2635 iUrl parts;
diff --git a/src/fontpack.c b/src/fontpack.c
index 215469b3..79f35526 100644
--- a/src/fontpack.c
+++ b/src/fontpack.c
@@ -559,6 +559,21 @@ static void sortSpecs_Fonts_(iFonts *d) {
559 sort_Array(&d->specOrder, cmpPriority_FontSpecPtr_); 559 sort_Array(&d->specOrder, cmpPriority_FontSpecPtr_);
560} 560}
561 561
562static void disambiguateSpecs_Fonts_(iFonts *d) {
563 /* Names of specs with the same human-readable label are augmented with the font ID. */
564 const size_t numSpecs = size_PtrArray(&d->specOrder);
565 for (size_t i = 0; i < numSpecs; i++) {
566 iFontSpec *spec1 = at_PtrArray(&d->specOrder, i);
567 for (size_t j = i + 1; j < numSpecs; j++) {
568 iFontSpec *spec2 = at_PtrArray(&d->specOrder, j);
569 if (equalCase_String(&spec1->name, &spec2->name)) {
570 appendFormat_String(&spec1->name, " [%s]", cstr_String(&spec1->id));
571 appendFormat_String(&spec2->name, " [%s]", cstr_String(&spec2->id));
572 }
573 }
574 }
575}
576
562static const iString *userFontsDirectory_Fonts_(const iFonts *d) { 577static const iString *userFontsDirectory_Fonts_(const iFonts *d) {
563 return collect_String(concatCStr_Path(&d->userDir, "fonts")); 578 return collect_String(concatCStr_Path(&d->userDir, "fonts"));
564} 579}
@@ -683,8 +698,12 @@ void init_Fonts(const char *userDir) {
683 pushBack_PtrArray(&d->packs, pack); 698 pushBack_PtrArray(&d->packs, pack);
684 } 699 }
685 } 700 }
686 } 701 }
687 sortSpecs_Fonts_(d); 702 sortSpecs_Fonts_(d);
703 disambiguateSpecs_Fonts_(d);
704#if !defined (NDEBUG)
705 printf("[FontPack] %zu fonts available\n", size_Array(&d->specOrder));
706#endif
688} 707}
689 708
690void deinit_Fonts(void) { 709void deinit_Fonts(void) {
diff --git a/src/gmcerts.c b/src/gmcerts.c
index 9073f2e7..36fd7d55 100644
--- a/src/gmcerts.c
+++ b/src/gmcerts.c
@@ -457,10 +457,8 @@ iBool checkTrust_GmCerts(iGmCerts *d, iRangecc domain, uint16_t port, const iTls
457 return iFalse; 457 return iFalse;
458 } 458 }
459 /* We trust CA verification implicitly. */ 459 /* We trust CA verification implicitly. */
460 const iBool isCATrusted = (verify_TlsCertificate(cert) == authority_TlsCertificateVerifyStatus); 460 const iBool isCATrusted = (verify_TlsCertificate(cert) == authority_TlsCertificateVerifyStatus);
461 if (!verifyDomain_GmCerts(cert, domain)) { 461 const iBool isDomainValid = verifyDomain_GmCerts(cert, domain);
462 return iFalse;
463 }
464 /* TODO: Could call setTrusted_GmCerts() instead of duplicating the trust-setting. */ 462 /* TODO: Could call setTrusted_GmCerts() instead of duplicating the trust-setting. */
465 /* Good certificate. If not already trusted, add it now. */ 463 /* Good certificate. If not already trusted, add it now. */
466 iDate until; 464 iDate until;
@@ -470,7 +468,7 @@ iBool checkTrust_GmCerts(iGmCerts *d, iRangecc domain, uint16_t port, const iTls
470 init_String(&key); 468 init_String(&key);
471 makeTrustKey_(domain, port, &key); 469 makeTrustKey_(domain, port, &key);
472 lock_Mutex(d->mtx); 470 lock_Mutex(d->mtx);
473 iBool ok = !isExpired_TlsCertificate(cert); 471 iBool ok = isDomainValid && !isExpired_TlsCertificate(cert);
474 iTrustEntry *trust = value_StringHash(d->trusted, &key); 472 iTrustEntry *trust = value_StringHash(d->trusted, &key);
475 if (trust) { 473 if (trust) {
476 /* We already have it, check if it matches the one we trust for this domain (if it's 474 /* We already have it, check if it matches the one we trust for this domain (if it's
diff --git a/src/gmutil.c b/src/gmutil.c
index bc42690c..70a3608e 100644
--- a/src/gmutil.c
+++ b/src/gmutil.c
@@ -662,14 +662,14 @@ const iString *canonicalUrl_String(const iString *d) {
662 /* This is done separately to avoid the copy if %3A is not present; it's rare. */ 662 /* This is done separately to avoid the copy if %3A is not present; it's rare. */
663 canon = copy_String(d); 663 canon = copy_String(d);
664 urlDecodePath_String(canon); 664 urlDecodePath_String(canon);
665 iString *dec = maybeUrlDecodeExclude_String(canon, "%/?:;#&= "); /* decode everything else in all parts */ 665 iString *dec = maybeUrlDecodeExclude_String(canon, "%/?:;#&+= "); /* decode everything else in all parts */
666 if (dec) { 666 if (dec) {
667 set_String(canon, dec); 667 set_String(canon, dec);
668 delete_String(dec); 668 delete_String(dec);
669 } 669 }
670 } 670 }
671 else { 671 else {
672 canon = maybeUrlDecodeExclude_String(d, "%/?:;#&= "); 672 canon = maybeUrlDecodeExclude_String(d, "%/?:;#&+= ");
673 } 673 }
674 /* `canon` may now be NULL if nothing was decoded. */ 674 /* `canon` may now be NULL if nothing was decoded. */
675 if (indexOfCStr_String(canon ? canon : d, " ") != iInvalidPos || 675 if (indexOfCStr_String(canon ? canon : d, " ") != iInvalidPos ||
diff --git a/src/lang.c b/src/lang.c
index c4431202..0bafb42b 100644
--- a/src/lang.c
+++ b/src/lang.c
@@ -88,6 +88,7 @@ static void load_Lang_(iLang *d, const char *id) {
88 iUnused(id); 88 iUnused(id);
89 const iBlock *data = equal_CStr(id, "fi") ? &blobFi_Resources 89 const iBlock *data = equal_CStr(id, "fi") ? &blobFi_Resources
90 : equal_CStr(id, "fr") ? &blobFr_Resources 90 : equal_CStr(id, "fr") ? &blobFr_Resources
91 : equal_CStr(id, "cs") ? &blobCs_Resources
91 : equal_CStr(id, "ru") ? &blobRu_Resources 92 : equal_CStr(id, "ru") ? &blobRu_Resources
92 : equal_CStr(id, "eo") ? &blobEo_Resources 93 : equal_CStr(id, "eo") ? &blobEo_Resources
93 : equal_CStr(id, "es") ? &blobEs_Resources 94 : equal_CStr(id, "es") ? &blobEs_Resources
@@ -112,7 +113,7 @@ static void load_Lang_(iLang *d, const char *id) {
112 else if (data == &blobIsv_Resources) { 113 else if (data == &blobIsv_Resources) {
113 d->pluralType = oneTwoMany_PluralType; 114 d->pluralType = oneTwoMany_PluralType;
114 } 115 }
115 else if (data == &blobSk_Resources) { 116 else if (data == &blobCs_Resources || data == &blobSk_Resources) {
116 d->pluralType = oneFewMany_PluralType; 117 d->pluralType = oneFewMany_PluralType;
117 } 118 }
118 else if (data == &blobPl_Resources) { 119 else if (data == &blobPl_Resources) {
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 8c24d4a9..f2553632 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -1107,12 +1107,11 @@ static void documentWasChanged_DocumentWidget_(iDocumentWidget *d) {
1107 1107
1108void setSource_DocumentWidget(iDocumentWidget *d, const iString *source) { 1108void setSource_DocumentWidget(iDocumentWidget *d, const iString *source) {
1109 setUrl_GmDocument(d->doc, d->mod.url); 1109 setUrl_GmDocument(d->doc, d->mod.url);
1110 const int docWidth = documentWidth_DocumentWidget_(d); 1110 const int docWidth = documentWidth_DocumentWidget_(d);
1111 const int outsideMargin = (width_Widget(d) - docWidth) / 2;
1112 setSource_GmDocument(d->doc, 1111 setSource_GmDocument(d->doc,
1113 source, 1112 source,
1114 docWidth, 1113 docWidth,
1115 outsideMargin, 1114 width_Widget(d),
1116 isFinished_GmRequest(d->request) ? final_GmDocumentUpdate 1115 isFinished_GmRequest(d->request) ? final_GmDocumentUpdate
1117 : partial_GmDocumentUpdate); 1116 : partial_GmDocumentUpdate);
1118 setWidth_Banner(d->banner, docWidth); 1117 setWidth_Banner(d->banner, docWidth);
@@ -1196,6 +1195,7 @@ static void showErrorPage_DocumentWidget_(iDocumentWidget *d, enum iGmStatusCode
1196// iBool useBanner = iTrue; 1195// iBool useBanner = iTrue;
1197 destroy_Widget(d->footerButtons); 1196 destroy_Widget(d->footerButtons);
1198 d->footerButtons = NULL; 1197 d->footerButtons = NULL;
1198 const iString *serverErrorMsg = NULL;
1199 if (meta) { 1199 if (meta) {
1200 switch (code) { 1200 switch (code) {
1201 case schemeChangeRedirect_GmStatusCode: 1201 case schemeChangeRedirect_GmStatusCode:
@@ -1254,12 +1254,13 @@ static void showErrorPage_DocumentWidget_(iDocumentWidget *d, enum iGmStatusCode
1254 "document.save" }); 1254 "document.save" });
1255 makeFooterButtons_DocumentWidget_(d, data_Array(&items), size_Array(&items)); 1255 makeFooterButtons_DocumentWidget_(d, data_Array(&items), size_Array(&items));
1256 deinit_Array(&items); 1256 deinit_Array(&items);
1257 serverErrorMsg = collectNewFormat_String("%s (%s)", msg->title, cstr_String(meta));
1257 break; 1258 break;
1258 } 1259 }
1259 default: 1260 default:
1260// if (!isEmpty_String(meta)) { 1261 if (!isEmpty_String(meta)) {
1261// appendFormat_String(src, "\n\n${error.server.msg}\n> %s", cstr_String(meta)); 1262 serverErrorMsg = meta;
1262// } 1263 }
1263 break; 1264 break;
1264 } 1265 }
1265 } 1266 }
@@ -1277,7 +1278,7 @@ static void showErrorPage_DocumentWidget_(iDocumentWidget *d, enum iGmStatusCode
1277 replaceDocument_DocumentWidget_(d, errorDoc); 1278 replaceDocument_DocumentWidget_(d, errorDoc);
1278 iRelease(errorDoc); 1279 iRelease(errorDoc);
1279 clear_Banner(d->banner); 1280 clear_Banner(d->banner);
1280 add_Banner(d->banner, error_BannerType, code, meta, NULL); 1281 add_Banner(d->banner, error_BannerType, code, serverErrorMsg, NULL);
1281 d->state = ready_RequestState; 1282 d->state = ready_RequestState;
1282 setSource_DocumentWidget(d, src); 1283 setSource_DocumentWidget(d, src);
1283 updateTheme_DocumentWidget_(d); 1284 updateTheme_DocumentWidget_(d);
@@ -2081,6 +2082,13 @@ static void inputQueryValidator_(iInputWidget *input, void *context) {
2081 arrange_Widget(findChild_Widget(dlg, "dialogbuttons")); 2082 arrange_Widget(findChild_Widget(dlg, "dialogbuttons"));
2082} 2083}
2083 2084
2085static const char *humanReadableStatusCode_(enum iGmStatusCode code) {
2086 if (code <= 0) {
2087 return "";
2088 }
2089 return format_CStr("%d ", code);
2090}
2091
2084static void checkResponse_DocumentWidget_(iDocumentWidget *d) { 2092static void checkResponse_DocumentWidget_(iDocumentWidget *d) {
2085 if (!d->request) { 2093 if (!d->request) {
2086 return; 2094 return;
@@ -2105,8 +2113,8 @@ static void checkResponse_DocumentWidget_(iDocumentWidget *d) {
2105 init_Anim(&d->sideOpacity, 0); 2113 init_Anim(&d->sideOpacity, 0);
2106 init_Anim(&d->altTextOpacity, 0); 2114 init_Anim(&d->altTextOpacity, 0);
2107 format_String(&d->sourceHeader, 2115 format_String(&d->sourceHeader,
2108 "%d %s", 2116 "%s%s",
2109 statusCode, 2117 humanReadableStatusCode_(statusCode),
2110 isEmpty_String(&resp->meta) && !isSuccess_GmStatusCode(statusCode) 2118 isEmpty_String(&resp->meta) && !isSuccess_GmStatusCode(statusCode)
2111 ? get_GmError(statusCode)->title 2119 ? get_GmError(statusCode)->title
2112 : cstr_String(&resp->meta)); 2120 : cstr_String(&resp->meta));
@@ -2835,9 +2843,10 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
2835 const char *unchecked = red_ColorEscape "\u2610"; 2843 const char *unchecked = red_ColorEscape "\u2610";
2836 const char *checked = green_ColorEscape "\u2611"; 2844 const char *checked = green_ColorEscape "\u2611";
2837 const iBool haveFingerprint = (d->certFlags & haveFingerprint_GmCertFlag) != 0; 2845 const iBool haveFingerprint = (d->certFlags & haveFingerprint_GmCertFlag) != 0;
2838 const iBool canTrust = 2846 const int requiredForTrust = (available_GmCertFlag | haveFingerprint_GmCertFlag |
2839 (d->certFlags == (available_GmCertFlag | haveFingerprint_GmCertFlag | 2847 timeVerified_GmCertFlag);
2840 timeVerified_GmCertFlag | domainVerified_GmCertFlag)); 2848 const iBool canTrust = ~d->certFlags & trusted_GmCertFlag &&
2849 ((d->certFlags & requiredForTrust) == requiredForTrust);
2841 const iRecentUrl *recent = findUrl_History(d->mod.history, d->mod.url); 2850 const iRecentUrl *recent = findUrl_History(d->mod.history, d->mod.url);
2842 const iString *meta = &d->sourceMime; 2851 const iString *meta = &d->sourceMime;
2843 if (recent && recent->cachedResponse) { 2852 if (recent && recent->cachedResponse) {
@@ -3030,8 +3039,8 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
3030 if (!isSuccess_GmStatusCode(status_GmRequest(d->request))) { 3039 if (!isSuccess_GmStatusCode(status_GmRequest(d->request))) {
3031 /* TODO: Why is this here? Can it be removed? */ 3040 /* TODO: Why is this here? Can it be removed? */
3032 format_String(&d->sourceHeader, 3041 format_String(&d->sourceHeader,
3033 "%d %s", 3042 "%s%s",
3034 status_GmRequest(d->request), 3043 humanReadableStatusCode_(status_GmRequest(d->request)),
3035 cstr_String(meta_GmRequest(d->request))); 3044 cstr_String(meta_GmRequest(d->request)));
3036 } 3045 }
3037 updateFetchProgress_DocumentWidget_(d); 3046 updateFetchProgress_DocumentWidget_(d);
diff --git a/src/ui/lookupwidget.c b/src/ui/lookupwidget.c
index e57a5fdc..da0113ce 100644
--- a/src/ui/lookupwidget.c
+++ b/src/ui/lookupwidget.c
@@ -665,8 +665,9 @@ static iBool processEvent_LookupWidget_(iLookupWidget *d, const SDL_Event *ev) {
665 (bottom_Rect(rect_Root(root)) - bottom_Rect(navBarBounds)) / 2)); 665 (bottom_Rect(rect_Root(root)) - bottom_Rect(navBarBounds)) / 2));
666 setPos_Widget(w, windowToLocal_Widget(w, bottomLeft_Rect(bounds_Widget(url)))); 666 setPos_Widget(w, windowToLocal_Widget(w, bottomLeft_Rect(bounds_Widget(url))));
667#if defined (iPlatformAppleMobile) 667#if defined (iPlatformAppleMobile)
668 /* TODO: Check this again. */
668 /* Adjust height based on keyboard size. */ { 669 /* Adjust height based on keyboard size. */ {
669 w->rect.size.y = visibleSize_Root(root).y - top_Rect(bounds_Widget(w)); 670 w->rect.size.y = bottom_Rect(visibleRect_Root(root)) - top_Rect(bounds_Widget(w));
670 if (deviceType_App() == phone_AppDeviceType) { 671 if (deviceType_App() == phone_AppDeviceType) {
671 float l, r; 672 float l, r;
672 safeAreaInsets_iOS(&l, NULL, &r, NULL); 673 safeAreaInsets_iOS(&l, NULL, &r, NULL);
diff --git a/src/ui/root.c b/src/ui/root.c
index 114ab040..4849d0c7 100644
--- a/src/ui/root.c
+++ b/src/ui/root.c
@@ -1532,6 +1532,35 @@ iRect safeRect_Root(const iRoot *d) {
1532 return rect; 1532 return rect;
1533} 1533}
1534 1534
1535iInt2 visibleSize_Root(const iRoot *d) { 1535iRect visibleRect_Root(const iRoot *d) {
1536 return addY_I2(size_Root(d), -get_MainWindow()->keyboardHeight); 1536 iRect visRect = rect_Root(d);
1537#if defined (iPlatformAppleMobile)
1538 /* TODO: Check this on device... Maybe DisplayUsableBounds would be good here, too? */
1539 float left, top, right, bottom;
1540 safeAreaInsets_iOS(&left, &top, &right, &bottom);
1541 visRect.pos.x = (int) left;
1542 visRect.size.x -= (int) (left + right);
1543 visRect.pos.y = (int) top;
1544 visRect.size.y -= (int) (top + bottom);
1545#endif
1546#if defined (iPlatformDesktop)
1547 /* Apply the usable bounds of the display. */
1548 SDL_Rect usable; {
1549 const float ratio = d->window->pixelRatio;
1550 SDL_GetDisplayUsableBounds(SDL_GetWindowDisplayIndex(d->window->win), &usable);
1551 iInt2 winPos;
1552 SDL_GetWindowPosition(d->window->win, &winPos.x, &winPos.y);
1553 mulfv_I2(&winPos, ratio);
1554 usable.x *= ratio;
1555 usable.y *= ratio;
1556 usable.w *= ratio;
1557 usable.h *= ratio;
1558 /* Make it relative to the window. */
1559 usable.x -= winPos.x;
1560 usable.y -= winPos.y;
1561 visRect = intersect_Rect(visRect, init_Rect(usable.x, usable.y, usable.w, usable.h));
1562 }
1563#endif
1564 adjustEdges_Rect(&visRect, 0, 0, -get_MainWindow()->keyboardHeight, 0);
1565 return visRect;
1537} 1566}
diff --git a/src/ui/root.h b/src/ui/root.h
index 04dd5e16..851d927d 100644
--- a/src/ui/root.h
+++ b/src/ui/root.h
@@ -40,6 +40,6 @@ void updateToolbarColors_Root (iRoot *);
40iInt2 size_Root (const iRoot *); 40iInt2 size_Root (const iRoot *);
41iRect rect_Root (const iRoot *); 41iRect rect_Root (const iRoot *);
42iRect safeRect_Root (const iRoot *); 42iRect safeRect_Root (const iRoot *);
43iInt2 visibleSize_Root (const iRoot *); /* may be obstructed by software keyboard */ 43iRect visibleRect_Root (const iRoot *); /* may be obstructed by software keyboard */
44iBool isNarrow_Root (const iRoot *); 44iBool isNarrow_Root (const iRoot *);
45int appIconSize_Root (void); 45int appIconSize_Root (void);
diff --git a/src/ui/text.c b/src/ui/text.c
index 3805c666..91633f27 100644
--- a/src/ui/text.c
+++ b/src/ui/text.c
@@ -338,7 +338,7 @@ static void initFonts_Text_(iText *d) {
338 } 338 }
339 } 339 }
340#if !defined (NDEBUG) 340#if !defined (NDEBUG)
341 printf("[Text] %zu fonts ready\n", size_Array(&d->fonts)); 341 printf("[Text] %zu font variants ready\n", size_Array(&d->fonts));
342#endif 342#endif
343 gap_Text = iRound(gap_UI * d->contentFontSize); 343 gap_Text = iRound(gap_UI * d->contentFontSize);
344} 344}
diff --git a/src/ui/util.c b/src/ui/util.c
index 5a58551b..88348ff8 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -1038,7 +1038,7 @@ void openMenuFlags_Widget(iWidget *d, iInt2 windowCoord, int menuOpenFlags) {
1038 iRect displayRect = zero_Rect(); 1038 iRect displayRect = zero_Rect();
1039 for (int i = 0; i < SDL_GetNumVideoDisplays(); i++) { 1039 for (int i = 0; i < SDL_GetNumVideoDisplays(); i++) {
1040 SDL_Rect dispBounds; 1040 SDL_Rect dispBounds;
1041 SDL_GetDisplayBounds(i, &dispBounds); 1041 SDL_GetDisplayUsableBounds(i, &dispBounds);
1042 displayRect = union_Rect( 1042 displayRect = union_Rect(
1043 displayRect, init_Rect(dispBounds.x, dispBounds.y, dispBounds.w, dispBounds.h)); 1043 displayRect, init_Rect(dispBounds.x, dispBounds.y, dispBounds.w, dispBounds.h));
1044 } 1044 }
@@ -1070,7 +1070,7 @@ void openMenuFlags_Widget(iWidget *d, iInt2 windowCoord, int menuOpenFlags) {
1070 iInt2 menuPos = add_I2(winPos, 1070 iInt2 menuPos = add_I2(winPos,
1071 divf_I2(sub_I2(windowCoord, divi_I2(gap2_UI, 2)), pixelRatio)); 1071 divf_I2(sub_I2(windowCoord, divi_I2(gap2_UI, 2)), pixelRatio));
1072 /* Check display bounds. */ { 1072 /* Check display bounds. */ {
1073 const iInt2 menuSize = divf_I2(d->rect.size, pixelRatio); 1073 iInt2 menuSize = divf_I2(d->rect.size, pixelRatio);
1074 if (menuOpenFlags & center_MenuOpenFlags) { 1074 if (menuOpenFlags & center_MenuOpenFlags) {
1075 iInt2 winSize; 1075 iInt2 winSize;
1076 SDL_GetWindowSize(sdlWin, &winSize.x, &winSize.y); 1076 SDL_GetWindowSize(sdlWin, &winSize.x, &winSize.y);
@@ -2199,7 +2199,8 @@ iWidget *makeDialog_Widget(const char *id,
2199 2199
2200iWidget *makePreferences_Widget(void) { 2200iWidget *makePreferences_Widget(void) {
2201 /* Common items. */ 2201 /* Common items. */
2202 const iMenuItem langItems[] = { { "${lang.de} - de", 0, 0, "uilang id:de" }, 2202 const iMenuItem langItems[] = { { "${lang.cs} - cs", 0, 0, "uilang id:cs" },
2203 { "${lang.de} - de", 0, 0, "uilang id:de" },
2203 { "${lang.en} - en", 0, 0, "uilang id:en" }, 2204 { "${lang.en} - en", 0, 0, "uilang id:en" },
2204 { "${lang.es} - es", 0, 0, "uilang id:es" }, 2205 { "${lang.es} - es", 0, 0, "uilang id:es" },
2205 { "${lang.es.mx} - es", 0, 0, "uilang id:es_MX" }, 2206 { "${lang.es.mx} - es", 0, 0, "uilang id:es_MX" },
diff --git a/src/ui/widget.c b/src/ui/widget.c
index b509cbe2..1ab16b4f 100644
--- a/src/ui/widget.c
+++ b/src/ui/widget.c
@@ -1142,11 +1142,9 @@ static iBool isOverflowScrollPossible_Widget_(const iWidget *d, int delta) {
1142 return iFalse; 1142 return iFalse;
1143 } 1143 }
1144 iRect bounds = boundsWithoutVisualOffset_Widget(d); 1144 iRect bounds = boundsWithoutVisualOffset_Widget(d);
1145 const iRect winRect = adjusted_Rect(safeRect_Root(d->root), 1145 const iRect winRect = visibleRect_Root(d->root);
1146 zero_I2(), 1146 const int yTop = top_Rect(winRect);
1147 init_I2(0, -get_MainWindow()->keyboardHeight)); 1147 const int yBottom = bottom_Rect(winRect);
1148 const int yTop = top_Rect(winRect);
1149 const int yBottom = bottom_Rect(winRect);
1150 if (delta == 0) { 1148 if (delta == 0) {
1151 if (top_Rect(bounds) >= yTop && bottom_Rect(bounds) <= yBottom) { 1149 if (top_Rect(bounds) >= yTop && bottom_Rect(bounds) <= yBottom) {
1152 return iFalse; /* fits inside just fine */ 1150 return iFalse; /* fits inside just fine */
@@ -1162,11 +1160,9 @@ iBool scrollOverflow_Widget(iWidget *d, int delta) {
1162 if (!isOverflowScrollPossible_Widget_(d, delta)) { 1160 if (!isOverflowScrollPossible_Widget_(d, delta)) {
1163 return iFalse; 1161 return iFalse;
1164 } 1162 }
1165 iRect bounds = boundsWithoutVisualOffset_Widget(d); 1163 iRect bounds = boundsWithoutVisualOffset_Widget(d);
1166 const iRect winRect = adjusted_Rect(safeRect_Root(d->root), 1164 const iRect winRect = visibleRect_Root(d->root);
1167 zero_I2(), 1165 iRangei validPosRange = { bottom_Rect(winRect) - height_Rect(bounds), top_Rect(winRect) };
1168 init_I2(0, -get_MainWindow()->keyboardHeight));
1169 iRangei validPosRange = { bottom_Rect(winRect) - height_Rect(bounds), top_Rect(winRect) };
1170 if (validPosRange.start > validPosRange.end) { 1166 if (validPosRange.start > validPosRange.end) {
1171 validPosRange.start = validPosRange.end; /* no room to scroll */ 1167 validPosRange.start = validPosRange.end; /* no room to scroll */
1172 } 1168 }
@@ -1244,18 +1240,26 @@ iBool processEvent_Widget(iWidget *d, const SDL_Event *ev) {
1244 /* TODO: Motion events occur frequently. Maybe it would help if these were handled 1240 /* TODO: Motion events occur frequently. Maybe it would help if these were handled
1245 via audiences that specifically register to listen for motion, to minimize the 1241 via audiences that specifically register to listen for motion, to minimize the
1246 number of widgets that need to process them. */ 1242 number of widgets that need to process them. */
1247 const int hoverScrollLimit = 2 * lineHeight_Text(default_FontId); 1243 const int hoverScrollLimit = 1.5f * lineHeight_Text(default_FontId);
1248 float speed = 0.0f; 1244 float speed = 0.0f;
1249 if (ev->motion.y < hoverScrollLimit) { 1245 if (ev->motion.y < hoverScrollLimit) {
1250 speed = (hoverScrollLimit - ev->motion.y) / (float) hoverScrollLimit; 1246 speed = (hoverScrollLimit - ev->motion.y) / (float) hoverScrollLimit;
1251 } 1247 }
1252 else { 1248 else {
1253 const int bottomLimit = bottom_Rect(rect_Root(d->root)) - hoverScrollLimit; 1249 const iWindow *win = window_Widget(d);
1254 if (ev->motion.y > bottomLimit ) { 1250 SDL_Rect usable;
1251 SDL_GetDisplayUsableBounds(SDL_GetWindowDisplayIndex(win->win),
1252 &usable);
1253 const int bottomLimit =
1254 iMin(bottom_Rect(rect_Root(d->root)), usable.h * win->pixelRatio) -
1255 hoverScrollLimit;
1256 if (ev->motion.y > bottomLimit) {
1255 speed = -(ev->motion.y - bottomLimit) / (float) hoverScrollLimit; 1257 speed = -(ev->motion.y - bottomLimit) / (float) hoverScrollLimit;
1256 } 1258 }
1257 } 1259 }
1258 if (speed != 0.0f && isOverflowScrollPossible_Widget_(d, speed > 0 ? 1 : -1)) { 1260 const int dir = speed > 0 ? 1 : -1;
1261 if (speed != 0.0f && isOverflowScrollPossible_Widget_(d, dir)) {
1262// speed = dir * powf(speed, 1.5f);
1259 const uint32_t nowTime = SDL_GetTicks(); 1263 const uint32_t nowTime = SDL_GetTicks();
1260 uint32_t elapsed = nowTime - lastHoverOverflowMotionTime_; 1264 uint32_t elapsed = nowTime - lastHoverOverflowMotionTime_;
1261 if (elapsed > 100) { 1265 if (elapsed > 100) {
diff --git a/src/ui/window.c b/src/ui/window.c
index 8016e8ef..2f6fe430 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -1676,9 +1676,13 @@ iWindow *newPopup_Window(iInt2 screenPos, iWidget *rootWidget) {
1676#if !defined (iPlatformApple) 1676#if !defined (iPlatformApple)
1677 setForceSoftwareRender_App(iTrue); 1677 setForceSoftwareRender_App(iTrue);
1678#endif 1678#endif
1679 SDL_Rect usableRect;
1680 SDL_GetDisplayUsableBounds(SDL_GetWindowDisplayIndex(get_MainWindow()->base.win),
1681 &usableRect);
1679 iWindow *win = 1682 iWindow *win =
1680 new_Window(popup_WindowType, 1683 new_Window(popup_WindowType,
1681 (iRect){ screenPos, divf_I2(rootWidget->rect.size, get_Window()->pixelRatio) }, 1684 (iRect){ screenPos, min_I2(divf_I2(rootWidget->rect.size, get_Window()->pixelRatio),
1685 init_I2(usableRect.w, usableRect.h)) },
1682 SDL_WINDOW_ALWAYS_ON_TOP | 1686 SDL_WINDOW_ALWAYS_ON_TOP |
1683#if !defined (iPlatformAppleDesktop) 1687#if !defined (iPlatformAppleDesktop)
1684 SDL_WINDOW_BORDERLESS | 1688 SDL_WINDOW_BORDERLESS |