summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--po/de.po25
-rw-r--r--po/es_MX.po128
-rw-r--r--po/fi.po5
-rw-r--r--po/ie.po455
-rw-r--r--po/ru.po5
-rw-r--r--po/zh_Hans.po5
-rw-r--r--po/zh_Hant.po5
-rw-r--r--res/lang/es.binbin17904 -> 17958 bytes
-rw-r--r--res/lang/fi.binbin17561 -> 17617 bytes
-rw-r--r--res/lang/ru.binbin26788 -> 26905 bytes
-rw-r--r--res/lang/zh_Hans.binbin15485 -> 15534 bytes
-rw-r--r--src/gmdocument.c4
-rw-r--r--src/macos.m4
-rw-r--r--src/ui/documentwidget.c5
-rw-r--r--src/ui/keys.h2
-rw-r--r--src/ui/labelwidget.c25
-rw-r--r--src/ui/util.c7
17 files changed, 654 insertions, 21 deletions
diff --git a/po/de.po b/po/de.po
index d34906ba..2d14b13c 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,8 +1,8 @@
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-03-27 04:56+0000\n" 4"PO-Revision-Date: 2021-03-29 05:43+0000\n"
5"Last-Translator: Jaakko Keränen <jaakko.keranen@iki.fi>\n" 5"Last-Translator: Aaron Fischer <mail@aaron-fischer.net>\n"
6"Language-Team: German <http://weblate.skyjake.fi/projects/lagrange/ui/de/>\n" 6"Language-Team: German <http://weblate.skyjake.fi/projects/lagrange/ui/de/>\n"
7"Language: de\n" 7"Language: de\n"
8"MIME-Version: 1.0\n" 8"MIME-Version: 1.0\n"
@@ -629,3 +629,24 @@ msgstr "Eine Seite vor"
629 629
630msgid "keys.back" 630msgid "keys.back"
631msgstr "Eine Seite zurück" 631msgstr "Eine Seite zurück"
632
633msgid "num.bytes"
634msgid_plural "num.bytes.n"
635msgstr[0] "%zu Byte"
636msgstr[1] "%zu Bytes"
637
638# strftime() formatted, split on two lines
639#, c-format
640msgid "page.timestamp"
641msgstr ""
642"Empfangen am %I:%M %p\n"
643"um %b %d, %Y"
644
645msgid "doc.pre.nocaption"
646msgstr "Formatierter Text ohne Überschrift"
647
648msgid "menu.aboutpages"
649msgstr "About-Seiten"
650
651msgid "menu.bookmarks.refresh"
652msgstr "Remote-Lesezeichen aktualisieren"
diff --git a/po/es_MX.po b/po/es_MX.po
index b27844d0..cfb32ce0 100644
--- a/po/es_MX.po
+++ b/po/es_MX.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-03-28 06:32+0000\n" 4"PO-Revision-Date: 2021-03-29 05:43+0000\n"
5"Last-Translator: El Mau <public@correolibre.net>\n" 5"Last-Translator: El Mau <public@correolibre.net>\n"
6"Language-Team: Spanish (Mexico) <http://weblate.skyjake.fi/projects/lagrange/" 6"Language-Team: Spanish (Mexico) <http://weblate.skyjake.fi/projects/lagrange/"
7"ui/es_MX/>\n" 7"ui/es_MX/>\n"
@@ -269,3 +269,129 @@ msgstr "Esquema de la Página"
269 269
270msgid "hint.findtext" 270msgid "hint.findtext"
271msgstr "Buscar Texto en la Página" 271msgstr "Buscar Texto en la Página"
272
273msgid "num.bytes"
274msgid_plural "num.bytes.n"
275msgstr[0] "%zu byte"
276msgstr[1] "%zu bytes"
277
278msgid "status.query"
279msgstr "Consulta de Búsqueda"
280
281msgid "status.feeds"
282msgstr "Actualizando Suscripciones"
283
284# megabytes, used as the unit after a number
285msgid "mb"
286msgstr "MB"
287
288# kilobytes, used as the unit after a number
289msgid "kb"
290msgstr "KB"
291
292# strftime() formatted, split on two lines
293#, c-format
294msgid "page.timestamp"
295msgstr ""
296"Recibido a las %I:%M %p\n"
297"el %d, %b, %Y"
298
299# strftime() formatted
300#, c-format
301msgid "sidebar.date.thisyear"
302msgstr "%d. %b"
303
304# strftime() formatted
305#, c-format
306msgid "sidebar.date.otheryear"
307msgstr "%d.%b, %Y"
308
309msgid "feeds.today"
310msgstr "Hoy"
311
312msgid "feeds.entry.newtab"
313msgstr "Abrir Entrada en Nueva Pestaña"
314
315msgid "feeds.entry.markread"
316msgstr "Marcar como leído"
317
318msgid "sidebar.entry.bookmark"
319msgstr "Añadir favorito…"
320
321msgid "feeds.entry.bookmark"
322msgstr "Agregar favorito…"
323
324msgid "feeds.entry.openfeed"
325msgstr "Abrir Página de Suscripciones"
326
327msgid "feeds.edit"
328msgstr "Editar Suscripción…"
329
330msgid "feeds.unsubscribe"
331msgstr "Eliminar Suscripción…"
332
333msgid "feeds.refresh"
334msgstr "Refrescar Suscripciones"
335
336msgid "menu.opentab"
337msgstr "Abrir en Nueva Pestaña"
338
339msgid "menu.opentab.background"
340msgstr "Abrir en Pestaña de Fondo"
341
342msgid "menu.edit"
343msgstr "Editar…"
344
345msgid "menu.dup"
346msgstr "Duplicar…"
347
348msgid "menu.copyurl"
349msgstr "Copiar URL"
350
351msgid "history.clear"
352msgstr "Limpiar Historial…"
353
354msgid "heading.history.clear"
355msgstr "LIMPIAR HISTORIAL"
356
357msgid "feeds.entry.markunread"
358msgstr "Marcar como no leído"
359
360msgid "feeds.markallread"
361msgstr "Marcar Todo como Leído"
362
363msgid "menu.forgeturl"
364msgstr "Olvidar URL"
365
366msgid "dlg.confirm.history.clear"
367msgstr "¿De verdad quiere borrar el historial de todas las páginas visitadas?"
368
369msgid "dlg.history.clear"
370msgstr "Limpiar Historial"
371
372msgid "bookmark.tag.home"
373msgstr "Usar como Página de Inicio"
374
375msgid "bookmark.tag.sub"
376msgstr "Suscribirse"
377
378msgid "bookmark.tag.remote"
379msgstr "Usar como Fuente de Marcador"
380
381msgid "bookmark.untag.home"
382msgstr "Remover Página de Inicio"
383
384msgid "bookmark.untag.sub"
385msgstr "Eliminar Suscripción"
386
387msgid "bookmark.untag.remote"
388msgstr "Remover Fuente de Marcador"
389
390msgid "bookmark.delete"
391msgstr "Borrar favorita"
392
393msgid "bookmarks.reload"
394msgstr "Refrescar Fuentes Remotas"
395
396msgid "doc.pre.nocaption"
397msgstr "Texto preformateado sin título"
diff --git a/po/fi.po b/po/fi.po
index e25c5e6e..25b36694 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-03-28 06:32+0000\n" 6"PO-Revision-Date: 2021-03-29 05:43+0000\n"
7"Last-Translator: Jaakko Keränen <jaakko.keranen@iki.fi>\n" 7"Last-Translator: Jaakko Keränen <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"
@@ -1308,3 +1308,6 @@ msgid "num.hours"
1308msgid_plural "num.hours.n" 1308msgid_plural "num.hours.n"
1309msgstr[0] "%d tunti" 1309msgstr[0] "%d tunti"
1310msgstr[1] "%d tuntia" 1310msgstr[1] "%d tuntia"
1311
1312msgid "doc.pre.nocaption"
1313msgstr "Esimuotoiltua tekstiä ilman kuvausta"
diff --git a/po/ie.po b/po/ie.po
index 67c95ed7..9c1d353a 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-03-27 04:56+0000\n" 4"PO-Revision-Date: 2021-03-28 19:06+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"
@@ -845,3 +845,456 @@ msgstr "Li demande ne successat, ma posse successar si on repena plu tard."
845 845
846msgid "error.gone" 846msgid "error.gone"
847msgstr "Foreat" 847msgstr "Foreat"
848
849# Alt-text of the preformatted logo.
850msgid "about.logo"
851msgstr "Dessine ASCII: li parol «Lagrange» in un grand fonde"
852
853msgid "about.powered"
854msgstr "Functiona med SDL 2, OpenSSL e ☕️"
855
856msgid "menu.copy.source"
857msgstr "Copiar li textu del fonte"
858
859msgid "menu.bookmarks.list"
860msgstr "Monstrar omni marca-págines"
861
862msgid "macos.menu.bookmarks.list"
863msgstr "Monstrar omni"
864
865msgid "menu.bookmarks.bytag"
866msgstr "Monstrar marca-págines secun li tags"
867
868msgid "macos.menu.bookmarks.bytag"
869msgstr "Secun tags"
870
871msgid "menu.page.bookmark"
872msgstr "Adjuncter un marca-págine…"
873
874msgid "menu.aboutpages"
875msgstr "Págine pri li application"
876
877msgid "menu.debug"
878msgstr "Information de debug"
879
880msgid "menu.page.copyurl"
881msgstr "Copiar li URL del págine"
882
883msgid "menu.page.copysource"
884msgstr "Copiar li fonte del págine"
885
886msgid "hint.findtext"
887msgstr "Trovar textu sur li págine"
888
889msgid "status.query"
890msgstr "Sercha"
891
892msgid "status.feeds"
893msgstr "Actualisante feeds"
894
895# strftime() formatted, split on two lines
896#, c-format
897msgid "page.timestamp"
898msgstr ""
899"Recivet a %H:%M\n"
900"ye %d.%m.%Y"
901
902msgid "feeds.entry.openfeed"
903msgstr "Aperter li págine del feed"
904
905msgid "feeds.edit"
906msgstr "Modificar li feed…"
907
908msgid "menu.forgeturl"
909msgstr "Obliviar li URL"
910
911msgid "bookmark.tag.remote"
912msgstr "Usar quam fonte de marca-págines"
913
914msgid "bookmark.untag.home"
915msgstr "Remover li hem-págine"
916
917# %s refers to name of an identity.
918#, c-format
919msgid "dlg.ident.notes"
920msgstr "Notas pri %s:"
921
922msgid "pageinfo.cert.ca.verified"
923msgstr "Verificat de CA"
924
925#, c-format
926msgid "dlg.input.prompt"
927msgstr "Ples provider li intrada por %s:"
928
929msgid "heading.save"
930msgstr "FILE STA GARDAT"
931
932msgid "dlg.save.incomplete"
933msgstr "Li contenete del págine es ancor descargat."
934
935msgid "heading.save.error"
936msgstr "ERRORE GARDANTE LI FILE"
937
938msgid "dlg.import.notnew"
939msgstr "Omni ligamentes sur li págine ja es adjuntet."
940
941msgid "heading.autoreload"
942msgstr "AUTO-RECARGAR"
943
944msgid "dlg.autoreload"
945msgstr "Selecter li intervalle de auto-recarga por ti carte."
946
947msgid "link.bookmark"
948msgstr "Adjunter al marca-págines…"
949
950msgid "heading.openlink"
951msgstr "APERTER LI LIGAMENT"
952
953msgid "heading.certimport.pasted"
954msgstr "COLLAT EX LI PAPERIERE"
955
956msgid "heading.translate"
957msgstr "TRADUCTER LI PÁGINE"
958
959msgid "error.unsupported.media"
960msgstr "Ínsuportat tip de contenete"
961
962msgid "error.cgi"
963msgstr "Errore de CGI"
964
965msgid "menu.bookmarks.bytime"
966msgstr "Monstrar marca-págines secun li creation"
967
968msgid "macos.menu.bookmarks.bytime"
969msgstr "Secun date de creation"
970
971msgid "menu.feeds.entrylist"
972msgstr "Monstrar li elementes del feed"
973
974msgid "menu.releasenotes"
975msgstr "Notas del publication"
976
977msgid "menu.autoreload"
978msgstr "Auto-recarga…"
979
980msgid "heading.history.clear"
981msgstr "VACUAR LI DIARIUM"
982
983msgid "dlg.confirm.history.clear"
984msgstr "Esque vu vole efaciar li diarium de omni visitat págines?"
985
986msgid "bookmark.tag.home"
987msgstr "Usar quam Hem-págine"
988
989msgid "bookmark.tag.sub"
990msgstr "Abonnar li feed"
991
992msgid "bookmark.untag.sub"
993msgstr "Desabonnar li feed"
994
995msgid "bookmark.untag.remote"
996msgstr "Remover li fonte de marca-págines"
997
998# strftime() formatted
999#, c-format
1000msgid "ident.expiry"
1001msgstr "Expira %d %B %Y"
1002
1003msgid "ident.use"
1004msgstr "Usar por ti págine"
1005
1006msgid "ident.stopuse"
1007msgstr "Cessar usar por ti págine"
1008
1009msgid "ident.stopuse.all"
1010msgstr "Cessar usar partú"
1011
1012msgid "ident.showuse"
1013msgstr "Monstrar li usage"
1014
1015msgid "heading.ident.use"
1016msgstr "USAGE DEL IDENTITÁ"
1017
1018msgid "menu.edit.notes"
1019msgstr "Redacter notas…"
1020
1021msgid "heading.ident.notes"
1022msgstr "NOTAS DEL IDENTITÁ"
1023
1024msgid "heading.ident.delete"
1025msgstr "REMOVER LI IDENTITÁ"
1026
1027#, c-format
1028msgid "dlg.confirm.ident.delete"
1029msgstr ""
1030"Esque vu vole remover li identitá\n"
1031"%s%s%s\n"
1032"con su certificate e clave privat?"
1033
1034msgid "dlg.ident.delete"
1035msgstr "Remover li identitá e files"
1036
1037# The %s format characters are used to highlight the word "Help" and must be used in the translation in same way as here.
1038#, c-format
1039msgid "ident.gotohelp"
1040msgstr "Vi %sAuxilie%s por plu information pri certificates TLS de cliente."
1041
1042#, c-format
1043msgid "error.unsupported.suggestsave"
1044msgstr ""
1045"Benque vu posse gardar it a vor fólder Descargates. Tippa %s o selecte «%s» "
1046"in li menú."
1047
1048msgid "pageinfo.cert.ca.unverified"
1049msgstr "Ne verificat de CA"
1050
1051msgid "heading.certwarn"
1052msgstr "ÍNFIDET CERTIFICATE"
1053
1054msgid "dlg.certwarn.different"
1055msgstr "Li recivet certificate es valid ma ne es li quel es fidet."
1056
1057msgid "dlg.certwarn.domain"
1058msgstr ""
1059"Li recivet certificate es por un altri dominia (%s). To posse esser un "
1060"problema con li configuration del servitor."
1061
1062msgid "dlg.newident.notsaved"
1063msgstr "ne gardat sur li disco"
1064
1065msgid "heading.feedcfg"
1066msgstr "PARAMETRES DEL FEED"
1067
1068msgid "heading.subscribe"
1069msgstr "ABONNAR LI PÁGINE"
1070
1071msgid "heading.bookmark.add"
1072msgstr "ADJUNTER UN MARCA-PÁGINE"
1073
1074msgid "heading.bookmark.edit"
1075msgstr "REDACTER LI MARCA-PÁGINE"
1076
1077msgid "dlg.bookmark.save"
1078msgstr "Gardar li marca-págines"
1079
1080msgid "heading.prefs.pagecontent"
1081msgstr "CONTENETE DE PÁGINE"
1082
1083msgid "heading.prefs.sizing"
1084msgstr "DIMENSION"
1085
1086msgid "heading.prefs.widelayout"
1087msgstr "LARG ARANGEMENT"
1088
1089msgid "prefs.hoverlink"
1090msgstr "Monstrar li URL sub li apuntator:"
1091
1092msgid "prefs.hidetoolbarscroll"
1093msgstr "Celar li instrumentarium:"
1094
1095msgid "prefs.uiscale"
1096msgstr "Scale del UI:"
1097
1098msgid "prefs.customframe"
1099msgstr "Special borde de fenestre:"
1100
1101msgid "prefs.plaintext.wrap"
1102msgstr "Rupter lineas de simplic textu:"
1103
1104msgid "prefs.decodeurls"
1105msgstr "Decodificar URLs:"
1106
1107msgid "keys.bottom"
1108msgstr "Ear al fin"
1109
1110msgid "keys.scroll.up"
1111msgstr "Rular ad-alt"
1112
1113msgid "keys.scroll.down"
1114msgstr "Rular a-bass"
1115
1116msgid "keys.scroll.halfpage.up"
1117msgstr "Rular un mi-págine ad-alt"
1118
1119msgid "keys.scroll.halfpage.down"
1120msgstr "Rular un mi-págine a-bass"
1121
1122msgid "keys.scroll.page.up"
1123msgstr "Rular un págine ad-alt"
1124
1125msgid "keys.scroll.page.down"
1126msgstr "Rular un págine a-bass"
1127
1128msgid "keys.link.modkey"
1129msgstr "Aperter li ligament med clave-modificator"
1130
1131msgid "keys.hoverurl"
1132msgstr "Monstrar li URL sub li apuntator"
1133
1134msgid "error.badstatus.msg"
1135msgstr ""
1136"Li servitor respondet de un code de statu quel manca del specification del "
1137"protocol Gemini. Fórsan li servitor es tro nov o simplicmen malfunctiona."
1138
1139msgid "error.openfile.msg"
1140msgstr ""
1141"Li demandat file ne existe o es ínaccessibil. Ples controlar li rute de file."
1142
1143msgid "error.badresource"
1144msgstr "Ressurse es ínvalid"
1145
1146msgid "error.badresource.msg"
1147msgstr "Li demandat ressurse ne existe."
1148
1149msgid "error.unsupported.media.msg"
1150msgstr "Li recivet contenete ne posse esser monstrat med ti-ci application."
1151
1152msgid "error.unsupported.protocol"
1153msgstr "Ínsuportat protocol"
1154
1155msgid "error.unsupported.protocol.msg"
1156msgstr "Li demandat protocol ne es supportat de ti application."
1157
1158msgid "error.badheader"
1159msgstr "Cap-linea ínvalid"
1160
1161msgid "error.badheader.msg"
1162msgstr ""
1163"Li recivet cap-linea ne conforma al specification del protocol Gemini. "
1164"Fórsan li servitor malfunctiona o vu contacte un servitor non-Gemini."
1165
1166msgid "error.badredirect"
1167msgstr "Redirection ínvalid"
1168
1169msgid "error.badredirect.msg"
1170msgstr ""
1171"Li servitor respondet con un redirection ma ne providet un valid URL de "
1172"destination. Fórsan li servitor malfunctiona."
1173
1174msgid "error.schemeredirect"
1175msgstr "Redirection a un altri schema"
1176
1177msgid "error.schemeredirect.msg"
1178msgstr ""
1179"Li servitor provat redirecter nos a un URL con un schema quel es different "
1180"de ti del original URL. Vi li ligament se vu vole aperter it manualmen."
1181
1182msgid "error.manyredirects"
1183msgstr "Tro mult redirectiones"
1184
1185msgid "error.tls"
1186msgstr "Dessuccesse del rete o TLS"
1187
1188msgid "error.tls.msg"
1189msgstr "Ne successat communicar con li servitor. Vi li textu de errore:"
1190
1191msgid "error.temporary"
1192msgstr "Temporari dessuccesse"
1193
1194msgid "error.unavail.msg"
1195msgstr ""
1196"Li servitor es índisponibil pro supercarga o mantenentie. Ples repenar plu "
1197"tard."
1198
1199msgid "error.cgi.msg"
1200msgstr ""
1201"Generation de contenete dinamic del servitor ne successat. Fórsan programmas "
1202"del servitor malfunctiona."
1203
1204msgid "error.proxy"
1205msgstr "Errore de proxy"
1206
1207msgid "error.slowdown"
1208msgstr "Alentation"
1209
1210msgid "error.slowdown.msg"
1211msgstr "Li servitor limita li frequentie de demandas. Ples atender…"
1212
1213msgid "error.permanent"
1214msgstr "Permanent dessuccesse"
1215
1216msgid "error.permanent.msg"
1217msgstr "Vor demanda ne successat e va ne successar in li futur."
1218
1219msgid "error.notfound"
1220msgstr "Ne trovat"
1221
1222msgid "error.notfound.msg"
1223msgstr "Li demandat ressurse ne posse esset trovat in ho-témpor."
1224
1225msgid "error.gone.msg"
1226msgstr "Li demandat ressurse ne es plu disponibil."
1227
1228msgid "error.proxyrefusal"
1229msgstr "Demanda de proxy refusat"
1230
1231msgid "error.badrequest"
1232msgstr "Ínvalid demande"
1233
1234msgid "error.badrequest.msg"
1235msgstr "Li servitor ne comprendet vor demande."
1236
1237msgid "error.cert.needed"
1238msgstr "Un certificate es besonat"
1239
1240msgid "error.cert.needed.msg"
1241msgstr ""
1242"Li accesse al demandat ressurse besona li identification med un certificate "
1243"de cliente."
1244
1245msgid "error.cert.auth"
1246msgstr "Certificate ne es autorisat"
1247
1248msgid "error.cert.auth.msg"
1249msgstr ""
1250"Li providet certificate de cliente es valid, ma ne es autorisat por accesse "
1251"al demandat ressurse."
1252
1253msgid "error.cert.invalid"
1254msgstr "Certificate es ínvalid"
1255
1256msgid "prefs.smoothscroll"
1257msgstr "Glissid rulament:"
1258
1259#, c-format
1260msgid "dlg.certwarn.mayberenewed"
1261msgid_plural "dlg.certwarn.mayberenewed.n"
1262msgstr[0] ""
1263"Fórsan li recivet certificate esset renovat recentmen — it es por li corect "
1264"domina e ne expirat. Li certificate fidet actualmen va expirar ye %s, pos ún "
1265"die."
1266msgstr[1] ""
1267"Fórsan li recivet certificate esset renovat recentmen — it es por li corect "
1268"domina e ne expirat. Li certificate fidet actualmen va expirar ye %s, pos %d "
1269"dies."
1270
1271# Interpret as "Results from page content..."
1272msgid "heading.lookup.pagecontent"
1273msgstr "CONTENETE DE PÁGINE"
1274
1275msgid "prefs.imageloadscroll"
1276msgstr "Cargar images:"
1277
1278msgid "prefs.mono"
1279msgstr "Textu monospacial:"
1280
1281msgid "keys.top"
1282msgstr "Ear al inicie"
1283
1284msgid "reload.never"
1285msgstr "Nequande"
1286
1287msgid "reload.onceperday"
1288msgstr "Un vez per die"
1289
1290#, c-format
1291msgid "num.minutes"
1292msgid_plural "num.minutes.n"
1293msgstr[0] "%d minute"
1294msgstr[1] "%d minutes"
1295
1296#, c-format
1297msgid "num.hours"
1298msgid_plural "num.hours.n"
1299msgstr[0] "%d hor"
1300msgstr[1] "%d hores"
diff --git a/po/ru.po b/po/ru.po
index 4dcd2def..51178304 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-03-28 06:32+0000\n" 6"PO-Revision-Date: 2021-03-29 05:43+0000\n"
7"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n" 7"Last-Translator: Nikolay Korotkiy <sikmir@gmail.com>\n"
8"Language-Team: Russian <http://weblate.skyjake.fi/projects/lagrange/ui/ru/>\n" 8"Language-Team: Russian <http://weblate.skyjake.fi/projects/lagrange/ui/ru/>\n"
9"Language: ru\n" 9"Language: ru\n"
@@ -1319,3 +1319,6 @@ msgid_plural "num.hours.n"
1319msgstr[0] "%d час" 1319msgstr[0] "%d час"
1320msgstr[1] "%d часа" 1320msgstr[1] "%d часа"
1321msgstr[2] "%d часов" 1321msgstr[2] "%d часов"
1322
1323msgid "doc.pre.nocaption"
1324msgstr "Предварительно отформатированный текст без описания"
diff --git a/po/zh_Hans.po b/po/zh_Hans.po
index c352be6c..6a5be138 100644
--- a/po/zh_Hans.po
+++ b/po/zh_Hans.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-03-28 04:52+0000\n" 4"PO-Revision-Date: 2021-03-29 05:43+0000\n"
5"Last-Translator: Shibo Lyu <github@of.sb>\n" 5"Last-Translator: Shibo Lyu <github@of.sb>\n"
6"Language-Team: Chinese (Simplified) <http://weblate.skyjake.fi/projects/" 6"Language-Team: Chinese (Simplified) <http://weblate.skyjake.fi/projects/"
7"lagrange/ui/zh_Hans/>\n" 7"lagrange/ui/zh_Hans/>\n"
@@ -1284,3 +1284,6 @@ msgstr[0] "%d 分钟"
1284msgid "num.hours" 1284msgid "num.hours"
1285msgid_plural "num.hours.n" 1285msgid_plural "num.hours.n"
1286msgstr[0] "%d 小时" 1286msgstr[0] "%d 小时"
1287
1288msgid "doc.pre.nocaption"
1289msgstr "无说明的预格式化文本"
diff --git a/po/zh_Hant.po b/po/zh_Hant.po
index 1c9309e0..2331fcb7 100644
--- a/po/zh_Hant.po
+++ b/po/zh_Hant.po
@@ -1,7 +1,7 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n" 3"Report-Msgid-Bugs-To: jaakko.keranen@iki.fi\n"
4"PO-Revision-Date: 2021-03-28 06:32+0000\n" 4"PO-Revision-Date: 2021-03-29 05:43+0000\n"
5"Last-Translator: Shibo Lyu <github@of.sb>\n" 5"Last-Translator: Shibo Lyu <github@of.sb>\n"
6"Language-Team: Chinese (Traditional) <http://weblate.skyjake.fi/projects/" 6"Language-Team: Chinese (Traditional) <http://weblate.skyjake.fi/projects/"
7"lagrange/ui/zh_Hant/>\n" 7"lagrange/ui/zh_Hant/>\n"
@@ -1285,3 +1285,6 @@ msgstr "日語"
1285 1285
1286msgid "lang.pt" 1286msgid "lang.pt"
1287msgstr "葡萄牙語" 1287msgstr "葡萄牙語"
1288
1289msgid "doc.pre.nocaption"
1290msgstr "無說明的預格式文字"
diff --git a/res/lang/es.bin b/res/lang/es.bin
index f54730bb..36d898b8 100644
--- a/res/lang/es.bin
+++ b/res/lang/es.bin
Binary files differ
diff --git a/res/lang/fi.bin b/res/lang/fi.bin
index 508eb525..566842be 100644
--- a/res/lang/fi.bin
+++ b/res/lang/fi.bin
Binary files differ
diff --git a/res/lang/ru.bin b/res/lang/ru.bin
index 92c9e066..b581a252 100644
--- a/res/lang/ru.bin
+++ b/res/lang/ru.bin
Binary files differ
diff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin
index 48a4f684..59dcae3c 100644
--- a/res/lang/zh_Hans.bin
+++ b/res/lang/zh_Hans.bin
Binary files differ
diff --git a/src/gmdocument.c b/src/gmdocument.c
index 874a117e..007311d2 100644
--- a/src/gmdocument.c
+++ b/src/gmdocument.c
@@ -537,7 +537,7 @@ static void doLayout_GmDocument_(iGmDocument *d) {
537 } 537 }
538 } 538 }
539 /* Folded blocks are represented by a single run with the alt text. */ 539 /* Folded blocks are represented by a single run with the alt text. */
540 if (isPreformat) { 540 if (isPreformat && d->format != plainText_GmDocumentFormat) {
541 const iGmPreMeta *meta = constAt_Array(&d->preMeta, preId - 1); 541 const iGmPreMeta *meta = constAt_Array(&d->preMeta, preId - 1);
542 if (meta->flags & folded_GmPreMetaFlag) { 542 if (meta->flags & folded_GmPreMetaFlag) {
543 const iBool isBlank = isEmpty_Range(&meta->altText); 543 const iBool isBlank = isEmpty_Range(&meta->altText);
@@ -669,7 +669,7 @@ static void doLayout_GmDocument_(iGmDocument *d) {
669 type == quote_GmLineType ? 4 : 0); 669 type == quote_GmLineType ? 4 : 0);
670 const iBool isWordWrapped = 670 const iBool isWordWrapped =
671 (d->format == plainText_GmDocumentFormat ? prefs->plainTextWrap : !isPreformat); 671 (d->format == plainText_GmDocumentFormat ? prefs->plainTextWrap : !isPreformat);
672 if (isPreformat) { 672 if (isPreformat && d->format != plainText_GmDocumentFormat) {
673 /* Remember the top left coordinates of the block (first line of block). */ 673 /* Remember the top left coordinates of the block (first line of block). */
674 iGmPreMeta *meta = at_Array(&d->preMeta, preId - 1); 674 iGmPreMeta *meta = at_Array(&d->preMeta, preId - 1);
675 if (~meta->flags & topLeft_GmPreMetaFlag) { 675 if (~meta->flags & topLeft_GmPreMetaFlag) {
diff --git a/src/macos.m b/src/macos.m
index 0dcc3ef5..61507b6f 100644
--- a/src/macos.m
+++ b/src/macos.m
@@ -497,7 +497,7 @@ void insertMenuItems_MacOS(const char *menuLabel, int atIndex, const iMenuItem *
497 [myDel setCommand:[NSString stringWithUTF8String:items[i].command] forMenuItem:item]; 497 [myDel setCommand:[NSString stringWithUTF8String:items[i].command] forMenuItem:item];
498 /* Bindings may have a different key. */ 498 /* Bindings may have a different key. */
499 const iBinding *bind = findCommand_Keys(items[i].command); 499 const iBinding *bind = findCommand_Keys(items[i].command);
500 if (bind) { 500 if (bind && bind->id < builtIn_BindingId) {
501 key = bind->key; 501 key = bind->key;
502 kmods = bind->mods; 502 kmods = bind->mods;
503 } 503 }
@@ -533,7 +533,7 @@ void handleCommand_MacOS(const char *cmd) {
533 if (command) { 533 if (command) {
534 const iBinding *bind = findCommand_Keys( 534 const iBinding *bind = findCommand_Keys(
535 [command cStringUsingEncoding:NSUTF8StringEncoding]); 535 [command cStringUsingEncoding:NSUTF8StringEncoding]);
536 if (bind) { 536 if (bind && bind->id < builtIn_BindingId) {
537 setShortcut_NSMenuItem_(menuItem, bind->key, bind->mods); 537 setShortcut_NSMenuItem_(menuItem, bind->key, bind->mods);
538 } 538 }
539 } 539 }
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 891d8588..d338cf04 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -562,7 +562,8 @@ static void updateHover_DocumentWidget_(iDocumentWidget *d, iInt2 mouse) {
562 animate_DocumentWidget_(d); 562 animate_DocumentWidget_(d);
563 refresh_Widget(w); 563 refresh_Widget(w);
564 } 564 }
565 else if (d->hoverPre && targetValue_Anim(&d->altTextOpacity) < 0.5f) { 565 else if (d->hoverPre && targetValue_Anim(&d->altTextOpacity) < 0.5f &&
566 ~d->flags & noHoverWhileScrolling_DocumentWidgetFlag) {
566 setValue_Anim(&d->altTextOpacity, 1.0f, 0); 567 setValue_Anim(&d->altTextOpacity, 1.0f, 0);
567 refresh_Widget(w); 568 refresh_Widget(w);
568 } 569 }
@@ -3477,7 +3478,7 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) {
3477 const iGmPreMeta *meta = preMeta_GmDocument(d->doc, d->hoverAltPre->preId); 3478 const iGmPreMeta *meta = preMeta_GmDocument(d->doc, d->hoverAltPre->preId);
3478 if (meta->flags & topLeft_GmPreMetaFlag && ~meta->flags & decoration_GmRunFlag && 3479 if (meta->flags & topLeft_GmPreMetaFlag && ~meta->flags & decoration_GmRunFlag &&
3479 !isEmpty_Range(&meta->altText)) { 3480 !isEmpty_Range(&meta->altText)) {
3480 const int margin = 2 * gap_UI; 3481 const int margin = 3 * gap_UI / 2;
3481 const int altFont = uiLabel_FontId; 3482 const int altFont = uiLabel_FontId;
3482 const int wrap = docBounds.size.x - 2 * margin; 3483 const int wrap = docBounds.size.x - 2 * margin;
3483 iInt2 pos = addY_I2(add_I2(docBounds.pos, meta->pixelRect.pos), 3484 iInt2 pos = addY_I2(add_I2(docBounds.pos, meta->pixelRect.pos),
diff --git a/src/ui/keys.h b/src/ui/keys.h
index 90e33b7c..4cbca3b7 100644
--- a/src/ui/keys.h
+++ b/src/ui/keys.h
@@ -56,6 +56,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
56# define subscribeToPage_KeyModifier SDLK_d, KMOD_SHIFT | KMOD_PRIMARY 56# define subscribeToPage_KeyModifier SDLK_d, KMOD_SHIFT | KMOD_PRIMARY
57#endif 57#endif
58 58
59#define builtIn_BindingId 1000 /* not user-configurable */
60
59iDeclareType(Binding) 61iDeclareType(Binding)
60 62
61struct Impl_Binding { 63struct Impl_Binding {
diff --git a/src/ui/labelwidget.c b/src/ui/labelwidget.c
index 1805525c..d16ef69d 100644
--- a/src/ui/labelwidget.c
+++ b/src/ui/labelwidget.c
@@ -172,6 +172,10 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
172 *frame2 = uiEmbossSelected2_ColorId; 172 *frame2 = uiEmbossSelected2_ColorId;
173 } 173 }
174 } 174 }
175 int colorEscape = none_ColorId;
176 if (startsWith_String(&d->label, "\r")) {
177 colorEscape = cstr_String(&d->label)[1] - asciiBase_ColorEscape; /* TODO: can be two bytes long */
178 }
175 if (isHover_Widget(w)) { 179 if (isHover_Widget(w)) {
176 if (isFrameless) { 180 if (isFrameless) {
177 *bg = uiBackgroundFramelessHover_ColorId; 181 *bg = uiBackgroundFramelessHover_ColorId;
@@ -179,14 +183,14 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
179 } 183 }
180 else { 184 else {
181 /* Frames matching color escaped text. */ 185 /* Frames matching color escaped text. */
182 if (startsWith_String(&d->label, "\r")) { 186 if (colorEscape != none_ColorId) {
183 if (isDark_ColorTheme(colorTheme_App())) { 187 if (isDark_ColorTheme(colorTheme_App())) {
184 *frame1 = cstr_String(&d->label)[1] - asciiBase_ColorEscape; 188 *frame1 = colorEscape;
185 *frame2 = darker_Color(*frame1); 189 *frame2 = darker_Color(*frame1);
186 } 190 }
187 else { 191 else {
188 *bg = *frame1 = *frame2 = cstr_String(&d->label)[1] - asciiBase_ColorEscape; 192 *bg = *frame1 = *frame2 = colorEscape;
189 *fg = uiBackground_ColorId | permanent_ColorId; 193 *fg = uiText_ColorId | permanent_ColorId;
190 } 194 }
191 } 195 }
192 else if (isSel) { 196 else if (isSel) {
@@ -204,9 +208,14 @@ static void getColors_LabelWidget_(const iLabelWidget *d, int *bg, int *fg, int
204 *bg = uiBackgroundPressed_ColorId | permanent_ColorId; 208 *bg = uiBackgroundPressed_ColorId | permanent_ColorId;
205 if (isButton) { 209 if (isButton) {
206 *frame1 = uiEmbossPressed1_ColorId; 210 *frame1 = uiEmbossPressed1_ColorId;
207 *frame2 = uiEmbossPressed2_ColorId; 211 *frame2 = colorEscape != none_ColorId ? colorEscape : uiEmbossPressed2_ColorId;
212 }
213 if (colorEscape == none_ColorId || colorEscape == uiTextAction_ColorId) {
214 *fg = uiTextPressed_ColorId | permanent_ColorId;
215 }
216 else {
217 *fg = isDark_ColorTheme(colorTheme_App()) ? white_ColorId : black_ColorId;
208 } 218 }
209 *fg = uiTextPressed_ColorId | permanent_ColorId;
210 } 219 }
211 if (d->forceFg >= 0) { 220 if (d->forceFg >= 0) {
212 *fg = d->forceFg; 221 *fg = d->forceFg;
@@ -288,7 +297,9 @@ static void draw_LabelWidget_(const iLabelWidget *d) {
288 add_I2(topRight_Rect(bounds), 297 add_I2(topRight_Rect(bounds),
289 addX_I2(negX_I2(padding_(flags)), 298 addX_I2(negX_I2(padding_(flags)),
290 deviceType_App() == tablet_AppDeviceType ? gap_UI : 0)), 299 deviceType_App() == tablet_AppDeviceType ? gap_UI : 0)),
291 flags & pressed_WidgetFlag ? fg : uiTextShortcut_ColorId, 300 flags & pressed_WidgetFlag ? fg
301 : isCaution ? uiTextCaution_ColorId
302 : uiTextShortcut_ColorId,
292 right_Alignment, 303 right_Alignment,
293 cstr_String(&str)); 304 cstr_String(&str));
294 deinit_String(&str); 305 deinit_String(&str);
diff --git a/src/ui/util.c b/src/ui/util.c
index 19fba3a4..08a04105 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -96,6 +96,9 @@ void toString_Sym(int key, int kmods, iString *str) {
96 if (key == 0x20) { 96 if (key == 0x20) {
97 appendCStr_String(str, "Space"); 97 appendCStr_String(str, "Space");
98 } 98 }
99 else if (key == SDLK_ESCAPE) {
100 appendCStr_String(str, "Esc");
101 }
99 else if (key == SDLK_LEFT) { 102 else if (key == SDLK_LEFT) {
100 appendChar_String(str, 0x2190); 103 appendChar_String(str, 0x2190);
101 } 104 }
@@ -117,6 +120,9 @@ void toString_Sym(int key, int kmods, iString *str) {
117 else if (key == SDLK_DELETE) { 120 else if (key == SDLK_DELETE) {
118 appendChar_String(str, 0x2326); /* Erase to the Right */ 121 appendChar_String(str, 0x2326); /* Erase to the Right */
119 } 122 }
123 else if (key == SDLK_RETURN) {
124 appendChar_String(str, 0x21a9); /* Leftwards arrow with a hook */
125 }
120 else { 126 else {
121 appendCStr_String(str, SDL_GetKeyName(key)); 127 appendCStr_String(str, SDL_GetKeyName(key));
122 } 128 }
@@ -1631,6 +1637,7 @@ iWidget *makeDialogButtons_Widget(const iMenuItem *actions, size_t numActions) {
1631 } 1637 }
1632 iLabelWidget *button = 1638 iLabelWidget *button =
1633 addChild_Widget(div, iClob(newKeyMods_LabelWidget(label, key, kmods, cmd))); 1639 addChild_Widget(div, iClob(newKeyMods_LabelWidget(label, key, kmods, cmd)));
1640 setFlags_Widget(as_Widget(button), alignLeft_WidgetFlag | drawKey_WidgetFlag, isDefault);
1634 setFont_LabelWidget(button, isDefault ? fonts[1] : fonts[0]); 1641 setFont_LabelWidget(button, isDefault ? fonts[1] : fonts[0]);
1635 } 1642 }
1636 return div; 1643 return div;