commit bfd071c
Merge pull request 'master' (#7) from grunfink/snac2:master into main Reviewed-on: https://codeberg.org/byte/snac2/pulls/7
65 files changed,
+5223,
-3316
+1,
-1
1@@ -37,7 +37,7 @@
2 ### Supported activities and objects
3
4 - **Inbound**: `Follow`, `Accept`, `Create`, `Update`, `Delete`, `Announce`, `Like`, `EmojiReact`, `Undo` (for Follow/Like/Announce), and `Move` covering `Note`, `Question`, `Page`, `Article`, `Event`, and `Video`.
5-- **Outbound**: the same set, except for `EmojiReact` (normalised into `Like` internally) and `Create` currently emits `Note` and `Question` objects.
6+- **Outbound**: the same set. `Create` currently emits `Note` and `Question` objects.
7 - Ordered collections: outboxes present the latest entries; follower/following collections hide membership by default.
8
9 ### Delivery and moderation
M
LICENSE
+1,
-1
1@@ -1,6 +1,6 @@
2 MIT License
3
4-Copyright (c) 2022 - 2025 grunfink et al. (Fediverse: @grunfink@comam.es)
5+Copyright (c) 2022 - 2026 grunfink et al. (Fediverse: @grunfink@comam.es)
6
7 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8
M
Makefile
+4,
-4
1@@ -46,7 +46,7 @@ update-po:
2 xgettext --omit-header -j -o $$a --language=C --keyword=L --from-code=utf-8 *.c ; \
3 done
4
5-activitypub.o: activitypub.c xs.h xs_json.h xs_curl.h xs_mime.h \
6+activitypub.o: activitypub.c xs.h xs_json.h xs_curl.h xs_url.h xs_mime.h \
7 xs_openssl.h xs_regex.h xs_time.h xs_set.h xs_match.h xs_unicode.h \
8 xs_webmention.h xs_http.h xs_http_codes.h snac.h
9 data.o: data.c xs.h xs_hex.h xs_io.h xs_json.h xs_openssl.h xs_glob.h \
10@@ -68,16 +68,16 @@ mastoapi.o: mastoapi.c xs.h xs_hex.h xs_openssl.h xs_json.h xs_io.h \
11 xs_time.h xs_glob.h xs_set.h xs_random.h xs_url.h xs_mime.h xs_match.h \
12 xs_unicode.h xs_http.h xs_http_codes.h snac.h
13 rss.o: rss.c xs.h xs_html.h xs_regex.h xs_time.h xs_match.h xs_curl.h \
14- xs_openssl.h xs_json.h xs_http.h xs_http_codes.h snac.h
15+ xs_openssl.h xs_json.h xs_http.h xs_http_codes.h xs_unicode.h snac.h
16 sandbox.o: sandbox.c xs.h snac.h
17 snac.o: snac.c xs.h xs_hex.h xs_io.h xs_unicode_tbl.h xs_unicode.h \
18 xs_json.h xs_curl.h xs_openssl.h xs_socket.h xs_unix_socket.h xs_url.h \
19 xs_http.h xs_http_codes.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h \
20 xs_time.h xs_glob.h xs_random.h xs_match.h xs_fcgi.h xs_html.h xs_po.h \
21- xs_webmention.h snac.h
22+ xs_webmention.h xs_list_tools.h snac.h
23 upgrade.o: upgrade.c xs.h xs_io.h xs_json.h xs_glob.h snac.h
24 utils.o: utils.c xs.h xs_io.h xs_json.h xs_time.h xs_openssl.h \
25 xs_random.h xs_glob.h xs_curl.h xs_regex.h xs_http.h xs_http_codes.h \
26- snac.h
27+ xs_list_tools.h xs_set.h snac.h
28 webfinger.o: webfinger.c xs.h xs_json.h xs_curl.h xs_mime.h xs_http.h \
29 xs_http_codes.h snac.h
+4,
-4
1@@ -35,7 +35,7 @@ uninstall:
2 rm $(PREFIX_MAN)/man5/snac.5
3 rm $(PREFIX_MAN)/man8/snac.8
4
5-activitypub.o: activitypub.c xs.h xs_json.h xs_curl.h xs_mime.h \
6+activitypub.o: activitypub.c xs.h xs_json.h xs_curl.h xs_url.h xs_mime.h \
7 xs_openssl.h xs_regex.h xs_time.h xs_set.h xs_match.h xs_unicode.h \
8 xs_webmention.h xs_http.h xs_http_codes.h snac.h
9 data.o: data.c xs.h xs_hex.h xs_io.h xs_json.h xs_openssl.h xs_glob.h \
10@@ -57,16 +57,16 @@ mastoapi.o: mastoapi.c xs.h xs_hex.h xs_openssl.h xs_json.h xs_io.h \
11 xs_time.h xs_glob.h xs_set.h xs_random.h xs_url.h xs_mime.h xs_match.h \
12 xs_unicode.h xs_http.h xs_http_codes.h snac.h
13 rss.o: rss.c xs.h xs_html.h xs_regex.h xs_time.h xs_match.h xs_curl.h \
14- xs_openssl.h xs_json.h xs_http.h xs_http_codes.h snac.h
15+ xs_openssl.h xs_json.h xs_http.h xs_http_codes.h xs_unicode.h snac.h
16 sandbox.o: sandbox.c xs.h snac.h
17 snac.o: snac.c xs.h xs_hex.h xs_io.h xs_unicode_tbl.h xs_unicode.h \
18 xs_json.h xs_curl.h xs_openssl.h xs_socket.h xs_unix_socket.h xs_url.h \
19 xs_http.h xs_http_codes.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h \
20 xs_time.h xs_glob.h xs_random.h xs_match.h xs_fcgi.h xs_html.h xs_po.h \
21- xs_webmention.h snac.h
22+ xs_webmention.h xs_list_tools.h snac.h
23 upgrade.o: upgrade.c xs.h xs_io.h xs_json.h xs_glob.h snac.h
24 utils.o: utils.c xs.h xs_io.h xs_json.h xs_time.h xs_openssl.h \
25 xs_random.h xs_glob.h xs_curl.h xs_regex.h xs_http.h xs_http_codes.h \
26- snac.h
27+ xs_list_tools.h xs_set.h snac.h
28 webfinger.o: webfinger.c xs.h xs_json.h xs_curl.h xs_mime.h xs_http.h \
29 xs_http_codes.h snac.h
+51,
-1
1@@ -1,13 +1,63 @@
2 # Release Notes
3
4-## UNRELEASED
5+## 2.89
6+
7+Fixed crash in pronouns processing (contributed by byte).
8+
9+Added counters in the people page (contributed by byte).
10+
11+New command-line option `refresh`, to refresh all follower and following `Actor` objects, marking them as broken if they are.
12+
13+## 2.88
14+
15+If `disable_emojireact` is set to `true` in `server.json`, EmojiReacts (incoming and outgoing) are totally disabled.
16+
17+New command-line option `top_ten`, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).
18+
19+Added a new set of per-user muted words; if a post contains any of them, it's hidden behind a dropdown (contributed by byte).
20+
21+If an account has a metadata named `pronouns`, it's shown by the name (contributed by violette).
22+
23+Mastodon API: children of a post are returned recursively, not just the first level (contributed by violette).
24+
25+Implemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).
26+
27+## 2.87
28+
29+Hide EmojiReacts from muted actors and blocked instances.
30+
31+## 2.86
32+
33+Truncate RSS titles at UTF-8 character boundaries (contributed by lxo).
34+
35+Link contacts to single-user people pages. Also, user's posts are shown (contributed by lxo).
36+
37+Added emoji reactions (contributed by violette).
38+
39+Mastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).
40+
41+If the query variable `terse` of a public post page is set to anything, no header is shown.
42+
43+Fixed search failures when the query string has any leading blank.
44+
45+## 2.85
46
47 Quoted posts are now shown.
48
49+Added metadata to remote users in the people page (contributed by dandelions).
50+
51 Fixed memory leak (contributed by dandelions).
52
53+Fixed user matching (contributed by rakoo).
54+
55+Rendering visibility conditionally, with lesser reach if needed (contributed by byte).
56+
57+Added a button next to a follow notification to follow back.
58+
59 Fixed typo in man page (contributed by spky).
60
61+Updated Czech and German translations (contributed by pmjv and zen).
62+
63 ## 2.84
64
65 Implemented more scopes to match other ActivityPub implementations (public, unlisted, followers-only and direct message) (contributed by byte).
M
TODO.md
+8,
-8
1@@ -6,10 +6,6 @@ It seems that Microsoft is planning to laminate Basic HTTP Auth, so make a plan,
2
3 Investigate the problem with boosts inside the same instance (see https://codeberg.org/grunfink/snac2/issues/214).
4
5-Editing / Updating a post does not index newly added hashtags.
6-
7-Unfollowing guppe groups seems to work (http status of 200), but messages continue to arrive as if it didn't.
8-
9 Important: deleting a follower should do more that just delete the object, see https://codeberg.org/grunfink/snac2/issues/43#issuecomment-956721
10
11 ## Wishlist
12@@ -32,10 +28,6 @@ Track "FEP-ef61: Portable Objects" https://codeberg.org/fediverse/fep/src/branch
13
14 Integrate "Added handling for International Domain Names" PR https://codeberg.org/grunfink/snac2/pulls/104
15
16-Do something about Akkoma and Misskey's quoted replies (they use the `quoteUrl` field instead of `inReplyTo`).
17-
18-Take a look at crashes in the brittle Mastodon official app (crashes when hitting the reply button, crashes or 'ownVotes is null' errors when trying to show polls).
19-
20 The 'history' pages are just monthly HTML snapshots of the local timeline. This is ok and cheap and easy, but is problematic if you e.g. intentionally delete a post because it will remain there in the history forever. If you activate local timeline purging, purged entries will remain in the history as 'ghosts', which may or may not be what the user wants.
21
22 ## Closed
23@@ -381,3 +373,11 @@ Add command-line tools for creating and manipulating lists (2025-04-18T10:04:41+
24 Do a [Webmention](https://www.w3.org/TR/webmention/) to every link written in a post (2025-05-04T11:16:21+0200).
25
26 The local purge should generate `Delete` activities for local posts (2025-07-25T18:55:16+0200).
27+
28+Unfollowing guppe groups seems to work (http status of 200), but messages continue to arrive as if it didn't. (No longer relevant, as guppe seems to not exist anymore) (2025-12-09T05:31:56+0100).
29+
30+Do something about Akkoma and Misskey's quoted replies (they use the `quoteUrl` field instead of `inReplyTo`) (2025-12-09T05:31:56+0100).
31+
32+Take a look at crashes in the brittle Mastodon official app (crashes when hitting the reply button, crashes or 'ownVotes is null' errors when trying to show polls) (2025-12-09T05:31:56+0100).
33+
34+Editing / Updating a post does not index newly added hashtags (2025-12-19T15:29:38+0100).
+195,
-14
1@@ -1,9 +1,10 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_json.h"
8 #include "xs_curl.h"
9+#include "xs_url.h"
10 #include "xs_mime.h"
11 #include "xs_openssl.h"
12 #include "xs_regex.h"
13@@ -779,7 +780,7 @@ int is_msg_for_me(snac *snac, const xs_dict *c_msg)
14 object_get(object, &obj);
15
16 /* if it's about one of our posts, accept it */
17- if (xs_startswith(object, snac->actor))
18+ if (is_msg_mine(snac, object))
19 return 2;
20
21 /* blocked by hashtag? */
22@@ -1242,7 +1243,7 @@ void notify(snac *snac, const char *type, const char *utype, const char *actor,
23
24 if (xs_match(type, "Like|Announce|EmojiReact")) {
25 /* if it's not an admiration about something by us, done */
26- if (xs_is_null(objid) || !xs_startswith(objid, snac->actor))
27+ if (xs_is_null(objid) || !is_msg_mine(snac, objid))
28 return;
29
30 /* if it's an announce by our own relay, done */
31@@ -1267,7 +1268,7 @@ void notify(snac *snac, const char *type, const char *utype, const char *actor,
32 return;
33
34 /* if it's not ours and we didn't vote, discard */
35- if (!xs_startswith(poll_id, snac->actor) && !was_question_voted(snac, poll_id))
36+ if (!is_msg_mine(snac, poll_id) && !was_question_voted(snac, poll_id))
37 return;
38 }
39
40@@ -1530,11 +1531,24 @@ xs_dict *msg_update(snac *snac, const xs_dict *object)
41
42
43 xs_dict *msg_admiration(snac *snac, const char *object, const char *type)
44-/* creates a Like or Announce message */
45+/* creates a Like, Announce or EmojiReact message */
46 {
47 xs *a_msg = NULL;
48 xs_dict *msg = NULL;
49 xs *wrk = NULL;
50+ char t = 0;
51+
52+ switch (*type) {
53+ case 'L':
54+ t = 'l';
55+ break;
56+ case 'A':
57+ t = 'a';
58+ break;
59+ case 'E':
60+ t = 'e';
61+ break;
62+ }
63
64 /* call the object */
65 timeline_request(snac, &object, &wrk, 0);
66@@ -1542,7 +1556,7 @@ xs_dict *msg_admiration(snac *snac, const char *object, const char *type)
67 if (valid_status(object_get(object, &a_msg))) {
68 xs *rcpts = xs_list_new();
69 xs *o_md5 = xs_md5_hex(object, strlen(object));
70- xs *id = xs_fmt("%s/%s/%s", snac->actor, *type == 'L' ? "l" : "a", o_md5);
71+ xs *id = xs_fmt("%s/%c/%s", snac->actor, t, o_md5);
72
73 msg = msg_base(snac, type, id, snac->actor, "@now", object);
74
75@@ -1586,6 +1600,138 @@ xs_dict *msg_repulsion(snac *user, const char *id, const char *type)
76 return msg;
77 }
78
79+xs_dict *msg_emoji_init(snac *snac, const char *mid, const char *eid_o)
80+/* creates an emoji reaction from a local user */
81+{
82+ xs_dict *n_msg = msg_admiration(snac, mid, "EmojiReact");
83+
84+ xs *eid = xs_strip_chars_i(xs_dup(eid_o), ":");
85+ xs *content = NULL;
86+ xs *tag = xs_list_new();
87+ xs *dict = xs_dict_new();
88+ xs *icon = xs_dict_new();
89+ xs *accounts = xs_list_new();
90+ xs *emjs = emojis_rm_categories();
91+
92+ /* may be a default emoji */
93+ xs *eidd = xs_dup(eid);
94+ const char *eidda = eid;
95+
96+ if (xs_is_emoji(xs_utf8_dec(&eidda)))
97+ content = xs_dup(eid);
98+
99+ else if (*eid == '%') {
100+ content = xs_url_dec_emoji(xs_dup(eid));
101+ if (content == NULL) {
102+ return NULL;
103+ }
104+ }
105+ else {
106+ content = xs_fmt(":%s:", eid);
107+ const char *emo = xs_dict_get(emjs, content);
108+
109+ if (emo == NULL)
110+ return NULL;
111+
112+ if (xs_match(emo, "https://*|http://*")) { /* emoji is an URL to an image */
113+ icon = xs_dict_set(icon, "type", "Image");
114+ icon = xs_dict_set(icon, "url", emo);
115+ dict = xs_dict_set(dict, "icon", icon);
116+
117+ dict = xs_dict_set(dict, "id", emo);
118+ dict = xs_dict_set(dict, "name", content);
119+ dict = xs_dict_set(dict, "type", "Emoji");
120+ tag = xs_list_append(tag, dict);
121+ }
122+ else
123+ if (xs_startswith(emo, "&#")) {
124+ /* snac default emoji as an HTML entity: decode */
125+ content = xs_free(content);
126+
127+ xs *s1 = xs_strip_chars_i(xs_dup(emo), "&#");
128+ unsigned int cpoint = 0;
129+ sscanf(s1, "%u;", &cpoint);
130+
131+ if (cpoint)
132+ content = xs_utf8_cat(xs_str_new(NULL), cpoint);
133+ else
134+ content = xs_dup(emo);
135+ }
136+ else {
137+ /* use as it is and hope for the best */
138+ xs_free(content);
139+ content = xs_dup(emo);
140+ }
141+ }
142+
143+ accounts = xs_list_append(accounts, snac->actor);
144+
145+ n_msg = xs_dict_set(n_msg, "content", content);
146+ n_msg = xs_dict_set(n_msg, "accounts", accounts);
147+ n_msg = xs_dict_set(n_msg, "attributedTo", xs_list_get(xs_dict_get(n_msg, "to"), 1));
148+ n_msg = xs_dict_set(n_msg, "accountId", snac->uid);
149+ n_msg = xs_dict_set(n_msg, "tag", tag);
150+
151+ int ret = timeline_admire(snac, xs_dict_get(n_msg, "object"), snac->actor, 1, n_msg);
152+ if (ret == 200 || ret == 201) {
153+ enqueue_message(snac, n_msg);
154+ return n_msg;
155+ }
156+
157+ return NULL;
158+}
159+
160+xs_dict *msg_emoji_unreact(snac *user, const char *mid, const char *eid)
161+/* creates an Undo + emoji reaction message */
162+{
163+ xs *a_msg = NULL;
164+ xs_dict *msg = NULL;
165+
166+ if (valid_status(object_get(mid, &a_msg))) {
167+ /* create a clone of the original admiration message */
168+ xs *object = msg_admiration(user, mid, "EmojiReact");
169+
170+ /* delete the published date */
171+ object = xs_dict_del(object, "published");
172+
173+ /* create an undo message for this object */
174+ msg = msg_undo(user, object);
175+
176+ /* copy the 'to' field */
177+ msg = xs_dict_set(msg, "to", xs_dict_get(object, "to"));
178+ }
179+
180+ xs *emotes = object_get_emoji_reacts(mid);
181+ const char *v;
182+ int c = 0;
183+
184+ /* may be a default emoji */
185+ if (strlen(eid) == 12 && *eid == '%') {
186+ eid = xs_url_dec(eid);
187+ if (eid == NULL) {
188+ return NULL;
189+ }
190+ }
191+
192+ /* lets get all emotes for this msg, and compare it to our content */
193+ while (xs_list_next(emotes, &v, &c)) {
194+ xs_dict *e = NULL;
195+ if (valid_status(object_get_by_md5(v, &e))) {
196+ const char *content = xs_dict_get(e, "content");
197+ const char *id = xs_dict_get(e, "id");
198+ const char *actor = xs_dict_get(e, "actor");
199+ /* maybe formated as :{emoteName}: too */
200+ if (xs_str_in(eid, content) != -1)
201+ if (strcmp(user->actor, actor) == 0) {
202+ object_rm_emoji_react(mid, id);
203+ return msg;
204+ }
205+ }
206+ }
207+
208+ return NULL;
209+}
210+
211
212 xs_dict *msg_actor_place(snac *user, const char *label)
213 /* creates a Place object, if the user has a location defined */
214@@ -2432,6 +2578,11 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
215 return -1;
216 }
217
218+ if (strcmp(type, "EmojiReact") == 0 && xs_is_true(xs_dict_get(srv_config, "disable_emojireact"))) {
219+ srv_log(xs_fmt("Dropping EmojiReact from %s due to admin configuration", actor));
220+ return -1;
221+ }
222+
223 const char *object, *utype;
224
225 object = xs_dict_get(msg, "object");
226@@ -2605,6 +2756,16 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
227 else
228 if (strcmp(type, "Undo") == 0) { /** **/
229 const char *id = xs_dict_get(object, "object");
230+ const char *content = xs_dict_get(object, "content");
231+ /* misskey sends emojis as like + tag */
232+ xs *cd = xs_dup(content);
233+ const char *sna = cd;
234+ const xs_dict *tag = xs_dict_get(object, "tag");
235+ unsigned int utf = xs_utf8_dec((const char **)&sna);
236+
237+ int isEmoji = 0;
238+ if (xs_is_emoji(utf) || (tag && xs_list_len(tag) > 0))
239+ isEmoji = 1;
240
241 if (xs_type(object) != XSTYPE_DICT) {
242 snac_debug(snac, 1, xs_fmt("undo: overriding utype %s | %s | %s",
243@@ -2633,8 +2794,19 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
244 else
245 snac_log(snac, xs_fmt("error deleting follower %s", actor));
246 }
247+ /* *key emojis are like w/ Emoji tag */
248+ else
249+ if ((isEmoji || strcmp(utype, "EmojiReact") == 0) &&
250+ (content && strcmp(content, "♥") != 0)) {
251+ const xs_val *mid = xs_dict_get(object, "id");
252+ int status = object_rm_emoji_react((char *)id, mid);
253+ /* ensure *key notifications type */
254+ utype = "EmojiReact";
255+
256+ snac_log(snac, xs_fmt("Undo 'EmojiReact' for %s %d", id, status));
257+ }
258 else
259- if (strcmp(utype, "Like") == 0 || strcmp(utype, "EmojiReact") == 0) { /** **/
260+ if (strcmp(utype, "Like") == 0) { /** **/
261 int status = object_unadmire(id, actor, 1);
262
263 snac_log(snac, xs_fmt("Undo '%s' for %s %d", utype, id, status));
264@@ -2771,13 +2943,22 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
265 }
266 else
267 if (strcmp(type, "Like") == 0 || strcmp(type, "EmojiReact") == 0) { /** **/
268+ /* misskey sends emojis as Like + tag.
269+ * It is easier to handle them both at the same time. */
270+ const char *sna = xs_dict_get(msg, "content");
271+ const xs_dict *tag = xs_dict_get(msg, "tag");
272+ unsigned int utf = xs_utf8_dec((const char **)&sna);
273+
274+ if (xs_is_emoji(utf) || (tag && xs_list_len(tag) > 0))
275+ type = "EmojiReact";
276+
277 if (xs_type(object) == XSTYPE_DICT)
278 object = xs_dict_get(object, "id");
279
280 if (xs_is_null(object))
281 snac_log(snac, xs_fmt("malformed message: no 'id' field"));
282 else
283- if (timeline_admire(snac, object, actor, 1) == HTTP_STATUS_CREATED)
284+ if (timeline_admire(snac, object, actor, 1, msg) == HTTP_STATUS_CREATED)
285 snac_log(snac, xs_fmt("new '%s' %s %s", type, actor, object));
286 else
287 snac_log(snac, xs_fmt("repeated '%s' from %s to %s", type, actor, object));
288@@ -2792,10 +2973,10 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
289 if (xs_is_null(object))
290 snac_log(snac, xs_fmt("malformed message: no 'id' field"));
291 else
292- if (is_muted(snac, actor) && !xs_startswith(object, snac->actor))
293+ if (is_muted(snac, actor) && !is_msg_mine(snac, object))
294 snac_log(snac, xs_fmt("dropped 'Announce' from muted actor %s", actor));
295 else
296- if (is_limited(snac, actor) && !xs_startswith(object, snac->actor))
297+ if (is_limited(snac, actor) && !is_msg_mine(snac, object))
298 snac_log(snac, xs_fmt("dropped 'Announce' from limited actor %s", actor));
299 else {
300 xs *a_msg = NULL;
301@@ -2818,7 +2999,7 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
302 xs *this_relay = xs_fmt("%s/relay", srv_baseurl);
303
304 if (strcmp(actor, this_relay) != 0) {
305- if (valid_status(timeline_admire(snac, object, actor, 0)))
306+ if (valid_status(timeline_admire(snac, object, actor, 0, a_msg)))
307 snac_log(snac, xs_fmt("new 'Announce' %s %s", actor, object));
308 else
309 snac_log(snac, xs_fmt("repeated 'Announce' from %s to %s",
310@@ -2903,7 +3084,7 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
311 snac_log(snac, xs_fmt("malformed message: no 'id' field"));
312 else
313 if (object_here(object)) {
314- if (xs_startswith(object, srv_baseurl) && !xs_startswith(object, actor))
315+ if (xs_startswith(object, srv_baseurl) && !is_msg_mine(snac, object))
316 snac_log(snac, xs_fmt("ignored incorrect 'Delete' %s %s", actor, object));
317 else {
318 timeline_del(snac, object);
319@@ -3214,7 +3395,7 @@ void process_user_queue_item(snac *user, xs_dict *q_item)
320 actor_add(actor, actor_o);
321 }
322 else {
323- if (status == HTTP_STATUS_GONE) {
324+ if (status == HTTP_STATUS_GONE || status == HTTP_STATUS_NOT_FOUND) {
325 actor_failure(actor, 1);
326 snac_log(user, xs_fmt("actor_refresh marking actor %s as broken %d", actor, status));
327 }
328@@ -3716,7 +3897,7 @@ int activitypub_get_handler(const xs_dict *req, const char *q_path,
329 const char *type = xs_dict_get(i, "type");
330 const char *id = xs_dict_get(i, "id");
331
332- if (type && id && strcmp(type, "Note") == 0 && xs_startswith(id, snac.actor)) {
333+ if (type && id && strcmp(type, "Note") == 0 && is_msg_mine(&snac, id)) {
334 if (is_msg_public(i)) {
335 xs *c_msg = msg_create(&snac, i);
336 list = xs_list_append(list, c_msg);
+0,
-0
M
data.c
+147,
-15
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_hex.h"
8@@ -89,8 +89,15 @@ int srv_open(const char *basedir, int auto_upgrade)
9 else {
10 if (xs_number_get(xs_dict_get(srv_config, "layout")) < disk_layout)
11 error = xs_fmt("ERROR: disk layout changed - execute 'snac upgrade' first");
12- else
13- ret = 1;
14+ else {
15+ if (!check_strip_tool()) {
16+ const char *mp = xs_dict_get(srv_config, "mogrify_path");
17+ if (mp == NULL) mp = "mogrify";
18+ error = xs_fmt("ERROR: strip_exif enabled but '%s' not found or not working (set 'mogrify_path' in server.json)", mp);
19+ }
20+ else
21+ ret = 1;
22+ }
23 }
24 }
25
26@@ -1043,6 +1050,14 @@ xs_list *object_children(const char *id)
27 }
28
29
30+xs_list *object_get_emoji_reacts(const char *id)
31+/* returns the list of an object's emoji reactions */
32+{
33+ xs *fn = _object_index_fn(id, "_e.idx");
34+ return index_list(fn, XS_ALL);
35+}
36+
37+
38 xs_list *object_likes(const char *id)
39 {
40 xs *fn = _object_index_fn(id, "_l.idx");
41@@ -1086,12 +1101,26 @@ int object_admire(const char *id, const char *actor, int like)
42
43
44 int object_unadmire(const char *id, const char *actor, int like)
45-/* actor no longer likes or announces this object */
46+/* actor retrives their likes, announces or emojis this object */
47 {
48+ switch (like) {
49+ case 0:
50+ like = 'a';
51+ break;
52+ case 1:
53+ like = 'l';
54+ break;
55+ case 2:
56+ like = 'e';
57+ break;
58+ }
59 int status;
60 xs *fn = _object_fn(id);
61
62- fn = xs_replace_i(fn, ".json", like ? "_l.idx" : "_a.idx");
63+ char sfx[7] = "_x.idx";
64+ sfx[1] = like;
65+
66+ fn = xs_replace_i(fn, ".json", sfx);
67
68 status = index_del(fn, actor);
69
70@@ -1099,7 +1128,46 @@ int object_unadmire(const char *id, const char *actor, int like)
71 index_gc(fn);
72
73 srv_debug(0,
74- xs_fmt("object_unadmire (%s) %s %s %d", like ? "Like" : "Announce", actor, fn, status));
75+ xs_fmt("object_unadmire (%s) %s %s %d", like >= 'e' ?
76+ (like == 'l' ? "Like" : "EmojiReact") : "Announce" , actor, fn, status));
77+
78+ return status;
79+}
80+
81+int object_emoji_react(const char *mid, const char *eid)
82+/* actor reacts w/ an emoji */
83+{
84+ int status = HTTP_STATUS_OK;
85+ xs *fn = _object_fn(mid);
86+
87+ fn = xs_replace_i(fn, ".json", "_e.idx");
88+
89+ if (!index_in(fn, eid)) {
90+ status = index_add(fn, eid);
91+
92+ srv_debug(1, xs_fmt("object_emoji_react (%s) added %s to %s", "EmojiReact", eid, fn));
93+ }
94+
95+ return status;
96+}
97+
98+
99+int object_rm_emoji_react(const char *mid, const char *eid)
100+/* actor retrives their emoji reaction */
101+{
102+ int status;
103+ xs *fn = _object_fn(mid);
104+
105+ fn = xs_replace_i(fn, ".json", "_e.idx");
106+
107+ status = index_del(fn, eid);
108+ object_del(eid);
109+
110+ if (valid_status(status))
111+ index_gc(fn);
112+
113+ srv_debug(0,
114+ xs_fmt("object_unadmire (EmojiReact) %s %s %d", eid, fn, status));
115
116 return status;
117 }
118@@ -1358,6 +1426,20 @@ int pending_count(snac *user)
119 }
120
121
122+int is_msg_mine(snac *user, const char *id)
123+/* returns true if a post id is by the given user */
124+{
125+ int ret = 0;
126+
127+ if (xs_is_string(id)) {
128+ xs *s1 = xs_fmt("%s/", user->actor);
129+ ret = xs_startswith(id, s1);
130+ }
131+
132+ return ret;
133+}
134+
135+
136 /** timeline **/
137
138 double timeline_mtime(snac *snac)
139@@ -1453,7 +1535,7 @@ void timeline_update_indexes(snac *snac, const char *id)
140 {
141 object_user_cache_add(snac, id, "private");
142
143- if (xs_startswith(id, snac->actor)) {
144+ if (is_msg_mine(snac, id)) {
145 xs *msg = NULL;
146
147 if (valid_status(object_get(id, &msg))) {
148@@ -1492,19 +1574,48 @@ int timeline_add(snac *snac, const char *id, const xs_dict *o_msg)
149 }
150
151
152-int timeline_admire(snac *snac, const char *id, const char *admirer, int like)
153-/* updates a timeline entry with a new admiration */
154+int timeline_emoji_react(const char *act, const char *id, const xs_dict *msg_o)
155+/* adds an emoji reaction to a message */
156 {
157+ xs *msg = xs_dup(msg_o);
158+ msg = xs_dict_append(msg, "attributedTo", act);
159+ msg = xs_dict_set(msg, "type", "EmojiReact");
160+ const char *emote_id = xs_dict_get(msg, "id");
161+
162+ int ret = object_add(emote_id, msg);
163+ if (ret == HTTP_STATUS_OK || ret == HTTP_STATUS_CREATED)
164+ ret = object_emoji_react(id, emote_id);
165+
166+ return ret;
167+}
168+
169+
170+int timeline_admire(snac *snac, const char *id,
171+ const char *admirer, int like, const xs_dict *msg)
172+/* updates a timeline entry with a new admiration or emoji reaction */
173+{
174+ int ret;
175+ const char *content = xs_dict_get_path(msg, "content");
176+ const char *type = xs_dict_get_path(msg, "type");
177+
178 /* if we are admiring this, add to both timelines */
179 if (!like && strcmp(admirer, snac->actor) == 0) {
180 object_user_cache_add(snac, id, "public");
181 object_user_cache_add(snac, id, "private");
182 }
183
184- int ret = object_admire(id, admirer, like);
185+ /* use utf <3 as a like, as it is ugly */
186+ if (type && xs_match(type, "Like|EmojiReact|Emoji") &&
187+ content && strcmp(content, "❤") != 0) {
188+ ret = timeline_emoji_react(snac->actor, id, msg);
189+ snac_debug(snac, 1, xs_fmt("timeline_emoji_react %s", id));
190+ }
191
192- snac_debug(snac, 1, xs_fmt("timeline_admire (%s) %s %s",
193- like ? "Like" : "Announce", id, admirer));
194+ else {
195+ ret = object_admire(id, admirer, like);
196+ snac_debug(snac, 1, xs_fmt("timeline_admire (%s) %s %s",
197+ like ? "Like" : "Announce", id, admirer));
198+ }
199
200 return ret;
201 }
202@@ -1853,6 +1964,25 @@ xs_list *muted_list(snac *user)
203 return l;
204 }
205
206+/** emojis react **/
207+
208+xs_str *emoji_reacted(snac *user, const char *id)
209+/* returns the emoji an user reacted to a message */
210+{
211+ xs *emojis = object_get_emoji_reacts(id);
212+ int c = 0;
213+ const char *v;
214+
215+ while (xs_list_next(emojis, &v, &c)) {
216+ xs *msg = NULL;
217+ if (object_get_by_md5(v, &msg)) {
218+ const xs_val *act = xs_dict_get(msg, "actor");
219+ if (act && strcmp(act, user->actor) == 0)
220+ return xs_dup(xs_dict_get(msg, "content"));
221+ }
222+ }
223+ return NULL;
224+}
225
226 /** bookmarking **/
227
228@@ -1913,7 +2043,7 @@ int pin(snac *user, const char *id)
229 {
230 int ret = -2;
231
232- if (xs_startswith(id, user->actor)) {
233+ if (is_msg_mine(user, id)) {
234 if (is_pinned(user, id))
235 ret = -3;
236 else
237@@ -2587,6 +2717,8 @@ void static_put(snac *snac, const char *id, const char *data, int size)
238 if (fn && (f = fopen(fn, "wb")) != NULL) {
239 fwrite(data, size, 1, f);
240 fclose(f);
241+
242+ strip_media(fn);
243 }
244 }
245
246@@ -3513,7 +3645,7 @@ void enqueue_output(snac *snac, const xs_dict *msg,
247 const xs_str *inbox, int retries, int p_status)
248 /* enqueues an output message to an inbox */
249 {
250- if (xs_startswith(inbox, snac->actor)) {
251+ if (is_msg_mine(snac, inbox)) {
252 snac_debug(snac, 1, xs_str_new("refusing enqueue to myself"));
253 return;
254 }
255@@ -4041,7 +4173,7 @@ void delete_purged_posts(snac *user, int days)
256 if (xs_is_dict(msg)) {
257 const char *id = xs_dict_get(msg, "id");
258
259- if (xs_is_string(id) && xs_startswith(id, user->actor)) {
260+ if (xs_is_string(id) && is_msg_mine(user, id)) {
261 xs *d_msg = msg_delete(user, id);
262
263 enqueue_message(user, d_msg);
+14,
-1
1@@ -110,6 +110,9 @@ URLs to RSS feeds of ActivityPub objects are also allowed
2 .It Blocked hashtags...
3 Enter here the list of hashtags you want to block, one
4 per line, with or without the # symbol.
5+.It Muted words...
6+Enter here a list of words to be silenced. If a post includes
7+any of this words, it's hidden behind a dropdown.
8 .El
9 .Pp
10 The user setup dialog allows some user information to be
11@@ -218,13 +221,20 @@ also private and cannot be liked nor boosted.
12 For each entry in the timeline, a set of reasonable actions
13 in the form of buttons will be shown. These can be:
14 .Bl -tag -offset indent
15-.It Reply
16+.It Reply...
17 Unveils a text area to write your intelligent and acute comment
18 to an uninformed fellow. This note is sent to the original
19 author as well as to your followers. The note can include
20 mentions in the @user@format; these people will also become
21 recipients of the message. If you reply to a boost or like,
22 you are really replying to the note, not to the admirer of it.
23+.It Emoji react...
24+Unveils a text area that allows a user to react with an emoji
25+by typing its identifier, that should match one of the emojis
26+defined in the
27+.Pa emojis.json
28+file. By now, only those emoji identifiers surrounded by colons
29+can be used.
30 .It Like
31 Click this if you admire this post. The poster and your
32 followers will be informed.
33@@ -405,6 +415,9 @@ Removes an existing list.
34 Adds an account (by its @name@host handle or actor URL) to a list.
35 .It Cm list_del Ar basedir Ar uid Ar name Ar actor_url
36 Deletes an actor (by its actor URL) from a list.
37+.It Cm top_ten Ar basedir Ar uid Op N
38+Returns the ids of the top ten (or top N) most popular posts (considering the
39+sum of likes and boosts).
40 .El
41 .Ss Migrating an account to/from Mastodon
42 See
+17,
-1
1@@ -294,6 +294,22 @@ The URL to a favicon. If it's not set, the default one is used instead.
2 The maximum number of days an instance is considered down after continuous failed
3 outgoing messages (default: 15). Anyway, whenever any incoming activity from a
4 failed instance is detected, this counter is reset for it.
5+.It Ic vkey
6+Public vapid key. Used for notification on some client.
7+.It Ic disable_emojireact
8+If set to true, all EmojiReact support (for input and output) is disabled.
9+.It Ic strip_exif
10+If set to true, EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the
11+.Nm mogrify
12+(from ImageMagick) and
13+.Nm ffmpeg
14+tools to be installed. If
15+.Nm snac
16+cannot find or execute these tools at startup, it will refuse to run.
17+.It Ic mogrify_path
18+Overrides the default "mogrify" command name or path. Use this if the tool is not in the system PATH or has a different name.
19+.It Ic ffmpeg_path
20+Overrides the default "ffmpeg" command name or path. Use this if the tool is not in the system PATH or has a different name.
21 .El
22 .Pp
23 You must restart the server to make effective these changes.
24@@ -405,7 +421,7 @@ objects, on input and output.
25 .It Vt EmojiReact
26 For
27 .Vt Note
28-objects, on input.
29+objects, on input and output.
30 .It Vt Announce
31 For
32 .Vt Note
+5,
-1
1@@ -32,8 +32,12 @@ blockquote { font-style: italic; }
2 .snac-list-of-lists li { display: inline; border: 1px solid #a0a0a0; border-radius: 25px;
3 margin-right: 0.5em; padding-left: 0.5em; padding-right: 0.5em; }
4 .snac-no-more-unseen-posts { border-top: 1px solid #a0a0a0; border-bottom: 1px solid #a0a0a0; padding: 0.5em 0; margin: 1em 0; }
5-@media (prefers-color-scheme: dark) {
6+.snac-reaction { padding:5px; padding-left: 10px; padding-right: 10px; display: inline-flex; margin-right: 5px; font-family: inherit; font-size: medium; height: 2.5rem; vertical-align:middle; align-items:center;}
7+.snac-reaction-image { max-width: 100%; max-height: 100%; }
8+.snac-reaction-div { border-left: darkgray; border-left-style: solid; margin-bottom: .3em; padding-left: .3em; border-left-width: 2px; }
9+@media (prefers-color-scheme: dark) {
10 body, input, textarea { background-color: #000; color: #fff; }
11 a { color: #7799dd }
12 a:visited { color: #aa99dd }
13 }
14+select { max-width: 40%; }
M
format.c
+23,
-2
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_regex.h"
8@@ -79,6 +79,24 @@ xs_dict *emojis(void)
9 return d;
10 }
11
12+
13+xs_dict *emojis_rm_categories() {
14+ xs *emjs = emojis();
15+ char *res = xs_dict_new();
16+ const char *k, *v;
17+ xs_dict_foreach(emjs, k, v) {
18+ if (xs_type(v) == XSTYPE_DICT) {
19+ const char *v2;
20+ xs_dict_foreach(v, k, v2)
21+ res = xs_dict_append(res, k, v2);
22+ }
23+ else
24+ res = xs_dict_append(res, k, v);
25+ }
26+ return res;
27+}
28+
29+
30 /* Non-whitespace without trailing comma, period or closing paren */
31 #define NOSPACE "([^[:space:],.)]+|[,.)]+[^[:space:],.)])+"
32
33@@ -405,7 +423,7 @@ xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag
34
35 {
36 /* traditional emoticons */
37- xs *d = emojis();
38+ xs *d = emojis_rm_categories();
39 int c = 0;
40 const char *k, *v;
41
42@@ -459,6 +477,9 @@ xs_str *sanitize(const char *content)
43 char *p;
44 const char *v;
45
46+ if (!content)
47+ return NULL;
48+
49 sl = xs_regex_split(content, "</?[^>]+>");
50
51 p = sl;
M
html.c
+693,
-88
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
8@@ -16,6 +16,7 @@
9 #include "xs_url.h"
10 #include "xs_random.h"
11 #include "xs_http.h"
12+#include "xs_list_tools.h"
13
14 #include "snac.h"
15
16@@ -54,9 +55,10 @@ int login(snac *user, const xs_dict *headers)
17 return logged_in;
18 }
19
20-
21-xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *proxy)
22-/* replaces all the :shortnames: with the emojis in tag */
23+xs_str *_replace_shortnames(xs_str *s, const xs_list *tag, int ems,
24+ const char *proxy, const xs_list *cl, const char *act_o)
25+/* replace but also adds a class list and an actor in its alt text.
26+ * Used for emoji reactions */
27 {
28 if (!xs_is_null(tag)) {
29 xs *tag_list = NULL;
30@@ -69,11 +71,17 @@ xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *p
31 tag_list = xs_dup(tag);
32 }
33
34- xs *style = xs_fmt("height: %dem; width: %dem; vertical-align: middle;", ems, ems);
35+ xs *style = xs_fmt("max-height: %dem; max-width: %dem;", ems, ems);
36 xs *class = xs_fmt("snac-emoji snac-emoji-%d-em", ems);
37+ if (cl) {
38+ xs *l = xs_join(cl, " ");
39+ class = xs_str_cat(class, " ", l);
40+ }
41
42- const xs_dict *v;
43 int c = 0;
44+ const xs_val *v;
45+
46+ c = 0;
47
48 xs_set rep_emoji;
49 xs_set_init(&rep_emoji);
50@@ -100,6 +108,8 @@ xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *p
51 if (!xs_is_string(mt))
52 mt = xs_mime_by_ext(u);
53
54+ xs *act = act_o ? xs_fmt("%s\n%s", n, act_o) : xs_fmt("%s", n);
55+
56 if (strcmp(mt, "image/svg+xml") == 0 && !xs_is_true(xs_dict_get(srv_config, "enable_svg")))
57 s = xs_replace_i(s, n, "");
58 else {
59@@ -108,8 +118,8 @@ xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *p
60 xs_html *img = xs_html_sctag("img",
61 xs_html_attr("loading", "lazy"),
62 xs_html_attr("src", url),
63- xs_html_attr("alt", n),
64- xs_html_attr("title", n),
65+ xs_html_attr("alt", act),
66+ xs_html_attr("title", act),
67 xs_html_attr("class", class),
68 xs_html_attr("style", style));
69
70@@ -130,6 +140,13 @@ xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *p
71 }
72
73
74+xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *proxy)
75+/* replaces all the :shortnames: with the emojis in tag */
76+{
77+ return _replace_shortnames(s, tag, ems, proxy, NULL, NULL);
78+}
79+
80+
81 xs_str *actor_name(xs_dict *actor, const char *proxy)
82 /* gets the actor name */
83 {
84@@ -145,6 +162,34 @@ xs_str *actor_name(xs_dict *actor, const char *proxy)
85 }
86
87
88+xs_str *actor_pronouns(xs_dict *actor)
89+/* gets the actor name */
90+{
91+ const xs_list *attachment;
92+ const xs_dict *d;
93+ const char *v;
94+ const char *pronouns = "";
95+ xs_str *ret;
96+
97+ if (xs_is_list((attachment = xs_dict_get(actor, "attachment")))) {
98+ xs_list_foreach(attachment, d) {
99+ xs *prop = xs_utf8_to_lower(xs_dict_get(d, "name"));
100+ /* make sure that we are reading the correct metadata */
101+ if (strlen(prop) == 8 && strcmp(prop, "pronouns") == 0) {
102+ /* safeguard from NULL values */
103+ v = xs_dict_get(d, "value");
104+ pronouns = v ? v : pronouns;
105+ break;
106+ }
107+ }
108+ }
109+
110+ /* strip all HTML tags */
111+ ret = xs_regex_replace(pronouns, "</?[^>]+>", "");
112+ return ret;
113+}
114+
115+
116 xs_str *format_text_with_emoji(snac *user, const char *text, int ems, const char *proxy)
117 /* needed when we have local text with no tags attached */
118 {
119@@ -178,6 +223,7 @@ xs_html *html_actor_icon(snac *user, xs_dict *actor, const char *date,
120 int fwer = 0;
121
122 xs *name = actor_name(actor, proxy);
123+ xs *pronouns = actor_pronouns(actor);
124
125 /* get the avatar */
126 if ((v = xs_dict_get(actor, "icon")) != NULL) {
127@@ -205,23 +251,35 @@ xs_html *html_actor_icon(snac *user, xs_dict *actor, const char *date,
128 anchored link to the people page instead of the actor url */
129 if (fwer || fwing) {
130 xs *md5 = xs_md5_hex(actor_id, strlen(actor_id));
131- href = xs_fmt("%s/people#%s", user->actor, md5);
132+ href = xs_fmt("%s/people/%s", user->actor, md5);
133 }
134 }
135
136 if (href == NULL)
137 href = xs_dup(actor_id);
138
139+ xs_html *name_link = xs_html_tag("a",
140+ xs_html_attr("href", href),
141+ xs_html_attr("class", "p-author h-card snac-author"),
142+ xs_html_raw(name)); /* name is already html-escaped */
143+
144+ if (*pronouns) {
145+ xs_html_add(name_link,
146+ xs_html_text(" ["),
147+ xs_html_tag("span",
148+ xs_html_attr("class", "snac-pronouns"),
149+ xs_html_attr("title", "user's pronouns"),
150+ xs_html_raw(pronouns)),
151+ xs_html_text("]"));
152+ }
153+
154 xs_html_add(actor_icon,
155 xs_html_sctag("img",
156 xs_html_attr("loading", "lazy"),
157 xs_html_attr("class", "snac-avatar"),
158 xs_html_attr("src", avatar),
159 xs_html_attr("alt", "[?]")),
160- xs_html_tag("a",
161- xs_html_attr("href", href),
162- xs_html_attr("class", "p-author h-card snac-author"),
163- xs_html_raw(name))); /* name is already html-escaped */
164+ name_link);
165
166 if (!xs_is_null(url)) {
167 xs *md5 = xs_md5_hex(url, strlen(url));
168@@ -234,6 +292,7 @@ xs_html *html_actor_icon(snac *user, xs_dict *actor, const char *date,
169 xs_html_text("»")));
170 }
171
172+
173 if (strcmp(xs_dict_get(actor, "type"), "Service") == 0) {
174 xs_html_add(actor_icon,
175 xs_html_text(" "),
176@@ -398,6 +457,83 @@ xs_html *html_msg_icon(snac *user, const char *actor_id, const xs_dict *msg,
177 return actor_icon;
178 }
179
180+void html_note_render_visibility(snac* user, xs_html *form, const int scope)
181+{
182+ // scopes aren't sorted by value unfortunately, so simple math won't work to limit them. using map-like thing here
183+ static const int public_scopes[5] = {SCOPE_PUBLIC, SCOPE_UNLISTED, SCOPE_FOLLOWERS, SCOPE_MENTIONED, -1};
184+ static const int unlisted_scopes[4] = {SCOPE_UNLISTED, SCOPE_FOLLOWERS, SCOPE_MENTIONED, -1};
185+ static const int followers_scopes[3] = {SCOPE_FOLLOWERS, SCOPE_MENTIONED, -1};
186+ static const int mentioned_scopes[2] = {SCOPE_MENTIONED, -1};
187+ static const int * const scopes[4] = { public_scopes, mentioned_scopes, unlisted_scopes, followers_scopes};
188+ static const char * const scopes_tags[4] = { "public", "mentioned", "unlisted", "followers"};
189+ static const char * const scopes_names[4] = { "Public", "Direct Message", "Unlisted", "Followers-only"};
190+
191+ xs_html *paragraph = xs_html_tag("p", xs_html_text(L("Visibility: ")));
192+ const int* to_render = scopes[scope];
193+ for( int i = 0; to_render[i] != -1; i++ ){
194+ const int scope_i = to_render[i];
195+ const char* value = scopes_tags[scope_i];
196+ const char* name = scopes_names[scope_i];
197+ xs_html_add(paragraph,
198+ xs_html_tag("label",
199+ xs_html_sctag("input",
200+ xs_html_attr("type", "radio"),
201+ xs_html_attr("name", "visibility"),
202+ xs_html_attr("value", value),
203+ xs_html_attr(scope == scope_i ? "checked" : "", NULL)),
204+ xs_html_text(" "),
205+ xs_html_text(L(name)),
206+ xs_html_text(" "))
207+ );
208+ }
209+ xs_html_add(form, paragraph);
210+}
211+
212+/* html_note but moddled for emoji's needs. here and not bellow, since the
213+ * other one is already so complex. */
214+xs_html *html_emoji(snac *user, const char *summary,
215+ const char *div_id, const char *form_id,
216+ const char* placeholder, const char *post_id,
217+ const char* eid)
218+{
219+ xs *action = xs_fmt("%s/admin/action", user->actor);
220+
221+ xs_html *form;
222+ const int react = eid == NULL ? 0 : 1;
223+
224+ xs_html *note = xs_html_tag("div",
225+ xs_html_tag("details",
226+ xs_html_tag("summary",
227+ xs_html_text(summary)),
228+ xs_html_tag("p", NULL),
229+ xs_html_tag("div",
230+ xs_html_attr("class", "snac-note"),
231+ xs_html_attr("id", div_id),
232+ form = xs_html_tag("form",
233+ xs_html_attr("autocomplete", "off"),
234+ xs_html_attr("method", "post"),
235+ xs_html_attr("action", action),
236+ xs_html_attr("enctype", "multipart/form-data"),
237+ xs_html_attr("id", form_id),
238+ xs_html_sctag("input",
239+ xs_html_attr("type", "hidden"),
240+ xs_html_attr("name", "id"),
241+ xs_html_attr("value", post_id)),
242+ xs_html_sctag("input",
243+ xs_html_attr("type", react ? "hidden" : "text"),
244+ xs_html_attr("name", "eid"),
245+ xs_html_attr(react ? "value" : "placeholder", react ? eid : placeholder)),
246+ xs_html_text(" "),
247+ xs_html_sctag("input",
248+ xs_html_attr("type", "submit"),
249+ xs_html_attr("name", "action"),
250+ xs_html_attr("eid", "action"),
251+ xs_html_attr("value", react ? L("EmojiUnreact") : L("EmojiReact"))),
252+ xs_html_text(" "),
253+ xs_html_tag("p", NULL)))));
254+
255+ return note;
256+}
257
258 xs_html *html_note(snac *user, const char *summary,
259 const char *div_id, const char *form_id,
260@@ -455,46 +591,8 @@ xs_html *html_note(snac *user, const char *summary,
261 xs_html_attr("type", "hidden"),
262 xs_html_attr("name", "to"),
263 xs_html_attr("value", actor_id)));
264- else {
265- xs_html_add(form,
266- xs_html_tag("p",
267- xs_html_text(L("Visibility: ")),
268- xs_html_tag("label",
269- xs_html_sctag("input",
270- xs_html_attr("type", "radio"),
271- xs_html_attr("name", "visibility"),
272- xs_html_attr("value", "public"),
273- xs_html_attr(scope == SCOPE_PUBLIC ? "checked" : "", NULL)),
274- xs_html_text(" "),
275- xs_html_text(L("Public"))),
276- xs_html_text(" "),
277- xs_html_tag("label",
278- xs_html_sctag("input",
279- xs_html_attr("type", "radio"),
280- xs_html_attr("name", "visibility"),
281- xs_html_attr("value", "unlisted"),
282- xs_html_attr(scope == SCOPE_UNLISTED ? "checked" : "", NULL)),
283- xs_html_text(" "),
284- xs_html_text(L("Unlisted"))),
285- xs_html_text(" "),
286- xs_html_tag("label",
287- xs_html_sctag("input",
288- xs_html_attr("type", "radio"),
289- xs_html_attr("name", "visibility"),
290- xs_html_attr("value", "followers"),
291- xs_html_attr(scope == SCOPE_FOLLOWERS ? "checked" : "", NULL)),
292- xs_html_text(" "),
293- xs_html_text(L("Followers-only"))),
294- xs_html_text(" "),
295- xs_html_tag("label",
296- xs_html_sctag("input",
297- xs_html_attr("type", "radio"),
298- xs_html_attr("name", "visibility"),
299- xs_html_attr("value", "mentioned"),
300- xs_html_attr(scope == SCOPE_MENTIONED ? "checked" : "", NULL)),
301- xs_html_text(" "),
302- xs_html_text(L("Direct Message")))));
303- }
304+ if (edit_id == NULL)
305+ html_note_render_visibility(user, form, scope);
306
307 if (redir)
308 xs_html_add(form,
309@@ -1363,6 +1461,28 @@ xs_html *html_top_controls(snac *user)
310 xs_html_attr("value", L("Like"))),
311 xs_html_text(" "),
312 xs_html_text(L("(by URL)"))),
313+ xs_html_tag("form",
314+ xs_html_attr("autocomplete", "off"),
315+ xs_html_attr("method", "post"),
316+ xs_html_attr("action", ops_action),
317+ xs_html_sctag("input",
318+ xs_html_attr("type", "text"),
319+ xs_html_attr("name", "eid"),
320+ xs_html_attr("required", "required"),
321+ xs_html_attr("placeholder", ":neocat:")),
322+ xs_html_text(" "),
323+ xs_html_sctag("input",
324+ xs_html_attr("type", "text"),
325+ xs_html_attr("name", "id"),
326+ xs_html_attr("required", "required"),
327+ xs_html_attr("placeholder", "https:/" "/fedi.example.com/bob/...")),
328+ xs_html_text(" "),
329+ xs_html_sctag("input",
330+ xs_html_attr("type", "submit"),
331+ xs_html_attr("name", "action"),
332+ xs_html_attr("value", L("EmojiReact"))),
333+ xs_html_text(" "),
334+ xs_html_text(L("(by URL)"))),
335 xs_html_tag("p", NULL)));
336
337 /** user settings **/
338@@ -1787,6 +1907,38 @@ xs_html *html_top_controls(snac *user)
339 xs_html_attr("class", "button"),
340 xs_html_attr("value", L("Update hashtags")))))));
341
342+ xs *muted_words_action = xs_fmt("%s/admin/muted-words", user->actor);
343+ xs *muted_words = xs_join(xs_dict_get_def(user->config,
344+ "muted_words", xs_stock(XSTYPE_LIST)), "\n");
345+
346+ xs_html_add(top_controls,
347+ xs_html_tag("details",
348+ xs_html_tag("summary",
349+ xs_html_text(L("Muted words..."))),
350+ xs_html_tag("p",
351+ xs_html_text(L("One word per line, partial matches count"))),
352+ xs_html_tag("div",
353+ xs_html_attr("class", "snac-muted-words"),
354+ xs_html_tag("form",
355+ xs_html_attr("autocomplete", "off"),
356+ xs_html_attr("method", "post"),
357+ xs_html_attr("action", muted_words_action),
358+ xs_html_attr("enctype", "multipart/form-data"),
359+
360+ xs_html_tag("textarea",
361+ xs_html_attr("name", "muted_words"),
362+ xs_html_attr("cols", "40"),
363+ xs_html_attr("rows", "4"),
364+ xs_html_attr("placeholder", "nascar\nsuperbowl\nFIFA"),
365+ xs_html_text(muted_words)),
366+
367+ xs_html_tag("br", NULL),
368+
369+ xs_html_sctag("input",
370+ xs_html_attr("type", "submit"),
371+ xs_html_attr("class", "button"),
372+ xs_html_attr("value", L("Update muted words")))))));
373+
374 return top_controls;
375 }
376
377@@ -1898,7 +2050,7 @@ xs_html *html_entry_controls(snac *user, const char *actor,
378 xs_html_attr("name", "redir"),
379 xs_html_attr("value", redir))));
380
381- if (!xs_startswith(id, user->actor)) {
382+ if (!is_msg_mine(user, id)) {
383 if (xs_list_in(likes, user->md5) == -1) {
384 /* not already liked; add button */
385 xs_html_add(form,
386@@ -2026,6 +2178,22 @@ xs_html *html_entry_controls(snac *user, const char *actor,
387 xs_html_tag("p", NULL));
388 }
389
390+ if (!xs_is_true(xs_dict_get(srv_config, "disable_emojireact"))) { /** emoji react **/
391+ /* the post textarea */
392+ xs *div_id = xs_fmt("%s_reply", md5);
393+ xs *form_id = xs_fmt("%s_reply_form", md5);
394+ xs *e_react = emoji_reacted(user, id);
395+
396+ xs_html_add(controls, xs_html_tag("div",
397+ xs_html_tag("p", NULL),
398+ html_emoji(
399+ user, L("Emoji react..."),
400+ div_id, form_id,
401+ ":neocat:", id,
402+ e_react)),
403+ xs_html_tag("p", NULL));
404+ }
405+
406 { /** reply **/
407 /* the post textarea */
408 xs *ct = build_mentions(user, msg);
409@@ -2051,6 +2219,30 @@ xs_html *html_entry_controls(snac *user, const char *actor,
410 }
411
412
413+static const xs_str* words_in_content(const xs_list *words, const xs_val *content)
414+/* returns a word that matches any of the words in content */
415+{
416+ if (!xs_is_list(words) || !xs_is_string(content)) {
417+ return NULL;
418+ }
419+ xs *c = xs_split(content, " ");
420+ xs *sc = xs_list_sort(c, NULL);
421+
422+ const xs_str *wv;
423+ const xs_str *cv;
424+ xs_list_foreach(words, wv) {
425+ xs_list_foreach(sc, cv) {
426+ xs_tolower_i((xs_str*)cv);
427+ if(xs_str_in(cv, wv) != -1){
428+ return wv;
429+ }
430+ }
431+ }
432+
433+ return NULL;
434+}
435+
436+
437 xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
438 int level, const char *md5, int hide_children)
439 {
440@@ -2262,7 +2454,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
441 }
442
443 if (!read_only && (fwers || fwing))
444- href = xs_fmt("%s/people#%s", user->actor, p);
445+ href = xs_fmt("%s/people/%s", user->actor, p);
446 else
447 href = xs_dup(id);
448
449@@ -2345,6 +2537,17 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
450 xs_html_text(v),
451 xs_html_text(L(" [SENSITIVE CONTENT]"))));
452 }
453+ else
454+ if (user &&
455+ /* muted_words is all lowercase and sorted for performance */
456+ (v = words_in_content(xs_dict_get(user->config, "muted_words"),
457+ xs_dict_get(msg, "content"))) != NULL) {
458+ snac_debug(user, 1, xs_fmt("word %s muted by user preferences: %s", v, id));
459+ snac_content = xs_html_tag("details",
460+ xs_html_tag("summary",
461+ xs_html_text(L("Muted: ")),
462+ xs_html_text(v)));
463+ }
464 else {
465 snac_content = xs_html_tag("div", NULL);
466 }
467@@ -2352,6 +2555,182 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
468 xs_html_add(snac_content_wrap,
469 snac_content);
470
471+ /* add all emoji reacts */
472+ int is_emoji = 0;
473+ if (!xs_is_true(xs_dict_get(srv_config, "disable_emojireact"))) {
474+ int c = 0;
475+ const xs_dict *k;
476+ xs *ls = xs_list_new();
477+ xs *sfrl = xs_dict_new();
478+ xs *rl = object_get_emoji_reacts(id);
479+
480+ while (xs_list_next(rl, &v, &c)) {
481+ xs *m = NULL;
482+ if (valid_status(object_get_by_md5(v, &m))) {
483+ const char *content = xs_dict_get(m, "content");
484+ const char *actor = xs_dict_get(m, "actor");
485+ const xs_list *contentl = xs_dict_get(sfrl, content);
486+
487+ if ((user && is_muted(user, actor)) || is_instance_blocked(actor))
488+ continue;
489+
490+ xs *actors = xs_list_new();
491+ actors = xs_list_append(actors, actor);
492+ char me = actor && user && strcmp(actor, user->actor) == 0;
493+ int count = 1;
494+
495+ if (contentl) {
496+ count = atoi(xs_list_get(contentl, 0)) + 1;
497+ const xs_list *actorsc = xs_list_get(contentl, 1);
498+ if (strncmp(xs_list_get(contentl, 2), "1", 1) == 0)
499+ me = 1;
500+
501+ if (xs_list_in(actorsc, actor) != -1) {
502+ xs_free(actors);
503+ actors = xs_dup(actorsc);
504+ }
505+ else
506+ actors = xs_list_cat(actors, actorsc);
507+ }
508+
509+ xs *fl = xs_list_new();
510+ xs *c1 = xs_fmt("%d", count);
511+ xs *c2 = xs_fmt("%d", me);
512+ fl = xs_list_append(fl, c1, actors, c2);
513+ sfrl = xs_dict_append(sfrl, content, fl);
514+ }
515+ }
516+
517+ c = 0;
518+
519+ while (xs_list_next(rl, &k, &c)) {
520+ xs *m = NULL;
521+ if (valid_status(object_get_by_md5(k, &m))) {
522+ const xs_dict *tag = xs_dict_get(m, "tag");
523+ const xs_dict *ide = xs_dict_get(m, "id");
524+
525+ const char *content = xs_dict_get(m, "content");
526+ const char *shortname;
527+ shortname = xs_dict_get(m, "content");
528+
529+ const xs_list *items = xs_dict_get(sfrl, content);
530+
531+ if (!xs_is_null(items)) {
532+ const char *nb = xs_list_get(items, 0);
533+ const xs_list *actors = xs_list_get(items, 1);
534+ const char me = *xs_list_get(items, 2) == '1';
535+
536+ is_emoji = 1;
537+
538+ xs *al = xs_join(actors, ",\n\t");
539+ xs *act = atoi(nb) > 1 ?
540+ xs_fmt("%d different actors \n\t%s", atoi(nb), al) :
541+ xs_dup(xs_dict_get(m, "actor"));
542+
543+ xs *class = xs_list_new();
544+ class = xs_list_append(class, "snac-reaction");
545+
546+ xs_html *ret = NULL;
547+ if (tag && shortname) {
548+ xs *cl = xs_list_new();
549+ cl = xs_list_append(cl, "snac-reaction-image");
550+ xs *emoji = _replace_shortnames(xs_dup(shortname), tag, 2, proxy, cl, act);
551+
552+ emoji = xs_strip_chars_i(emoji, ":");
553+
554+ if (me)
555+ class = xs_list_append(class, "snac-reacted");
556+
557+ xs *l1 = xs_join(class, " ");
558+ ret = xs_html_tag("button",
559+ xs_html_attr("type", "submit"),
560+ xs_html_attr("name", "action"),
561+ xs_html_attr("value", me ? L("EmojiReact") : L("EmojiUnreact")),
562+ xs_html_raw(emoji),
563+ xs_html_tag("span",
564+ xs_html_raw(nb),
565+ xs_html_attr("style", "padding-left: 5px;")),
566+ xs_html_attr("title", act),
567+ xs_html_attr("class", l1));
568+
569+ if (!(ide && xs_startswith(ide, srv_baseurl)))
570+ xs_html_add(ret, xs_html_attr("disabled", "true"));
571+ }
572+ else if (shortname) {
573+ xs *sn = xs_dup(shortname);
574+ const char *sna = sn;
575+ unsigned int utf = xs_utf8_dec((const char **)&sna);
576+
577+ if (xs_is_emoji(utf)) {
578+ const char *style = "font-size: large;";
579+ if (me)
580+ class = xs_list_append(class, "snac-reacted");
581+ xs *l1 = xs_join(class, " ");
582+ xs *s1 = xs_fmt("&#%d", utf);
583+ ret = xs_html_tag("button",
584+ xs_html_attr("type", "submit"),
585+ xs_html_attr("name", "action"),
586+ xs_html_attr("value", me ? L("EmojiUnreact") : L("EmojiReact")),
587+ xs_html_raw(s1),
588+ xs_html_tag("span",
589+ xs_html_raw(nb),
590+ xs_html_attr("style", "font-size: initial; padding-left: 5px;")),
591+ xs_html_attr("title", act),
592+ xs_html_attr("class", l1),
593+ xs_html_attr("style", style));
594+ }
595+ }
596+ if (ret) {
597+ xs *s1;
598+ if (user) {
599+ xs *action = xs_fmt("%s/admin/action", user->actor);
600+ xs *form_id = xs_fmt("%s_reply_form", md5);
601+
602+ xs_html *form =
603+ xs_html_tag("form",
604+ xs_html_attr("autocomplete", "off"),
605+ xs_html_attr("method", "post"),
606+ xs_html_attr("action", action),
607+ xs_html_attr("enctype", "multipart/form-data"),
608+ xs_html_attr("style", "display: inline-flex;"
609+ "vertical-align: middle;"),
610+ xs_html_attr("id", form_id),
611+ xs_html_sctag("input",
612+ xs_html_attr("type", "hidden"),
613+ xs_html_attr("name", "id"),
614+ xs_html_attr("value", id)),
615+ xs_html_sctag("input",
616+ xs_html_attr("type", "hidden"),
617+ xs_html_attr("name", "eid"),
618+ xs_html_attr("value", shortname)),
619+ ret);
620+ s1 = xs_html_render(form);
621+ }
622+ else
623+ s1 = xs_html_render(ret);
624+
625+ ls = xs_list_append(ls, s1);
626+ sfrl = xs_dict_del(sfrl, content);
627+ }
628+ }
629+ }
630+ }
631+
632+ c = 0;
633+
634+ xs_html *emoji_div;
635+ if (xs_list_len(ls) > 0) {
636+ emoji_div = xs_html_tag("div", xs_html_text(L("Emoji reactions: ")),
637+ xs_html_attr("class", "snac-reaction-div"));
638+
639+ while (ls != NULL && xs_list_next(ls, &k, &c))
640+ xs_html_add(emoji_div, xs_html_raw(k));
641+
642+ xs_html_add(snac_content_wrap, emoji_div);
643+ }
644+
645+ }
646+
647 {
648 /** build the content string **/
649 const char *content = xs_dict_get(msg, "content");
650@@ -2378,7 +2757,8 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
651
652 c = xs_replace_i(c, "<br><br>", "<p>");
653
654- c = xs_str_cat(c, "<p>");
655+ if (is_emoji == 0)
656+ c = xs_str_cat(c, "<p>");
657
658 /* replace the :shortnames: */
659 c = replace_shortnames(c, xs_dict_get(msg, "tag"), 2, proxy);
660@@ -2426,7 +2806,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
661 if (read_only)
662 closed = 1; /* non-identified page; show as closed */
663 else
664- if (user && xs_startswith(id, user->actor))
665+ if (user && is_msg_mine(user, id))
666 closed = 1; /* we questioned; closed for us */
667 else
668 if (user && was_question_voted(user, id))
669@@ -2634,7 +3014,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
670 xs_html_attr("title", name))));
671 }
672 else
673- if (xs_startswith(type, "video/")) {
674+ if (xs_startswith(type, "video/") || strcmp(type, "Video") == 0) {
675 xs_html_add(content_attachments,
676 xs_html_tag("video",
677 xs_html_attr("preload", "none"),
678@@ -3003,7 +3383,7 @@ xs_html *html_footer(const snac *user)
679 xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
680 int skip, int show, int show_more,
681 const char *title, const char *page,
682- int utl, const char *error)
683+ int utl, const char *error, int terse)
684 /* returns the HTML for the timeline */
685 {
686 xs_list *p = (xs_list *)list;
687@@ -3031,7 +3411,11 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
688
689 if (user) {
690 head = html_user_head(user, desc, alternate);
691- body = html_user_body(user, read_only);
692+
693+ if (terse)
694+ body = xs_html_tag("body", NULL);
695+ else
696+ body = html_user_body(user, read_only);
697 }
698 else {
699 head = html_instance_head();
700@@ -3251,7 +3635,7 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
701
702 if (list && user && read_only) {
703 /** history **/
704- if (xs_type(xs_dict_get(srv_config, "disable_history")) != XSTYPE_TRUE) {
705+ if (xs_type(xs_dict_get(srv_config, "disable_history")) != XSTYPE_TRUE && !terse) {
706 xs_html *ul = xs_html_tag("ul", NULL);
707
708 xs_html *history = xs_html_tag("div",
709@@ -3323,13 +3707,19 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
710 }
711
712
713-xs_html *html_people_list(snac *user, xs_list *list, const char *header, const char *t, const char *proxy)
714+xs_html *html_people_list(snac *user, xs_list *list, const char *header, const char *t, const char *proxy, int do_count)
715 {
716 xs_html *snac_posts;
717+ xs *header_cnt;
718+ if (do_count)
719+ header_cnt = xs_fmt("%s - %d\n", header, xs_list_len(list));
720+ else
721+ header_cnt = xs_fmt("%s\n", header);
722+
723 xs_html *people = xs_html_tag("div",
724 xs_html_tag("h2",
725 xs_html_attr("class", "snac-header"),
726- xs_html_text(header)),
727+ xs_html_text(header_cnt)),
728 snac_posts = xs_html_tag("details",
729 xs_html_attr("open", NULL),
730 xs_html_tag("summary",
731@@ -3570,12 +3960,12 @@ xs_str *html_people(snac *user)
732
733 if (xs_list_len(pending) || xs_is_true(xs_dict_get(user->config, "approve_followers"))) {
734 xs_html_add(lists,
735- html_people_list(user, pending, L("Pending follow confirmations"), "p", proxy));
736+ html_people_list(user, pending, L("Pending follow confirmations"), "p", proxy, 1));
737 }
738
739 xs_html_add(lists,
740- html_people_list(user, wing, L("People you follow"), "i", proxy),
741- html_people_list(user, wers, L("People that follow you"), "e", proxy));
742+ html_people_list(user, wing, L("People you follow"), "i", proxy, 1),
743+ html_people_list(user, wers, L("People that follow you"), "e", proxy, 1));
744
745 xs_html *html = xs_html_tag("html",
746 html_user_head(user, NULL, NULL),
747@@ -3586,6 +3976,108 @@ xs_str *html_people(snac *user)
748 return xs_html_render_s(html, "<!DOCTYPE html>\n");
749 }
750
751+/* Filter list to display only posts by actor. We'll probably show
752+ fewer than show posts. Should we try harder to find some? */
753+xs_str *html_people_one(snac *user, const char *actor, const xs_list *list,
754+ int skip, int show, int show_more, const char *page)
755+{
756+ const char *proxy = NULL;
757+ xs_list *p = (xs_list *)list;
758+ const char *v;
759+
760+ if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
761+ proxy = user->actor;
762+
763+ xs_html *body = html_user_body(user, 0);
764+
765+ xs_html *lists = xs_html_tag("div",
766+ xs_html_attr("class", "snac-posts"));
767+
768+ xs *foll = xs_list_append(xs_list_new(), actor);
769+
770+ xs_html_add(lists,
771+ html_people_list(user, foll, L("Contact's posts"), "p", proxy, 0));
772+
773+ xs_html_add(body, lists);
774+
775+ while (xs_list_iter(&p, &v)) {
776+ xs *msg = NULL;
777+ int status;
778+
779+ status = timeline_get_by_md5(user, v, &msg);
780+
781+ if (!valid_status(status))
782+ continue;
783+
784+ const char *id = xs_dict_get(msg, "id");
785+ const char *by = get_atto(msg);
786+ xs *actor_md5 = NULL;
787+ xs_list *boosts = NULL;
788+ xs_list *likes = NULL;
789+ xs_list *reacts = NULL;
790+ /* Besides actor's posts, also show actor's boosts, and also
791+ posts by user with likes or reacts by actor. I.e., any
792+ actor's actions that user could have seen in the timeline
793+ or in notifications. */
794+ if (!(by && strcmp(actor, by) == 0) &&
795+ xs_list_in((boosts = object_announces(id)),
796+ (actor_md5 = xs_md5_hex(actor, strlen(actor)))) == -1 &&
797+ (!(by && strcmp(user->actor, by) == 0) ||
798+ (xs_list_in((likes = object_likes(id)), actor_md5) == -1 &&
799+ xs_list_in((reacts = object_get_emoji_reacts(id)), actor_md5) == -1)))
800+ continue;
801+
802+ xs_html *entry = html_entry(user, msg, 0, 0, v, 1);
803+
804+ if (entry != NULL)
805+ xs_html_add(lists,
806+ entry);
807+ }
808+
809+ if (show_more) {
810+ xs *m = NULL;
811+ xs *m10 = NULL;
812+ xs *ss = xs_fmt("skip=%d&show=%d", skip + show, show);
813+
814+ xs *url = xs_dup(user == NULL ? srv_baseurl : user->actor);
815+
816+ if (page != NULL)
817+ url = xs_str_cat(url, page);
818+
819+ if (xs_str_in(url, "?") != -1)
820+ m = xs_fmt("%s&%s", url, ss);
821+ else
822+ m = xs_fmt("%s?%s", url, ss);
823+
824+ m10 = xs_fmt("%s0", m);
825+
826+ xs_html *more_links = xs_html_tag("p",
827+ xs_html_tag("a",
828+ xs_html_attr("href", url),
829+ xs_html_attr("name", "snac-more"),
830+ xs_html_text(L("Back to top"))),
831+ xs_html_text(" - "),
832+ xs_html_tag("a",
833+ xs_html_attr("href", m),
834+ xs_html_attr("name", "snac-more"),
835+ xs_html_text(L("More..."))),
836+ xs_html_text(" - "),
837+ xs_html_tag("a",
838+ xs_html_attr("href", m10),
839+ xs_html_attr("name", "snac-more"),
840+ xs_html_text(L("More (x 10)..."))));
841+
842+ xs_html_add(body,
843+ more_links);
844+ }
845+
846+ xs_html *html = xs_html_tag("html",
847+ html_user_head(user, NULL, NULL),
848+ xs_html_add(body,
849+ html_footer(user)));
850+
851+ return xs_html_render_s(html, "<!DOCTYPE html>\n");
852+}
853
854 xs_str *html_notifications(snac *user, int skip, int show)
855 {
856@@ -3654,6 +4146,9 @@ xs_str *html_notifications(snac *user, int skip, int show)
857 if (xs_is_string(id2) && xs_set_add(&rep, id2) != 1)
858 continue;
859
860+ if (strcmp(type, "EmojiReact") == 0 && xs_is_true(xs_dict_get(srv_config, "disable_emojireact")))
861+ continue;
862+
863 object_get(id, &obj);
864
865 const char *msg_id = NULL;
866@@ -3689,9 +4184,18 @@ xs_str *html_notifications(snac *user, int skip, int show)
867 if (strcmp(type, "EmojiReact") == 0 || strcmp(type, "Like") == 0) {
868 const char *content = xs_dict_get_path(noti, "msg.content");
869
870+ xs *cd = xs_dup(content);
871+ const char *sna = cd;
872+ const xs_dict *tag = xs_dict_get_path(noti, "msg.tag");
873+ unsigned int utf = xs_utf8_dec((const char **)&sna);
874+
875+ int isEmoji = 0;
876+ if (xs_is_emoji(utf) || (tag && xs_list_len(tag) > 0))
877+ isEmoji = 1;
878+
879 if (xs_type(content) == XSTYPE_STRING) {
880 xs *emoji = replace_shortnames(xs_dup(content), xs_dict_get_path(noti, "msg.tag"), 1, proxy);
881- wrk = xs_fmt("%s (%s️)", type, emoji);
882+ wrk = xs_fmt("%s (%s️)", isEmoji ? "EmojiReact" : "Like", emoji);
883 label = wrk;
884 }
885 }
886@@ -3909,6 +4413,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
887 int cache = 1;
888 int save = 1;
889 int proxy = 0;
890+ int terse = 0;
891 const char *v;
892
893 const xs_dict *q_vars = xs_dict_get(req, "q_vars");
894@@ -3921,6 +4426,9 @@ int html_get_handler(const xs_dict *req, const char *q_path,
895 return HTTP_STATUS_NOT_FOUND;
896 }
897
898+ if (!xs_is_null(xs_dict_get(q_vars, "terse")))
899+ terse = 1;
900+
901 if (strcmp(v, "share-bridge") == 0) {
902 /* temporary redirect for a post */
903 const char *login = xs_dict_get(q_vars, "login");
904@@ -3988,8 +4496,12 @@ int html_get_handler(const xs_dict *req, const char *q_path,
905 cache = 0;
906
907 int skip = 0;
908+ const char *max_show_default = "50";
909+ int max_show = xs_number_get(xs_dict_get_def(srv_config, "max_timeline_entries",
910+ max_show_default));
911 int def_show = xs_number_get(xs_dict_get_def(srv_config, "def_timeline_entries",
912- xs_dict_get_def(srv_config, "max_timeline_entries", "50")));
913+ xs_dict_get_def(srv_config, "max_timeline_entries",
914+ max_show_default)));
915 int show = def_show;
916
917 if ((v = xs_dict_get(q_vars, "skip")) != NULL)
918@@ -4015,13 +4527,15 @@ int html_get_handler(const xs_dict *req, const char *q_path,
919 /* a show of 0 has no sense */
920 if (show == 0)
921 show = def_show;
922+ if (show > max_show)
923+ show = max_show;
924
925 if (p_path == NULL) { /** public timeline **/
926 xs *h = xs_str_localtime(0, "%Y-%m.html");
927
928 if (xs_type(xs_dict_get(snac.config, "private")) == XSTYPE_TRUE) {
929 /** empty public timeline for private users **/
930- *body = html_timeline(&snac, NULL, 1, 0, 0, 0, NULL, "", 1, error);
931+ *body = html_timeline(&snac, NULL, 1, 0, 0, 0, NULL, "", 1, error, terse);
932 *b_size = strlen(*body);
933 status = HTTP_STATUS_OK;
934 }
935@@ -4044,7 +4558,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
936 xs *pins = pinned_list(&snac);
937 pins = xs_list_cat(pins, list);
938
939- *body = html_timeline(&snac, pins, 1, skip, show, more, NULL, "", 1, error);
940+ *body = html_timeline(&snac, pins, 1, skip, show, more, NULL, "", 1, error, terse);
941
942 *b_size = strlen(*body);
943 status = HTTP_STATUS_OK;
944@@ -4060,9 +4574,15 @@ int html_get_handler(const xs_dict *req, const char *q_path,
945 status = HTTP_STATUS_UNAUTHORIZED;
946 }
947 else {
948- const char *q = xs_dict_get(q_vars, "q");
949+ const char *q = NULL;
950+ xs *cq = xs_dup(xs_dict_get(q_vars, "q"));
951 xs *url_acct = NULL;
952
953+ if (xs_is_string(cq)) {
954+ cq = xs_strip_i(cq);
955+ q = cq;
956+ }
957+
958 /* searching for an URL? */
959 if (q && xs_match(q, "https://*|http://*")) {
960 /* may by an actor; try a webfinger */
961@@ -4126,11 +4646,11 @@ int html_get_handler(const xs_dict *req, const char *q_path,
962 actor_add(actor, actor_obj);
963
964 /* create a people list with only one element */
965- l = xs_list_append(xs_list_new(), actor);
966+ l = xs_list_append(l, actor);
967
968 xs *title = xs_fmt(L("Search results for account %s"), q);
969
970- page = html_people_list(&snac, l, title, "wf", NULL);
971+ page = html_people_list(&snac, l, title, "wf", NULL, 1);
972 }
973 }
974
975@@ -4168,7 +4688,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
976 xs *title = xs_fmt(xs_list_len(tl) ?
977 L("Search results for tag %s") : L("Nothing found for tag %s"), q);
978
979- *body = html_timeline(&snac, tl, 0, skip, show, more, title, page, 0, error);
980+ *body = html_timeline(&snac, tl, 0, skip, show, more, title, page, 0, error, terse);
981 *b_size = strlen(*body);
982 status = HTTP_STATUS_OK;
983 }
984@@ -4193,7 +4713,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
985 title = xs_fmt(L("Nothing found for '%s'"), q);
986
987 *body = html_timeline(&snac, tl, 0, skip, tl_len, to || tl_len == show,
988- title, page, 0, error);
989+ title, page, 0, error, terse);
990 *b_size = strlen(*body);
991 status = HTTP_STATUS_OK;
992 }
993@@ -4220,7 +4740,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
994 xs *list = timeline_list(&snac, "private", skip, show, &more);
995
996 *body = html_timeline(&snac, list, 0, skip, show,
997- more, NULL, "/admin", 1, error);
998+ more, NULL, "/admin", 1, error, terse);
999
1000 *b_size = strlen(*body);
1001 status = HTTP_STATUS_OK;
1002@@ -4247,7 +4767,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1003 xs *list0 = xs_list_append(xs_list_new(), md5);
1004 xs *list = timeline_top_level(&snac, list0);
1005
1006- *body = html_timeline(&snac, list, 0, 0, 0, 0, NULL, "/admin", 1, error);
1007+ *body = html_timeline(&snac, list, 0, 0, 0, 0, NULL, "/admin", 1, error, terse);
1008 *b_size = strlen(*body);
1009 status = HTTP_STATUS_OK;
1010 }
1011@@ -4266,6 +4786,37 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1012 }
1013 }
1014 else
1015+ if (xs_startswith(p_path, "people/")) { /** a single actor **/
1016+ if (!login(&snac, req)) {
1017+ *body = xs_dup(uid);
1018+ status = HTTP_STATUS_UNAUTHORIZED;
1019+ }
1020+ else {
1021+ xs *actor_dict = NULL;
1022+ const char *actor_id = NULL;
1023+ xs *actor = NULL;
1024+ xs_list *page_lst = xs_split_n(p_path, "?", 2);
1025+ xs *page = xs_str_cat(xs_str_new("/"), xs_list_get(page_lst, 0));
1026+ xs_list *l = xs_split_n(page, "/", 3);
1027+ const char *actor_md5 = xs_list_get(l, 2);
1028+
1029+ if (valid_status(object_get_by_md5(actor_md5, &actor_dict)) &&
1030+ (actor_id = xs_dict_get(actor_dict, "id")) != NULL &&
1031+ valid_status(actor_get(actor_id, &actor))) {
1032+ int more = 0;
1033+ xs *list = timeline_simple_list(&snac, "private", skip, show, &more);
1034+
1035+ *body = html_people_one(&snac, actor_id, list, skip, show, more, page);
1036+ *b_size = strlen(*body);
1037+ status = HTTP_STATUS_OK;
1038+ }
1039+ else {
1040+ *body = xs_dup(uid);
1041+ status = HTTP_STATUS_NOT_FOUND;
1042+ }
1043+ }
1044+ }
1045+ else
1046 if (strcmp(p_path, "notifications") == 0) { /** the list of notifications **/
1047 if (!login(&snac, req)) {
1048 *body = xs_dup(uid);
1049@@ -4288,7 +4839,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1050 xs *next = timeline_instance_list(skip + show, 1);
1051
1052 *body = html_timeline(&snac, list, 0, skip, show,
1053- xs_list_len(next), L("Showing instance timeline"), "/instance", 0, error);
1054+ xs_list_len(next), L("Showing instance timeline"), "/instance", 0, error, terse);
1055 *b_size = strlen(*body);
1056 status = HTTP_STATUS_OK;
1057 }
1058@@ -4303,7 +4854,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1059 xs *list = pinned_list(&snac);
1060
1061 *body = html_timeline(&snac, list, 0, skip, show,
1062- 0, L("Pinned posts"), "", 0, error);
1063+ 0, L("Pinned posts"), "", 0, error, terse);
1064 *b_size = strlen(*body);
1065 status = HTTP_STATUS_OK;
1066 }
1067@@ -4318,7 +4869,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1068 xs *list = bookmark_list(&snac);
1069
1070 *body = html_timeline(&snac, list, 0, skip, show,
1071- 0, L("Bookmarked posts"), "", 0, error);
1072+ 0, L("Bookmarked posts"), "", 0, error, terse);
1073 *b_size = strlen(*body);
1074 status = HTTP_STATUS_OK;
1075 }
1076@@ -4333,7 +4884,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1077 xs *list = draft_list(&snac);
1078
1079 *body = html_timeline(&snac, list, 0, skip, show,
1080- 0, L("Post drafts"), "", 0, error);
1081+ 0, L("Post drafts"), "", 0, error, terse);
1082 *b_size = strlen(*body);
1083 status = HTTP_STATUS_OK;
1084 }
1085@@ -4348,7 +4899,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1086 xs *list = scheduled_list(&snac);
1087
1088 *body = html_timeline(&snac, list, 0, skip, show,
1089- 0, L("Scheduled posts"), "", 0, error);
1090+ 0, L("Scheduled posts"), "", 0, error, terse);
1091 *b_size = strlen(*body);
1092 status = HTTP_STATUS_OK;
1093 }
1094@@ -4374,7 +4925,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1095 xs *title = xs_fmt(L("Showing timeline for list '%s'"), name);
1096
1097 *body = html_timeline(&snac, ttl, 0, skip, show,
1098- xs_list_len(next), title, base, 1, error);
1099+ xs_list_len(next), title, base, 1, error, terse);
1100 *b_size = strlen(*body);
1101 status = HTTP_STATUS_OK;
1102 }
1103@@ -4394,7 +4945,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1104
1105 list = xs_list_append(list, md5);
1106
1107- *body = html_timeline(&snac, list, 1, 0, 0, 0, NULL, "", 1, error);
1108+ *body = html_timeline(&snac, list, 1, 0, 0, 0, NULL, "", 1, error, terse);
1109 *b_size = strlen(*body);
1110 status = HTTP_STATUS_OK;
1111 }
1112@@ -4582,8 +5133,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
1113 xs *msg = msg_admiration(&snac, id, *action == 'L' ? "Like" : "Announce");
1114
1115 if (msg != NULL) {
1116+ timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, *action == 'L' ? 1 : 0, msg);
1117 enqueue_message(&snac, msg);
1118- timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, *action == 'L' ? 1 : 0);
1119
1120 status = HTTP_STATUS_SEE_OTHER;
1121 }
1122@@ -4858,6 +5409,9 @@ int html_post_handler(const xs_dict *req, const char *q_path,
1123 /* overwrite object, not updating the indexes */
1124 object_add_ow(edit_id, msg);
1125
1126+ /* index tags */
1127+ tag_index(edit_id, msg);
1128+
1129 /* update message */
1130 c_msg = msg_update(&snac, msg);
1131 }
1132@@ -4891,12 +5445,36 @@ int html_post_handler(const xs_dict *req, const char *q_path,
1133
1134 status = HTTP_STATUS_SEE_OTHER;
1135
1136+ if (strcmp(action, L("EmojiUnreact")) == 0) { /** **/
1137+ const char *eid = xs_dict_get(p_vars, "eid");
1138+
1139+ if (eid != NULL) {
1140+ xs *n_msg = msg_emoji_unreact(&snac, id, eid);
1141+
1142+ if (n_msg != NULL)
1143+ enqueue_message(&snac, n_msg);
1144+ }
1145+ }
1146+ else
1147+ if (strcmp(action, L("EmojiReact")) == 0) { /** **/
1148+ xs *eid = xs_dup(xs_dict_get(p_vars, "eid"));
1149+
1150+ eid = xs_strip_chars_i(eid, ":");
1151+
1152+ const xs_dict *ret = msg_emoji_init(&snac, id, eid);
1153+ /* fails if either invalid or already reacted */
1154+ if (!ret)
1155+ ret = msg_emoji_unreact(&snac, id, eid);
1156+ if (!ret)
1157+ status = HTTP_STATUS_NOT_FOUND;
1158+ }
1159+ else
1160 if (strcmp(action, L("Like")) == 0) { /** **/
1161 xs *msg = msg_admiration(&snac, id, "Like");
1162
1163 if (msg != NULL) {
1164+ timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 1, msg);
1165 enqueue_message(&snac, msg);
1166- timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 1);
1167 }
1168 }
1169 else
1170@@ -4904,8 +5482,8 @@ int html_post_handler(const xs_dict *req, const char *q_path,
1171 xs *msg = msg_admiration(&snac, id, "Announce");
1172
1173 if (msg != NULL) {
1174+ timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 0, msg);
1175 enqueue_message(&snac, msg);
1176- timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 0);
1177 }
1178 }
1179 else
1180@@ -5022,7 +5600,7 @@ int html_post_handler(const xs_dict *req, const char *q_path,
1181 }
1182 else {
1183 /* delete an entry */
1184- if (xs_startswith(id, snac.actor) && !is_draft(&snac, id)) {
1185+ if (is_msg_mine(&snac, id) && !is_draft(&snac, id)) {
1186 /* it's a post by us: generate a delete */
1187 xs *msg = msg_delete(&snac, id);
1188
1189@@ -5351,6 +5929,33 @@ int html_post_handler(const xs_dict *req, const char *q_path,
1190
1191 status = HTTP_STATUS_SEE_OTHER;
1192 }
1193+ else
1194+ if (p_path && strcmp(p_path, "admin/muted-words") == 0) {
1195+ const char *words = xs_dict_get(p_vars, "muted_words");
1196+
1197+ if (xs_is_string(words)) {
1198+ xs *new_words = xs_list_new();
1199+ xs *l = xs_split(words, "\n");
1200+ const char *v;
1201+
1202+ xs_list_foreach(l, v) {
1203+ xs *s1 = xs_strip_i(xs_dup(v));
1204+ s1 = xs_replace_i(s1, " ", "");
1205+
1206+ if (*s1 == '\0')
1207+ continue;
1208+
1209+ xs *s2 = xs_utf8_to_lower(s1);
1210+
1211+ new_words = xs_list_insert_sorted(new_words, s2);
1212+ }
1213+
1214+ snac.config = xs_dict_set(snac.config, "muted_words", new_words);
1215+ user_persist(&snac, 0);
1216+ }
1217+
1218+ status = HTTP_STATUS_SEE_OTHER;
1219+ }
1220
1221 if (status == HTTP_STATUS_SEE_OTHER) {
1222 const char *hard_redir = xs_dict_get(p_vars, "hard-redir");
M
http.c
+1,
-1
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
M
httpd.c
+3,
-3
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
8@@ -257,7 +257,7 @@ int server_get_handler(xs_dict *req, const char *q_path,
9 else {
10 xs *page = xs_fmt("?t=%s", t);
11 xs *title = xs_fmt(L("Search results for tag #%s"), t);
12- *body = html_timeline(NULL, tl, 0, skip, show, more, title, page, 0, NULL);
13+ *body = html_timeline(NULL, tl, 0, skip, show, more, title, page, 0, NULL, 0);
14 }
15 }
16 else
17@@ -265,7 +265,7 @@ int server_get_handler(xs_dict *req, const char *q_path,
18 /** instance timeline **/
19 xs *tl = timeline_instance_list(0, 30);
20 *body = html_timeline(NULL, tl, 0, 0, 0, 0,
21- L("Recent posts by users in this instance"), NULL, 0, NULL);
22+ L("Recent posts by users in this instance"), NULL, 0, NULL, 0);
23 }
24 else
25 *body = greeting_html();
M
main.c
+38,
-4
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
8@@ -18,7 +18,7 @@
9 int usage(const char *cmd)
10 {
11 printf("snac " VERSION " - A simple, minimalistic ActivityPub instance\n");
12- printf("Copyright (c) 2022 - 2025 grunfink et al. / MIT license\n");
13+ printf("Copyright (c) 2022 - 2026 grunfink et al. / MIT license\n");
14 printf("\n");
15
16 if (cmd == NULL) {
17@@ -76,7 +76,9 @@ int usage(const char *cmd)
18 "list_create {basedir} {uid} {name} Creates a new list\n"
19 "list_remove {basedir} {uid} {name} Removes an existing list\n"
20 "list_add {basedir} {uid} {name} {acct} Adds an account (@user@host or actor url) to a list\n"
21- "list_del {basedir} {uid} {name} {actor} Deletes an actor URL from a list\n";
22+ "list_del {basedir} {uid} {name} {actor} Deletes an actor URL from a list\n"
23+ "top_ten {basedir} {uid} [{N}] Prints the most popular posts\n"
24+ "refresh {basedir} {uid} Refreshes all actors\n";
25
26 if (cmd == NULL)
27 printf("%s", cmds);
28@@ -350,6 +352,38 @@ int main(int argc, char *argv[])
29 return 0;
30 }
31
32+ if (strcmp(cmd, "top_ten") == 0) { /** **/
33+ int count = 10;
34+ const char *n = GET_ARGV();
35+ if (xs_is_string(n))
36+ count = atoi(n);
37+
38+ xs *l = user_top_ten(&snac, count);
39+ const xs_list *i;
40+
41+ xs_list_foreach(l, i) {
42+ printf("%s %ld★ %ld↺\n", xs_list_get(i, 0),
43+ xs_number_get_l(xs_list_get(i, 1)),
44+ xs_number_get_l(xs_list_get(i, 2)));
45+ }
46+
47+ return 0;
48+ }
49+
50+ if (strcmp(cmd, "refresh") == 0) { /** **/
51+ xs *fwers = follower_list(&snac);
52+ xs *fwing = following_list(&snac);
53+ const char *id;
54+
55+ xs_list_foreach(fwers, id)
56+ enqueue_actor_refresh(&snac, id, 0);
57+
58+ xs_list_foreach(fwing, id)
59+ enqueue_actor_refresh(&snac, id, 0);
60+
61+ return 0;
62+ }
63+
64 if ((url = GET_ARGV()) == NULL)
65 return usage(cmd);
66
67@@ -498,7 +532,7 @@ int main(int argc, char *argv[])
68
69 if (msg != NULL) {
70 enqueue_message(&snac, msg);
71- timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 0);
72+ timeline_admire(&snac, xs_dict_get(msg, "object"), snac.actor, 0, "");
73
74 if (dbglevel) {
75 xs_json_dump(msg, 4, stdout);
+270,
-72
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #ifndef NO_MASTODON_API
7
8@@ -1158,6 +1158,103 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg)
9 st = xs_dict_append(st, "tags", htl);
10 st = xs_dict_append(st, "emojis", eml);
11 }
12+ {
13+ xs *rl = object_get_emoji_reacts(id);
14+ xs *frl = xs_list_new(); /* final */
15+ xs *sfrl = xs_dict_new(); /* seen */
16+ int c = 0;
17+ const char *v;
18+
19+ while (xs_list_next(rl, &v, &c)) {
20+ xs *msg = NULL;
21+ if (valid_status(object_get_by_md5(v, &msg))) {
22+ const char *content = xs_dict_get(msg, "content");
23+ const char *actor = xs_dict_get(msg, "actor");
24+ const xs_list *contentl = xs_dict_get(sfrl, content);
25+
26+ if ((snac && is_muted(snac, actor)) || is_instance_blocked(actor))
27+ continue;
28+
29+ /* NOTE: idk when there are no actor, but i encountered that bug.
30+ * Probably because of one of my previous attempts.
31+ * Keeping this just in case, can remove later */
32+ const char *me = actor && snac && strcmp(actor, snac->actor) == 0 ?
33+ xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE);
34+ int count = 1;
35+
36+ if (contentl) {
37+ count = atoi(xs_list_get(contentl, 0)) + 1;
38+ if (strncmp(xs_list_get(contentl, 1), xs_stock(XSTYPE_TRUE), 1) == 0)
39+ me = xs_stock(XSTYPE_TRUE);
40+ }
41+
42+ xs *fl = xs_list_new();
43+ xs *c1 = xs_fmt("%d", count);
44+ fl = xs_list_append(fl, c1, me);
45+ sfrl = xs_dict_append(sfrl, content, fl);
46+ }
47+ }
48+
49+ c = 0;
50+
51+ while (xs_list_next(rl, &v, &c)) {
52+ xs *msg = NULL;
53+ if (valid_status(object_get_by_md5(v, &msg))) {
54+ xs *d1 = xs_dict_new();
55+
56+ const xs_dict *icon = xs_dict_get(xs_list_get(xs_dict_get(msg, "tag"), 0), "icon");
57+ const char *o_url = xs_dict_get(icon, "url");
58+ const char *name = xs_dict_get(msg, "content");
59+ const char *actor = xs_dict_get(msg, "actor");
60+
61+ xs *nm = xs_dup(name);
62+ xs *url = NULL;
63+
64+ if (!xs_is_null(o_url)) {
65+ if (actor && snac && !strcmp(actor, snac->actor))
66+ url = make_url(o_url, NULL, 1);
67+ else
68+ url = xs_dup(o_url);
69+ }
70+
71+ xs *accounts = xs_list_new();
72+ if (actor) {
73+ xs *d2 = xs_dict_new();
74+ object_get(actor, &d2);
75+ xs *e_acct = mastoapi_account(snac, d2);
76+ accounts = xs_list_append(accounts, e_acct);
77+ }
78+
79+ const xs_list *item = xs_dict_get(sfrl, nm);
80+ const xs_str *nb = xs_list_get(item, 0);
81+ const xs_val *me = xs_list_get(item, 1);
82+ if (item == NULL)
83+ continue;
84+
85+ if (nm && strcmp(nm, "")) {
86+ if (url && strcmp(url, "")) {
87+ d1 = xs_dict_append(d1, "name", nm);
88+ d1 = xs_dict_append(d1, "shortcode", nm);
89+ d1 = xs_dict_append(d1, "accounts", accounts);
90+ d1 = xs_dict_append(d1, "me", me);
91+ d1 = xs_dict_append(d1, "url", url);
92+ d1 = xs_dict_append(d1, "static_url", url);
93+ d1 = xs_dict_append(d1, "visible_in_picker", xs_stock(XSTYPE_TRUE));
94+ d1 = xs_dict_append(d1, "count", nb);
95+ } else {
96+ d1 = xs_dict_append(d1, "name", nm);
97+ d1 = xs_dict_append(d1, "count", nb);
98+ d1 = xs_dict_append(d1, "me", me);
99+ d1 = xs_dict_append(d1, "visible_in_picker", xs_stock(XSTYPE_TRUE));
100+ }
101+ sfrl = xs_dict_del(sfrl, nm);
102+ frl = xs_list_append(frl, d1);
103+ }
104+ }
105+ }
106+
107+ st = xs_dict_append(st, "reactions", frl);
108+ }
109
110 xs_free(idx);
111 xs_free(ixc);
112@@ -1712,6 +1809,37 @@ xs_list *mastoapi_account_lists(snac *user, const char *uid)
113 }
114
115
116+xs_list *build_childrens(const xs_dict *msg, snac *snac1) {
117+ xs_list *ret = xs_list_new();
118+ xs *children = object_children(xs_dict_get(msg, "id"));
119+ char *p = children;
120+ const xs_str *v;
121+
122+ while (xs_list_iter(&p, &v)) {
123+ xs *m2 = NULL;
124+
125+ if (valid_status(timeline_get_by_md5(snac1, v, &m2))) {
126+ if (xs_is_null(xs_dict_get(m2, "name"))) {
127+ xs *st = mastoapi_status(snac1, m2);
128+
129+ if (st) {
130+ /* childrens children */
131+ xs *childs = build_childrens(m2, snac1);
132+ ret = xs_list_append(ret, st);
133+ if (xs_list_len(childs)) {
134+ char *p2 = childs;
135+ while (xs_list_iter(&p2, &v))
136+ ret = xs_list_append(ret, v);
137+
138+ }
139+ }
140+ }
141+ }
142+ }
143+ return ret;
144+}
145+
146+
147 int mastoapi_get_handler(const xs_dict *req, const char *q_path,
148 char **body, int *b_size, char **ctype, xs_str **link)
149 {
150@@ -1892,60 +2020,64 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
151 }
152 else
153 if (strcmp(opt, "statuses") == 0) { /** **/
154- /* the public list of posts of a user */
155- const char *limit_s = xs_dict_get(args, "limit");
156- const char *o_max_id = xs_dict_get(args, "max_id");
157- int limit = limit_s ? atoi(limit_s) : 20;
158- xs *max_id = o_max_id ? xs_tolower_i(xs_dup(o_max_id)) : NULL;
159+ if (logged_in || xs_type(xs_dict_get(snac2.config, "private")) == XSTYPE_FALSE) {
160+ /* the public list of posts of a user */
161+ const char *limit_s = xs_dict_get(args, "limit");
162+ const char *o_max_id = xs_dict_get(args, "max_id");
163+ int limit = limit_s ? atoi(limit_s) : 20;
164+ xs *max_id = o_max_id ? xs_tolower_i(xs_dup(o_max_id)) : NULL;
165
166- srv_debug(1, xs_fmt("account statuses: max_id=%s limit=%d", max_id ? max_id : "(null)", limit));
167+ srv_debug(1, xs_fmt("account statuses: max_id=%s limit=%d", max_id ? max_id : "(null)", limit));
168
169- xs *timeline = timeline_simple_list(&snac2, "public", 0, 256, NULL);
170- xs_list *p = timeline;
171- const xs_str *v;
172- xs_set seen;
173- int cnt = 0;
174- int skip_until_max = max_id != NULL;
175+ xs *timeline = timeline_simple_list(&snac2, "public", 0, 256, NULL);
176+ xs_list *p = timeline;
177+ const xs_str *v;
178+ xs_set seen;
179+ int cnt = 0;
180+ int skip_until_max = max_id != NULL;
181
182- out = xs_list_new();
183- xs_set_init(&seen);
184+ out = xs_list_new();
185+ xs_set_init(&seen);
186
187- while (xs_list_iter(&p, &v) && cnt < limit) {
188- xs *msg = NULL;
189+ while (xs_list_iter(&p, &v) && cnt < limit) {
190+ xs *msg = NULL;
191
192- if (valid_status(timeline_get_by_md5(&snac2, v, &msg))) {
193- const char *msg_id = xs_dict_get(msg, "id");
194+ if (valid_status(timeline_get_by_md5(&snac2, v, &msg))) {
195+ const char *msg_id = xs_dict_get(msg, "id");
196
197- /* add only posts by the author */
198- if (!xs_is_null(msg_id) &&
199- strcmp(xs_dict_get(msg, "type"), "Note") == 0 &&
200- xs_startswith(xs_dict_get(msg, "id"), snac2.actor) && is_msg_public(msg)) {
201+ /* add only posts by the author */
202+ if (!xs_is_null(msg_id) &&
203+ strcmp(xs_dict_get(msg, "type"), "Note") == 0 &&
204+ is_msg_mine(&snac2, xs_dict_get(msg, "id")) && is_msg_public(msg)) {
205
206- /* if max_id is set, skip entries until we find it */
207- if (skip_until_max) {
208- xs *mid = mastoapi_id(msg);
209- if (strcmp(mid, max_id) == 0) {
210- skip_until_max = 0;
211- srv_debug(2, xs_fmt("account statuses: found max_id, starting from next post"));
212+ /* if max_id is set, skip entries until we find it */
213+ if (skip_until_max) {
214+ xs *mid = mastoapi_id(msg);
215+ if (strcmp(mid, max_id) == 0) {
216+ skip_until_max = 0;
217+ srv_debug(2, xs_fmt("account statuses: found max_id, starting from next post"));
218+ }
219+ continue;
220 }
221- continue;
222- }
223
224- /* deduplicate by message id */
225- if (xs_set_add(&seen, msg_id) == 1) {
226- xs *st = mastoapi_status(&snac2, msg);
227+ /* deduplicate by message id */
228+ if (xs_set_add(&seen, msg_id) == 1) {
229+ xs *st = mastoapi_status(&snac2, msg);
230
231- if (st) {
232- out = xs_list_append(out, st);
233- cnt++;
234+ if (st) {
235+ out = xs_list_append(out, st);
236+ cnt++;
237+ }
238 }
239 }
240 }
241 }
242- }
243
244- srv_debug(1, xs_fmt("account statuses: returning %d posts (requested %d)", cnt, limit));
245- xs_set_free(&seen);
246+ srv_debug(1, xs_fmt("account statuses: returning %d posts (requested %d)", cnt, limit));
247+ xs_set_free(&seen);
248+ }
249+ else
250+ status = HTTP_STATUS_UNAUTHORIZED;
251 }
252 else
253 if (strcmp(opt, "featured_tags") == 0) {
254@@ -2202,15 +2334,24 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
255 if (noti == NULL)
256 continue;
257
258+ const xs_dict *tag = xs_list_get(xs_dict_get_path(noti, "msg.tag"), 0);
259+
260 const char *type = xs_dict_get(noti, "type");
261 const char *utype = xs_dict_get(noti, "utype");
262 const char *objid = xs_dict_get(noti, "objid");
263 const char *id = xs_dict_get(noti, "id");
264 const char *actid = xs_dict_get(noti, "actor");
265+
266+ int isEmoji = 0;
267+
268 xs *fid = xs_replace(id, ".", "");
269 xs *actor = NULL;
270 xs *entry = NULL;
271
272+ if (tag) {
273+ isEmoji = strcmp(xs_dict_get(tag, "type"), "Emoji") ? 0 : 1;
274+ }
275+
276 if (!valid_status(actor_get(actid, &actor)))
277 continue;
278
279@@ -2234,9 +2375,12 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
280 }
281
282 /* convert the type */
283- if (strcmp(type, "Like") == 0 || strcmp(type, "EmojiReact") == 0)
284+ if (strcmp(type, "Like") == 0 && !isEmoji)
285 type = "favourite";
286 else
287+ if (isEmoji || strcmp(type, "EmojiReact") == 0)
288+ type = "reaction";
289+ else
290 if (strcmp(type, "Announce") == 0)
291 type = "reblog";
292 else
293@@ -2277,8 +2421,31 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
294 if (strcmp(type, "follow") != 0 && !xs_is_null(objid)) {
295 xs *st = mastoapi_status(&snac1, entry);
296
297- if (st)
298+ if (st) {
299 mn = xs_dict_append(mn, "status", st);
300+
301+ if (strcmp(type, "reaction") == 0 && !xs_is_null(objid)) {
302+ const char *eid = NULL;
303+ const char *url = NULL;
304+ int utf = 0;
305+
306+ const xs_dict *tag = xs_list_get(xs_dict_get_path(noti, "msg.tag"), 0);
307+ const char *content = xs_dict_get_path(noti, "msg.content");
308+
309+ url = xs_dict_get(xs_dict_get(tag, "icon"), "url");
310+ eid = xs_dict_get(tag, "name");
311+
312+ if (eid && url) {
313+ mn = xs_dict_append(mn, "emoji", eid);
314+ mn = xs_dict_append(mn, "emoji_url", url);
315+ }
316+
317+ if (xs_is_emoji((utf = xs_utf8_dec(&content)))) {
318+ xs *s1 = xs_fmt("&#%d;", utf);
319+ mn = xs_dict_append(mn, "name", s1);
320+ }
321+ }
322+ }
323 }
324
325 out = xs_list_append(out, mn);
326@@ -2480,19 +2647,33 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
327 if (strcmp(cmd, "/v1/custom_emojis") == 0) { /** **/
328 xs *emo = emojis();
329 xs *list = xs_list_new();
330- int c = 0;
331 const xs_str *k;
332 const xs_val *v;
333- while(xs_dict_next(emo, &k, &v, &c)) {
334+ xs_dict_foreach(emo, k, v) {
335 xs *current = xs_dict_new();
336- if (xs_startswith(v, "https://") && xs_startswith((xs_mime_by_ext(v)), "image/")) {
337+ if ((xs_startswith(v, "https://") && xs_startswith((xs_mime_by_ext(v)), "image/")) || xs_type(v) == XSTYPE_DICT) {
338 /* remove first and last colon */
339- xs *shortcode = xs_replace(k, ":", "");
340- current = xs_dict_append(current, "shortcode", shortcode);
341- current = xs_dict_append(current, "url", v);
342- current = xs_dict_append(current, "static_url", v);
343- current = xs_dict_append(current, "visible_in_picker", xs_stock(XSTYPE_TRUE));
344- list = xs_list_append(list, current);
345+ if (xs_type(v) == XSTYPE_DICT) {
346+ const char *v2;
347+ const char *cat = k;
348+ xs_dict_foreach(v, k, v2) {
349+ xs *shortcode = xs_replace(k, ":", "");
350+ current = xs_dict_append(current, "shortcode", shortcode);
351+ current = xs_dict_append(current, "url", v2);
352+ current = xs_dict_append(current, "static_url", v2);
353+ current = xs_dict_append(current, "visible_in_picker", xs_stock(XSTYPE_TRUE));
354+ current = xs_dict_append(current, "category", cat);
355+ list = xs_list_append(list, current);
356+ }
357+ }
358+ else {
359+ xs *shortcode = xs_replace(k, ":", "");
360+ current = xs_dict_append(current, "shortcode", shortcode);
361+ current = xs_dict_append(current, "url", v);
362+ current = xs_dict_append(current, "static_url", v);
363+ current = xs_dict_append(current, "visible_in_picker", xs_stock(XSTYPE_TRUE));
364+ list = xs_list_append(list, current);
365+ }
366 }
367 }
368 *body = xs_json_dumps(list, 0);
369@@ -2594,6 +2775,11 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
370 "\"max_expiration\":2629746,"
371 "\"max_options\":8,\"min_expiration\":300}");
372 cfg = xs_dict_append(cfg, "polls", d14);
373+
374+
375+ xs *d15 = xs_json_loads("{\"max_reactions\":50}");
376+ cfg = xs_dict_append(cfg, "reactions", d15);
377+
378 }
379
380 ins = xs_dict_append(ins, "configuration", cfg);
381@@ -2680,8 +2866,6 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
382 /* return ancestors and children */
383 xs *anc = xs_list_new();
384 xs *des = xs_list_new();
385- xs_list *p;
386- const xs_str *v;
387 char pid[MD5_HEX_SIZE];
388
389 /* build the [grand]parent list, moving up */
390@@ -2701,21 +2885,9 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
391 }
392
393 /* build the children list */
394- xs *children = object_children(xs_dict_get(msg, "id"));
395- p = children;
396-
397- while (xs_list_iter(&p, &v)) {
398- xs *m2 = NULL;
399-
400- if (valid_status(timeline_get_by_md5(&snac1, v, &m2))) {
401- if (xs_is_null(xs_dict_get(m2, "name"))) {
402- xs *st = mastoapi_status(&snac1, m2);
403-
404- if (st)
405- des = xs_list_append(des, st);
406- }
407- }
408- }
409+ xs *childs = build_childrens(msg, &snac1);
410+ if (xs_list_len(childs) > 0)
411+ des = xs_list_cat(des, childs);
412
413 out = xs_dict_new();
414 out = xs_dict_append(out, "ancestors", anc);
415@@ -3044,7 +3216,10 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
416 xs *app = xs_dict_new();
417 xs *id = xs_replace_i(tid(0), ".", "");
418 xs *csec = random_str();
419- xs *vkey = random_str();
420+ xs *vkey = xs_dup(xs_dict_get(srv_config, "vkey"));
421+ if (vkey == NULL)
422+ vkey = random_str();
423+
424 xs *cid = NULL;
425
426 /* pick a non-existent random cid */
427@@ -3216,7 +3391,7 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
428
429 if (n_msg != NULL) {
430 enqueue_message(&snac, n_msg);
431- timeline_admire(&snac, xs_dict_get(n_msg, "object"), snac.actor, 1);
432+ timeline_admire(&snac, xs_dict_get(n_msg, "object"), snac.actor, 1, msg);
433
434 out = mastoapi_status(&snac, msg);
435 }
436@@ -3231,13 +3406,36 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
437 out = mastoapi_status(&snac, msg);
438 }
439 }
440+ else
441+ if (strcmp(op, "react") == 0) { /** **/
442+ const char *eid = xs_list_get(l, 5);
443+ xs *n_msg = msg_emoji_init(&snac, id, eid);
444+ if (n_msg)
445+ out = mastoapi_status(&snac, n_msg);
446+ }
447+ else
448+ if (strcmp(op, "unreact") == 0) { /** **/
449+ const char *eid = xs_list_get(l, 5);
450+ xs *content = xs_fmt("%s", eid);
451+
452+ if (eid) {
453+ xs *n_msg = msg_emoji_unreact(&snac, id, content);
454+
455+ if (n_msg != NULL) {
456+ enqueue_message(&snac, n_msg);
457+
458+ out = mastoapi_status(&snac, msg);
459+ }
460+ }
461+ }
462+
463 else
464 if (strcmp(op, "reblog") == 0) { /** **/
465 xs *n_msg = msg_admiration(&snac, id, "Announce");
466
467 if (n_msg != NULL) {
468 enqueue_message(&snac, n_msg);
469- timeline_admire(&snac, xs_dict_get(n_msg, "object"), snac.actor, 0);
470+ timeline_admire(&snac, xs_dict_get(n_msg, "object"), snac.actor, 0, msg);
471
472 out = mastoapi_status(&snac, msg);
473 }
474@@ -3824,7 +4022,7 @@ int mastoapi_delete_handler(const xs_dict *req, const char *q_path,
475 if (valid_status(object_get_by_md5(p, &obj))) {
476 const char *id = xs_dict_get(obj, "id");
477
478- if (xs_is_string(id) && xs_startswith(id, snac.actor)) {
479+ if (xs_is_string(id) && is_msg_mine(&snac, id)) {
480 xs *out = mastoapi_status(&snac, obj);
481
482 xs *msg = msg_delete(&snac, id);
M
po/cs.po
+219,
-207
1@@ -8,694 +8,694 @@ msgstr ""
2 "Language: cs\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Citlivý obsah: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13-msgstr "Varování k citlivému obsahu"
14+msgstr "Varování o citlivém obsahu"
15
16 msgid "Only for mentioned people: "
17 msgstr "Pouze pro zmíněné osoby:"
18
19-#: html.c:514
20+#: html.c:570
21 msgid "Reply to (URL): "
22 msgstr "Odpovědět na (URL):"
23
24-#: html.c:523
25+#: html.c:579
26 msgid "Don't send, but store as a draft"
27 msgstr "Nesdílet, pouze uložit do rozepsaných"
28
29-#: html.c:524
30+#: html.c:580
31 msgid "Draft:"
32 msgstr "Rozepsané:"
33
34-#: html.c:614
35+#: html.c:670
36 msgid "Attachments..."
37 msgstr "Přílohy..."
38
39-#: html.c:637
40+#: html.c:693
41 msgid "File:"
42 msgstr "Soubor:"
43
44-#: html.c:641
45+#: html.c:697
46 msgid "Clear this field to delete the attachment"
47 msgstr "Pro smazání přilohy vymažte toto pole"
48
49-#: html.c:650 html.c:675
50+#: html.c:706 html.c:731
51 msgid "Attachment description"
52 msgstr "Popisek přílohy"
53
54-#: html.c:686
55+#: html.c:742
56 msgid "Poll..."
57 msgstr "Anketa..."
58
59-#: html.c:688
60+#: html.c:744
61 msgid "Poll options (one per line, up to 8):"
62 msgstr "Možnosti ankety (jedna na řádek, max 8):"
63
64-#: html.c:700
65+#: html.c:756
66 msgid "One choice"
67 msgstr "Vyber jednu"
68
69-#: html.c:703
70+#: html.c:759
71 msgid "Multiple choices"
72 msgstr "Vyber více možností"
73
74-#: html.c:709
75+#: html.c:765
76 msgid "End in 5 minutes"
77 msgstr "Konec za 5 minut"
78
79-#: html.c:713
80+#: html.c:769
81 msgid "End in 1 hour"
82 msgstr "Konec za 1 hodinu"
83
84-#: html.c:716
85+#: html.c:772
86 msgid "End in 1 day"
87 msgstr "Konec za 1 den"
88
89-#: html.c:724
90+#: html.c:780
91 msgid "Post"
92 msgstr "Poslat"
93
94-#: html.c:826 html.c:833
95+#: html.c:882 html.c:889
96 msgid "Site description"
97 msgstr "Popisek stránky"
98
99-#: html.c:844
100+#: html.c:900
101 msgid "Admin email"
102 msgstr "Email administrátora"
103
104-#: html.c:857
105+#: html.c:913
106 msgid "Admin account"
107 msgstr "Účet adminitrátora"
108
109-#: html.c:922 html.c:1278
110+#: html.c:978 html.c:1334
111 #, c-format
112 msgid "%d following, %d followers"
113 msgstr "%d sledovaných, %d sledujících"
114
115-#: html.c:1019
116+#: html.c:1075
117 msgid "RSS"
118 msgstr "RSS"
119
120-#: html.c:1024 html.c:1063
121+#: html.c:1080 html.c:1119
122 msgid "private"
123 msgstr "soukromé"
124
125-#: html.c:1059
126+#: html.c:1115
127 msgid "public"
128 msgstr "veřejné"
129
130-#: html.c:1067
131+#: html.c:1123
132 msgid "notifications"
133 msgstr "upozornění"
134
135-#: html.c:1072
136+#: html.c:1128
137 msgid "people"
138 msgstr "lidé"
139
140-#: html.c:1077
141+#: html.c:1133
142 msgid "instance"
143 msgstr "instance"
144
145-#: html.c:1086
146+#: html.c:1142
147 msgid ""
148 "Search posts by URL or content (regular expression), @user@host accounts, or "
149 "#tag"
150 msgstr ""
151 "Vyhledat příspěvek podle URL (regex), @uživatel@instance účtu, nebo #tagu"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Hledání obsahu"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "ověřený odkaz"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Místo: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nový příspěvek..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Co se vám honí hlavou?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Operace..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Sledovat"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(podle URL nebo @uživatel@instance)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Boostit"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(podle URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Líbí"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Nastavení..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Jméno:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Vaše jméno"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226-msgstr "Avatar: "
227+msgstr "Profilový obrázek: "
228
229-#: html.c:1515
230+#: html.c:1593
231 msgid "Delete current avatar"
232-msgstr "Smazat současný avatar"
233+msgstr "Smazat profilový obrázek"
234
235-#: html.c:1517
236+#: html.c:1595
237 msgid "Header image (banner): "
238 msgstr "Obrázek v záhlaví profilu: "
239
240-#: html.c:1525
241+#: html.c:1603
242 msgid "Delete current header image"
243-msgstr "Smazat současný obrázek v záhlaví"
244+msgstr "Smazat obrázek v záhlaví"
245
246-#: html.c:1527
247+#: html.c:1605
248 msgid "Bio:"
249 msgstr "Bio:"
250
251-#: html.c:1533
252+#: html.c:1611
253 msgid "Write about yourself here..."
254-msgstr "Napište sem něco o sobě..."
255+msgstr "Napište něco o sobě..."
256
257-#: html.c:1542
258+#: html.c:1620
259 msgid "Always show sensitive content"
260-msgstr "Vždy zobrazit příspěvky s varováním o citlivém obsahu"
261+msgstr "Rozbalit citlivé příspěvky"
262
263-#: html.c:1544
264+#: html.c:1622
265 msgid "Email address for notifications:"
266 msgstr "Emailová adresa pro upozornění"
267
268-#: html.c:1552
269+#: html.c:1630
270 msgid "Telegram notifications (bot key and chat id):"
271 msgstr "Upozornění na Telegram (bot klíč a chat id):"
272
273-#: html.c:1566
274+#: html.c:1644
275 msgid "ntfy notifications (ntfy server and token):"
276 msgstr "ntfy notifikace (ntfy server a token):"
277
278-#: html.c:1588
279+#: html.c:1666
280 msgid "Maximum days to keep posts (0: server settings):"
281 msgstr "Životnost příspěvků ve dnech (0: nastavení serveru):"
282
283-#: html.c:1602
284+#: html.c:1680
285 msgid "Drop direct messages from people you don't follow"
286 msgstr "Zahodit soukromé zprávy od lidí, které nesledujete"
287
288-#: html.c:1611
289+#: html.c:1689
290 msgid "This account is a bot"
291-msgstr "Tenhle účet je robot"
292+msgstr "Tento účet je robotem"
293
294-#: html.c:1620
295+#: html.c:1698
296 msgid "Auto-boost all mentions to this account"
297-msgstr "Automaticky boostovat všechny zmíňky o tomto účtu"
298+msgstr "Automaticky boostit všechna zmínění tohoto účtu"
299
300-#: html.c:1629
301+#: html.c:1707
302 msgid "This account is private (posts are not shown through the web)"
303 msgstr ""
304 "Tento účet je soukromý (příspěvky nejsou zobrazitelné napříč internetem)"
305
306-#: html.c:1639
307+#: html.c:1717
308 msgid "Collapse top threads by default"
309-msgstr "Zobrazovat vlákna složená"
310+msgstr "Složit vlákna"
311
312-#: html.c:1648
313+#: html.c:1726
314 msgid "Follow requests must be approved"
315-msgstr "Žádosti o sledování je nutno manuálně potvrdit"
316+msgstr "Žádosti o sledování je nutné manuálně potvrdit"
317
318-#: html.c:1657
319+#: html.c:1735
320 msgid "Publish follower and following metrics"
321 msgstr "Zobrazit údaje o počtu sledovaných a sledujících"
322
323-#: html.c:1659
324+#: html.c:1737
325 msgid "Current location:"
326 msgstr "Geolokace:"
327
328-#: html.c:1673
329+#: html.c:1751
330 msgid "Profile metadata (key=value pairs in each line):"
331 msgstr "Metadata profilu (klíč=hodnota na jeden řádek):"
332
333-#: html.c:1684
334+#: html.c:1762
335 msgid "Web interface language:"
336 msgstr "Jazyk rozhraní:"
337
338-#: html.c:1703
339+#: html.c:1781
340 msgid "New password:"
341 msgstr "Nové heslo:"
342
343-#: html.c:1710
344+#: html.c:1788
345 msgid "Repeat new password:"
346-msgstr "Zopakujte nové heslo:"
347+msgstr "Nové heslo znovu:"
348
349-#: html.c:1720
350+#: html.c:1798
351 msgid "Update user info"
352 msgstr "Uložit"
353
354-#: html.c:1731
355+#: html.c:1809
356 msgid "Followed hashtags..."
357 msgstr "Sledované hashtagy..."
358
359-#: html.c:1733 html.c:1766
360+#: html.c:1811 html.c:1844
361 msgid "One hashtag per line"
362 msgstr "Jeden hashtag na řádek"
363
364-#: html.c:1755 html.c:1787
365+#: html.c:1833 html.c:1865
366 msgid "Update hashtags"
367 msgstr "Aktualizovat hashtagy"
368
369-#: html.c:1904
370+#: html.c:1982
371 msgid "Say you like this post"
372 msgstr "Dát najevo, že se vám příspěvek líbí"
373
374-#: html.c:1909 html.c:4775
375+#: html.c:1987 html.c:5219
376 msgid "Unlike"
377 msgstr "Nelíbí"
378
379-#: html.c:1909
380+#: html.c:1987
381 msgid "Nah don't like it that much"
382 msgstr "Vlastně se mi to zas tak nelíbí"
383
384-#: html.c:1915 html.c:4912
385+#: html.c:1993 html.c:5356
386 msgid "Unpin"
387 msgstr "Odepnout"
388
389-#: html.c:1915
390+#: html.c:1993
391 msgid "Unpin this post from your timeline"
392 msgstr "Odepnout tento příspěvek z vaší osy"
393
394-#: html.c:1918 html.c:4907
395+#: html.c:1996 html.c:5351
396 msgid "Pin"
397 msgstr "Připnout"
398
399-#: html.c:1918
400+#: html.c:1996
401 msgid "Pin this post to the top of your timeline"
402 msgstr "Připnout tento příspěvěk na začátek vaší osy"
403
404-#: html.c:1925
405+#: html.c:2003
406 msgid "Announce this post to your followers"
407 msgstr "Ukázat tento příspěvek vaším sledujícím"
408
409-#: html.c:1930 html.c:4783
410+#: html.c:2008 html.c:5227
411 msgid "Unboost"
412 msgstr "Odboostit"
413
414-#: html.c:1930
415+#: html.c:2008
416 msgid "I regret I boosted this"
417-msgstr "Boostit to byl blbej nápad"
418+msgstr "Boostit to byl špatný nápad"
419
420-#: html.c:1936 html.c:4922
421+#: html.c:2014 html.c:5366
422 msgid "Unbookmark"
423 msgstr "Zahodit"
424
425-#: html.c:1936
426+#: html.c:2014
427 msgid "Delete this post from your bookmarks"
428 msgstr "Odstranit tento příspěvěk ze záložek"
429
430-#: html.c:1939 html.c:4917
431+#: html.c:2017 html.c:5361
432 msgid "Bookmark"
433 msgstr "Uložit"
434
435-#: html.c:1939
436+#: html.c:2017
437 msgid "Add this post to your bookmarks"
438 msgstr "Uložit tento příspěvek do záložek"
439
440-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
441+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
442 msgid "Unfollow"
443 msgstr "Přestat sledovat"
444
445-#: html.c:1945 html.c:3387
446+#: html.c:2023 html.c:3763 html.c:4042
447 msgid "Stop following this user's activity"
448 msgstr "Přestat sledovat tohoto uživatele"
449
450-#: html.c:1949 html.c:3401
451+#: html.c:2027 html.c:3777 html.c:4044
452 msgid "Start following this user's activity"
453 msgstr "Začít sledovat tohoto uživatele"
454
455-#: html.c:1955 html.c:4860
456+#: html.c:2033 html.c:5304
457 msgid "Unfollow Group"
458 msgstr "Přestat Sledovat Skupinu"
459
460-#: html.c:1956
461+#: html.c:2034
462 msgid "Stop following this group or channel"
463 msgstr "Přestat sledovat tuto skupinu nebo kanál"
464
465-#: html.c:1960 html.c:4847
466+#: html.c:2038 html.c:5291
467 msgid "Follow Group"
468 msgstr "Sledovat Skupinu"
469
470-#: html.c:1961
471+#: html.c:2039
472 msgid "Start following this group or channel"
473 msgstr "Začít sledovat tuto skupinu nebo kanál"
474
475-#: html.c:1966 html.c:3423 html.c:4791
476+#: html.c:2044 html.c:3799 html.c:5235
477 msgid "MUTE"
478 msgstr "ZTIŠIT"
479
480-#: html.c:1967
481+#: html.c:2045
482 msgid "Block any activity from this user forever"
483 msgstr "Jednou provždy zablokovat všechno od tohoto uživatele"
484
485-#: html.c:1972 html.c:3405 html.c:4877
486+#: html.c:2050 html.c:3781 html.c:5321
487 msgid "Delete"
488 msgstr "Smazat"
489
490-#: html.c:1972
491+#: html.c:2050
492 msgid "Delete this post"
493 msgstr "Smazat tento příspěvek"
494
495-#: html.c:1975 html.c:4799
496+#: html.c:2053 html.c:5243
497 msgid "Hide"
498 msgstr "Schovat"
499
500-#: html.c:1975
501+#: html.c:2053
502 msgid "Hide this post and its children"
503 msgstr "Schovat tento příspěvek a příspěvky pod ním"
504
505-#: html.c:2017
506+#: html.c:2095
507 msgid "Edit..."
508 msgstr "Editovat..."
509
510-#: html.c:2039
511+#: html.c:2133
512 msgid "Reply..."
513 msgstr "Odpovědět..."
514
515-#: html.c:2090
516+#: html.c:2184
517 msgid "Truncated (too deep)"
518 msgstr "Ořezáno (moc hluboké)"
519
520-#: html.c:2108
521+#: html.c:2202
522 msgid "follows you"
523 msgstr "sleduje vás"
524
525-#: html.c:2182
526+#: html.c:2276
527 msgid "Pinned"
528 msgstr "Připnuto"
529
530-#: html.c:2190
531+#: html.c:2284
532 msgid "Bookmarked"
533 msgstr "Zazáložkováno"
534
535-#: html.c:2198
536+#: html.c:2292
537 msgid "Poll"
538 msgstr "Anketa"
539
540-#: html.c:2205
541+#: html.c:2299
542 msgid "Voted"
543 msgstr "Odhlasováno"
544
545-#: html.c:2214
546+#: html.c:2308
547 msgid "Event"
548 msgstr "Událost"
549
550-#: html.c:2246 html.c:2275
551+#: html.c:2340 html.c:2369
552 msgid "boosted"
553-msgstr "boostuje"
554+msgstr "boostí"
555
556-#: html.c:2289
557+#: html.c:2383
558 msgid "in reply to"
559 msgstr "odpověď pro"
560
561-#: html.c:2345
562+#: html.c:2439
563 msgid " [SENSITIVE CONTENT]"
564 msgstr "[CITLIVÝ OBSAH]"
565
566-#: html.c:2512
567+#: html.c:2796
568 msgid "Vote"
569 msgstr "Hlasuj"
570
571-#: html.c:2522
572+#: html.c:2806
573 msgid "Closed"
574 msgstr "Uzavřeno"
575
576-#: html.c:2547
577+#: html.c:2831
578 msgid "Closes in"
579 msgstr "Končí za"
580
581-#: html.c:2627
582+#: html.c:2911
583 msgid "Video"
584 msgstr "Video"
585
586-#: html.c:2642
587+#: html.c:2926
588 msgid "Audio"
589 msgstr "Audio"
590
591-#: html.c:2670
592+#: html.c:2954
593 msgid "Attachment"
594 msgstr "Příloha"
595
596-#: html.c:2684
597+#: html.c:2968
598 msgid "Alt..."
599 msgstr "Popisek..."
600
601-#: html.c:2697
602+#: html.c:2981
603 msgid "Source channel or community"
604-msgstr ""
605+msgstr "Původní kanál nebo komunita"
606
607-#: html.c:2791
608+#: html.c:3075
609 msgid "Time: "
610 msgstr "Čas:"
611
612-#: html.c:2872
613+#: html.c:3156
614 msgid "Older..."
615 msgstr "Starší..."
616
617-#: html.c:2974
618+#: html.c:3258
619 msgid "about this site"
620 msgstr "o této stránce"
621
622-#: html.c:2976
623+#: html.c:3260
624 msgid "powered by "
625 msgstr "pohání "
626
627-#: html.c:3041
628+#: html.c:3329
629 msgid "Dismiss"
630 msgstr "Zahodit"
631
632-#: html.c:3058
633+#: html.c:3346
634 #, c-format
635 msgid "Timeline for list '%s'"
636 msgstr "Časová osa pro seznam '%s'"
637
638-#: html.c:3077 html.c:4169
639+#: html.c:3365 html.c:4589
640 msgid "Pinned posts"
641 msgstr "Připnuté příspěvky"
642
643-#: html.c:3089 html.c:4184
644+#: html.c:3377 html.c:4604
645 msgid "Bookmarked posts"
646 msgstr "Záložky"
647
648-#: html.c:3101 html.c:4199
649+#: html.c:3389 html.c:4619
650 msgid "Post drafts"
651 msgstr "Rozepsané příspěvky"
652
653-#: html.c:3177
654+#: html.c:3465
655 msgid "No more unseen posts"
656-msgstr "Nic víc nového"
657+msgstr "Nic nového"
658
659-#: html.c:3181 html.c:3290
660+#: html.c:3469 html.c:3578
661 msgid "Back to top"
662 msgstr "Zpátky nahoru"
663
664-#: html.c:3243
665+#: html.c:3531
666 msgid "History"
667 msgstr "Historie"
668
669-#: html.c:3295 html.c:3734
670+#: html.c:3583 html.c:4149
671 msgid "More..."
672 msgstr "Více..."
673
674-#: html.c:3391 html.c:4813
675+#: html.c:3767 html.c:5257
676 msgid "Unlimit"
677 msgstr "Povolit boosty"
678
679-#: html.c:3392
680+#: html.c:3768
681 msgid "Allow announces (boosts) from this user"
682 msgstr "Zobrazovat boosty od tohoto uživatele"
683
684-#: html.c:3395 html.c:4809
685+#: html.c:3771 html.c:5253
686 msgid "Limit"
687 msgstr "Skrýt boosty"
688
689-#: html.c:3396
690+#: html.c:3772
691 msgid "Block announces (boosts) from this user"
692 msgstr "Ztišit boosty od tohoto uživatele"
693
694-#: html.c:3405
695+#: html.c:3781
696 msgid "Delete this user"
697 msgstr "Smazat tohoto uživatele"
698
699-#: html.c:3410 html.c:4927
700+#: html.c:3786 html.c:5371
701 msgid "Approve"
702 msgstr "Schválit"
703
704-#: html.c:3411
705+#: html.c:3787
706 msgid "Approve this follow request"
707 msgstr "Schválit žádost o sledování"
708
709-#: html.c:3414 html.c:4951
710+#: html.c:3790 html.c:5395
711 msgid "Discard"
712 msgstr "Zahodit"
713
714-#: html.c:3414
715+#: html.c:3790
716 msgid "Discard this follow request"
717 msgstr "Zahodit žádost o sledování"
718
719-#: html.c:3419 html.c:4795
720+#: html.c:3795 html.c:5239
721 msgid "Unmute"
722 msgstr "Zrušit ztišení"
723
724-#: html.c:3420
725+#: html.c:3796
726 msgid "Stop blocking activities from this user"
727 msgstr "Přestat blokovat tohoto uživatele"
728
729-#: html.c:3424
730+#: html.c:3800
731 msgid "Block any activity from this user"
732 msgstr "Zablokovat všechno od tohoto uživatele"
733
734-#: html.c:3432
735+#: html.c:3808
736 msgid "Direct Message..."
737 msgstr "Soukomá zpráva..."
738
739-#: html.c:3467
740+#: html.c:3843
741 msgid "Pending follow confirmations"
742 msgstr "Dosud nepotvrzené žádosti o sledování"
743
744-#: html.c:3471
745+#: html.c:3847
746 msgid "People you follow"
747 msgstr "Lidé, které sledujete"
748
749-#: html.c:3472
750+#: html.c:3848
751 msgid "People that follow you"
752 msgstr "Lidé, kteří vás sledují"
753
754-#: html.c:3511
755+#: html.c:3887
756 msgid "Clear all"
757 msgstr "Smazat vše"
758
759-#: html.c:3571
760+#: html.c:3951
761 msgid "Mention"
762 msgstr "Zmínil vás"
763
764-#: html.c:3574
765+#: html.c:3954
766 msgid "Finished poll"
767 msgstr "Ukončená anketa"
768
769-#: html.c:3590
770+#: html.c:3979
771 msgid "Follow Request"
772 msgstr "Žádost o sledování"
773
774-#: html.c:3674
775+#: html.c:4089
776 msgid "Context"
777 msgstr "Kontext"
778
779-#: html.c:3692
780+#: html.c:4107
781 msgid "New"
782 msgstr "Nové"
783
784-#: html.c:3707
785+#: html.c:4122
786 msgid "Already seen"
787-msgstr "Zobrazeno dříve"
788+msgstr "Již viděno"
789
790-#: html.c:3722
791+#: html.c:4137
792 msgid "None"
793 msgstr "Nic"
794
795-#: html.c:3994
796+#: html.c:4414
797 #, c-format
798 msgid "Search results for account %s"
799 msgstr "Výsledky vyhledávání účtu %s"
800
801-#: html.c:4001
802+#: html.c:4421
803 #, c-format
804 msgid "Account %s not found"
805 msgstr "Účet %s nenalezen"
806
807-#: html.c:4032
808+#: html.c:4452
809 #, c-format
810 msgid "Search results for tag %s"
811 msgstr "Výsledky k tagu %s"
812
813-#: html.c:4032
814+#: html.c:4452
815 #, c-format
816 msgid "Nothing found for tag %s"
817 msgstr "Nic k tagu %s"
818
819-#: html.c:4048
820+#: html.c:4468
821 #, c-format
822 msgid "Search results for '%s' (may be more)"
823 msgstr "Výsledky vyhledávání pro '%s' (může toho být víc)"
824
825-#: html.c:4051
826+#: html.c:4471
827 #, c-format
828 msgid "Search results for '%s'"
829 msgstr "Výsledky vyhledávání pro '%s'"
830
831-#: html.c:4054
832+#: html.c:4474
833 #, c-format
834 msgid "No more matches for '%s'"
835 msgstr "Nic víc pro '%s'"
836
837-#: html.c:4056
838+#: html.c:4476
839 #, c-format
840 msgid "Nothing found for '%s'"
841 msgstr "Žádný výsledek pro '%s'"
842
843-#: html.c:4154
844+#: html.c:4574
845 msgid "Showing instance timeline"
846 msgstr "Časová osa místní instance"
847
848-#: html.c:4237
849+#: html.c:4657
850 #, c-format
851 msgid "Showing timeline for list '%s'"
852 msgstr "Časová osa pro seznam '%s'"
853
854-#: httpd.c:258
855+#: httpd.c:259
856 #, c-format
857 msgid "Search results for tag #%s"
858 msgstr "Výsledky vyhledávání tagu #%s"
859
860-#: httpd.c:267
861+#: httpd.c:268
862 msgid "Recent posts by users in this instance"
863 msgstr "Nedávné příspěvky od uživatelů této instance"
864
865-#: html.c:1764
866+#: html.c:1842
867 msgid "Blocked hashtags..."
868 msgstr "Blokované hashtagy..."
869
870-#: html.c:518
871+#: html.c:574
872 msgid "Optional URL to reply to"
873 msgstr "URL adresa příspěvku, na který odpovědět"
874
875-#: html.c:695
876+#: html.c:751
877 msgid ""
878 "Option 1...\n"
879 "Option 2...\n"
880@@ -707,94 +707,106 @@ msgstr ""
881 "Možnost 3...\n"
882 "..."
883
884-#: html.c:1558
885+#: html.c:1636
886 msgid "Bot API key"
887 msgstr "API klíč Bota"
888
889-#: html.c:1564
890+#: html.c:1642
891 msgid "Chat id"
892 msgstr "Chat id"
893
894-#: html.c:1572
895+#: html.c:1650
896 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
897 msgstr "ntfy server - celá URL adresa (např: https://ntfy.sh/VaseTema)"
898
899-#: html.c:1578
900+#: html.c:1656
901 msgid "ntfy token - if needed"
902 msgstr "ntfy token - pokud je zapotřebí"
903
904-#: html.c:3078
905+#: html.c:3366
906 msgid "pinned"
907 msgstr "připnuté"
908
909-#: html.c:3090
910+#: html.c:3378
911 msgid "bookmarks"
912 msgstr "záložky"
913
914-#: html.c:3102
915+#: html.c:3390
916 msgid "drafts"
917 msgstr "rozepsané"
918
919-#: html.c:584
920+#: html.c:640
921 msgid "Scheduled post..."
922 msgstr "Naplánovat příspěvek..."
923
924 msgid "Post date and time:"
925 msgstr "Den a čas:"
926
927-#: html.c:3113 html.c:4214
928+#: html.c:3401 html.c:4634
929 msgid "Scheduled posts"
930 msgstr "Naplánované příspěvky"
931
932-#: html.c:3114
933+#: html.c:3402
934 msgid "scheduled posts"
935 msgstr "naplánované příspěvky"
936
937-#: html.c:578
938+#: html.c:634
939 #, c-format
940 msgid "Post date and time (timezone: %s):"
941 msgstr "Den a čas (časové pásmo: %s)"
942
943-#: html.c:1689
944+#: html.c:1767
945 msgid "Time zone:"
946 msgstr "Časové pásmo:"
947
948-#: html.c:559
949+#: html.c:615
950 msgid "Language:"
951 msgstr "Jazyk:"
952
953-#: html.c:1580
954+#: html.c:1658
955 msgid "Notify webhook:"
956 msgstr "Notify webhook:"
957
958-#: html.c:1586
959+#: html.c:1664
960 msgid "http://example.com/webhook"
961 msgstr "http://priklad.cz/webhook"
962
963-#: html.c:1694
964+#: html.c:1772
965 msgid "Languages you usually post in:"
966 msgstr "Jazyky ve kterých píšete:"
967
968-#: html.c:1700
969+#: html.c:1778
970 msgid "en fr es de_AT"
971 msgstr "cs en fr de_AT"
972
973-#: html.c:460
974+#: html.c:428
975 msgid "Visibility: "
976-msgstr "Viditelnost"
977+msgstr "Viditelnost: "
978
979-#: html.c:468
980 msgid "Public"
981 msgstr "Veřejné"
982
983-#: html.c:477
984 msgid "Unlisted"
985 msgstr "Neveřejné"
986
987-#: html.c:486
988 msgid "Followers-only"
989 msgstr "Pouze pro sledující"
990
991-#: html.c:495
992 msgid "Direct Message"
993 msgstr "Soukromá Zpráva"
994+
995+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
996+msgid "EmojiUnreact"
997+msgstr "EmojiOdebrat"
998+
999+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
1000+msgid "EmojiReact"
1001+msgstr "EmojiReakce"
1002+
1003+#: html.c:2115
1004+msgid "Emoji react..."
1005+msgstr "Reagovat emoji..."
1006+
1007+#: html.c:2609
1008+msgid "Emoji reactions: "
1009+msgstr "Emoji reakce: "
+202,
-190
1@@ -7,119 +7,119 @@ msgstr ""
2 "Language: de_DE\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Sensibler Inhalt: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Beschreibung des sensiblen Inhalts"
14
15 msgid "Only for mentioned people: "
16 msgstr "Nur für erwähnte Personen: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Antwort an (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Nicht senden, aber als Entwurf speichern"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Entwurf: "
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Anhänge..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Datei:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Feld löschen, um den Anhang zu löschen"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Beschreibung des Anhangs"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Umfrage..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Umfrageoptionen (eine pro Zeile, bis zu 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Einfachauswahl"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Mehrfachauswahl"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Endet in 5 Minuten"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Endet in 1 Stunde"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Endet in 1 Tag"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Beitrag veröffentlichen"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Seitenbeschreibung"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Admin E-Mail"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Admin-Konto"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d Gefolgte, %d Folgende"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "Privat"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "Öffentlich"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "Benachrichtigungen"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "Personen"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "Instanz"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -127,576 +127,576 @@ msgstr ""
150 "Durchsuche Beiträge nach URL oder Inhalt (regulärer Ausdruck), @user@host "
151 "Konten, oder #tag"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Inhaltssuche"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "verifizierter Link"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Standort: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Neuer Beitrag..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Was beschäftigt dich?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Aktionen..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Folgen"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(mit URL oder user@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Boosten"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(mit URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Gefällt mir"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Einstellungen..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Anzeigename:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Dein Name"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Aktuellen Avatar löschen"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Titelbild (Banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Aktuelles Titelbild löschen"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Über dich:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Erzähle etwas von dir..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Sensible Inhalte immer anzeigen"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "E-Mail Adresse für Benachrichtigungen:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Telegram Benachrichtigungen (Bot Schlüssel und Chat ID):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "NTFY Benachrichtigungen (ntfy Server und Token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Aufbewahrungsfrist der Beiträge in Tagen (0 = Serverstandard):"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Blocke Direktnachrichten von Personen denen du nicht folgst"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Dieses Konto ist ein Bot"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Automatisches Boosten bei Erwähnungen dieses Kontos"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr ""
297 "Dieses Konto ist privat (Beiträge werden nicht in der Weboberfläche "
298 "angezeigt)"
299
300-#: html.c:1639
301+#: html.c:1717
302 msgid "Collapse top threads by default"
303 msgstr "Themen standardmäßig einklappen"
304
305-#: html.c:1648
306+#: html.c:1726
307 msgid "Follow requests must be approved"
308 msgstr "Folgeanfragen müssen genehmigt werden"
309
310-#: html.c:1657
311+#: html.c:1735
312 msgid "Publish follower and following metrics"
313 msgstr "Veröffentliche die Anzahl von Followern und Gefolgten."
314
315-#: html.c:1659
316+#: html.c:1737
317 msgid "Current location:"
318 msgstr "Standort:"
319
320-#: html.c:1673
321+#: html.c:1751
322 msgid "Profile metadata (key=value pairs in each line):"
323 msgstr "Profil-Metadaten (Begriff=Wert Paare, einer pro Zeile):"
324
325-#: html.c:1684
326+#: html.c:1762
327 msgid "Web interface language:"
328 msgstr "Sprache der Weboberfläche:"
329
330-#: html.c:1703
331+#: html.c:1781
332 msgid "New password:"
333 msgstr "Neues Passwort:"
334
335-#: html.c:1710
336+#: html.c:1788
337 msgid "Repeat new password:"
338 msgstr "Neues Passwort wiederholen:"
339
340-#: html.c:1720
341+#: html.c:1798
342 msgid "Update user info"
343 msgstr "Benutzerinformationen aktualisieren"
344
345-#: html.c:1731
346+#: html.c:1809
347 msgid "Followed hashtags..."
348 msgstr "Gefolgte Hashtags..."
349
350-#: html.c:1733 html.c:1766
351+#: html.c:1811 html.c:1844
352 msgid "One hashtag per line"
353 msgstr "Ein Hashtag pro Zeile"
354
355-#: html.c:1755 html.c:1787
356+#: html.c:1833 html.c:1865
357 msgid "Update hashtags"
358 msgstr "Hashtags aktualisieren"
359
360-#: html.c:1904
361+#: html.c:1982
362 msgid "Say you like this post"
363 msgstr "Sag, dass dir dieser Beiträg gefällt"
364
365-#: html.c:1909 html.c:4775
366+#: html.c:1987 html.c:5219
367 msgid "Unlike"
368 msgstr "Gefällt mir zurücknehmen"
369
370-#: html.c:1909
371+#: html.c:1987
372 msgid "Nah don't like it that much"
373 msgstr "Nee, gefällt mir nicht so gut"
374
375-#: html.c:1915 html.c:4912
376+#: html.c:1993 html.c:5356
377 msgid "Unpin"
378 msgstr "Pin entfernen"
379
380-#: html.c:1915
381+#: html.c:1993
382 msgid "Unpin this post from your timeline"
383 msgstr "Pin für diesen Beitrag aus deiner Zeitleiste entfernen"
384
385-#: html.c:1918 html.c:4907
386+#: html.c:1996 html.c:5351
387 msgid "Pin"
388 msgstr "Anpinnen"
389
390-#: html.c:1918
391+#: html.c:1996
392 msgid "Pin this post to the top of your timeline"
393 msgstr "Pinne diesen Beitrag an den Anfang deiner Zeitleiste"
394
395-#: html.c:1925
396+#: html.c:2003
397 msgid "Announce this post to your followers"
398 msgstr "Diesen Beitrag an deine Follower weiterschicken"
399
400-#: html.c:1930 html.c:4783
401+#: html.c:2008 html.c:5227
402 msgid "Unboost"
403 msgstr "Boost zurücknehmen"
404
405-#: html.c:1930
406+#: html.c:2008
407 msgid "I regret I boosted this"
408 msgstr "Ich bedauere, dass ich das weiterverschickt habe"
409
410-#: html.c:1936 html.c:4922
411+#: html.c:2014 html.c:5366
412 msgid "Unbookmark"
413 msgstr "Lesezeichen entfernen"
414
415-#: html.c:1936
416+#: html.c:2014
417 msgid "Delete this post from your bookmarks"
418 msgstr "Diesen Beitrag aus den Lesezeichen entfernen"
419
420-#: html.c:1939 html.c:4917
421+#: html.c:2017 html.c:5361
422 msgid "Bookmark"
423 msgstr "Lesezeichen"
424
425-#: html.c:1939
426+#: html.c:2017
427 msgid "Add this post to your bookmarks"
428 msgstr "Diesen Beitrag zu deinen Lesezeichen hinzufügen"
429
430-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
431+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
432 msgid "Unfollow"
433 msgstr "Nicht mehr folgen"
434
435-#: html.c:1945 html.c:3387
436+#: html.c:2023 html.c:3763 html.c:4042
437 msgid "Stop following this user's activity"
438 msgstr "Aktivitäten dieses Benutzers nicht mehr folgen"
439
440-#: html.c:1949 html.c:3401
441+#: html.c:2027 html.c:3777 html.c:4044
442 msgid "Start following this user's activity"
443 msgstr "Folge den Aktivitäten dieses Benutzers"
444
445-#: html.c:1955 html.c:4860
446+#: html.c:2033 html.c:5304
447 msgid "Unfollow Group"
448 msgstr "Der Gruppe nicht mehr folgen"
449
450-#: html.c:1956
451+#: html.c:2034
452 msgid "Stop following this group or channel"
453 msgstr "Der Gruppe oder dem Kanal nicht mehr folgen"
454
455-#: html.c:1960 html.c:4847
456+#: html.c:2038 html.c:5291
457 msgid "Follow Group"
458 msgstr "Der Gruppe folgen"
459
460-#: html.c:1961
461+#: html.c:2039
462 msgid "Start following this group or channel"
463 msgstr "Der Gruppe oder dem Kanal folgen"
464
465-#: html.c:1966 html.c:3423 html.c:4791
466+#: html.c:2044 html.c:3799 html.c:5235
467 msgid "MUTE"
468 msgstr "Stummschalten"
469
470-#: html.c:1967
471+#: html.c:2045
472 msgid "Block any activity from this user forever"
473 msgstr "Alle Aktivitäten dieses Benutzers für immer blockieren"
474
475-#: html.c:1972 html.c:3405 html.c:4877
476+#: html.c:2050 html.c:3781 html.c:5321
477 msgid "Delete"
478 msgstr "Löschen"
479
480-#: html.c:1972
481+#: html.c:2050
482 msgid "Delete this post"
483 msgstr "Diesen Beitrag löschen"
484
485-#: html.c:1975 html.c:4799
486+#: html.c:2053 html.c:5243
487 msgid "Hide"
488 msgstr "Verstecken"
489
490-#: html.c:1975
491+#: html.c:2053
492 msgid "Hide this post and its children"
493 msgstr "Verstecke diesen Beitrag und seine Kommentare"
494
495-#: html.c:2017
496+#: html.c:2095
497 msgid "Edit..."
498 msgstr "Bearbeiten..."
499
500-#: html.c:2039
501+#: html.c:2133
502 msgid "Reply..."
503 msgstr "Antworten..."
504
505-#: html.c:2090
506+#: html.c:2184
507 msgid "Truncated (too deep)"
508 msgstr "Abgeschnitten (zu tief)"
509
510-#: html.c:2108
511+#: html.c:2202
512 msgid "follows you"
513 msgstr "folgt dir"
514
515-#: html.c:2182
516+#: html.c:2276
517 msgid "Pinned"
518 msgstr "Angeheftet"
519
520-#: html.c:2190
521+#: html.c:2284
522 msgid "Bookmarked"
523 msgstr "Lesezeichen gesetzt"
524
525-#: html.c:2198
526+#: html.c:2292
527 msgid "Poll"
528 msgstr "Umfrage"
529
530-#: html.c:2205
531+#: html.c:2299
532 msgid "Voted"
533 msgstr "Abgestimmt"
534
535-#: html.c:2214
536+#: html.c:2308
537 msgid "Event"
538 msgstr "Ereignis"
539
540-#: html.c:2246 html.c:2275
541+#: html.c:2340 html.c:2369
542 msgid "boosted"
543 msgstr "teilte"
544
545-#: html.c:2289
546+#: html.c:2383
547 msgid "in reply to"
548 msgstr "als Antwort auf"
549
550-#: html.c:2345
551+#: html.c:2439
552 msgid " [SENSITIVE CONTENT]"
553 msgstr " [SENSIBLER INHALT]"
554
555-#: html.c:2512
556+#: html.c:2796
557 msgid "Vote"
558 msgstr "Abstimmen"
559
560-#: html.c:2522
561+#: html.c:2806
562 msgid "Closed"
563 msgstr "Geschlossen"
564
565-#: html.c:2547
566+#: html.c:2831
567 msgid "Closes in"
568 msgstr "Beendet in"
569
570-#: html.c:2627
571+#: html.c:2911
572 msgid "Video"
573 msgstr "Video"
574
575-#: html.c:2642
576+#: html.c:2926
577 msgid "Audio"
578 msgstr "Audio"
579
580-#: html.c:2670
581+#: html.c:2954
582 msgid "Attachment"
583 msgstr "Anhang"
584
585-#: html.c:2684
586+#: html.c:2968
587 msgid "Alt..."
588 msgstr "Alt.-Text..."
589
590-#: html.c:2697
591+#: html.c:2981
592 msgid "Source channel or community"
593 msgstr "Ursprungskanal oder -gemeinschaft"
594
595-#: html.c:2791
596+#: html.c:3075
597 msgid "Time: "
598 msgstr "Zeit: "
599
600-#: html.c:2872
601+#: html.c:3156
602 msgid "Older..."
603 msgstr "Älter..."
604
605-#: html.c:2974
606+#: html.c:3258
607 msgid "about this site"
608 msgstr "Über diese Seite"
609
610-#: html.c:2976
611+#: html.c:3260
612 msgid "powered by "
613 msgstr "powered by "
614
615-#: html.c:3041
616+#: html.c:3329
617 msgid "Dismiss"
618 msgstr "Ablehnen"
619
620-#: html.c:3058
621+#: html.c:3346
622 #, c-format
623 msgid "Timeline for list '%s'"
624 msgstr "Zeitleiste für Liste '%s'"
625
626-#: html.c:3077 html.c:4169
627+#: html.c:3365 html.c:4589
628 msgid "Pinned posts"
629 msgstr "Angeheftete Beiträge"
630
631-#: html.c:3089 html.c:4184
632+#: html.c:3377 html.c:4604
633 msgid "Bookmarked posts"
634 msgstr "Beiträge mit Lesezeichen"
635
636-#: html.c:3101 html.c:4199
637+#: html.c:3389 html.c:4619
638 msgid "Post drafts"
639 msgstr "Entwurf veröffentlichen"
640
641-#: html.c:3177
642+#: html.c:3465
643 msgid "No more unseen posts"
644 msgstr "Keine weiteren ungesehenen Beiträge"
645
646-#: html.c:3181 html.c:3290
647+#: html.c:3469 html.c:3578
648 msgid "Back to top"
649 msgstr "Nach oben"
650
651-#: html.c:3243
652+#: html.c:3531
653 msgid "History"
654 msgstr "Historie"
655
656-#: html.c:3295 html.c:3734
657+#: html.c:3583 html.c:4149
658 msgid "More..."
659 msgstr "Mehr..."
660
661-#: html.c:3391 html.c:4813
662+#: html.c:3767 html.c:5257
663 msgid "Unlimit"
664 msgstr "Nicht mehr limitieren"
665
666-#: html.c:3392
667+#: html.c:3768
668 msgid "Allow announces (boosts) from this user"
669 msgstr "Erlaube Boosts dieses Benutzers"
670
671-#: html.c:3395 html.c:4809
672+#: html.c:3771 html.c:5253
673 msgid "Limit"
674 msgstr "Limitieren"
675
676-#: html.c:3396
677+#: html.c:3772
678 msgid "Block announces (boosts) from this user"
679 msgstr "Blocke Boosts dieses Benutzers"
680
681-#: html.c:3405
682+#: html.c:3781
683 msgid "Delete this user"
684 msgstr "Benutzer löschen"
685
686-#: html.c:3410 html.c:4927
687+#: html.c:3786 html.c:5371
688 msgid "Approve"
689 msgstr "Bestätigen"
690
691-#: html.c:3411
692+#: html.c:3787
693 msgid "Approve this follow request"
694 msgstr "Diese Folgeanfrage bestätigen"
695
696-#: html.c:3414 html.c:4951
697+#: html.c:3790 html.c:5395
698 msgid "Discard"
699 msgstr "Verwerfen"
700
701-#: html.c:3414
702+#: html.c:3790
703 msgid "Discard this follow request"
704 msgstr "Diese Folgeanfrage verwerfen"
705
706-#: html.c:3419 html.c:4795
707+#: html.c:3795 html.c:5239
708 msgid "Unmute"
709 msgstr "Stummschaltung aufheben"
710
711-#: html.c:3420
712+#: html.c:3796
713 msgid "Stop blocking activities from this user"
714 msgstr "Aktivitäten dieses Benutzers nicht mehr blockieren"
715
716-#: html.c:3424
717+#: html.c:3800
718 msgid "Block any activity from this user"
719 msgstr "Alle Aktivitäten dieses Benutzers blockieren"
720
721-#: html.c:3432
722+#: html.c:3808
723 msgid "Direct Message..."
724 msgstr "Direktnachricht..."
725
726-#: html.c:3467
727+#: html.c:3843
728 msgid "Pending follow confirmations"
729 msgstr "Ausstehende Folgebestätigungen"
730
731-#: html.c:3471
732+#: html.c:3847
733 msgid "People you follow"
734 msgstr "Personen denen du folgst"
735
736-#: html.c:3472
737+#: html.c:3848
738 msgid "People that follow you"
739 msgstr "Personen die dir folgen"
740
741-#: html.c:3511
742+#: html.c:3887
743 msgid "Clear all"
744 msgstr "Aufräumen"
745
746-#: html.c:3571
747+#: html.c:3951
748 msgid "Mention"
749 msgstr "Erwähnung"
750
751-#: html.c:3574
752+#: html.c:3954
753 msgid "Finished poll"
754 msgstr "Beendete Umfrage"
755
756-#: html.c:3590
757+#: html.c:3979
758 msgid "Follow Request"
759 msgstr "Folge-Anfrage"
760
761-#: html.c:3674
762+#: html.c:4089
763 msgid "Context"
764 msgstr "Zusammenhang anzeigen"
765
766-#: html.c:3692
767+#: html.c:4107
768 msgid "New"
769 msgstr "Neu"
770
771-#: html.c:3707
772+#: html.c:4122
773 msgid "Already seen"
774 msgstr "Bereits gesehen"
775
776-#: html.c:3722
777+#: html.c:4137
778 msgid "None"
779 msgstr "Nichts"
780
781-#: html.c:3994
782+#: html.c:4414
783 #, c-format
784 msgid "Search results for account %s"
785 msgstr "Suchergebnisse für Konto %s"
786
787-#: html.c:4001
788+#: html.c:4421
789 #, c-format
790 msgid "Account %s not found"
791 msgstr "Konto %s wurde nicht gefunden"
792
793-#: html.c:4032
794+#: html.c:4452
795 #, c-format
796 msgid "Search results for tag %s"
797 msgstr "Suchergebnisse für Hashtag %s"
798
799-#: html.c:4032
800+#: html.c:4452
801 #, c-format
802 msgid "Nothing found for tag %s"
803 msgstr "Nicht gefunden zu Hashtag %s"
804
805-#: html.c:4048
806+#: html.c:4468
807 #, c-format
808 msgid "Search results for '%s' (may be more)"
809 msgstr "Suchergebnisse für '%s' (könnten mehr sein)"
810
811-#: html.c:4051
812+#: html.c:4471
813 #, c-format
814 msgid "Search results for '%s'"
815 msgstr "Keine Suchergebnisse für '%s'"
816
817-#: html.c:4054
818+#: html.c:4474
819 #, c-format
820 msgid "No more matches for '%s'"
821 msgstr "Keine weiteren Treffer für '%s'"
822
823-#: html.c:4056
824+#: html.c:4476
825 #, c-format
826 msgid "Nothing found for '%s'"
827 msgstr "Nichts gefunden für '%s'"
828
829-#: html.c:4154
830+#: html.c:4574
831 msgid "Showing instance timeline"
832 msgstr "Zeitleiste der Instanz anzeigen"
833
834-#: html.c:4237
835+#: html.c:4657
836 #, c-format
837 msgid "Showing timeline for list '%s'"
838 msgstr "Zeitleiste der Liste '%s' anzeigen"
839
840-#: httpd.c:258
841+#: httpd.c:259
842 #, c-format
843 msgid "Search results for tag #%s"
844 msgstr "Suchergebnisse für Hashtag #%s"
845
846-#: httpd.c:267
847+#: httpd.c:268
848 msgid "Recent posts by users in this instance"
849 msgstr "Neueste Beiträge von Benutzern dieser Instanz"
850
851-#: html.c:1764
852+#: html.c:1842
853 msgid "Blocked hashtags..."
854 msgstr "Geblockte Hashtags..."
855
856-#: html.c:518
857+#: html.c:574
858 msgid "Optional URL to reply to"
859 msgstr "Optionale URL zum Antworten"
860
861-#: html.c:695
862+#: html.c:751
863 msgid ""
864 "Option 1...\n"
865 "Option 2...\n"
866@@ -708,94 +708,106 @@ msgstr ""
867 "Option 3...\n"
868 "..."
869
870-#: html.c:1558
871+#: html.c:1636
872 msgid "Bot API key"
873 msgstr "Bot API Schlüssel"
874
875-#: html.c:1564
876+#: html.c:1642
877 msgid "Chat id"
878 msgstr "Chat ID"
879
880-#: html.c:1572
881+#: html.c:1650
882 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
883 msgstr "ntfy Server - vollständige URL (Bsp.: https://ntfy.sh/YourTopic)"
884
885-#: html.c:1578
886+#: html.c:1656
887 msgid "ntfy token - if needed"
888 msgstr "ntfy Token - falls nötig"
889
890-#: html.c:3078
891+#: html.c:3366
892 msgid "pinned"
893 msgstr "Angeheftet"
894
895-#: html.c:3090
896+#: html.c:3378
897 msgid "bookmarks"
898 msgstr "Lesezeichen"
899
900-#: html.c:3102
901+#: html.c:3390
902 msgid "drafts"
903 msgstr "Entwürfe"
904
905-#: html.c:584
906+#: html.c:640
907 msgid "Scheduled post..."
908 msgstr "Geplanter Beitrag..."
909
910 msgid "Post date and time:"
911 msgstr "Datum und Uhrzeit des Beitrags:"
912
913-#: html.c:3113 html.c:4214
914+#: html.c:3401 html.c:4634
915 msgid "Scheduled posts"
916 msgstr "Geplante Beiträge"
917
918-#: html.c:3114
919+#: html.c:3402
920 msgid "scheduled posts"
921 msgstr "Geplante Beiträge"
922
923-#: html.c:578
924+#: html.c:634
925 #, c-format
926 msgid "Post date and time (timezone: %s):"
927 msgstr "Datum und Uhrzeit des Beitrags (Zeitzone: %s):"
928
929-#: html.c:1689
930+#: html.c:1767
931 msgid "Time zone:"
932 msgstr "Zeitzone:"
933
934-#: html.c:559
935+#: html.c:615
936 msgid "Language:"
937 msgstr "Sprache:"
938
939-#: html.c:1580
940+#: html.c:1658
941 msgid "Notify webhook:"
942 msgstr "Notify webhook:"
943
944-#: html.c:1586
945+#: html.c:1664
946 msgid "http://example.com/webhook"
947 msgstr "http://example.com/webhook"
948
949-#: html.c:1694
950+#: html.c:1772
951 msgid "Languages you usually post in:"
952 msgstr "Sprache, in der du normalerweise schreibst:"
953
954-#: html.c:1700
955+#: html.c:1778
956 msgid "en fr es de_AT"
957 msgstr "en fr es de_DE"
958
959-#: html.c:460
960+#: html.c:428
961 msgid "Visibility: "
962 msgstr "Sichtbarkeit"
963
964-#: html.c:468
965 msgid "Public"
966 msgstr "Öffentlich"
967
968-#: html.c:477
969 msgid "Unlisted"
970 msgstr "Ungelistete"
971
972-#: html.c:486
973 msgid "Followers-only"
974 msgstr "Nur Follower"
975
976-#: html.c:495
977 msgid "Direct Message"
978 msgstr "Direktnachricht"
979+
980+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
981+msgid "EmojiUnreact"
982+msgstr "Emoji-Reaktion löschen"
983+
984+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
985+msgid "EmojiReact"
986+msgstr "Emoji-Reaktion"
987+
988+#: html.c:2115
989+msgid "Emoji react..."
990+msgstr "Emoji-Reaktion..."
991+
992+#: html.c:2609
993+msgid "Emoji reactions: "
994+msgstr "Emoji-Reaktionen:"
+202,
-190
1@@ -14,119 +14,119 @@ msgstr ""
2 "Content-Transfer-Encoding: 8bit\n"
3 "X-Generator: Poedit 3.5\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Ευαίσθητο περιεχόμενο: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Περιγραφή ευαίσθητου περιεχομένου"
14
15 msgid "Only for mentioned people: "
16 msgstr "Μόνο για αναφερόμενα άτομα: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Απάντηση σε (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Μη δημοσιεύσεις, αλλά αποθήκευσε σαν προσχέδιο"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Προσχέδιο:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Επισυνάψεις..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Αρχείο:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Καθάρισε αυτό το πεδίο για να διαγράψεις την επισύναψη"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Περιγραφή επισύναψης"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Δημοσκόπηση..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Επιλογές δημοσκόπησης (μία ανά σειρά, μέχρι 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Μία επιλογή"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Πολλαπλές επιλογές"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Τελειώνει σε 5 λεπτά"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Τελειώνει σε 1 ώρα"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Τελειώνει σε 1 ημέρα"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Δημοσίευση"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Περιγραφή ιστότοπου"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email διαχειριστή"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Διαχειριστής"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d ακολουθείτε, %d ακόλουθοι"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "ιδιωτικό"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "δημόσιο"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "ειδοποιήσεις"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "άνθρωποι"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "διακομιστής"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -134,576 +134,576 @@ msgstr ""
150 "Αναζήτηση δημοσιεύσεων με URL ή περιεχόμενο (κανονική έκφραση), "
151 "@χρήστης@διακομιστής, ή #ετικέτα"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Αναζήτηση περιεχομένου"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "πιστοποιημένος σύνδεσμος"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Τοποθεσία: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Νέα Δημοσίευση..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Τι έχεις στο μυαλό σου;"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Λειτουργίες..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Ακολούθησε"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(με URL ή user@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Ενίσχυση"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(από URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Μου αρέσει"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Ρυθμίσεις Χρήστη..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Προβαλλόμενο όνομα:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Το όνομα σου"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Εικόνα προφίλ: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Διαγραφή τρέχουσας εικόνας προφίλ"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Εικόνα κεφαλίδας (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Διαγραφή τρέχουσας εικόνας κεφαλίδας"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Βιογραφικό:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Γράψε για τον εαυτό σου εδώ..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Πάντα πρόβαλε ευαίσθητο περιεχόμενο"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Διεύθυνση email για ειδοποιήσεις:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Ειδοποιήσεις Telegram (κλειδί bot και chat id):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "ειδοποιήσεις ntfy (διακομιστής ntfy και token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Διατήρηση δημοσιεύσεων για ημέρες (0: ρυθμίσεις διακομιστή):"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Απόρριψη άμεσων μηνυμάτων από άτομα που δεν ακολουθείτε"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Αυτός ο λογαριασμός είναι αυτοματοποιημένος (bot)"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Αυτόματη ενίσχυση όλων των αναφορών σε αυτό το λογαριασμό"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr ""
297 "Αυτός ο λογαριασμός είναι ιδιωτικός (οι δημοσιεύσεις δεν εμφανίζονται στο "
298 "διαδίκτυο)"
299
300-#: html.c:1639
301+#: html.c:1717
302 msgid "Collapse top threads by default"
303 msgstr "Αναδίπλωση κορυφαίων συζητήσεων εξ'ορισμού"
304
305-#: html.c:1648
306+#: html.c:1726
307 msgid "Follow requests must be approved"
308 msgstr "Τα αιτήματα ακόλουθων πρέπει να εγκρίνονται"
309
310-#: html.c:1657
311+#: html.c:1735
312 msgid "Publish follower and following metrics"
313 msgstr "Δημοσίευση στατιστικών ακόλουθων και ακολουθούμενων"
314
315-#: html.c:1659
316+#: html.c:1737
317 msgid "Current location:"
318 msgstr "Τρέχουσα τοποθεσία:"
319
320-#: html.c:1673
321+#: html.c:1751
322 msgid "Profile metadata (key=value pairs in each line):"
323 msgstr "Μεταστοιχεία προφίλ (κλειδί=τιμή ζευγάρια σε κάθε γραμμή):"
324
325-#: html.c:1684
326+#: html.c:1762
327 msgid "Web interface language:"
328 msgstr "Γλώσσα περιβάλλοντος web:"
329
330-#: html.c:1703
331+#: html.c:1781
332 msgid "New password:"
333 msgstr "Νέος κωδικός:"
334
335-#: html.c:1710
336+#: html.c:1788
337 msgid "Repeat new password:"
338 msgstr "Επανάληψη νέου κωδικού:"
339
340-#: html.c:1720
341+#: html.c:1798
342 msgid "Update user info"
343 msgstr "Ενημέρωση στοιχείων χρήστη"
344
345-#: html.c:1731
346+#: html.c:1809
347 msgid "Followed hashtags..."
348 msgstr "Ετικέτες που ακολουθείτε..."
349
350-#: html.c:1733 html.c:1766
351+#: html.c:1811 html.c:1844
352 msgid "One hashtag per line"
353 msgstr "Μία ετικέτα ανά γραμμή"
354
355-#: html.c:1755 html.c:1787
356+#: html.c:1833 html.c:1865
357 msgid "Update hashtags"
358 msgstr "Ενημέρωση ετικετών"
359
360-#: html.c:1904
361+#: html.c:1982
362 msgid "Say you like this post"
363 msgstr "Ανάφερε ότι σου αρέσει αυτή η δημοσίευση"
364
365-#: html.c:1909 html.c:4775
366+#: html.c:1987 html.c:5219
367 msgid "Unlike"
368 msgstr "Αναίρεση μου αρέσει"
369
370-#: html.c:1909
371+#: html.c:1987
372 msgid "Nah don't like it that much"
373 msgstr "Μπα δεν μ' αρέσει τόσο"
374
375-#: html.c:1915 html.c:4912
376+#: html.c:1993 html.c:5356
377 msgid "Unpin"
378 msgstr "Ξεκαρφίτσωμα"
379
380-#: html.c:1915
381+#: html.c:1993
382 msgid "Unpin this post from your timeline"
383 msgstr "Ξεκαρφίτσωμα αυτής της δημοσίευσης από τη ροή σας"
384
385-#: html.c:1918 html.c:4907
386+#: html.c:1996 html.c:5351
387 msgid "Pin"
388 msgstr "Καρφίτσωμα"
389
390-#: html.c:1918
391+#: html.c:1996
392 msgid "Pin this post to the top of your timeline"
393 msgstr "Καρφίτσωμα αυτής της δημοσίευσης στη κορυφή της ροής σας"
394
395-#: html.c:1925
396+#: html.c:2003
397 msgid "Announce this post to your followers"
398 msgstr "Ανακοίνωση αυτής της δημοσίευσης στους ακόλουθους σας"
399
400-#: html.c:1930 html.c:4783
401+#: html.c:2008 html.c:5227
402 msgid "Unboost"
403 msgstr "Αφαίρεση ενίσχυσης"
404
405-#: html.c:1930
406+#: html.c:2008
407 msgid "I regret I boosted this"
408 msgstr "Μετάνιωσα που το ενίσχυσα"
409
410-#: html.c:1936 html.c:4922
411+#: html.c:2014 html.c:5366
412 msgid "Unbookmark"
413 msgstr "Αφαίρεση σελιδοδείκτη"
414
415-#: html.c:1936
416+#: html.c:2014
417 msgid "Delete this post from your bookmarks"
418 msgstr "Διαγραφή αυτής της δημοσίευσης από τους σελιδοδείκτες σου"
419
420-#: html.c:1939 html.c:4917
421+#: html.c:2017 html.c:5361
422 msgid "Bookmark"
423 msgstr "Εισαγωγή σελιδοδείκτη"
424
425-#: html.c:1939
426+#: html.c:2017
427 msgid "Add this post to your bookmarks"
428 msgstr "Προσθήκη αυτής της δημοσίευσης στους σελιδοδείκτες σου"
429
430-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
431+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
432 msgid "Unfollow"
433 msgstr "Αναίρεση ακολουθίας"
434
435-#: html.c:1945 html.c:3387
436+#: html.c:2023 html.c:3763 html.c:4042
437 msgid "Stop following this user's activity"
438 msgstr "Σταμάτα να ακολουθείς τη δραστηριότητα αυτού του χρήστη"
439
440-#: html.c:1949 html.c:3401
441+#: html.c:2027 html.c:3777 html.c:4044
442 msgid "Start following this user's activity"
443 msgstr "Ξεκίνα να ακολουθείς τη δραστηριότητα αυτού του χρήστη"
444
445-#: html.c:1955 html.c:4860
446+#: html.c:2033 html.c:5304
447 msgid "Unfollow Group"
448 msgstr "Αναίρεση ακολουθίας ομάδας"
449
450-#: html.c:1956
451+#: html.c:2034
452 msgid "Stop following this group or channel"
453 msgstr "Σταμάτα να ακολουθείς αυτή την ομάδα ή κανάλι"
454
455-#: html.c:1960 html.c:4847
456+#: html.c:2038 html.c:5291
457 msgid "Follow Group"
458 msgstr "Ακολούθησε την Ομάδα"
459
460-#: html.c:1961
461+#: html.c:2039
462 msgid "Start following this group or channel"
463 msgstr "Ξεκίνα να ακολουθείς αυτή την ομάδα ή κανάλι"
464
465-#: html.c:1966 html.c:3423 html.c:4791
466+#: html.c:2044 html.c:3799 html.c:5235
467 msgid "MUTE"
468 msgstr "ΣΙΓΑΣΗ"
469
470-#: html.c:1967
471+#: html.c:2045
472 msgid "Block any activity from this user forever"
473 msgstr "Αποκλεισμός οποιασδήποτε δραστηριότητας από αυτόν τον χρήστη για πάντα"
474
475-#: html.c:1972 html.c:3405 html.c:4877
476+#: html.c:2050 html.c:3781 html.c:5321
477 msgid "Delete"
478 msgstr "Διαγραφή"
479
480-#: html.c:1972
481+#: html.c:2050
482 msgid "Delete this post"
483 msgstr "Διαγραφή αυτής της δημοσίευσης"
484
485-#: html.c:1975 html.c:4799
486+#: html.c:2053 html.c:5243
487 msgid "Hide"
488 msgstr "Απόκρυψη"
489
490-#: html.c:1975
491+#: html.c:2053
492 msgid "Hide this post and its children"
493 msgstr "Απόκρυψη αυτής της δημοσίευσης και των απαντήσεων της"
494
495-#: html.c:2017
496+#: html.c:2095
497 msgid "Edit..."
498 msgstr "Επεξεργασία..."
499
500-#: html.c:2039
501+#: html.c:2133
502 msgid "Reply..."
503 msgstr "Απάντηση..."
504
505-#: html.c:2090
506+#: html.c:2184
507 msgid "Truncated (too deep)"
508 msgstr "Έγινε περικοπή (πολύ βαθύ)"
509
510-#: html.c:2108
511+#: html.c:2202
512 msgid "follows you"
513 msgstr "σε ακολουθεί"
514
515-#: html.c:2182
516+#: html.c:2276
517 msgid "Pinned"
518 msgstr "Καρφιτσωμένο"
519
520-#: html.c:2190
521+#: html.c:2284
522 msgid "Bookmarked"
523 msgstr "Εισήχθηκε σελιδοδείκτης"
524
525-#: html.c:2198
526+#: html.c:2292
527 msgid "Poll"
528 msgstr "Δημοσκόπηση"
529
530-#: html.c:2205
531+#: html.c:2299
532 msgid "Voted"
533 msgstr "Ψήφισες"
534
535-#: html.c:2214
536+#: html.c:2308
537 msgid "Event"
538 msgstr "Εκδήλωση"
539
540-#: html.c:2246 html.c:2275
541+#: html.c:2340 html.c:2369
542 msgid "boosted"
543 msgstr "ενισχύθηκε"
544
545-#: html.c:2289
546+#: html.c:2383
547 msgid "in reply to"
548 msgstr "σε απάντηση του"
549
550-#: html.c:2345
551+#: html.c:2439
552 msgid " [SENSITIVE CONTENT]"
553 msgstr " [ΕΥΑΙΣΘΗΤΟ ΠΕΡΙΕΧΟΜΕΝΟ]"
554
555-#: html.c:2512
556+#: html.c:2796
557 msgid "Vote"
558 msgstr "Ψήφισε"
559
560-#: html.c:2522
561+#: html.c:2806
562 msgid "Closed"
563 msgstr "Έκλεισε"
564
565-#: html.c:2547
566+#: html.c:2831
567 msgid "Closes in"
568 msgstr "Κλείνει σε"
569
570-#: html.c:2627
571+#: html.c:2911
572 msgid "Video"
573 msgstr "Βίντεο"
574
575-#: html.c:2642
576+#: html.c:2926
577 msgid "Audio"
578 msgstr "Ήχος"
579
580-#: html.c:2670
581+#: html.c:2954
582 msgid "Attachment"
583 msgstr "Επισύναψη"
584
585-#: html.c:2684
586+#: html.c:2968
587 msgid "Alt..."
588 msgstr "Εναλλακτικό κείμενο..."
589
590-#: html.c:2697
591+#: html.c:2981
592 msgid "Source channel or community"
593 msgstr "Πηγή κανάλι ή κοινότητα"
594
595-#: html.c:2791
596+#: html.c:3075
597 msgid "Time: "
598 msgstr "Ώρα: "
599
600-#: html.c:2872
601+#: html.c:3156
602 msgid "Older..."
603 msgstr "Παλαιότερα..."
604
605-#: html.c:2974
606+#: html.c:3258
607 msgid "about this site"
608 msgstr "σχετικά με αυτό τον ιστότοπο"
609
610-#: html.c:2976
611+#: html.c:3260
612 msgid "powered by "
613 msgstr "λειτουργεί με "
614
615-#: html.c:3041
616+#: html.c:3329
617 msgid "Dismiss"
618 msgstr "Απόρριψη"
619
620-#: html.c:3058
621+#: html.c:3346
622 #, c-format
623 msgid "Timeline for list '%s'"
624 msgstr "Ροή για λίστα '%s'"
625
626-#: html.c:3077 html.c:4169
627+#: html.c:3365 html.c:4589
628 msgid "Pinned posts"
629 msgstr "Καρφιτσωμένες δημοσιεύσεις"
630
631-#: html.c:3089 html.c:4184
632+#: html.c:3377 html.c:4604
633 msgid "Bookmarked posts"
634 msgstr "Σελιδοδείκτες"
635
636-#: html.c:3101 html.c:4199
637+#: html.c:3389 html.c:4619
638 msgid "Post drafts"
639 msgstr "Προσχέδια δημοσιεύσεων"
640
641-#: html.c:3177
642+#: html.c:3465
643 msgid "No more unseen posts"
644 msgstr "Δεν υπάρχουν άλλες αδιάβαστες δημοσιεύσεις"
645
646-#: html.c:3181 html.c:3290
647+#: html.c:3469 html.c:3578
648 msgid "Back to top"
649 msgstr "Πίσω στη κορυφή"
650
651-#: html.c:3243
652+#: html.c:3531
653 msgid "History"
654 msgstr "Ιστορικό"
655
656-#: html.c:3295 html.c:3734
657+#: html.c:3583 html.c:4149
658 msgid "More..."
659 msgstr "Περισσότερα..."
660
661-#: html.c:3391 html.c:4813
662+#: html.c:3767 html.c:5257
663 msgid "Unlimit"
664 msgstr "Αφαίρεση περιορισμού"
665
666-#: html.c:3392
667+#: html.c:3768
668 msgid "Allow announces (boosts) from this user"
669 msgstr "Επέτρεψε ανακοινώσεις (ενισχύσεις) από αυτό το χρήστη"
670
671-#: html.c:3395 html.c:4809
672+#: html.c:3771 html.c:5253
673 msgid "Limit"
674 msgstr "Περιορισμός"
675
676-#: html.c:3396
677+#: html.c:3772
678 msgid "Block announces (boosts) from this user"
679 msgstr "Απέκλεισε ανακοινώσεις (ενισχύσεις) από αυτό το χρήστη"
680
681-#: html.c:3405
682+#: html.c:3781
683 msgid "Delete this user"
684 msgstr "Διαγραφή αυτού του χρήστη"
685
686-#: html.c:3410 html.c:4927
687+#: html.c:3786 html.c:5371
688 msgid "Approve"
689 msgstr "Έγκριση"
690
691-#: html.c:3411
692+#: html.c:3787
693 msgid "Approve this follow request"
694 msgstr "Έγκριση αυτού του αιτήματος ακόλουθου"
695
696-#: html.c:3414 html.c:4951
697+#: html.c:3790 html.c:5395
698 msgid "Discard"
699 msgstr "Απόρριψη"
700
701-#: html.c:3414
702+#: html.c:3790
703 msgid "Discard this follow request"
704 msgstr "Απόρριψη αυτού του αιτήματος ακόλουθου"
705
706-#: html.c:3419 html.c:4795
707+#: html.c:3795 html.c:5239
708 msgid "Unmute"
709 msgstr "Αφαίρεση σίγασης"
710
711-#: html.c:3420
712+#: html.c:3796
713 msgid "Stop blocking activities from this user"
714 msgstr "Διακοπή αποκλεισμού δραστηριοτήτων από αυτό το χρήστη"
715
716-#: html.c:3424
717+#: html.c:3800
718 msgid "Block any activity from this user"
719 msgstr "Αποκλεισμός οποιασδήποτε δραστηριότητας από αυτό τον χρήστη"
720
721-#: html.c:3432
722+#: html.c:3808
723 msgid "Direct Message..."
724 msgstr "Απευθείας Μήνυμα..."
725
726-#: html.c:3467
727+#: html.c:3843
728 msgid "Pending follow confirmations"
729 msgstr "Εκκεμείς επιβεβαιώσεις ακολουθήσεων"
730
731-#: html.c:3471
732+#: html.c:3847
733 msgid "People you follow"
734 msgstr "Άνθρωποι που ακολουθείτε"
735
736-#: html.c:3472
737+#: html.c:3848
738 msgid "People that follow you"
739 msgstr "Άνθρωποι που σας ακολουθούν"
740
741-#: html.c:3511
742+#: html.c:3887
743 msgid "Clear all"
744 msgstr "Εκκαθάριση όλων"
745
746-#: html.c:3571
747+#: html.c:3951
748 msgid "Mention"
749 msgstr "Αναφορά"
750
751-#: html.c:3574
752+#: html.c:3954
753 msgid "Finished poll"
754 msgstr "Ολοκληρωμένη δημοσκόπηση"
755
756-#: html.c:3590
757+#: html.c:3979
758 msgid "Follow Request"
759 msgstr "Αίτημα Ακόλουθου"
760
761-#: html.c:3674
762+#: html.c:4089
763 msgid "Context"
764 msgstr "Περιεχόμενο"
765
766-#: html.c:3692
767+#: html.c:4107
768 msgid "New"
769 msgstr "Νέο"
770
771-#: html.c:3707
772+#: html.c:4122
773 msgid "Already seen"
774 msgstr "Έχει ήδη προβληθεί"
775
776-#: html.c:3722
777+#: html.c:4137
778 msgid "None"
779 msgstr "Κανένα"
780
781-#: html.c:3994
782+#: html.c:4414
783 #, c-format
784 msgid "Search results for account %s"
785 msgstr "Αποτελέσματα αναζήτηση για λογαριασμό %s"
786
787-#: html.c:4001
788+#: html.c:4421
789 #, c-format
790 msgid "Account %s not found"
791 msgstr "Ο λογαριασμός %s δεν βρέθηκε"
792
793-#: html.c:4032
794+#: html.c:4452
795 #, c-format
796 msgid "Search results for tag %s"
797 msgstr "Αποτελέσματα αναζήτησης για ετικέτα %s"
798
799-#: html.c:4032
800+#: html.c:4452
801 #, c-format
802 msgid "Nothing found for tag %s"
803 msgstr "Δε βρέθηκε κάτι για ετικέτα %s"
804
805-#: html.c:4048
806+#: html.c:4468
807 #, c-format
808 msgid "Search results for '%s' (may be more)"
809 msgstr "Αποτελέσματα αναζήτησης για '%s' (μπορεί να υπάρχουν περισσότερα)"
810
811-#: html.c:4051
812+#: html.c:4471
813 #, c-format
814 msgid "Search results for '%s'"
815 msgstr "Αποτελέσματα αναζήτησης για '%s'"
816
817-#: html.c:4054
818+#: html.c:4474
819 #, c-format
820 msgid "No more matches for '%s'"
821 msgstr "Δεν υπάρχουν άλλα αποτελέσματα για '%s'"
822
823-#: html.c:4056
824+#: html.c:4476
825 #, c-format
826 msgid "Nothing found for '%s'"
827 msgstr "Δε βρέθηκε κάτι για '%s'"
828
829-#: html.c:4154
830+#: html.c:4574
831 msgid "Showing instance timeline"
832 msgstr "Προβάλλεται η ροή του διακομιστή"
833
834-#: html.c:4237
835+#: html.c:4657
836 #, c-format
837 msgid "Showing timeline for list '%s'"
838 msgstr "Προβάλετε η ροή της λίστας '%s'"
839
840-#: httpd.c:258
841+#: httpd.c:259
842 #, c-format
843 msgid "Search results for tag #%s"
844 msgstr "Αποτελέσματα αναζήτησης για ετικέτα #%s"
845
846-#: httpd.c:267
847+#: httpd.c:268
848 msgid "Recent posts by users in this instance"
849 msgstr "Πρόσφατες αναρτήσεις από χρήστες σε αυτό τον ιστότοπο"
850
851-#: html.c:1764
852+#: html.c:1842
853 msgid "Blocked hashtags..."
854 msgstr "Αποκλεισμένες ετικέτες..."
855
856-#: html.c:518
857+#: html.c:574
858 msgid "Optional URL to reply to"
859 msgstr ""
860
861-#: html.c:695
862+#: html.c:751
863 msgid ""
864 "Option 1...\n"
865 "Option 2...\n"
866@@ -711,94 +711,106 @@ msgid ""
867 "..."
868 msgstr ""
869
870-#: html.c:1558
871+#: html.c:1636
872 msgid "Bot API key"
873 msgstr ""
874
875-#: html.c:1564
876+#: html.c:1642
877 msgid "Chat id"
878 msgstr ""
879
880-#: html.c:1572
881+#: html.c:1650
882 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
883 msgstr ""
884
885-#: html.c:1578
886+#: html.c:1656
887 msgid "ntfy token - if needed"
888 msgstr ""
889
890-#: html.c:3078
891+#: html.c:3366
892 msgid "pinned"
893 msgstr ""
894
895-#: html.c:3090
896+#: html.c:3378
897 msgid "bookmarks"
898 msgstr ""
899
900-#: html.c:3102
901+#: html.c:3390
902 msgid "drafts"
903 msgstr ""
904
905-#: html.c:584
906+#: html.c:640
907 msgid "Scheduled post..."
908 msgstr ""
909
910 msgid "Post date and time:"
911 msgstr ""
912
913-#: html.c:3113 html.c:4214
914+#: html.c:3401 html.c:4634
915 msgid "Scheduled posts"
916 msgstr ""
917
918-#: html.c:3114
919+#: html.c:3402
920 msgid "scheduled posts"
921 msgstr ""
922
923-#: html.c:578
924+#: html.c:634
925 #, c-format
926 msgid "Post date and time (timezone: %s):"
927 msgstr ""
928
929-#: html.c:1689
930+#: html.c:1767
931 msgid "Time zone:"
932 msgstr ""
933
934-#: html.c:559
935+#: html.c:615
936 msgid "Language:"
937 msgstr ""
938
939-#: html.c:1580
940+#: html.c:1658
941 msgid "Notify webhook:"
942 msgstr ""
943
944-#: html.c:1586
945+#: html.c:1664
946 msgid "http://example.com/webhook"
947 msgstr ""
948
949-#: html.c:1694
950+#: html.c:1772
951 msgid "Languages you usually post in:"
952 msgstr ""
953
954-#: html.c:1700
955+#: html.c:1778
956 msgid "en fr es de_AT"
957 msgstr ""
958
959-#: html.c:460
960+#: html.c:428
961 msgid "Visibility: "
962 msgstr ""
963
964-#: html.c:468
965 msgid "Public"
966 msgstr ""
967
968-#: html.c:477
969 msgid "Unlisted"
970 msgstr ""
971
972-#: html.c:486
973 msgid "Followers-only"
974 msgstr ""
975
976-#: html.c:495
977 msgid "Direct Message"
978 msgstr ""
979+
980+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
981+msgid "EmojiUnreact"
982+msgstr ""
983+
984+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
985+msgid "EmojiReact"
986+msgstr ""
987+
988+#: html.c:2115
989+msgid "Emoji react..."
990+msgstr ""
991+
992+#: html.c:2609
993+msgid "Emoji reactions: "
994+msgstr ""
M
po/en.po
+202,
-190
1@@ -8,692 +8,692 @@ msgstr ""
2 "Language: en\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr ""
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr ""
14
15 msgid "Only for mentioned people: "
16 msgstr ""
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr ""
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr ""
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr ""
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr ""
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr ""
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr ""
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr ""
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr ""
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr ""
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr ""
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr ""
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr ""
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr ""
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr ""
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr ""
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr ""
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr ""
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr ""
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr ""
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr ""
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr ""
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr ""
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr ""
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr ""
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr ""
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149 msgstr ""
150
151-#: html.c:1087
152+#: html.c:1143
153 msgid "Content search"
154 msgstr ""
155
156-#: html.c:1213
157+#: html.c:1269
158 msgid "verified link"
159 msgstr ""
160
161-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
162+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
163 msgid "Location: "
164 msgstr ""
165
166-#: html.c:1302
167+#: html.c:1358
168 msgid "New Post..."
169 msgstr ""
170
171-#: html.c:1304
172+#: html.c:1360
173 msgid "What's on your mind?"
174 msgstr ""
175
176-#: html.c:1313
177+#: html.c:1369
178 msgid "Operations..."
179 msgstr ""
180
181-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
182+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
183 msgid "Follow"
184 msgstr ""
185
186-#: html.c:1330
187+#: html.c:1386
188 msgid "(by URL or user@host)"
189 msgstr ""
190
191-#: html.c:1345 html.c:1925 html.c:4766
192+#: html.c:1401 html.c:2003 html.c:5210
193 msgid "Boost"
194 msgstr ""
195
196-#: html.c:1347 html.c:1364
197+#: html.c:1403 html.c:1420 html.c:1442
198 msgid "(by URL)"
199 msgstr ""
200
201-#: html.c:1362 html.c:1904 html.c:4757
202+#: html.c:1418 html.c:1982 html.c:5201
203 msgid "Like"
204 msgstr ""
205
206-#: html.c:1490
207+#: html.c:1568
208 msgid "User Settings..."
209 msgstr ""
210
211-#: html.c:1499
212+#: html.c:1577
213 msgid "Display name:"
214 msgstr ""
215
216-#: html.c:1505
217+#: html.c:1583
218 msgid "Your name"
219 msgstr ""
220
221-#: html.c:1507
222+#: html.c:1585
223 msgid "Avatar: "
224 msgstr ""
225
226-#: html.c:1515
227+#: html.c:1593
228 msgid "Delete current avatar"
229 msgstr ""
230
231-#: html.c:1517
232+#: html.c:1595
233 msgid "Header image (banner): "
234 msgstr ""
235
236-#: html.c:1525
237+#: html.c:1603
238 msgid "Delete current header image"
239 msgstr ""
240
241-#: html.c:1527
242+#: html.c:1605
243 msgid "Bio:"
244 msgstr ""
245
246-#: html.c:1533
247+#: html.c:1611
248 msgid "Write about yourself here..."
249 msgstr ""
250
251-#: html.c:1542
252+#: html.c:1620
253 msgid "Always show sensitive content"
254 msgstr ""
255
256-#: html.c:1544
257+#: html.c:1622
258 msgid "Email address for notifications:"
259 msgstr ""
260
261-#: html.c:1552
262+#: html.c:1630
263 msgid "Telegram notifications (bot key and chat id):"
264 msgstr ""
265
266-#: html.c:1566
267+#: html.c:1644
268 msgid "ntfy notifications (ntfy server and token):"
269 msgstr ""
270
271-#: html.c:1588
272+#: html.c:1666
273 msgid "Maximum days to keep posts (0: server settings):"
274 msgstr ""
275
276-#: html.c:1602
277+#: html.c:1680
278 msgid "Drop direct messages from people you don't follow"
279 msgstr ""
280
281-#: html.c:1611
282+#: html.c:1689
283 msgid "This account is a bot"
284 msgstr ""
285
286-#: html.c:1620
287+#: html.c:1698
288 msgid "Auto-boost all mentions to this account"
289 msgstr ""
290
291-#: html.c:1629
292+#: html.c:1707
293 msgid "This account is private (posts are not shown through the web)"
294 msgstr ""
295
296-#: html.c:1639
297+#: html.c:1717
298 msgid "Collapse top threads by default"
299 msgstr ""
300
301-#: html.c:1648
302+#: html.c:1726
303 msgid "Follow requests must be approved"
304 msgstr ""
305
306-#: html.c:1657
307+#: html.c:1735
308 msgid "Publish follower and following metrics"
309 msgstr ""
310
311-#: html.c:1659
312+#: html.c:1737
313 msgid "Current location:"
314 msgstr ""
315
316-#: html.c:1673
317+#: html.c:1751
318 msgid "Profile metadata (key=value pairs in each line):"
319 msgstr ""
320
321-#: html.c:1684
322+#: html.c:1762
323 msgid "Web interface language:"
324 msgstr ""
325
326-#: html.c:1703
327+#: html.c:1781
328 msgid "New password:"
329 msgstr ""
330
331-#: html.c:1710
332+#: html.c:1788
333 msgid "Repeat new password:"
334 msgstr ""
335
336-#: html.c:1720
337+#: html.c:1798
338 msgid "Update user info"
339 msgstr ""
340
341-#: html.c:1731
342+#: html.c:1809
343 msgid "Followed hashtags..."
344 msgstr ""
345
346-#: html.c:1733 html.c:1766
347+#: html.c:1811 html.c:1844
348 msgid "One hashtag per line"
349 msgstr ""
350
351-#: html.c:1755 html.c:1787
352+#: html.c:1833 html.c:1865
353 msgid "Update hashtags"
354 msgstr ""
355
356-#: html.c:1904
357+#: html.c:1982
358 msgid "Say you like this post"
359 msgstr ""
360
361-#: html.c:1909 html.c:4775
362+#: html.c:1987 html.c:5219
363 msgid "Unlike"
364 msgstr ""
365
366-#: html.c:1909
367+#: html.c:1987
368 msgid "Nah don't like it that much"
369 msgstr ""
370
371-#: html.c:1915 html.c:4912
372+#: html.c:1993 html.c:5356
373 msgid "Unpin"
374 msgstr ""
375
376-#: html.c:1915
377+#: html.c:1993
378 msgid "Unpin this post from your timeline"
379 msgstr ""
380
381-#: html.c:1918 html.c:4907
382+#: html.c:1996 html.c:5351
383 msgid "Pin"
384 msgstr ""
385
386-#: html.c:1918
387+#: html.c:1996
388 msgid "Pin this post to the top of your timeline"
389 msgstr ""
390
391-#: html.c:1925
392+#: html.c:2003
393 msgid "Announce this post to your followers"
394 msgstr ""
395
396-#: html.c:1930 html.c:4783
397+#: html.c:2008 html.c:5227
398 msgid "Unboost"
399 msgstr ""
400
401-#: html.c:1930
402+#: html.c:2008
403 msgid "I regret I boosted this"
404 msgstr ""
405
406-#: html.c:1936 html.c:4922
407+#: html.c:2014 html.c:5366
408 msgid "Unbookmark"
409 msgstr ""
410
411-#: html.c:1936
412+#: html.c:2014
413 msgid "Delete this post from your bookmarks"
414 msgstr ""
415
416-#: html.c:1939 html.c:4917
417+#: html.c:2017 html.c:5361
418 msgid "Bookmark"
419 msgstr ""
420
421-#: html.c:1939
422+#: html.c:2017
423 msgid "Add this post to your bookmarks"
424 msgstr ""
425
426-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
427+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
428 msgid "Unfollow"
429 msgstr ""
430
431-#: html.c:1945 html.c:3387
432+#: html.c:2023 html.c:3763 html.c:4042
433 msgid "Stop following this user's activity"
434 msgstr ""
435
436-#: html.c:1949 html.c:3401
437+#: html.c:2027 html.c:3777 html.c:4044
438 msgid "Start following this user's activity"
439 msgstr ""
440
441-#: html.c:1955 html.c:4860
442+#: html.c:2033 html.c:5304
443 msgid "Unfollow Group"
444 msgstr ""
445
446-#: html.c:1956
447+#: html.c:2034
448 msgid "Stop following this group or channel"
449 msgstr ""
450
451-#: html.c:1960 html.c:4847
452+#: html.c:2038 html.c:5291
453 msgid "Follow Group"
454 msgstr ""
455
456-#: html.c:1961
457+#: html.c:2039
458 msgid "Start following this group or channel"
459 msgstr ""
460
461-#: html.c:1966 html.c:3423 html.c:4791
462+#: html.c:2044 html.c:3799 html.c:5235
463 msgid "MUTE"
464 msgstr ""
465
466-#: html.c:1967
467+#: html.c:2045
468 msgid "Block any activity from this user forever"
469 msgstr ""
470
471-#: html.c:1972 html.c:3405 html.c:4877
472+#: html.c:2050 html.c:3781 html.c:5321
473 msgid "Delete"
474 msgstr ""
475
476-#: html.c:1972
477+#: html.c:2050
478 msgid "Delete this post"
479 msgstr ""
480
481-#: html.c:1975 html.c:4799
482+#: html.c:2053 html.c:5243
483 msgid "Hide"
484 msgstr ""
485
486-#: html.c:1975
487+#: html.c:2053
488 msgid "Hide this post and its children"
489 msgstr ""
490
491-#: html.c:2017
492+#: html.c:2095
493 msgid "Edit..."
494 msgstr ""
495
496-#: html.c:2039
497+#: html.c:2133
498 msgid "Reply..."
499 msgstr ""
500
501-#: html.c:2090
502+#: html.c:2184
503 msgid "Truncated (too deep)"
504 msgstr ""
505
506-#: html.c:2108
507+#: html.c:2202
508 msgid "follows you"
509 msgstr ""
510
511-#: html.c:2182
512+#: html.c:2276
513 msgid "Pinned"
514 msgstr ""
515
516-#: html.c:2190
517+#: html.c:2284
518 msgid "Bookmarked"
519 msgstr ""
520
521-#: html.c:2198
522+#: html.c:2292
523 msgid "Poll"
524 msgstr ""
525
526-#: html.c:2205
527+#: html.c:2299
528 msgid "Voted"
529 msgstr ""
530
531-#: html.c:2214
532+#: html.c:2308
533 msgid "Event"
534 msgstr ""
535
536-#: html.c:2246 html.c:2275
537+#: html.c:2340 html.c:2369
538 msgid "boosted"
539 msgstr ""
540
541-#: html.c:2289
542+#: html.c:2383
543 msgid "in reply to"
544 msgstr ""
545
546-#: html.c:2345
547+#: html.c:2439
548 msgid " [SENSITIVE CONTENT]"
549 msgstr ""
550
551-#: html.c:2512
552+#: html.c:2796
553 msgid "Vote"
554 msgstr ""
555
556-#: html.c:2522
557+#: html.c:2806
558 msgid "Closed"
559 msgstr ""
560
561-#: html.c:2547
562+#: html.c:2831
563 msgid "Closes in"
564 msgstr ""
565
566-#: html.c:2627
567+#: html.c:2911
568 msgid "Video"
569 msgstr ""
570
571-#: html.c:2642
572+#: html.c:2926
573 msgid "Audio"
574 msgstr ""
575
576-#: html.c:2670
577+#: html.c:2954
578 msgid "Attachment"
579 msgstr ""
580
581-#: html.c:2684
582+#: html.c:2968
583 msgid "Alt..."
584 msgstr ""
585
586-#: html.c:2697
587+#: html.c:2981
588 msgid "Source channel or community"
589 msgstr ""
590
591-#: html.c:2791
592+#: html.c:3075
593 msgid "Time: "
594 msgstr ""
595
596-#: html.c:2872
597+#: html.c:3156
598 msgid "Older..."
599 msgstr ""
600
601-#: html.c:2974
602+#: html.c:3258
603 msgid "about this site"
604 msgstr ""
605
606-#: html.c:2976
607+#: html.c:3260
608 msgid "powered by "
609 msgstr ""
610
611-#: html.c:3041
612+#: html.c:3329
613 msgid "Dismiss"
614 msgstr ""
615
616-#: html.c:3058
617+#: html.c:3346
618 #, c-format
619 msgid "Timeline for list '%s'"
620 msgstr ""
621
622-#: html.c:3077 html.c:4169
623+#: html.c:3365 html.c:4589
624 msgid "Pinned posts"
625 msgstr ""
626
627-#: html.c:3089 html.c:4184
628+#: html.c:3377 html.c:4604
629 msgid "Bookmarked posts"
630 msgstr ""
631
632-#: html.c:3101 html.c:4199
633+#: html.c:3389 html.c:4619
634 msgid "Post drafts"
635 msgstr ""
636
637-#: html.c:3177
638+#: html.c:3465
639 msgid "No more unseen posts"
640 msgstr ""
641
642-#: html.c:3181 html.c:3290
643+#: html.c:3469 html.c:3578
644 msgid "Back to top"
645 msgstr ""
646
647-#: html.c:3243
648+#: html.c:3531
649 msgid "History"
650 msgstr ""
651
652-#: html.c:3295 html.c:3734
653+#: html.c:3583 html.c:4149
654 msgid "More..."
655 msgstr ""
656
657-#: html.c:3391 html.c:4813
658+#: html.c:3767 html.c:5257
659 msgid "Unlimit"
660 msgstr ""
661
662-#: html.c:3392
663+#: html.c:3768
664 msgid "Allow announces (boosts) from this user"
665 msgstr ""
666
667-#: html.c:3395 html.c:4809
668+#: html.c:3771 html.c:5253
669 msgid "Limit"
670 msgstr ""
671
672-#: html.c:3396
673+#: html.c:3772
674 msgid "Block announces (boosts) from this user"
675 msgstr ""
676
677-#: html.c:3405
678+#: html.c:3781
679 msgid "Delete this user"
680 msgstr ""
681
682-#: html.c:3410 html.c:4927
683+#: html.c:3786 html.c:5371
684 msgid "Approve"
685 msgstr ""
686
687-#: html.c:3411
688+#: html.c:3787
689 msgid "Approve this follow request"
690 msgstr ""
691
692-#: html.c:3414 html.c:4951
693+#: html.c:3790 html.c:5395
694 msgid "Discard"
695 msgstr ""
696
697-#: html.c:3414
698+#: html.c:3790
699 msgid "Discard this follow request"
700 msgstr ""
701
702-#: html.c:3419 html.c:4795
703+#: html.c:3795 html.c:5239
704 msgid "Unmute"
705 msgstr ""
706
707-#: html.c:3420
708+#: html.c:3796
709 msgid "Stop blocking activities from this user"
710 msgstr ""
711
712-#: html.c:3424
713+#: html.c:3800
714 msgid "Block any activity from this user"
715 msgstr ""
716
717-#: html.c:3432
718+#: html.c:3808
719 msgid "Direct Message..."
720 msgstr ""
721
722-#: html.c:3467
723+#: html.c:3843
724 msgid "Pending follow confirmations"
725 msgstr ""
726
727-#: html.c:3471
728+#: html.c:3847
729 msgid "People you follow"
730 msgstr ""
731
732-#: html.c:3472
733+#: html.c:3848
734 msgid "People that follow you"
735 msgstr ""
736
737-#: html.c:3511
738+#: html.c:3887
739 msgid "Clear all"
740 msgstr ""
741
742-#: html.c:3571
743+#: html.c:3951
744 msgid "Mention"
745 msgstr ""
746
747-#: html.c:3574
748+#: html.c:3954
749 msgid "Finished poll"
750 msgstr ""
751
752-#: html.c:3590
753+#: html.c:3979
754 msgid "Follow Request"
755 msgstr ""
756
757-#: html.c:3674
758+#: html.c:4089
759 msgid "Context"
760 msgstr ""
761
762-#: html.c:3692
763+#: html.c:4107
764 msgid "New"
765 msgstr ""
766
767-#: html.c:3707
768+#: html.c:4122
769 msgid "Already seen"
770 msgstr ""
771
772-#: html.c:3722
773+#: html.c:4137
774 msgid "None"
775 msgstr ""
776
777-#: html.c:3994
778+#: html.c:4414
779 #, c-format
780 msgid "Search results for account %s"
781 msgstr ""
782
783-#: html.c:4001
784+#: html.c:4421
785 #, c-format
786 msgid "Account %s not found"
787 msgstr ""
788
789-#: html.c:4032
790+#: html.c:4452
791 #, c-format
792 msgid "Search results for tag %s"
793 msgstr ""
794
795-#: html.c:4032
796+#: html.c:4452
797 #, c-format
798 msgid "Nothing found for tag %s"
799 msgstr ""
800
801-#: html.c:4048
802+#: html.c:4468
803 #, c-format
804 msgid "Search results for '%s' (may be more)"
805 msgstr ""
806
807-#: html.c:4051
808+#: html.c:4471
809 #, c-format
810 msgid "Search results for '%s'"
811 msgstr ""
812
813-#: html.c:4054
814+#: html.c:4474
815 #, c-format
816 msgid "No more matches for '%s'"
817 msgstr ""
818
819-#: html.c:4056
820+#: html.c:4476
821 #, c-format
822 msgid "Nothing found for '%s'"
823 msgstr ""
824
825-#: html.c:4154
826+#: html.c:4574
827 msgid "Showing instance timeline"
828 msgstr ""
829
830-#: html.c:4237
831+#: html.c:4657
832 #, c-format
833 msgid "Showing timeline for list '%s'"
834 msgstr ""
835
836-#: httpd.c:258
837+#: httpd.c:259
838 #, c-format
839 msgid "Search results for tag #%s"
840 msgstr ""
841
842-#: httpd.c:267
843+#: httpd.c:268
844 msgid "Recent posts by users in this instance"
845 msgstr ""
846
847-#: html.c:1764
848+#: html.c:1842
849 msgid "Blocked hashtags..."
850 msgstr ""
851
852-#: html.c:518
853+#: html.c:574
854 msgid "Optional URL to reply to"
855 msgstr ""
856
857-#: html.c:695
858+#: html.c:751
859 msgid ""
860 "Option 1...\n"
861 "Option 2...\n"
862@@ -701,94 +701,106 @@ msgid ""
863 "..."
864 msgstr ""
865
866-#: html.c:1558
867+#: html.c:1636
868 msgid "Bot API key"
869 msgstr ""
870
871-#: html.c:1564
872+#: html.c:1642
873 msgid "Chat id"
874 msgstr ""
875
876-#: html.c:1572
877+#: html.c:1650
878 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
879 msgstr ""
880
881-#: html.c:1578
882+#: html.c:1656
883 msgid "ntfy token - if needed"
884 msgstr ""
885
886-#: html.c:3078
887+#: html.c:3366
888 msgid "pinned"
889 msgstr ""
890
891-#: html.c:3090
892+#: html.c:3378
893 msgid "bookmarks"
894 msgstr ""
895
896-#: html.c:3102
897+#: html.c:3390
898 msgid "drafts"
899 msgstr ""
900
901-#: html.c:584
902+#: html.c:640
903 msgid "Scheduled post..."
904 msgstr ""
905
906 msgid "Post date and time:"
907 msgstr ""
908
909-#: html.c:3113 html.c:4214
910+#: html.c:3401 html.c:4634
911 msgid "Scheduled posts"
912 msgstr ""
913
914-#: html.c:3114
915+#: html.c:3402
916 msgid "scheduled posts"
917 msgstr ""
918
919-#: html.c:578
920+#: html.c:634
921 #, c-format
922 msgid "Post date and time (timezone: %s):"
923 msgstr ""
924
925-#: html.c:1689
926+#: html.c:1767
927 msgid "Time zone:"
928 msgstr ""
929
930-#: html.c:559
931+#: html.c:615
932 msgid "Language:"
933 msgstr ""
934
935-#: html.c:1580
936+#: html.c:1658
937 msgid "Notify webhook:"
938 msgstr ""
939
940-#: html.c:1586
941+#: html.c:1664
942 msgid "http://example.com/webhook"
943 msgstr ""
944
945-#: html.c:1694
946+#: html.c:1772
947 msgid "Languages you usually post in:"
948 msgstr ""
949
950-#: html.c:1700
951+#: html.c:1778
952 msgid "en fr es de_AT"
953 msgstr ""
954
955-#: html.c:460
956+#: html.c:428
957 msgid "Visibility: "
958 msgstr ""
959
960-#: html.c:468
961 msgid "Public"
962 msgstr ""
963
964-#: html.c:477
965 msgid "Unlisted"
966 msgstr ""
967
968-#: html.c:486
969 msgid "Followers-only"
970 msgstr ""
971
972-#: html.c:495
973 msgid "Direct Message"
974 msgstr ""
975+
976+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
977+msgid "EmojiUnreact"
978+msgstr ""
979+
980+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
981+msgid "EmojiReact"
982+msgstr ""
983+
984+#: html.c:2115
985+msgid "Emoji react..."
986+msgstr ""
987+
988+#: html.c:2609
989+msgid "Emoji reactions: "
990+msgstr ""
M
po/es.po
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: es\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Contenido sensible: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Descripción del contenido sensible"
14
15 msgid "Only for mentioned people: "
16 msgstr "Solo personas mencionadas: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Responder a (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "No enviar. Guardar como borrador"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Borrador:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Adjuntos..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Archivo:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Limpiar este campo para eliminar el adjunto"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Descripción del adjunto"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Encuesta..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Opciones de encuesta (una por línea, hasta 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Una opción"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Opciones múltiples"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Finalizar en 5 minutos"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Finalizar en 1 hora"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Finalizar en 1 día"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Publicar"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Descripción del sitio"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email del Administrador"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Cuenta del Administrador"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d siguiendo, %d seguidores"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privado"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "público"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notificaciones"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "personas"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instancia"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,576 +128,576 @@ msgstr ""
150 "Buscar publicaciones por URL o contenido (expresiones regulares), cuenta "
151 "@usuario@host , ó #etiqueta"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Buscar contenido"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "link verificado"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Ubicación: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nueva Publicación..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "¿En qué estás pensando?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Operaciones..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Seguir"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(por URL o usuario@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Impulsar"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(por URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Me gusta"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Configuración de usuario..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Nombre para mostrar:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Su nombre"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Eliminar avatar"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Imagen de cabecera (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Eliminar imagen de cabecera"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Escriba algo sobre usted aquí..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Siempre mostrar contenido sensible"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Cuenta de email para las notificaciones:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Notificaciones en Telegram (llave del bot e id del chat):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "Notificaciones en ntfy (servidor ntfy y token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr ""
277 "Plazo máximo de conservación de publicaciones en días (0: usar configuración "
278 "del servidor):"
279
280-#: html.c:1602
281+#: html.c:1680
282 msgid "Drop direct messages from people you don't follow"
283 msgstr "Descartar mensajes directos de personas a las que no sigue"
284
285-#: html.c:1611
286+#: html.c:1689
287 msgid "This account is a bot"
288 msgstr "Esta cuenta es un bot"
289
290-#: html.c:1620
291+#: html.c:1698
292 msgid "Auto-boost all mentions to this account"
293 msgstr "Impulsar automáticamente todas las menciones a esta cuenta"
294
295-#: html.c:1629
296+#: html.c:1707
297 msgid "This account is private (posts are not shown through the web)"
298 msgstr "Esta cuenta es privada (las publicaciones no se muestran en la web)"
299
300-#: html.c:1639
301+#: html.c:1717
302 msgid "Collapse top threads by default"
303 msgstr "Contraer hilo de publicaciones por defecto"
304
305-#: html.c:1648
306+#: html.c:1726
307 msgid "Follow requests must be approved"
308 msgstr "Las solicitudes de seguimiento deben ser aprobadas"
309
310-#: html.c:1657
311+#: html.c:1735
312 msgid "Publish follower and following metrics"
313 msgstr "Mostrar cantidad de seguidores y seguidos"
314
315-#: html.c:1659
316+#: html.c:1737
317 msgid "Current location:"
318 msgstr "Ubicación actual:"
319
320-#: html.c:1673
321+#: html.c:1751
322 msgid "Profile metadata (key=value pairs in each line):"
323 msgstr "Metadata del perfil (pares llave=valor en cada línea):"
324
325-#: html.c:1684
326+#: html.c:1762
327 msgid "Web interface language:"
328 msgstr "Idioma de la interfaz Web:"
329
330-#: html.c:1703
331+#: html.c:1781
332 msgid "New password:"
333 msgstr "Nueva contraseña:"
334
335-#: html.c:1710
336+#: html.c:1788
337 msgid "Repeat new password:"
338 msgstr "Repetir nueva contraseña:"
339
340-#: html.c:1720
341+#: html.c:1798
342 msgid "Update user info"
343 msgstr "Actualizar información de usuario"
344
345-#: html.c:1731
346+#: html.c:1809
347 msgid "Followed hashtags..."
348 msgstr "Etiquetas en seguimiento..."
349
350-#: html.c:1733 html.c:1766
351+#: html.c:1811 html.c:1844
352 msgid "One hashtag per line"
353 msgstr "Una etiqueta por línea"
354
355-#: html.c:1755 html.c:1787
356+#: html.c:1833 html.c:1865
357 msgid "Update hashtags"
358 msgstr "Actualizar etiquetas"
359
360-#: html.c:1904
361+#: html.c:1982
362 msgid "Say you like this post"
363 msgstr "Decir que te gusta esta publicación"
364
365-#: html.c:1909 html.c:4775
366+#: html.c:1987 html.c:5219
367 msgid "Unlike"
368 msgstr "No me gusta"
369
370-#: html.c:1909
371+#: html.c:1987
372 msgid "Nah don't like it that much"
373 msgstr "Nah, no me gusta tanto"
374
375-#: html.c:1915 html.c:4912
376+#: html.c:1993 html.c:5356
377 msgid "Unpin"
378 msgstr "Desanclar"
379
380-#: html.c:1915
381+#: html.c:1993
382 msgid "Unpin this post from your timeline"
383 msgstr "Desanclar esta publicación de su línea de tiempo"
384
385-#: html.c:1918 html.c:4907
386+#: html.c:1996 html.c:5351
387 msgid "Pin"
388 msgstr "Anclar"
389
390-#: html.c:1918
391+#: html.c:1996
392 msgid "Pin this post to the top of your timeline"
393 msgstr "Anclar esta publicación al inicio de su línea de tiempo"
394
395-#: html.c:1925
396+#: html.c:2003
397 msgid "Announce this post to your followers"
398 msgstr "Anunciar esta publicación a sus seguidores"
399
400-#: html.c:1930 html.c:4783
401+#: html.c:2008 html.c:5227
402 msgid "Unboost"
403 msgstr "Eliminar impulso"
404
405-#: html.c:1930
406+#: html.c:2008
407 msgid "I regret I boosted this"
408 msgstr "Me arrepiento de haber impulsado esto"
409
410-#: html.c:1936 html.c:4922
411+#: html.c:2014 html.c:5366
412 msgid "Unbookmark"
413 msgstr "Eliminar marcador"
414
415-#: html.c:1936
416+#: html.c:2014
417 msgid "Delete this post from your bookmarks"
418 msgstr "Eliminar marcador de esta publicación"
419
420-#: html.c:1939 html.c:4917
421+#: html.c:2017 html.c:5361
422 msgid "Bookmark"
423 msgstr "Marcador"
424
425-#: html.c:1939
426+#: html.c:2017
427 msgid "Add this post to your bookmarks"
428 msgstr "Agregar esta publicación a mis marcadores"
429
430-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
431+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
432 msgid "Unfollow"
433 msgstr "Dejar de seguir"
434
435-#: html.c:1945 html.c:3387
436+#: html.c:2023 html.c:3763 html.c:4042
437 msgid "Stop following this user's activity"
438 msgstr "Dejar de seguir la actividad de este usuario"
439
440-#: html.c:1949 html.c:3401
441+#: html.c:2027 html.c:3777 html.c:4044
442 msgid "Start following this user's activity"
443 msgstr "Seguir la actividad de este usuario"
444
445-#: html.c:1955 html.c:4860
446+#: html.c:2033 html.c:5304
447 msgid "Unfollow Group"
448 msgstr "Dejar de seguir este Grupo"
449
450-#: html.c:1956
451+#: html.c:2034
452 msgid "Stop following this group or channel"
453 msgstr "Dejar de seguir este grupo o canal"
454
455-#: html.c:1960 html.c:4847
456+#: html.c:2038 html.c:5291
457 msgid "Follow Group"
458 msgstr "Seguir Grupo"
459
460-#: html.c:1961
461+#: html.c:2039
462 msgid "Start following this group or channel"
463 msgstr "Seguir grupo o canal"
464
465-#: html.c:1966 html.c:3423 html.c:4791
466+#: html.c:2044 html.c:3799 html.c:5235
467 msgid "MUTE"
468 msgstr "SILENCIAR"
469
470-#: html.c:1967
471+#: html.c:2045
472 msgid "Block any activity from this user forever"
473 msgstr "Bloquear toda la actividad de este usuario para siempre"
474
475-#: html.c:1972 html.c:3405 html.c:4877
476+#: html.c:2050 html.c:3781 html.c:5321
477 msgid "Delete"
478 msgstr "Eliminar"
479
480-#: html.c:1972
481+#: html.c:2050
482 msgid "Delete this post"
483 msgstr "Eliminar esta publicación"
484
485-#: html.c:1975 html.c:4799
486+#: html.c:2053 html.c:5243
487 msgid "Hide"
488 msgstr "Ocultar"
489
490-#: html.c:1975
491+#: html.c:2053
492 msgid "Hide this post and its children"
493 msgstr "Ocultar esta publicación y sus respuestas"
494
495-#: html.c:2017
496+#: html.c:2095
497 msgid "Edit..."
498 msgstr "Editar..."
499
500-#: html.c:2039
501+#: html.c:2133
502 msgid "Reply..."
503 msgstr "Responder..."
504
505-#: html.c:2090
506+#: html.c:2184
507 msgid "Truncated (too deep)"
508 msgstr "Truncado (demasiado profundo)"
509
510-#: html.c:2108
511+#: html.c:2202
512 msgid "follows you"
513 msgstr "te sigue"
514
515-#: html.c:2182
516+#: html.c:2276
517 msgid "Pinned"
518 msgstr "Anclado"
519
520-#: html.c:2190
521+#: html.c:2284
522 msgid "Bookmarked"
523 msgstr "Marcado"
524
525-#: html.c:2198
526+#: html.c:2292
527 msgid "Poll"
528 msgstr "Encuesta"
529
530-#: html.c:2205
531+#: html.c:2299
532 msgid "Voted"
533 msgstr "Votado"
534
535-#: html.c:2214
536+#: html.c:2308
537 msgid "Event"
538 msgstr "Evento"
539
540-#: html.c:2246 html.c:2275
541+#: html.c:2340 html.c:2369
542 msgid "boosted"
543 msgstr "impulsado"
544
545-#: html.c:2289
546+#: html.c:2383
547 msgid "in reply to"
548 msgstr "en respuesta a"
549
550-#: html.c:2345
551+#: html.c:2439
552 msgid " [SENSITIVE CONTENT]"
553 msgstr " [CONTENIDO SENSIBLE]"
554
555-#: html.c:2512
556+#: html.c:2796
557 msgid "Vote"
558 msgstr "Votar"
559
560-#: html.c:2522
561+#: html.c:2806
562 msgid "Closed"
563 msgstr "Cerrado"
564
565-#: html.c:2547
566+#: html.c:2831
567 msgid "Closes in"
568 msgstr "Cierra en"
569
570-#: html.c:2627
571+#: html.c:2911
572 msgid "Video"
573 msgstr "Video"
574
575-#: html.c:2642
576+#: html.c:2926
577 msgid "Audio"
578 msgstr "Audio"
579
580-#: html.c:2670
581+#: html.c:2954
582 msgid "Attachment"
583 msgstr "Adjunto"
584
585-#: html.c:2684
586+#: html.c:2968
587 msgid "Alt..."
588 msgstr "Alt..."
589
590-#: html.c:2697
591+#: html.c:2981
592 msgid "Source channel or community"
593 msgstr "Canal o comunidad de origen"
594
595-#: html.c:2791
596+#: html.c:3075
597 msgid "Time: "
598 msgstr "Hora: "
599
600-#: html.c:2872
601+#: html.c:3156
602 msgid "Older..."
603 msgstr "Más antiguo..."
604
605-#: html.c:2974
606+#: html.c:3258
607 msgid "about this site"
608 msgstr "acerca de este sitio"
609
610-#: html.c:2976
611+#: html.c:3260
612 msgid "powered by "
613 msgstr "provisto por "
614
615-#: html.c:3041
616+#: html.c:3329
617 msgid "Dismiss"
618 msgstr "Descartar"
619
620-#: html.c:3058
621+#: html.c:3346
622 #, c-format
623 msgid "Timeline for list '%s'"
624 msgstr "Línea de tiempo de la lista '%s'"
625
626-#: html.c:3077 html.c:4169
627+#: html.c:3365 html.c:4589
628 msgid "Pinned posts"
629 msgstr "Publicaciones ancladas"
630
631-#: html.c:3089 html.c:4184
632+#: html.c:3377 html.c:4604
633 msgid "Bookmarked posts"
634 msgstr "Publicaciones marcadas"
635
636-#: html.c:3101 html.c:4199
637+#: html.c:3389 html.c:4619
638 msgid "Post drafts"
639 msgstr "Borradores de publicaciones"
640
641-#: html.c:3177
642+#: html.c:3465
643 msgid "No more unseen posts"
644 msgstr "No quedan publicaciones sin ver"
645
646-#: html.c:3181 html.c:3290
647+#: html.c:3469 html.c:3578
648 msgid "Back to top"
649 msgstr "Volver al inicio"
650
651-#: html.c:3243
652+#: html.c:3531
653 msgid "History"
654 msgstr "Historia"
655
656-#: html.c:3295 html.c:3734
657+#: html.c:3583 html.c:4149
658 msgid "More..."
659 msgstr "Más..."
660
661-#: html.c:3391 html.c:4813
662+#: html.c:3767 html.c:5257
663 msgid "Unlimit"
664 msgstr "Sin límite"
665
666-#: html.c:3392
667+#: html.c:3768
668 msgid "Allow announces (boosts) from this user"
669 msgstr "Permitir anuncios (impulsos) de este usuario"
670
671-#: html.c:3395 html.c:4809
672+#: html.c:3771 html.c:5253
673 msgid "Limit"
674 msgstr "Límite"
675
676-#: html.c:3396
677+#: html.c:3772
678 msgid "Block announces (boosts) from this user"
679 msgstr "Bloquear anuncios (impulsos) de este usuario"
680
681-#: html.c:3405
682+#: html.c:3781
683 msgid "Delete this user"
684 msgstr "Eliminar este usuario"
685
686-#: html.c:3410 html.c:4927
687+#: html.c:3786 html.c:5371
688 msgid "Approve"
689 msgstr "Aprobar"
690
691-#: html.c:3411
692+#: html.c:3787
693 msgid "Approve this follow request"
694 msgstr "Aprobar solicitud de seguimiento"
695
696-#: html.c:3414 html.c:4951
697+#: html.c:3790 html.c:5395
698 msgid "Discard"
699 msgstr "Descartar"
700
701-#: html.c:3414
702+#: html.c:3790
703 msgid "Discard this follow request"
704 msgstr "Descartar solicitud de seguimiento"
705
706-#: html.c:3419 html.c:4795
707+#: html.c:3795 html.c:5239
708 msgid "Unmute"
709 msgstr "Dejar de SILENCIAR"
710
711-#: html.c:3420
712+#: html.c:3796
713 msgid "Stop blocking activities from this user"
714 msgstr "Dejar de bloquear actividad de este usuario"
715
716-#: html.c:3424
717+#: html.c:3800
718 msgid "Block any activity from this user"
719 msgstr "Bloquear toda actividad de este usuario"
720
721-#: html.c:3432
722+#: html.c:3808
723 msgid "Direct Message..."
724 msgstr "Mensaje Directo..."
725
726-#: html.c:3467
727+#: html.c:3843
728 msgid "Pending follow confirmations"
729 msgstr "Confirmaciones de seguimiento pendientes"
730
731-#: html.c:3471
732+#: html.c:3847
733 msgid "People you follow"
734 msgstr "Personas que sigues"
735
736-#: html.c:3472
737+#: html.c:3848
738 msgid "People that follow you"
739 msgstr "Personas que te siguen"
740
741-#: html.c:3511
742+#: html.c:3887
743 msgid "Clear all"
744 msgstr "Limpiar todo"
745
746-#: html.c:3571
747+#: html.c:3951
748 msgid "Mention"
749 msgstr "Mención"
750
751-#: html.c:3574
752+#: html.c:3954
753 msgid "Finished poll"
754 msgstr "Encuesta finalizada"
755
756-#: html.c:3590
757+#: html.c:3979
758 msgid "Follow Request"
759 msgstr "Solicitud de Seguimiento"
760
761-#: html.c:3674
762+#: html.c:4089
763 msgid "Context"
764 msgstr "Contexto"
765
766-#: html.c:3692
767+#: html.c:4107
768 msgid "New"
769 msgstr "Nuevo"
770
771-#: html.c:3707
772+#: html.c:4122
773 msgid "Already seen"
774 msgstr "Ya visto"
775
776-#: html.c:3722
777+#: html.c:4137
778 msgid "None"
779 msgstr "Ninguno"
780
781-#: html.c:3994
782+#: html.c:4414
783 #, c-format
784 msgid "Search results for account %s"
785 msgstr "Buscar resultados para la cuenta %s"
786
787-#: html.c:4001
788+#: html.c:4421
789 #, c-format
790 msgid "Account %s not found"
791 msgstr "No se encontró la cuenta %s"
792
793-#: html.c:4032
794+#: html.c:4452
795 #, c-format
796 msgid "Search results for tag %s"
797 msgstr "Buscar resultados para la etiqueta %s"
798
799-#: html.c:4032
800+#: html.c:4452
801 #, c-format
802 msgid "Nothing found for tag %s"
803 msgstr "No se encontró nada con la etiqueta %s"
804
805-#: html.c:4048
806+#: html.c:4468
807 #, c-format
808 msgid "Search results for '%s' (may be more)"
809 msgstr "Resultados de búsqueda para '%s' (puede haber más)"
810
811-#: html.c:4051
812+#: html.c:4471
813 #, c-format
814 msgid "Search results for '%s'"
815 msgstr "Resultados de búsqueda para '%s'"
816
817-#: html.c:4054
818+#: html.c:4474
819 #, c-format
820 msgid "No more matches for '%s'"
821 msgstr "No hay más coincidencias para '%s'"
822
823-#: html.c:4056
824+#: html.c:4476
825 #, c-format
826 msgid "Nothing found for '%s'"
827 msgstr "No se encontró nada para '%s'"
828
829-#: html.c:4154
830+#: html.c:4574
831 msgid "Showing instance timeline"
832 msgstr "Mostrando línea de tiempo de la instancia"
833
834-#: html.c:4237
835+#: html.c:4657
836 #, c-format
837 msgid "Showing timeline for list '%s'"
838 msgstr "Mostrando línea de tiempo de la lista '%s'"
839
840-#: httpd.c:258
841+#: httpd.c:259
842 #, c-format
843 msgid "Search results for tag #%s"
844 msgstr "Resultado de búsqueda para la etiqueta #%s"
845
846-#: httpd.c:267
847+#: httpd.c:268
848 msgid "Recent posts by users in this instance"
849 msgstr "Publicaciones recientes de los usuarios de esta instancia"
850
851-#: html.c:1764
852+#: html.c:1842
853 msgid "Blocked hashtags..."
854 msgstr "Etiquetas bloqueadas..."
855
856-#: html.c:518
857+#: html.c:574
858 msgid "Optional URL to reply to"
859 msgstr "URL opcional a la que responder"
860
861-#: html.c:695
862+#: html.c:751
863 msgid ""
864 "Option 1...\n"
865 "Option 2...\n"
866@@ -709,91 +709,103 @@ msgstr ""
867 "Opción 3...\n"
868 "..."
869
870-#: html.c:1558
871+#: html.c:1636
872 msgid "Bot API key"
873 msgstr "Clave del API del Bot"
874
875-#: html.c:1564
876+#: html.c:1642
877 msgid "Chat id"
878 msgstr "Identificador de chat"
879
880-#: html.c:1572
881+#: html.c:1650
882 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
883 msgstr "Servidor ntfy - URL completa (example: https://ntfy.sh/YourTopic)"
884
885-#: html.c:1578
886+#: html.c:1656
887 msgid "ntfy token - if needed"
888 msgstr "Token ntft - si es necesario"
889
890-#: html.c:3078
891+#: html.c:3366
892 msgid "pinned"
893 msgstr "Anclados"
894
895-#: html.c:3090
896+#: html.c:3378
897 msgid "bookmarks"
898 msgstr "Marcados"
899
900-#: html.c:3102
901+#: html.c:3390
902 msgid "drafts"
903 msgstr "Borradores"
904
905-#: html.c:584
906+#: html.c:640
907 msgid "Scheduled post..."
908 msgstr "Envío programado..."
909
910-#: html.c:3113 html.c:4214
911+#: html.c:3401 html.c:4634
912 msgid "Scheduled posts"
913 msgstr "Envíos programados"
914
915-#: html.c:3114
916+#: html.c:3402
917 msgid "scheduled posts"
918 msgstr "envíos programados"
919
920-#: html.c:578
921+#: html.c:634
922 #, c-format
923 msgid "Post date and time (timezone: %s):"
924 msgstr "Fecha y hora de publicación (zona horaria: %s):"
925
926-#: html.c:1689
927+#: html.c:1767
928 msgid "Time zone:"
929 msgstr "Zona horaria:"
930
931-#: html.c:559
932+#: html.c:615
933 msgid "Language:"
934 msgstr "Idioma:"
935
936-#: html.c:1580
937+#: html.c:1658
938 msgid "Notify webhook:"
939 msgstr "Webhook de notificación:"
940
941-#: html.c:1586
942+#: html.c:1664
943 msgid "http://example.com/webhook"
944 msgstr ""
945
946-#: html.c:1694
947+#: html.c:1772
948 msgid "Languages you usually post in:"
949 msgstr "Idiomas en los que sueles escribir:"
950
951-#: html.c:1700
952+#: html.c:1778
953 msgid "en fr es de_AT"
954 msgstr ""
955
956-#: html.c:460
957+#: html.c:428
958 msgid "Visibility: "
959 msgstr "Visibilidad: "
960
961-#: html.c:468
962 msgid "Public"
963 msgstr "Público"
964
965-#: html.c:477
966 msgid "Unlisted"
967 msgstr "No listado"
968
969-#: html.c:486
970 msgid "Followers-only"
971 msgstr "Solo seguidores"
972
973-#: html.c:495
974 msgid "Direct Message"
975 msgstr "Mensaje directo"
976+
977+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
978+msgid "EmojiUnreact"
979+msgstr ""
980+
981+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
982+msgid "EmojiReact"
983+msgstr ""
984+
985+#: html.c:2115
986+msgid "Emoji react..."
987+msgstr "Reaccionar con un emoji..."
988+
989+#: html.c:2609
990+msgid "Emoji reactions: "
991+msgstr "Reacciones con emoji: "
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: es_AR\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Contenido sensible: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Descripción del contenido sensible"
14
15 msgid "Only for mentioned people: "
16 msgstr "Solo personas mencionadas: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Responder a (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "No enviar. Guardar como borrador"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Borrador:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Adjuntos..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Archivo:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Limpiar este campo para eliminar el adjunto"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Descripción del adjunto"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Encuesta..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Opciones de encuesta (una por línea, hasta 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Una opción"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Opciones múltiples"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Finalizar en 5 minutos"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Finalizar en 1 hora"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Finalizar en 1 día"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Publicar"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Descripción del sitio"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email del Administrador"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Cuenta del Administrador"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d siguiendo, %d seguidores"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privado"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "público"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notificaciones"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "personas"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instancia"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,576 +128,576 @@ msgstr ""
150 "Buscar publicaciones por URL o contenido (expresiones regulares), cuenta "
151 "@usuario@host , ó #etiqueta"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Buscar contenido"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "link verificado"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Ubicación: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nueva Publicación..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "¿En qué estás pensando?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Operaciones..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Seguir"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(por URL o usuario@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Impulsar"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(por URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Me gusta"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Configuración de usuario..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Nombre para mostrar:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Su nombre"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Eliminar avatar"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Imagen de cabecera (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Eliminar imagen de cabecera"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Escriba algo sobre usted aquí..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Siempre mostrar contenido sensible"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Cuenta de email para las notificaciones:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Notificaciones en Telegram (llave del bot e id del chat):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "Notificaciones en ntfy (servidor ntfy y token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr ""
277 "Plazo máximo de conservación de publicaciones en días (0: usar configuración "
278 "del servidor):"
279
280-#: html.c:1602
281+#: html.c:1680
282 msgid "Drop direct messages from people you don't follow"
283 msgstr "Descartar mensajes directos de personas a las que no sigue"
284
285-#: html.c:1611
286+#: html.c:1689
287 msgid "This account is a bot"
288 msgstr "Esta cuenta es un bot"
289
290-#: html.c:1620
291+#: html.c:1698
292 msgid "Auto-boost all mentions to this account"
293 msgstr "Impulsar automáticamente todas las menciones a esta cuenta"
294
295-#: html.c:1629
296+#: html.c:1707
297 msgid "This account is private (posts are not shown through the web)"
298 msgstr "Esta cuenta es privada (las publicaciones no se muestran en la web)"
299
300-#: html.c:1639
301+#: html.c:1717
302 msgid "Collapse top threads by default"
303 msgstr "Contraer hilo de publicaciones por defecto"
304
305-#: html.c:1648
306+#: html.c:1726
307 msgid "Follow requests must be approved"
308 msgstr "Las solicitudes de seguimiento deben ser aprobadas"
309
310-#: html.c:1657
311+#: html.c:1735
312 msgid "Publish follower and following metrics"
313 msgstr "Mostrar cantidad de seguidores y seguidos"
314
315-#: html.c:1659
316+#: html.c:1737
317 msgid "Current location:"
318 msgstr "Ubicación actual:"
319
320-#: html.c:1673
321+#: html.c:1751
322 msgid "Profile metadata (key=value pairs in each line):"
323 msgstr "Metadata del perfil (pares llave=valor en cada línea):"
324
325-#: html.c:1684
326+#: html.c:1762
327 msgid "Web interface language:"
328 msgstr "Idioma de la interfaz Web:"
329
330-#: html.c:1703
331+#: html.c:1781
332 msgid "New password:"
333 msgstr "Nueva contraseña:"
334
335-#: html.c:1710
336+#: html.c:1788
337 msgid "Repeat new password:"
338 msgstr "Repetir nueva contraseña:"
339
340-#: html.c:1720
341+#: html.c:1798
342 msgid "Update user info"
343 msgstr "Actualizar información de usuario"
344
345-#: html.c:1731
346+#: html.c:1809
347 msgid "Followed hashtags..."
348 msgstr "Etiquetas en seguimiento..."
349
350-#: html.c:1733 html.c:1766
351+#: html.c:1811 html.c:1844
352 msgid "One hashtag per line"
353 msgstr "Una etiqueta por línea"
354
355-#: html.c:1755 html.c:1787
356+#: html.c:1833 html.c:1865
357 msgid "Update hashtags"
358 msgstr "Actualizar etiquetas"
359
360-#: html.c:1904
361+#: html.c:1982
362 msgid "Say you like this post"
363 msgstr "Decir que te gusta esta publicación"
364
365-#: html.c:1909 html.c:4775
366+#: html.c:1987 html.c:5219
367 msgid "Unlike"
368 msgstr "No me gusta"
369
370-#: html.c:1909
371+#: html.c:1987
372 msgid "Nah don't like it that much"
373 msgstr "Nah, no me gusta tanto"
374
375-#: html.c:1915 html.c:4912
376+#: html.c:1993 html.c:5356
377 msgid "Unpin"
378 msgstr "Desanclar"
379
380-#: html.c:1915
381+#: html.c:1993
382 msgid "Unpin this post from your timeline"
383 msgstr "Desanclar esta publicación de su línea de tiempo"
384
385-#: html.c:1918 html.c:4907
386+#: html.c:1996 html.c:5351
387 msgid "Pin"
388 msgstr "Anclar"
389
390-#: html.c:1918
391+#: html.c:1996
392 msgid "Pin this post to the top of your timeline"
393 msgstr "Anclar esta publicación al inicio de su línea de tiempo"
394
395-#: html.c:1925
396+#: html.c:2003
397 msgid "Announce this post to your followers"
398 msgstr "Anunciar esta publicación a sus seguidores"
399
400-#: html.c:1930 html.c:4783
401+#: html.c:2008 html.c:5227
402 msgid "Unboost"
403 msgstr "Eliminar impulso"
404
405-#: html.c:1930
406+#: html.c:2008
407 msgid "I regret I boosted this"
408 msgstr "Me arrepiento de haber impulsado esto"
409
410-#: html.c:1936 html.c:4922
411+#: html.c:2014 html.c:5366
412 msgid "Unbookmark"
413 msgstr "Eliminar marcador"
414
415-#: html.c:1936
416+#: html.c:2014
417 msgid "Delete this post from your bookmarks"
418 msgstr "Eliminar marcador de esta publicación"
419
420-#: html.c:1939 html.c:4917
421+#: html.c:2017 html.c:5361
422 msgid "Bookmark"
423 msgstr "Marcador"
424
425-#: html.c:1939
426+#: html.c:2017
427 msgid "Add this post to your bookmarks"
428 msgstr "Agregar esta publicación a mis marcadores"
429
430-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
431+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
432 msgid "Unfollow"
433 msgstr "Dejar de seguir"
434
435-#: html.c:1945 html.c:3387
436+#: html.c:2023 html.c:3763 html.c:4042
437 msgid "Stop following this user's activity"
438 msgstr "Dejar de seguir la actividad de este usuario"
439
440-#: html.c:1949 html.c:3401
441+#: html.c:2027 html.c:3777 html.c:4044
442 msgid "Start following this user's activity"
443 msgstr "Seguir la actividad de este usuario"
444
445-#: html.c:1955 html.c:4860
446+#: html.c:2033 html.c:5304
447 msgid "Unfollow Group"
448 msgstr "Dejar de seguir este Grupo"
449
450-#: html.c:1956
451+#: html.c:2034
452 msgid "Stop following this group or channel"
453 msgstr "Dejar de seguir este grupo o canal"
454
455-#: html.c:1960 html.c:4847
456+#: html.c:2038 html.c:5291
457 msgid "Follow Group"
458 msgstr "Seguir Grupo"
459
460-#: html.c:1961
461+#: html.c:2039
462 msgid "Start following this group or channel"
463 msgstr "Seguir grupo o canal"
464
465-#: html.c:1966 html.c:3423 html.c:4791
466+#: html.c:2044 html.c:3799 html.c:5235
467 msgid "MUTE"
468 msgstr "SILENCIAR"
469
470-#: html.c:1967
471+#: html.c:2045
472 msgid "Block any activity from this user forever"
473 msgstr "Bloquear toda la actividad de este usuario para siempre"
474
475-#: html.c:1972 html.c:3405 html.c:4877
476+#: html.c:2050 html.c:3781 html.c:5321
477 msgid "Delete"
478 msgstr "Eliminar"
479
480-#: html.c:1972
481+#: html.c:2050
482 msgid "Delete this post"
483 msgstr "Eliminar esta publicación"
484
485-#: html.c:1975 html.c:4799
486+#: html.c:2053 html.c:5243
487 msgid "Hide"
488 msgstr "Ocultar"
489
490-#: html.c:1975
491+#: html.c:2053
492 msgid "Hide this post and its children"
493 msgstr "Ocultar esta publicación y sus respuestas"
494
495-#: html.c:2017
496+#: html.c:2095
497 msgid "Edit..."
498 msgstr "Editar..."
499
500-#: html.c:2039
501+#: html.c:2133
502 msgid "Reply..."
503 msgstr "Responder..."
504
505-#: html.c:2090
506+#: html.c:2184
507 msgid "Truncated (too deep)"
508 msgstr "Truncado (demasiado profundo)"
509
510-#: html.c:2108
511+#: html.c:2202
512 msgid "follows you"
513 msgstr "te sigue"
514
515-#: html.c:2182
516+#: html.c:2276
517 msgid "Pinned"
518 msgstr "Anclado"
519
520-#: html.c:2190
521+#: html.c:2284
522 msgid "Bookmarked"
523 msgstr "Marcado"
524
525-#: html.c:2198
526+#: html.c:2292
527 msgid "Poll"
528 msgstr "Encuesta"
529
530-#: html.c:2205
531+#: html.c:2299
532 msgid "Voted"
533 msgstr "Votado"
534
535-#: html.c:2214
536+#: html.c:2308
537 msgid "Event"
538 msgstr "Evento"
539
540-#: html.c:2246 html.c:2275
541+#: html.c:2340 html.c:2369
542 msgid "boosted"
543 msgstr "impulsado"
544
545-#: html.c:2289
546+#: html.c:2383
547 msgid "in reply to"
548 msgstr "en respuesta a"
549
550-#: html.c:2345
551+#: html.c:2439
552 msgid " [SENSITIVE CONTENT]"
553 msgstr " [CONTENIDO SENSIBLE]"
554
555-#: html.c:2512
556+#: html.c:2796
557 msgid "Vote"
558 msgstr "Votar"
559
560-#: html.c:2522
561+#: html.c:2806
562 msgid "Closed"
563 msgstr "Cerrado"
564
565-#: html.c:2547
566+#: html.c:2831
567 msgid "Closes in"
568 msgstr "Cierra en"
569
570-#: html.c:2627
571+#: html.c:2911
572 msgid "Video"
573 msgstr "Video"
574
575-#: html.c:2642
576+#: html.c:2926
577 msgid "Audio"
578 msgstr "Audio"
579
580-#: html.c:2670
581+#: html.c:2954
582 msgid "Attachment"
583 msgstr "Adjunto"
584
585-#: html.c:2684
586+#: html.c:2968
587 msgid "Alt..."
588 msgstr "Alt..."
589
590-#: html.c:2697
591+#: html.c:2981
592 msgid "Source channel or community"
593 msgstr "Canal o comunidad de origen"
594
595-#: html.c:2791
596+#: html.c:3075
597 msgid "Time: "
598 msgstr "Hora: "
599
600-#: html.c:2872
601+#: html.c:3156
602 msgid "Older..."
603 msgstr "Más antiguo..."
604
605-#: html.c:2974
606+#: html.c:3258
607 msgid "about this site"
608 msgstr "acerca de este sitio"
609
610-#: html.c:2976
611+#: html.c:3260
612 msgid "powered by "
613 msgstr "provisto por "
614
615-#: html.c:3041
616+#: html.c:3329
617 msgid "Dismiss"
618 msgstr "Descartar"
619
620-#: html.c:3058
621+#: html.c:3346
622 #, c-format
623 msgid "Timeline for list '%s'"
624 msgstr "Línea de tiempo de la lista '%s'"
625
626-#: html.c:3077 html.c:4169
627+#: html.c:3365 html.c:4589
628 msgid "Pinned posts"
629 msgstr "Publicaciones ancladas"
630
631-#: html.c:3089 html.c:4184
632+#: html.c:3377 html.c:4604
633 msgid "Bookmarked posts"
634 msgstr "Publicaciones marcadas"
635
636-#: html.c:3101 html.c:4199
637+#: html.c:3389 html.c:4619
638 msgid "Post drafts"
639 msgstr "Borradores de publicaciones"
640
641-#: html.c:3177
642+#: html.c:3465
643 msgid "No more unseen posts"
644 msgstr "No quedan publicaciones sin ver"
645
646-#: html.c:3181 html.c:3290
647+#: html.c:3469 html.c:3578
648 msgid "Back to top"
649 msgstr "Volver al inicio"
650
651-#: html.c:3243
652+#: html.c:3531
653 msgid "History"
654 msgstr "Historia"
655
656-#: html.c:3295 html.c:3734
657+#: html.c:3583 html.c:4149
658 msgid "More..."
659 msgstr "Más..."
660
661-#: html.c:3391 html.c:4813
662+#: html.c:3767 html.c:5257
663 msgid "Unlimit"
664 msgstr "Sin límite"
665
666-#: html.c:3392
667+#: html.c:3768
668 msgid "Allow announces (boosts) from this user"
669 msgstr "Permitir anuncios (impulsos) de este usuario"
670
671-#: html.c:3395 html.c:4809
672+#: html.c:3771 html.c:5253
673 msgid "Limit"
674 msgstr "Límite"
675
676-#: html.c:3396
677+#: html.c:3772
678 msgid "Block announces (boosts) from this user"
679 msgstr "Bloquear anuncios (impulsos) de este usuario"
680
681-#: html.c:3405
682+#: html.c:3781
683 msgid "Delete this user"
684 msgstr "Eliminar este usuario"
685
686-#: html.c:3410 html.c:4927
687+#: html.c:3786 html.c:5371
688 msgid "Approve"
689 msgstr "Aprobar"
690
691-#: html.c:3411
692+#: html.c:3787
693 msgid "Approve this follow request"
694 msgstr "Aprobar solicitud de seguimiento"
695
696-#: html.c:3414 html.c:4951
697+#: html.c:3790 html.c:5395
698 msgid "Discard"
699 msgstr "Descartar"
700
701-#: html.c:3414
702+#: html.c:3790
703 msgid "Discard this follow request"
704 msgstr "Descartar solicitud de seguimiento"
705
706-#: html.c:3419 html.c:4795
707+#: html.c:3795 html.c:5239
708 msgid "Unmute"
709 msgstr "Dejar de SILENCIAR"
710
711-#: html.c:3420
712+#: html.c:3796
713 msgid "Stop blocking activities from this user"
714 msgstr "Dejar de bloquear actividad de este usuario"
715
716-#: html.c:3424
717+#: html.c:3800
718 msgid "Block any activity from this user"
719 msgstr "Bloquear toda actividad de este usuario"
720
721-#: html.c:3432
722+#: html.c:3808
723 msgid "Direct Message..."
724 msgstr "Mensaje Directo..."
725
726-#: html.c:3467
727+#: html.c:3843
728 msgid "Pending follow confirmations"
729 msgstr "Confirmaciones de seguimiento pendientes"
730
731-#: html.c:3471
732+#: html.c:3847
733 msgid "People you follow"
734 msgstr "Personas que sigues"
735
736-#: html.c:3472
737+#: html.c:3848
738 msgid "People that follow you"
739 msgstr "Personas que te siguen"
740
741-#: html.c:3511
742+#: html.c:3887
743 msgid "Clear all"
744 msgstr "Limpiar todo"
745
746-#: html.c:3571
747+#: html.c:3951
748 msgid "Mention"
749 msgstr "Mención"
750
751-#: html.c:3574
752+#: html.c:3954
753 msgid "Finished poll"
754 msgstr "Encuesta finalizada"
755
756-#: html.c:3590
757+#: html.c:3979
758 msgid "Follow Request"
759 msgstr "Solicitud de Seguimiento"
760
761-#: html.c:3674
762+#: html.c:4089
763 msgid "Context"
764 msgstr "Contexto"
765
766-#: html.c:3692
767+#: html.c:4107
768 msgid "New"
769 msgstr "Nuevo"
770
771-#: html.c:3707
772+#: html.c:4122
773 msgid "Already seen"
774 msgstr "Ya visto"
775
776-#: html.c:3722
777+#: html.c:4137
778 msgid "None"
779 msgstr "Ninguno"
780
781-#: html.c:3994
782+#: html.c:4414
783 #, c-format
784 msgid "Search results for account %s"
785 msgstr "Buscar resultados para la cuenta %s"
786
787-#: html.c:4001
788+#: html.c:4421
789 #, c-format
790 msgid "Account %s not found"
791 msgstr "No se encontró la cuenta %s"
792
793-#: html.c:4032
794+#: html.c:4452
795 #, c-format
796 msgid "Search results for tag %s"
797 msgstr "Buscar resultados para la etiqueta %s"
798
799-#: html.c:4032
800+#: html.c:4452
801 #, c-format
802 msgid "Nothing found for tag %s"
803 msgstr "No se encontró nada con la etiqueta %s"
804
805-#: html.c:4048
806+#: html.c:4468
807 #, c-format
808 msgid "Search results for '%s' (may be more)"
809 msgstr "Resultados de búsqueda para '%s' (puede haber más)"
810
811-#: html.c:4051
812+#: html.c:4471
813 #, c-format
814 msgid "Search results for '%s'"
815 msgstr "Resultados de búsqueda para '%s'"
816
817-#: html.c:4054
818+#: html.c:4474
819 #, c-format
820 msgid "No more matches for '%s'"
821 msgstr "No hay más coincidencias para '%s'"
822
823-#: html.c:4056
824+#: html.c:4476
825 #, c-format
826 msgid "Nothing found for '%s'"
827 msgstr "No se encontró nada para '%s'"
828
829-#: html.c:4154
830+#: html.c:4574
831 msgid "Showing instance timeline"
832 msgstr "Mostrando línea de tiempo de la instancia"
833
834-#: html.c:4237
835+#: html.c:4657
836 #, c-format
837 msgid "Showing timeline for list '%s'"
838 msgstr "Mostrando línea de tiempo de la lista '%s'"
839
840-#: httpd.c:258
841+#: httpd.c:259
842 #, c-format
843 msgid "Search results for tag #%s"
844 msgstr "Resultado de búsqueda para la etiqueta #%s"
845
846-#: httpd.c:267
847+#: httpd.c:268
848 msgid "Recent posts by users in this instance"
849 msgstr "Publicaciones recientes de los usuarios de esta instancia"
850
851-#: html.c:1764
852+#: html.c:1842
853 msgid "Blocked hashtags..."
854 msgstr "Etiquetas bloqueadas..."
855
856-#: html.c:518
857+#: html.c:574
858 msgid "Optional URL to reply to"
859 msgstr "URL opcional a la que responder"
860
861-#: html.c:695
862+#: html.c:751
863 msgid ""
864 "Option 1...\n"
865 "Option 2...\n"
866@@ -709,91 +709,103 @@ msgstr ""
867 "Opción 3...\n"
868 "..."
869
870-#: html.c:1558
871+#: html.c:1636
872 msgid "Bot API key"
873 msgstr "Clave del API del Bot"
874
875-#: html.c:1564
876+#: html.c:1642
877 msgid "Chat id"
878 msgstr "Identificador de chat"
879
880-#: html.c:1572
881+#: html.c:1650
882 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
883 msgstr "Servidor ntfy - URL completa (example: https://ntfy.sh/YourTopic)"
884
885-#: html.c:1578
886+#: html.c:1656
887 msgid "ntfy token - if needed"
888 msgstr "Token ntft - si es necesario"
889
890-#: html.c:3078
891+#: html.c:3366
892 msgid "pinned"
893 msgstr "Anclados"
894
895-#: html.c:3090
896+#: html.c:3378
897 msgid "bookmarks"
898 msgstr "Marcados"
899
900-#: html.c:3102
901+#: html.c:3390
902 msgid "drafts"
903 msgstr "Borradores"
904
905-#: html.c:584
906+#: html.c:640
907 msgid "Scheduled post..."
908 msgstr "Envío programado..."
909
910-#: html.c:3113 html.c:4214
911+#: html.c:3401 html.c:4634
912 msgid "Scheduled posts"
913 msgstr "Envíos programados"
914
915-#: html.c:3114
916+#: html.c:3402
917 msgid "scheduled posts"
918 msgstr "envíos programados"
919
920-#: html.c:578
921+#: html.c:634
922 #, c-format
923 msgid "Post date and time (timezone: %s):"
924 msgstr "Fecha y hora de publicación (zona horaria: %s):"
925
926-#: html.c:1689
927+#: html.c:1767
928 msgid "Time zone:"
929 msgstr "Zona horaria:"
930
931-#: html.c:559
932+#: html.c:615
933 msgid "Language:"
934 msgstr "Idioma:"
935
936-#: html.c:1580
937+#: html.c:1658
938 msgid "Notify webhook:"
939 msgstr "Webhook de notificación:"
940
941-#: html.c:1586
942+#: html.c:1664
943 msgid "http://example.com/webhook"
944 msgstr ""
945
946-#: html.c:1694
947+#: html.c:1772
948 msgid "Languages you usually post in:"
949 msgstr "Idiomas en los que sueles escribir:"
950
951-#: html.c:1700
952+#: html.c:1778
953 msgid "en fr es de_AT"
954 msgstr ""
955
956-#: html.c:460
957+#: html.c:428
958 msgid "Visibility: "
959 msgstr "Visibilidad: "
960
961-#: html.c:468
962 msgid "Public"
963 msgstr "Público"
964
965-#: html.c:477
966 msgid "Unlisted"
967 msgstr "No listado"
968
969-#: html.c:486
970 msgid "Followers-only"
971 msgstr "Solo seguidores"
972
973-#: html.c:495
974 msgid "Direct Message"
975 msgstr "Mensaje directo"
976+
977+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
978+msgid "EmojiUnreact"
979+msgstr ""
980+
981+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
982+msgid "EmojiReact"
983+msgstr ""
984+
985+#: html.c:2115
986+msgid "Emoji react..."
987+msgstr "Reaccionar con un emoji..."
988+
989+#: html.c:2609
990+msgid "Emoji reactions: "
991+msgstr "Reacciones con emoji: "
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: es_UY\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Contenido sensible: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Descripción del contenido sensible"
14
15 msgid "Only for mentioned people: "
16 msgstr "Solo personas mencionadas: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Responder a (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "No enviar. Guardar como borrador"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Borrador:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Adjuntos..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Archivo:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Limpiar este campo para eliminar el adjunto"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Descripción del adjunto"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Encuesta..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Opciones de encuesta (una por línea, hasta 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Una opción"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Opciones múltiples"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Finalizar en 5 minutos"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Finalizar en 1 hora"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Finalizar en 1 día"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Publicar"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Descripción del sitio"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email del Administrador"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Cuenta del Administrador"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d siguiendo, %d seguidores"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privado"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "público"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notificaciones"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "personas"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instancia"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,576 +128,576 @@ msgstr ""
150 "Buscar publicaciones por URL o contenido (expresiones regulares), cuenta "
151 "@usuario@host , ó #etiqueta"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Buscar contenido"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "link verificado"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Ubicación: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nueva Publicación..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "¿En qué estás pensando?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Operaciones..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Seguir"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(por URL o usuario@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Impulsar"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(por URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Me gusta"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Configuración de usuario..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Nombre para mostrar:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Su nombre"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Eliminar avatar"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Imagen de cabecera (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Eliminar imagen de cabecera"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Escriba algo sobre usted aquí..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Siempre mostrar contenido sensible"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Cuenta de email para las notificaciones:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Notificaciones en Telegram (llave del bot e id del chat):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "Notificaciones en ntfy (servidor ntfy y token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr ""
277 "Plazo máximo de conservación de publicaciones en días (0: usar configuración "
278 "del servidor):"
279
280-#: html.c:1602
281+#: html.c:1680
282 msgid "Drop direct messages from people you don't follow"
283 msgstr "Descartar mensajes directos de personas a las que no sigue"
284
285-#: html.c:1611
286+#: html.c:1689
287 msgid "This account is a bot"
288 msgstr "Esta cuenta es un bot"
289
290-#: html.c:1620
291+#: html.c:1698
292 msgid "Auto-boost all mentions to this account"
293 msgstr "Impulsar automáticamente todas las menciones a esta cuenta"
294
295-#: html.c:1629
296+#: html.c:1707
297 msgid "This account is private (posts are not shown through the web)"
298 msgstr "Esta cuenta es privada (las publicaciones no se muestran en la web)"
299
300-#: html.c:1639
301+#: html.c:1717
302 msgid "Collapse top threads by default"
303 msgstr "Contraer hilo de publicaciones por defecto"
304
305-#: html.c:1648
306+#: html.c:1726
307 msgid "Follow requests must be approved"
308 msgstr "Las solicitudes de seguimiento deben ser aprobadas"
309
310-#: html.c:1657
311+#: html.c:1735
312 msgid "Publish follower and following metrics"
313 msgstr "Mostrar cantidad de seguidores y seguidos"
314
315-#: html.c:1659
316+#: html.c:1737
317 msgid "Current location:"
318 msgstr "Ubicación actual:"
319
320-#: html.c:1673
321+#: html.c:1751
322 msgid "Profile metadata (key=value pairs in each line):"
323 msgstr "Metadata del perfil (pares llave=valor en cada línea):"
324
325-#: html.c:1684
326+#: html.c:1762
327 msgid "Web interface language:"
328 msgstr "Idioma de la interfaz Web:"
329
330-#: html.c:1703
331+#: html.c:1781
332 msgid "New password:"
333 msgstr "Nueva contraseña:"
334
335-#: html.c:1710
336+#: html.c:1788
337 msgid "Repeat new password:"
338 msgstr "Repetir nueva contraseña:"
339
340-#: html.c:1720
341+#: html.c:1798
342 msgid "Update user info"
343 msgstr "Actualizar información de usuario"
344
345-#: html.c:1731
346+#: html.c:1809
347 msgid "Followed hashtags..."
348 msgstr "Etiquetas en seguimiento..."
349
350-#: html.c:1733 html.c:1766
351+#: html.c:1811 html.c:1844
352 msgid "One hashtag per line"
353 msgstr "Una etiqueta por línea"
354
355-#: html.c:1755 html.c:1787
356+#: html.c:1833 html.c:1865
357 msgid "Update hashtags"
358 msgstr "Actualizar etiquetas"
359
360-#: html.c:1904
361+#: html.c:1982
362 msgid "Say you like this post"
363 msgstr "Decir que te gusta esta publicación"
364
365-#: html.c:1909 html.c:4775
366+#: html.c:1987 html.c:5219
367 msgid "Unlike"
368 msgstr "No me gusta"
369
370-#: html.c:1909
371+#: html.c:1987
372 msgid "Nah don't like it that much"
373 msgstr "Nah, no me gusta tanto"
374
375-#: html.c:1915 html.c:4912
376+#: html.c:1993 html.c:5356
377 msgid "Unpin"
378 msgstr "Desanclar"
379
380-#: html.c:1915
381+#: html.c:1993
382 msgid "Unpin this post from your timeline"
383 msgstr "Desanclar esta publicación de su línea de tiempo"
384
385-#: html.c:1918 html.c:4907
386+#: html.c:1996 html.c:5351
387 msgid "Pin"
388 msgstr "Anclar"
389
390-#: html.c:1918
391+#: html.c:1996
392 msgid "Pin this post to the top of your timeline"
393 msgstr "Anclar esta publicación al inicio de su línea de tiempo"
394
395-#: html.c:1925
396+#: html.c:2003
397 msgid "Announce this post to your followers"
398 msgstr "Anunciar esta publicación a sus seguidores"
399
400-#: html.c:1930 html.c:4783
401+#: html.c:2008 html.c:5227
402 msgid "Unboost"
403 msgstr "Eliminar impulso"
404
405-#: html.c:1930
406+#: html.c:2008
407 msgid "I regret I boosted this"
408 msgstr "Me arrepiento de haber impulsado esto"
409
410-#: html.c:1936 html.c:4922
411+#: html.c:2014 html.c:5366
412 msgid "Unbookmark"
413 msgstr "Eliminar marcador"
414
415-#: html.c:1936
416+#: html.c:2014
417 msgid "Delete this post from your bookmarks"
418 msgstr "Eliminar marcador de esta publicación"
419
420-#: html.c:1939 html.c:4917
421+#: html.c:2017 html.c:5361
422 msgid "Bookmark"
423 msgstr "Marcador"
424
425-#: html.c:1939
426+#: html.c:2017
427 msgid "Add this post to your bookmarks"
428 msgstr "Agregar esta publicación a mis marcadores"
429
430-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
431+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
432 msgid "Unfollow"
433 msgstr "Dejar de seguir"
434
435-#: html.c:1945 html.c:3387
436+#: html.c:2023 html.c:3763 html.c:4042
437 msgid "Stop following this user's activity"
438 msgstr "Dejar de seguir la actividad de este usuario"
439
440-#: html.c:1949 html.c:3401
441+#: html.c:2027 html.c:3777 html.c:4044
442 msgid "Start following this user's activity"
443 msgstr "Seguir la actividad de este usuario"
444
445-#: html.c:1955 html.c:4860
446+#: html.c:2033 html.c:5304
447 msgid "Unfollow Group"
448 msgstr "Dejar de seguir este Grupo"
449
450-#: html.c:1956
451+#: html.c:2034
452 msgid "Stop following this group or channel"
453 msgstr "Dejar de seguir este grupo o canal"
454
455-#: html.c:1960 html.c:4847
456+#: html.c:2038 html.c:5291
457 msgid "Follow Group"
458 msgstr "Seguir Grupo"
459
460-#: html.c:1961
461+#: html.c:2039
462 msgid "Start following this group or channel"
463 msgstr "Seguir grupo o canal"
464
465-#: html.c:1966 html.c:3423 html.c:4791
466+#: html.c:2044 html.c:3799 html.c:5235
467 msgid "MUTE"
468 msgstr "SILENCIAR"
469
470-#: html.c:1967
471+#: html.c:2045
472 msgid "Block any activity from this user forever"
473 msgstr "Bloquear toda la actividad de este usuario para siempre"
474
475-#: html.c:1972 html.c:3405 html.c:4877
476+#: html.c:2050 html.c:3781 html.c:5321
477 msgid "Delete"
478 msgstr "Eliminar"
479
480-#: html.c:1972
481+#: html.c:2050
482 msgid "Delete this post"
483 msgstr "Eliminar esta publicación"
484
485-#: html.c:1975 html.c:4799
486+#: html.c:2053 html.c:5243
487 msgid "Hide"
488 msgstr "Ocultar"
489
490-#: html.c:1975
491+#: html.c:2053
492 msgid "Hide this post and its children"
493 msgstr "Ocultar esta publicación y sus respuestas"
494
495-#: html.c:2017
496+#: html.c:2095
497 msgid "Edit..."
498 msgstr "Editar..."
499
500-#: html.c:2039
501+#: html.c:2133
502 msgid "Reply..."
503 msgstr "Responder..."
504
505-#: html.c:2090
506+#: html.c:2184
507 msgid "Truncated (too deep)"
508 msgstr "Truncado (demasiado profundo)"
509
510-#: html.c:2108
511+#: html.c:2202
512 msgid "follows you"
513 msgstr "te sigue"
514
515-#: html.c:2182
516+#: html.c:2276
517 msgid "Pinned"
518 msgstr "Anclado"
519
520-#: html.c:2190
521+#: html.c:2284
522 msgid "Bookmarked"
523 msgstr "Marcado"
524
525-#: html.c:2198
526+#: html.c:2292
527 msgid "Poll"
528 msgstr "Encuesta"
529
530-#: html.c:2205
531+#: html.c:2299
532 msgid "Voted"
533 msgstr "Votado"
534
535-#: html.c:2214
536+#: html.c:2308
537 msgid "Event"
538 msgstr "Evento"
539
540-#: html.c:2246 html.c:2275
541+#: html.c:2340 html.c:2369
542 msgid "boosted"
543 msgstr "impulsado"
544
545-#: html.c:2289
546+#: html.c:2383
547 msgid "in reply to"
548 msgstr "en respuesta a"
549
550-#: html.c:2345
551+#: html.c:2439
552 msgid " [SENSITIVE CONTENT]"
553 msgstr " [CONTENIDO SENSIBLE]"
554
555-#: html.c:2512
556+#: html.c:2796
557 msgid "Vote"
558 msgstr "Votar"
559
560-#: html.c:2522
561+#: html.c:2806
562 msgid "Closed"
563 msgstr "Cerrado"
564
565-#: html.c:2547
566+#: html.c:2831
567 msgid "Closes in"
568 msgstr "Cierra en"
569
570-#: html.c:2627
571+#: html.c:2911
572 msgid "Video"
573 msgstr "Video"
574
575-#: html.c:2642
576+#: html.c:2926
577 msgid "Audio"
578 msgstr "Audio"
579
580-#: html.c:2670
581+#: html.c:2954
582 msgid "Attachment"
583 msgstr "Adjunto"
584
585-#: html.c:2684
586+#: html.c:2968
587 msgid "Alt..."
588 msgstr "Alt..."
589
590-#: html.c:2697
591+#: html.c:2981
592 msgid "Source channel or community"
593 msgstr "Canal o comunidad de origen"
594
595-#: html.c:2791
596+#: html.c:3075
597 msgid "Time: "
598 msgstr "Hora: "
599
600-#: html.c:2872
601+#: html.c:3156
602 msgid "Older..."
603 msgstr "Más antiguo..."
604
605-#: html.c:2974
606+#: html.c:3258
607 msgid "about this site"
608 msgstr "acerca de este sitio"
609
610-#: html.c:2976
611+#: html.c:3260
612 msgid "powered by "
613 msgstr "provisto por "
614
615-#: html.c:3041
616+#: html.c:3329
617 msgid "Dismiss"
618 msgstr "Descartar"
619
620-#: html.c:3058
621+#: html.c:3346
622 #, c-format
623 msgid "Timeline for list '%s'"
624 msgstr "Línea de tiempo de la lista '%s'"
625
626-#: html.c:3077 html.c:4169
627+#: html.c:3365 html.c:4589
628 msgid "Pinned posts"
629 msgstr "Publicaciones ancladas"
630
631-#: html.c:3089 html.c:4184
632+#: html.c:3377 html.c:4604
633 msgid "Bookmarked posts"
634 msgstr "Publicaciones marcadas"
635
636-#: html.c:3101 html.c:4199
637+#: html.c:3389 html.c:4619
638 msgid "Post drafts"
639 msgstr "Borradores de publicaciones"
640
641-#: html.c:3177
642+#: html.c:3465
643 msgid "No more unseen posts"
644 msgstr "No quedan publicaciones sin ver"
645
646-#: html.c:3181 html.c:3290
647+#: html.c:3469 html.c:3578
648 msgid "Back to top"
649 msgstr "Volver al inicio"
650
651-#: html.c:3243
652+#: html.c:3531
653 msgid "History"
654 msgstr "Historia"
655
656-#: html.c:3295 html.c:3734
657+#: html.c:3583 html.c:4149
658 msgid "More..."
659 msgstr "Más..."
660
661-#: html.c:3391 html.c:4813
662+#: html.c:3767 html.c:5257
663 msgid "Unlimit"
664 msgstr "Sin límite"
665
666-#: html.c:3392
667+#: html.c:3768
668 msgid "Allow announces (boosts) from this user"
669 msgstr "Permitir anuncios (impulsos) de este usuario"
670
671-#: html.c:3395 html.c:4809
672+#: html.c:3771 html.c:5253
673 msgid "Limit"
674 msgstr "Límite"
675
676-#: html.c:3396
677+#: html.c:3772
678 msgid "Block announces (boosts) from this user"
679 msgstr "Bloquear anuncios (impulsos) de este usuario"
680
681-#: html.c:3405
682+#: html.c:3781
683 msgid "Delete this user"
684 msgstr "Eliminar este usuario"
685
686-#: html.c:3410 html.c:4927
687+#: html.c:3786 html.c:5371
688 msgid "Approve"
689 msgstr "Aprobar"
690
691-#: html.c:3411
692+#: html.c:3787
693 msgid "Approve this follow request"
694 msgstr "Aprobar solicitud de seguimiento"
695
696-#: html.c:3414 html.c:4951
697+#: html.c:3790 html.c:5395
698 msgid "Discard"
699 msgstr "Descartar"
700
701-#: html.c:3414
702+#: html.c:3790
703 msgid "Discard this follow request"
704 msgstr "Descartar solicitud de seguimiento"
705
706-#: html.c:3419 html.c:4795
707+#: html.c:3795 html.c:5239
708 msgid "Unmute"
709 msgstr "Dejar de SILENCIAR"
710
711-#: html.c:3420
712+#: html.c:3796
713 msgid "Stop blocking activities from this user"
714 msgstr "Dejar de bloquear actividad de este usuario"
715
716-#: html.c:3424
717+#: html.c:3800
718 msgid "Block any activity from this user"
719 msgstr "Bloquear toda actividad de este usuario"
720
721-#: html.c:3432
722+#: html.c:3808
723 msgid "Direct Message..."
724 msgstr "Mensaje Directo..."
725
726-#: html.c:3467
727+#: html.c:3843
728 msgid "Pending follow confirmations"
729 msgstr "Confirmaciones de seguimiento pendientes"
730
731-#: html.c:3471
732+#: html.c:3847
733 msgid "People you follow"
734 msgstr "Personas que sigues"
735
736-#: html.c:3472
737+#: html.c:3848
738 msgid "People that follow you"
739 msgstr "Personas que te siguen"
740
741-#: html.c:3511
742+#: html.c:3887
743 msgid "Clear all"
744 msgstr "Limpiar todo"
745
746-#: html.c:3571
747+#: html.c:3951
748 msgid "Mention"
749 msgstr "Mención"
750
751-#: html.c:3574
752+#: html.c:3954
753 msgid "Finished poll"
754 msgstr "Encuesta finalizada"
755
756-#: html.c:3590
757+#: html.c:3979
758 msgid "Follow Request"
759 msgstr "Solicitud de Seguimiento"
760
761-#: html.c:3674
762+#: html.c:4089
763 msgid "Context"
764 msgstr "Contexto"
765
766-#: html.c:3692
767+#: html.c:4107
768 msgid "New"
769 msgstr "Nuevo"
770
771-#: html.c:3707
772+#: html.c:4122
773 msgid "Already seen"
774 msgstr "Ya visto"
775
776-#: html.c:3722
777+#: html.c:4137
778 msgid "None"
779 msgstr "Ninguno"
780
781-#: html.c:3994
782+#: html.c:4414
783 #, c-format
784 msgid "Search results for account %s"
785 msgstr "Buscar resultados para la cuenta %s"
786
787-#: html.c:4001
788+#: html.c:4421
789 #, c-format
790 msgid "Account %s not found"
791 msgstr "No se encontró la cuenta %s"
792
793-#: html.c:4032
794+#: html.c:4452
795 #, c-format
796 msgid "Search results for tag %s"
797 msgstr "Buscar resultados para la etiqueta %s"
798
799-#: html.c:4032
800+#: html.c:4452
801 #, c-format
802 msgid "Nothing found for tag %s"
803 msgstr "No se encontró nada con la etiqueta %s"
804
805-#: html.c:4048
806+#: html.c:4468
807 #, c-format
808 msgid "Search results for '%s' (may be more)"
809 msgstr "Resultados de búsqueda para '%s' (puede haber más)"
810
811-#: html.c:4051
812+#: html.c:4471
813 #, c-format
814 msgid "Search results for '%s'"
815 msgstr "Resultados de búsqueda para '%s'"
816
817-#: html.c:4054
818+#: html.c:4474
819 #, c-format
820 msgid "No more matches for '%s'"
821 msgstr "No hay más coincidencias para '%s'"
822
823-#: html.c:4056
824+#: html.c:4476
825 #, c-format
826 msgid "Nothing found for '%s'"
827 msgstr "No se encontró nada para '%s'"
828
829-#: html.c:4154
830+#: html.c:4574
831 msgid "Showing instance timeline"
832 msgstr "Mostrando línea de tiempo de la instancia"
833
834-#: html.c:4237
835+#: html.c:4657
836 #, c-format
837 msgid "Showing timeline for list '%s'"
838 msgstr "Mostrando línea de tiempo de la lista '%s'"
839
840-#: httpd.c:258
841+#: httpd.c:259
842 #, c-format
843 msgid "Search results for tag #%s"
844 msgstr "Resultado de búsqueda para la etiqueta #%s"
845
846-#: httpd.c:267
847+#: httpd.c:268
848 msgid "Recent posts by users in this instance"
849 msgstr "Publicaciones recientes de los usuarios de esta instancia"
850
851-#: html.c:1764
852+#: html.c:1842
853 msgid "Blocked hashtags..."
854 msgstr "Etiquetas bloqueadas..."
855
856-#: html.c:518
857+#: html.c:574
858 msgid "Optional URL to reply to"
859 msgstr "URL opcional a la que responder"
860
861-#: html.c:695
862+#: html.c:751
863 msgid ""
864 "Option 1...\n"
865 "Option 2...\n"
866@@ -709,91 +709,103 @@ msgstr ""
867 "Opción 3...\n"
868 "..."
869
870-#: html.c:1558
871+#: html.c:1636
872 msgid "Bot API key"
873 msgstr "Clave del API del Bot"
874
875-#: html.c:1564
876+#: html.c:1642
877 msgid "Chat id"
878 msgstr "Identificador de chat"
879
880-#: html.c:1572
881+#: html.c:1650
882 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
883 msgstr "Servidor ntfy - URL completa (example: https://ntfy.sh/YourTopic)"
884
885-#: html.c:1578
886+#: html.c:1656
887 msgid "ntfy token - if needed"
888 msgstr "Token ntft - si es necesario"
889
890-#: html.c:3078
891+#: html.c:3366
892 msgid "pinned"
893 msgstr "Anclados"
894
895-#: html.c:3090
896+#: html.c:3378
897 msgid "bookmarks"
898 msgstr "Marcados"
899
900-#: html.c:3102
901+#: html.c:3390
902 msgid "drafts"
903 msgstr "Borradores"
904
905-#: html.c:584
906+#: html.c:640
907 msgid "Scheduled post..."
908 msgstr "Envío programado..."
909
910-#: html.c:3113 html.c:4214
911+#: html.c:3401 html.c:4634
912 msgid "Scheduled posts"
913 msgstr "Envíos programados"
914
915-#: html.c:3114
916+#: html.c:3402
917 msgid "scheduled posts"
918 msgstr "envíos programados"
919
920-#: html.c:578
921+#: html.c:634
922 #, c-format
923 msgid "Post date and time (timezone: %s):"
924 msgstr "Fecha y hora de publicación (zona horaria: %s):"
925
926-#: html.c:1689
927+#: html.c:1767
928 msgid "Time zone:"
929 msgstr "Zona horaria:"
930
931-#: html.c:559
932+#: html.c:615
933 msgid "Language:"
934 msgstr "Idioma:"
935
936-#: html.c:1580
937+#: html.c:1658
938 msgid "Notify webhook:"
939 msgstr "Webhook de notificación:"
940
941-#: html.c:1586
942+#: html.c:1664
943 msgid "http://example.com/webhook"
944 msgstr ""
945
946-#: html.c:1694
947+#: html.c:1772
948 msgid "Languages you usually post in:"
949 msgstr "Idiomas en los que sueles escribir:"
950
951-#: html.c:1700
952+#: html.c:1778
953 msgid "en fr es de_AT"
954 msgstr ""
955
956-#: html.c:460
957+#: html.c:428
958 msgid "Visibility: "
959 msgstr "Visibilidad: "
960
961-#: html.c:468
962 msgid "Public"
963 msgstr "Público"
964
965-#: html.c:477
966 msgid "Unlisted"
967 msgstr "No listado"
968
969-#: html.c:486
970 msgid "Followers-only"
971 msgstr "Solo seguidores"
972
973-#: html.c:495
974 msgid "Direct Message"
975 msgstr "Mensaje directo"
976+
977+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
978+msgid "EmojiUnreact"
979+msgstr ""
980+
981+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
982+msgid "EmojiReact"
983+msgstr ""
984+
985+#: html.c:2115
986+msgid "Emoji react..."
987+msgstr "Reaccionar con un emoji..."
988+
989+#: html.c:2609
990+msgid "Emoji reactions: "
991+msgstr "Reacciones con emoji: "
M
po/fi.po
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: fi\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Arkaluontoista sisältöä: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Arkaluontoisen sisällön kuvaus"
14
15 msgid "Only for mentioned people: "
16 msgstr "Vain mainituille: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Vastaus (osoite): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Älä lähetä, tallenna luonnoksena"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Luonnos:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Liitteet..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Tiedosto:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Tyhjennä kenttä poistaaksesi liiteen"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Liitteen kuvaus"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Kysely..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Kyselyn vaihtoehdot (riveittäin, korkeintaan 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Yksi valinta"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Monta valintaa"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Päättyy viiden minuutin päästä"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Päättyy tunnin päästä"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Päättyy päivän päästä"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Julkaise"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Sivuston kuvaus"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Ylläpitäjän sähköposti"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Ylläpitäjän tili"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "Seuraa %d, %d seuraajaa"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "yksityinen"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "julkinen"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "ilmoitukset"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "ihmiset"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "palvelin"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,574 +128,574 @@ msgstr ""
150 "Etsi julkaisuja osoitteella tai sisällön perusteella, @käyttäjä@palvelin "
151 "tai #tagi"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Sisälöhaku"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "varmistettu linkki"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Sijainti: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Uusi julkaisu..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Mitä on mielessäsi?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Toiminnot..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Seuraa"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(osoite tai käyttäjä@palvelin)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Tehosta"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(osoite)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Tykkää"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Käyttäjäasetukset..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Näytetty nimi:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Nimesi"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Poista nykyinen avatar"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Otsikkokuva: "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Poista nykyinen otsikkokuva"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Kuvaus:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Kirjoita itsestäsi tähän..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Näytä arkaluontoinen sisältö aina"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Sähköposti ilmoituksille:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Telegram-ilmoitukset (botin avain ja chat id):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "nfty-ilmoitukset (ntfy-palvelin ja token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Säilytä julkaisut korkeintaan (päivää, 0: palvelimen asetukset)"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Poista yksityisviestit ihmisiltä, joita et seuraa"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Tämä tili on botti"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Tehosta tilin maininnat automaattisesti"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr "Tili on yksityinen (julkaisuja ei näytetä sivustolla)"
297
298-#: html.c:1639
299+#: html.c:1717
300 msgid "Collapse top threads by default"
301 msgstr "Avaa säikeet automaattisesti"
302
303-#: html.c:1648
304+#: html.c:1726
305 msgid "Follow requests must be approved"
306 msgstr "Vaadi hyväksyntä seurantapyynnöille"
307
308-#: html.c:1657
309+#: html.c:1735
310 msgid "Publish follower and following metrics"
311 msgstr "Julkaise seuraamistilastot"
312
313-#: html.c:1659
314+#: html.c:1737
315 msgid "Current location:"
316 msgstr "Nykyinen sijainti:"
317
318-#: html.c:1673
319+#: html.c:1751
320 msgid "Profile metadata (key=value pairs in each line):"
321 msgstr "Profiilin metadata (avain=arvo, riveittäin):"
322
323-#: html.c:1684
324+#: html.c:1762
325 msgid "Web interface language:"
326 msgstr "Käyttöliitymän kieli:"
327
328-#: html.c:1703
329+#: html.c:1781
330 msgid "New password:"
331 msgstr "Uusi salasana:"
332
333-#: html.c:1710
334+#: html.c:1788
335 msgid "Repeat new password:"
336 msgstr "Toista salasana:"
337
338-#: html.c:1720
339+#: html.c:1798
340 msgid "Update user info"
341 msgstr "Päivitä käyttäjätiedot"
342
343-#: html.c:1731
344+#: html.c:1809
345 msgid "Followed hashtags..."
346 msgstr "Seuratut aihetunnisteet..."
347
348-#: html.c:1733 html.c:1766
349+#: html.c:1811 html.c:1844
350 msgid "One hashtag per line"
351 msgstr "Aihetunnisteet, riveittäin"
352
353-#: html.c:1755 html.c:1787
354+#: html.c:1833 html.c:1865
355 msgid "Update hashtags"
356 msgstr "Päivitä aihetunnisteet"
357
358-#: html.c:1904
359+#: html.c:1982
360 msgid "Say you like this post"
361 msgstr "Tykkää tästä julkaisusta"
362
363-#: html.c:1909 html.c:4775
364+#: html.c:1987 html.c:5219
365 msgid "Unlike"
366 msgstr "Poista tykkäys"
367
368-#: html.c:1909
369+#: html.c:1987
370 msgid "Nah don't like it that much"
371 msgstr "Ei ole omaan makuuni"
372
373-#: html.c:1915 html.c:4912
374+#: html.c:1993 html.c:5356
375 msgid "Unpin"
376 msgstr "Poista kiinnitys"
377
378-#: html.c:1915
379+#: html.c:1993
380 msgid "Unpin this post from your timeline"
381 msgstr "Poista julkaisun kiinnitys aikajanalle"
382
383-#: html.c:1918 html.c:4907
384+#: html.c:1996 html.c:5351
385 msgid "Pin"
386 msgstr "Kiinnitä"
387
388-#: html.c:1918
389+#: html.c:1996
390 msgid "Pin this post to the top of your timeline"
391 msgstr "Kiinnitä julkaisu aikajanasi alkuun"
392
393-#: html.c:1925
394+#: html.c:2003
395 msgid "Announce this post to your followers"
396 msgstr "Ilmoita julkaisusta seuraajillesi"
397
398-#: html.c:1930 html.c:4783
399+#: html.c:2008 html.c:5227
400 msgid "Unboost"
401 msgstr "Poista tehostus"
402
403-#: html.c:1930
404+#: html.c:2008
405 msgid "I regret I boosted this"
406 msgstr "Kadun tehostaneeni tätä"
407
408-#: html.c:1936 html.c:4922
409+#: html.c:2014 html.c:5366
410 msgid "Unbookmark"
411 msgstr "Poista kirjanmerkki"
412
413-#: html.c:1936
414+#: html.c:2014
415 msgid "Delete this post from your bookmarks"
416 msgstr "Poista julkaisu kirjanmerkeistäsi"
417
418-#: html.c:1939 html.c:4917
419+#: html.c:2017 html.c:5361
420 msgid "Bookmark"
421 msgstr "Lisää kirjanmerkki"
422
423-#: html.c:1939
424+#: html.c:2017
425 msgid "Add this post to your bookmarks"
426 msgstr "Lisää julkaisu kirjanmerkkeihisi"
427
428-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
429+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
430 msgid "Unfollow"
431 msgstr "Älä seuraa"
432
433-#: html.c:1945 html.c:3387
434+#: html.c:2023 html.c:3763 html.c:4042
435 msgid "Stop following this user's activity"
436 msgstr "Lakkaa seuraamasta käyttäjän toimintaa"
437
438-#: html.c:1949 html.c:3401
439+#: html.c:2027 html.c:3777 html.c:4044
440 msgid "Start following this user's activity"
441 msgstr "Seuraa käyttäjän toimintaa"
442
443-#: html.c:1955 html.c:4860
444+#: html.c:2033 html.c:5304
445 msgid "Unfollow Group"
446 msgstr "Älä seuraa ryhmää"
447
448-#: html.c:1956
449+#: html.c:2034
450 msgid "Stop following this group or channel"
451 msgstr "Lopeta ryhnän tai kanavan seuraaminen"
452
453-#: html.c:1960 html.c:4847
454+#: html.c:2038 html.c:5291
455 msgid "Follow Group"
456 msgstr "Seuraa ryhmää"
457
458-#: html.c:1961
459+#: html.c:2039
460 msgid "Start following this group or channel"
461 msgstr "Seuraa tätä ryhmää tai kanavaa"
462
463-#: html.c:1966 html.c:3423 html.c:4791
464+#: html.c:2044 html.c:3799 html.c:5235
465 msgid "MUTE"
466 msgstr "VAIMENNA"
467
468-#: html.c:1967
469+#: html.c:2045
470 msgid "Block any activity from this user forever"
471 msgstr "Estä kaikki toiminta tältä käyttäjältä"
472
473-#: html.c:1972 html.c:3405 html.c:4877
474+#: html.c:2050 html.c:3781 html.c:5321
475 msgid "Delete"
476 msgstr "Poista"
477
478-#: html.c:1972
479+#: html.c:2050
480 msgid "Delete this post"
481 msgstr "Poista julkaisu"
482
483-#: html.c:1975 html.c:4799
484+#: html.c:2053 html.c:5243
485 msgid "Hide"
486 msgstr "Piilota"
487
488-#: html.c:1975
489+#: html.c:2053
490 msgid "Hide this post and its children"
491 msgstr "Piilota julkaisu ja vastaukset"
492
493-#: html.c:2017
494+#: html.c:2095
495 msgid "Edit..."
496 msgstr "Muokkaa..."
497
498-#: html.c:2039
499+#: html.c:2133
500 msgid "Reply..."
501 msgstr "Vastaa..."
502
503-#: html.c:2090
504+#: html.c:2184
505 msgid "Truncated (too deep)"
506 msgstr "Katkaistu (liian syvä)"
507
508-#: html.c:2108
509+#: html.c:2202
510 msgid "follows you"
511 msgstr "seuraa sinua"
512
513-#: html.c:2182
514+#: html.c:2276
515 msgid "Pinned"
516 msgstr "Kiinnitetty"
517
518-#: html.c:2190
519+#: html.c:2284
520 msgid "Bookmarked"
521 msgstr "Kirjanmerkitty"
522
523-#: html.c:2198
524+#: html.c:2292
525 msgid "Poll"
526 msgstr "Kysely"
527
528-#: html.c:2205
529+#: html.c:2299
530 msgid "Voted"
531 msgstr "Äänestetty"
532
533-#: html.c:2214
534+#: html.c:2308
535 msgid "Event"
536 msgstr "Tapahtuma"
537
538-#: html.c:2246 html.c:2275
539+#: html.c:2340 html.c:2369
540 msgid "boosted"
541 msgstr "tehostettu"
542
543-#: html.c:2289
544+#: html.c:2383
545 msgid "in reply to"
546 msgstr "vastauksena"
547
548-#: html.c:2345
549+#: html.c:2439
550 msgid " [SENSITIVE CONTENT]"
551 msgstr " [ARKALUONTOISTA SISÄLTÖÄ]"
552
553-#: html.c:2512
554+#: html.c:2796
555 msgid "Vote"
556 msgstr "Äänestä"
557
558-#: html.c:2522
559+#: html.c:2806
560 msgid "Closed"
561 msgstr "Sulkeutunut"
562
563-#: html.c:2547
564+#: html.c:2831
565 msgid "Closes in"
566 msgstr "Sulkeutuu"
567
568-#: html.c:2627
569+#: html.c:2911
570 msgid "Video"
571 msgstr "Video"
572
573-#: html.c:2642
574+#: html.c:2926
575 msgid "Audio"
576 msgstr "Ääni"
577
578-#: html.c:2670
579+#: html.c:2954
580 msgid "Attachment"
581 msgstr "Liite"
582
583-#: html.c:2684
584+#: html.c:2968
585 msgid "Alt..."
586 msgstr "Kuvaus..."
587
588-#: html.c:2697
589+#: html.c:2981
590 msgid "Source channel or community"
591 msgstr "Lähdekanava tai -yhteisö"
592
593-#: html.c:2791
594+#: html.c:3075
595 msgid "Time: "
596 msgstr "Aika: "
597
598-#: html.c:2872
599+#: html.c:3156
600 msgid "Older..."
601 msgstr "Vanhemmat..."
602
603-#: html.c:2974
604+#: html.c:3258
605 msgid "about this site"
606 msgstr "tietoa sivustosta"
607
608-#: html.c:2976
609+#: html.c:3260
610 msgid "powered by "
611 msgstr "moottorina "
612
613-#: html.c:3041
614+#: html.c:3329
615 msgid "Dismiss"
616 msgstr "Kuittaa"
617
618-#: html.c:3058
619+#: html.c:3346
620 #, c-format
621 msgid "Timeline for list '%s'"
622 msgstr "Listan ”%s” aikajana"
623
624-#: html.c:3077 html.c:4169
625+#: html.c:3365 html.c:4589
626 msgid "Pinned posts"
627 msgstr "Kiinnitetyt julkaisut"
628
629-#: html.c:3089 html.c:4184
630+#: html.c:3377 html.c:4604
631 msgid "Bookmarked posts"
632 msgstr "Kirjanmerkit"
633
634-#: html.c:3101 html.c:4199
635+#: html.c:3389 html.c:4619
636 msgid "Post drafts"
637 msgstr "Vedokset"
638
639-#: html.c:3177
640+#: html.c:3465
641 msgid "No more unseen posts"
642 msgstr "Ei lukemattonia julkaisuja"
643
644-#: html.c:3181 html.c:3290
645+#: html.c:3469 html.c:3578
646 msgid "Back to top"
647 msgstr "Takaisin"
648
649-#: html.c:3243
650+#: html.c:3531
651 msgid "History"
652 msgstr "Historia"
653
654-#: html.c:3295 html.c:3734
655+#: html.c:3583 html.c:4149
656 msgid "More..."
657 msgstr "Enemmän..."
658
659-#: html.c:3391 html.c:4813
660+#: html.c:3767 html.c:5257
661 msgid "Unlimit"
662 msgstr "Poista rajoitus"
663
664-#: html.c:3392
665+#: html.c:3768
666 msgid "Allow announces (boosts) from this user"
667 msgstr "Salli tehostukset käyttäjältä"
668
669-#: html.c:3395 html.c:4809
670+#: html.c:3771 html.c:5253
671 msgid "Limit"
672 msgstr "Rajoita"
673
674-#: html.c:3396
675+#: html.c:3772
676 msgid "Block announces (boosts) from this user"
677 msgstr "Kiellö tehostukset käyttäjältä"
678
679-#: html.c:3405
680+#: html.c:3781
681 msgid "Delete this user"
682 msgstr "Poista käyttäjä"
683
684-#: html.c:3410 html.c:4927
685+#: html.c:3786 html.c:5371
686 msgid "Approve"
687 msgstr "Hyväksy"
688
689-#: html.c:3411
690+#: html.c:3787
691 msgid "Approve this follow request"
692 msgstr "Hyväksy seurantapyyntö"
693
694-#: html.c:3414 html.c:4951
695+#: html.c:3790 html.c:5395
696 msgid "Discard"
697 msgstr "Hylkää"
698
699-#: html.c:3414
700+#: html.c:3790
701 msgid "Discard this follow request"
702 msgstr "Hylkää seurantapyyntö"
703
704-#: html.c:3419 html.c:4795
705+#: html.c:3795 html.c:5239
706 msgid "Unmute"
707 msgstr "Poista vaimennus"
708
709-#: html.c:3420
710+#: html.c:3796
711 msgid "Stop blocking activities from this user"
712 msgstr "Salli toiminta käyttäjältä"
713
714-#: html.c:3424
715+#: html.c:3800
716 msgid "Block any activity from this user"
717 msgstr "Estä kaikki toiminnat käyttäjältä"
718
719-#: html.c:3432
720+#: html.c:3808
721 msgid "Direct Message..."
722 msgstr "Yksityisviesti..."
723
724-#: html.c:3467
725+#: html.c:3843
726 msgid "Pending follow confirmations"
727 msgstr "Hyväksymistä odottavat seurantapyynnöt"
728
729-#: html.c:3471
730+#: html.c:3847
731 msgid "People you follow"
732 msgstr "Seuraamasi ihniset"
733
734-#: html.c:3472
735+#: html.c:3848
736 msgid "People that follow you"
737 msgstr "Sinua seuraavat"
738
739-#: html.c:3511
740+#: html.c:3887
741 msgid "Clear all"
742 msgstr "Tyhjennä"
743
744-#: html.c:3571
745+#: html.c:3951
746 msgid "Mention"
747 msgstr "Mainitse"
748
749-#: html.c:3574
750+#: html.c:3954
751 msgid "Finished poll"
752 msgstr "Päättynyt kysely"
753
754-#: html.c:3590
755+#: html.c:3979
756 msgid "Follow Request"
757 msgstr "Seurantapyyntö"
758
759-#: html.c:3674
760+#: html.c:4089
761 msgid "Context"
762 msgstr "Konteksti"
763
764-#: html.c:3692
765+#: html.c:4107
766 msgid "New"
767 msgstr "Uusi"
768
769-#: html.c:3707
770+#: html.c:4122
771 msgid "Already seen"
772 msgstr "Nähty"
773
774-#: html.c:3722
775+#: html.c:4137
776 msgid "None"
777 msgstr "Ei ilmoituksia"
778
779-#: html.c:3994
780+#: html.c:4414
781 #, c-format
782 msgid "Search results for account %s"
783 msgstr "Hakutulokset tilille %s"
784
785-#: html.c:4001
786+#: html.c:4421
787 #, c-format
788 msgid "Account %s not found"
789 msgstr "Tiliä %s ei löytynyt"
790
791-#: html.c:4032
792+#: html.c:4452
793 #, c-format
794 msgid "Search results for tag %s"
795 msgstr "Hakutulokset aihetunnisteelle %s"
796
797-#: html.c:4032
798+#: html.c:4452
799 #, c-format
800 msgid "Nothing found for tag %s"
801 msgstr "Aihetunnisteella %s ei löytynyt tuloksia"
802
803-#: html.c:4048
804+#: html.c:4468
805 #, c-format
806 msgid "Search results for '%s' (may be more)"
807 msgstr "Tulokset haulle ”%s” (mahdollisesti enemmän tuloksia)"
808
809-#: html.c:4051
810+#: html.c:4471
811 #, c-format
812 msgid "Search results for '%s'"
813 msgstr "Tulokset haulle ”%s”"
814
815-#: html.c:4054
816+#: html.c:4474
817 #, c-format
818 msgid "No more matches for '%s'"
819 msgstr "Ei enempää tuloksia haulle ”%s”"
820
821-#: html.c:4056
822+#: html.c:4476
823 #, c-format
824 msgid "Nothing found for '%s'"
825 msgstr "Haulla ”%s” ei löytynyt tuloksia"
826
827-#: html.c:4154
828+#: html.c:4574
829 msgid "Showing instance timeline"
830 msgstr "Palvelimen aikajana"
831
832-#: html.c:4237
833+#: html.c:4657
834 #, c-format
835 msgid "Showing timeline for list '%s'"
836 msgstr "Listan ”%s” aikajana"
837
838-#: httpd.c:258
839+#: httpd.c:259
840 #, c-format
841 msgid "Search results for tag #%s"
842 msgstr "Hakutulokset aihetunnisteelle #%s"
843
844-#: httpd.c:267
845+#: httpd.c:268
846 msgid "Recent posts by users in this instance"
847 msgstr "Viimeaikaisia julkaisuja tällä palvelimella"
848
849-#: html.c:1764
850+#: html.c:1842
851 msgid "Blocked hashtags..."
852 msgstr "Estetyt aihetunnisteet..."
853
854-#: html.c:518
855+#: html.c:574
856 msgid "Optional URL to reply to"
857 msgstr "Vastaus julkaisuun (osoite, valinnainen)"
858
859-#: html.c:695
860+#: html.c:751
861 msgid ""
862 "Option 1...\n"
863 "Option 2...\n"
864@@ -707,94 +707,106 @@ msgstr ""
865 "Vaihtoehto 3...\n"
866 "..."
867
868-#: html.c:1558
869+#: html.c:1636
870 msgid "Bot API key"
871 msgstr "botin API-avain"
872
873-#: html.c:1564
874+#: html.c:1642
875 msgid "Chat id"
876 msgstr "chat id"
877
878-#: html.c:1572
879+#: html.c:1650
880 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
881 msgstr "ntfy-palvelin - täydellinen osoite (esim: https://ntfy.sh/YourTopic)"
882
883-#: html.c:1578
884+#: html.c:1656
885 msgid "ntfy token - if needed"
886 msgstr "ntfy token - tarvittaessa"
887
888-#: html.c:3078
889+#: html.c:3366
890 msgid "pinned"
891 msgstr "kiinnitetyt"
892
893-#: html.c:3090
894+#: html.c:3378
895 msgid "bookmarks"
896 msgstr "kirjanmerkit"
897
898-#: html.c:3102
899+#: html.c:3390
900 msgid "drafts"
901 msgstr "vedokset"
902
903-#: html.c:584
904+#: html.c:640
905 msgid "Scheduled post..."
906 msgstr "Ajastettu julkaisu..."
907
908 msgid "Post date and time:"
909 msgstr "Julkaisuajankohta:"
910
911-#: html.c:3113 html.c:4214
912+#: html.c:3401 html.c:4634
913 msgid "Scheduled posts"
914 msgstr "Ajastetut julkaisut"
915
916-#: html.c:3114
917+#: html.c:3402
918 msgid "scheduled posts"
919 msgstr "ajastetut julkaisut"
920
921-#: html.c:578
922+#: html.c:634
923 #, c-format
924 msgid "Post date and time (timezone: %s):"
925 msgstr "Julkaisuajankohta (aikavyöhyke: %s):"
926
927-#: html.c:1689
928+#: html.c:1767
929 msgid "Time zone:"
930 msgstr "Aikavyöhyke: "
931
932-#: html.c:559
933+#: html.c:615
934 msgid "Language:"
935 msgstr ""
936
937-#: html.c:1580
938+#: html.c:1658
939 msgid "Notify webhook:"
940 msgstr ""
941
942-#: html.c:1586
943+#: html.c:1664
944 msgid "http://example.com/webhook"
945 msgstr ""
946
947-#: html.c:1694
948+#: html.c:1772
949 msgid "Languages you usually post in:"
950 msgstr ""
951
952-#: html.c:1700
953+#: html.c:1778
954 msgid "en fr es de_AT"
955 msgstr ""
956
957-#: html.c:460
958+#: html.c:428
959 msgid "Visibility: "
960 msgstr ""
961
962-#: html.c:468
963 msgid "Public"
964 msgstr ""
965
966-#: html.c:477
967 msgid "Unlisted"
968 msgstr ""
969
970-#: html.c:486
971 msgid "Followers-only"
972 msgstr ""
973
974-#: html.c:495
975 msgid "Direct Message"
976 msgstr ""
977+
978+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
979+msgid "EmojiUnreact"
980+msgstr ""
981+
982+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
983+msgid "EmojiReact"
984+msgstr ""
985+
986+#: html.c:2115
987+msgid "Emoji react..."
988+msgstr ""
989+
990+#: html.c:2609
991+msgid "Emoji reactions: "
992+msgstr ""
M
po/fr.po
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: fr\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Contenu sensible :"
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Description du contenu sensible :"
14
15 msgid "Only for mentioned people: "
16 msgstr "Seulement pour les personnes mentionnées :"
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Répondre à (URL) :"
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Ne pas envoyer, mais sauvegarder en tant que brouillon"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Brouillon :"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Pièces jointes…"
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Fichier :"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Nettoyer ce champs pour supprimer la pièce jointe"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Description de la pièce jointe"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Sondage…"
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Options du sondage (une par ligne, jusqu'à 8) :"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Un seul choix"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Choix multiples"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Se termine dans 5 minutes"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Se termine dans 1 heure"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Se termine dans 1 jour"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Envoyer"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Description du site"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email de l'admin"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Compte de l'admin"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d abonnements, %d personnes abonnées"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privé"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "public"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notifications"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "personnes"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instance"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,575 +128,575 @@ msgstr ""
150 "Chercher les messages par URL ou contenu (expression régulière), comptes "
151 "@pseudo@hôte, ou #tag"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Recherche de contenu"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "Lien vérifié"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Emplacement : "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nouveau message…"
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Qu'avez-vous en tête ?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Opérations…"
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Suivre"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(par URL ou pseudo@hôte)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Repartager"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(par URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Aime"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Paramètre du compte…"
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Nom affiché :"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Votre nom"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar : "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Supprimer l'avatar actuel"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Image d'entête (bannière) : "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Supprimer l'image d'entête actuelle"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Description :"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Décrivez-vous ici…"
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Toujours afficher le contenu sensible"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Adresse email pour les notifications :"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Notifications Telegram (clé de bot et ID de discussion) :"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "notifications ntfy (serveur et jeton ntfy) :"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr ""
277 "Nombre de jours maximum de rétention des messages (0 : réglages du serveur) :"
278
279-#: html.c:1602
280+#: html.c:1680
281 msgid "Drop direct messages from people you don't follow"
282 msgstr "Rejeter les messages directs des personnes que vous ne suivez pas"
283
284-#: html.c:1611
285+#: html.c:1689
286 msgid "This account is a bot"
287 msgstr "Ce compte est un bot"
288
289-#: html.c:1620
290+#: html.c:1698
291 msgid "Auto-boost all mentions to this account"
292 msgstr "Auto-repartage de toutes les mentions de ce compte"
293
294-#: html.c:1629
295+#: html.c:1707
296 msgid "This account is private (posts are not shown through the web)"
297 msgstr "Ce compte est privé (les messages ne sont pas affiché sur le web)"
298
299-#: html.c:1639
300+#: html.c:1717
301 msgid "Collapse top threads by default"
302 msgstr "replier les fils de discussion principaux par défaut"
303
304-#: html.c:1648
305+#: html.c:1726
306 msgid "Follow requests must be approved"
307 msgstr "Les demande de suivi doivent être approuvées"
308
309-#: html.c:1657
310+#: html.c:1735
311 msgid "Publish follower and following metrics"
312 msgstr "Publier les statistiques d'abonnements"
313
314-#: html.c:1659
315+#: html.c:1737
316 msgid "Current location:"
317 msgstr "Localisation actuelle :"
318
319-#: html.c:1673
320+#: html.c:1751
321 msgid "Profile metadata (key=value pairs in each line):"
322 msgstr "Métadonnées du profile (paires clé=valeur à chaque ligne) :"
323
324-#: html.c:1684
325+#: html.c:1762
326 msgid "Web interface language:"
327 msgstr "Langue de l'interface web :"
328
329-#: html.c:1703
330+#: html.c:1781
331 msgid "New password:"
332 msgstr "Nouveau mot de passe :"
333
334-#: html.c:1710
335+#: html.c:1788
336 msgid "Repeat new password:"
337 msgstr "Répétez le nouveau mot de passe :"
338
339-#: html.c:1720
340+#: html.c:1798
341 msgid "Update user info"
342 msgstr "Mettre à jour les infos du compte"
343
344-#: html.c:1731
345+#: html.c:1809
346 msgid "Followed hashtags..."
347 msgstr "hashtags suivis…"
348
349-#: html.c:1733 html.c:1766
350+#: html.c:1811 html.c:1844
351 msgid "One hashtag per line"
352 msgstr "Un hashtag par ligne"
353
354-#: html.c:1755 html.c:1787
355+#: html.c:1833 html.c:1865
356 msgid "Update hashtags"
357 msgstr "Mettre à jour les hashtags"
358
359-#: html.c:1904
360+#: html.c:1982
361 msgid "Say you like this post"
362 msgstr "Dire que vous aimez ce message"
363
364-#: html.c:1909 html.c:4775
365+#: html.c:1987 html.c:5219
366 msgid "Unlike"
367 msgstr "N'aime plus"
368
369-#: html.c:1909
370+#: html.c:1987
371 msgid "Nah don't like it that much"
372 msgstr "Nan, j'aime pas tant que ça"
373
374-#: html.c:1915 html.c:4912
375+#: html.c:1993 html.c:5356
376 msgid "Unpin"
377 msgstr "Dés-épingler"
378
379-#: html.c:1915
380+#: html.c:1993
381 msgid "Unpin this post from your timeline"
382 msgstr "Dés-épingler ce message de votre chronologie"
383
384-#: html.c:1918 html.c:4907
385+#: html.c:1996 html.c:5351
386 msgid "Pin"
387 msgstr "Épingler"
388
389-#: html.c:1918
390+#: html.c:1996
391 msgid "Pin this post to the top of your timeline"
392 msgstr "Épingler ce message en haut de votre chronologie"
393
394-#: html.c:1925
395+#: html.c:2003
396 msgid "Announce this post to your followers"
397 msgstr "Annoncer ce message aux personnes abonnées"
398
399-#: html.c:1930 html.c:4783
400+#: html.c:2008 html.c:5227
401 msgid "Unboost"
402 msgstr "Dé-repartager"
403
404-#: html.c:1930
405+#: html.c:2008
406 msgid "I regret I boosted this"
407 msgstr "Je regrette d'avoir repartagé ceci"
408
409-#: html.c:1936 html.c:4922
410+#: html.c:2014 html.c:5366
411 msgid "Unbookmark"
412 msgstr "Retirer le signet"
413
414-#: html.c:1936
415+#: html.c:2014
416 msgid "Delete this post from your bookmarks"
417 msgstr "Supprime ce message de vos signets"
418
419-#: html.c:1939 html.c:4917
420+#: html.c:2017 html.c:5361
421 msgid "Bookmark"
422 msgstr "Signet"
423
424-#: html.c:1939
425+#: html.c:2017
426 msgid "Add this post to your bookmarks"
427 msgstr "Ajouter ce message à vos signets"
428
429-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
430+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
431 msgid "Unfollow"
432 msgstr "Ne plus suivre"
433
434-#: html.c:1945 html.c:3387
435+#: html.c:2023 html.c:3763 html.c:4042
436 msgid "Stop following this user's activity"
437 msgstr "Arrêter de suivre les activités de cette personne"
438
439-#: html.c:1949 html.c:3401
440+#: html.c:2027 html.c:3777 html.c:4044
441 msgid "Start following this user's activity"
442 msgstr "Commencer à suivre les activité de cette personne"
443
444-#: html.c:1955 html.c:4860
445+#: html.c:2033 html.c:5304
446 msgid "Unfollow Group"
447 msgstr "Ne plus suivre le Groupe"
448
449-#: html.c:1956
450+#: html.c:2034
451 msgid "Stop following this group or channel"
452 msgstr "Arrêter de suivre ce groupe ou canal"
453
454-#: html.c:1960 html.c:4847
455+#: html.c:2038 html.c:5291
456 msgid "Follow Group"
457 msgstr "Suivre le Groupe"
458
459-#: html.c:1961
460+#: html.c:2039
461 msgid "Start following this group or channel"
462 msgstr "Commencer à suivre ce groupe ou canal"
463
464-#: html.c:1966 html.c:3423 html.c:4791
465+#: html.c:2044 html.c:3799 html.c:5235
466 msgid "MUTE"
467 msgstr "SOURDINE"
468
469-#: html.c:1967
470+#: html.c:2045
471 msgid "Block any activity from this user forever"
472 msgstr "Bloquer toute activité de cette personne à jamais"
473
474-#: html.c:1972 html.c:3405 html.c:4877
475+#: html.c:2050 html.c:3781 html.c:5321
476 msgid "Delete"
477 msgstr "Supprimer"
478
479-#: html.c:1972
480+#: html.c:2050
481 msgid "Delete this post"
482 msgstr "Supprimer ce message"
483
484-#: html.c:1975 html.c:4799
485+#: html.c:2053 html.c:5243
486 msgid "Hide"
487 msgstr "Cacher"
488
489-#: html.c:1975
490+#: html.c:2053
491 msgid "Hide this post and its children"
492 msgstr "Cacher ce message et ses réponses"
493
494-#: html.c:2017
495+#: html.c:2095
496 msgid "Edit..."
497 msgstr "Modifier…"
498
499-#: html.c:2039
500+#: html.c:2133
501 msgid "Reply..."
502 msgstr "Répondre…"
503
504-#: html.c:2090
505+#: html.c:2184
506 msgid "Truncated (too deep)"
507 msgstr "Tronqué (trop profond)"
508
509-#: html.c:2108
510+#: html.c:2202
511 msgid "follows you"
512 msgstr "vous suit"
513
514-#: html.c:2182
515+#: html.c:2276
516 msgid "Pinned"
517 msgstr "Épinglé"
518
519-#: html.c:2190
520+#: html.c:2284
521 msgid "Bookmarked"
522 msgstr "Ajouté aux signets"
523
524-#: html.c:2198
525+#: html.c:2292
526 msgid "Poll"
527 msgstr "Sondage"
528
529-#: html.c:2205
530+#: html.c:2299
531 msgid "Voted"
532 msgstr "Voté"
533
534-#: html.c:2214
535+#: html.c:2308
536 msgid "Event"
537 msgstr "Événement"
538
539-#: html.c:2246 html.c:2275
540+#: html.c:2340 html.c:2369
541 msgid "boosted"
542 msgstr "Repartagé"
543
544-#: html.c:2289
545+#: html.c:2383
546 msgid "in reply to"
547 msgstr "En réponse à"
548
549-#: html.c:2345
550+#: html.c:2439
551 msgid " [SENSITIVE CONTENT]"
552 msgstr " [CONTENU SENSIBLE]"
553
554-#: html.c:2512
555+#: html.c:2796
556 msgid "Vote"
557 msgstr "Vote"
558
559-#: html.c:2522
560+#: html.c:2806
561 msgid "Closed"
562 msgstr "Terminé"
563
564-#: html.c:2547
565+#: html.c:2831
566 msgid "Closes in"
567 msgstr "Termine dans"
568
569-#: html.c:2627
570+#: html.c:2911
571 msgid "Video"
572 msgstr "Vidéo"
573
574-#: html.c:2642
575+#: html.c:2926
576 msgid "Audio"
577 msgstr "Audio"
578
579-#: html.c:2670
580+#: html.c:2954
581 msgid "Attachment"
582 msgstr "Pièce jointe"
583
584-#: html.c:2684
585+#: html.c:2968
586 msgid "Alt..."
587 msgstr "Alt…"
588
589-#: html.c:2697
590+#: html.c:2981
591 msgid "Source channel or community"
592 msgstr "Canal ou communauté source"
593
594-#: html.c:2791
595+#: html.c:3075
596 msgid "Time: "
597 msgstr "Date : "
598
599-#: html.c:2872
600+#: html.c:3156
601 msgid "Older..."
602 msgstr "Plus anciens…"
603
604-#: html.c:2974
605+#: html.c:3258
606 msgid "about this site"
607 msgstr "à propos de ce site"
608
609-#: html.c:2976
610+#: html.c:3260
611 msgid "powered by "
612 msgstr "fonctionne grace à "
613
614-#: html.c:3041
615+#: html.c:3329
616 msgid "Dismiss"
617 msgstr "Rejeter"
618
619-#: html.c:3058
620+#: html.c:3346
621 #, c-format
622 msgid "Timeline for list '%s'"
623 msgstr "Chronologie pour la liste '%s'"
624
625-#: html.c:3077 html.c:4169
626+#: html.c:3365 html.c:4589
627 msgid "Pinned posts"
628 msgstr "Messages épinglés"
629
630-#: html.c:3089 html.c:4184
631+#: html.c:3377 html.c:4604
632 msgid "Bookmarked posts"
633 msgstr "Messages en signets"
634
635-#: html.c:3101 html.c:4199
636+#: html.c:3389 html.c:4619
637 msgid "Post drafts"
638 msgstr "Brouillons de messages"
639
640-#: html.c:3177
641+#: html.c:3465
642 msgid "No more unseen posts"
643 msgstr "Pas d'avantage de message non vus"
644
645-#: html.c:3181 html.c:3290
646+#: html.c:3469 html.c:3578
647 msgid "Back to top"
648 msgstr "Retourner en haut"
649
650-#: html.c:3243
651+#: html.c:3531
652 msgid "History"
653 msgstr "Historique"
654
655-#: html.c:3295 html.c:3734
656+#: html.c:3583 html.c:4149
657 msgid "More..."
658 msgstr "Plus…"
659
660-#: html.c:3391 html.c:4813
661+#: html.c:3767 html.c:5257
662 msgid "Unlimit"
663 msgstr "Illimité"
664
665-#: html.c:3392
666+#: html.c:3768
667 msgid "Allow announces (boosts) from this user"
668 msgstr "Permettre les annonces (repartages) par cette personne"
669
670-#: html.c:3395 html.c:4809
671+#: html.c:3771 html.c:5253
672 msgid "Limit"
673 msgstr "Limite"
674
675-#: html.c:3396
676+#: html.c:3772
677 msgid "Block announces (boosts) from this user"
678 msgstr "Bloquer les annonces (repartages) par cette personne"
679
680-#: html.c:3405
681+#: html.c:3781
682 msgid "Delete this user"
683 msgstr "Supprimer cette personne"
684
685-#: html.c:3410 html.c:4927
686+#: html.c:3786 html.c:5371
687 msgid "Approve"
688 msgstr "Approuver"
689
690-#: html.c:3411
691+#: html.c:3787
692 msgid "Approve this follow request"
693 msgstr "Approuver cette demande de suivi"
694
695-#: html.c:3414 html.c:4951
696+#: html.c:3790 html.c:5395
697 msgid "Discard"
698 msgstr "Rejeter"
699
700-#: html.c:3414
701+#: html.c:3790
702 msgid "Discard this follow request"
703 msgstr "Rejeter la demande suivante"
704
705-#: html.c:3419 html.c:4795
706+#: html.c:3795 html.c:5239
707 msgid "Unmute"
708 msgstr "Ne plus taire"
709
710-#: html.c:3420
711+#: html.c:3796
712 msgid "Stop blocking activities from this user"
713 msgstr "Arrêter de bloquer les activités de cette personne"
714
715-#: html.c:3424
716+#: html.c:3800
717 msgid "Block any activity from this user"
718 msgstr "Bloque toutes les activités de cette personne"
719
720-#: html.c:3432
721+#: html.c:3808
722 msgid "Direct Message..."
723 msgstr "Message direct…"
724
725-#: html.c:3467
726+#: html.c:3843
727 msgid "Pending follow confirmations"
728 msgstr "Confirmation de suivi en attente"
729
730-#: html.c:3471
731+#: html.c:3847
732 msgid "People you follow"
733 msgstr "Personnes que vous suivez"
734
735-#: html.c:3472
736+#: html.c:3848
737 msgid "People that follow you"
738 msgstr "Personnes qui vous suivent"
739
740-#: html.c:3511
741+#: html.c:3887
742 msgid "Clear all"
743 msgstr "Tout nettoyer"
744
745-#: html.c:3571
746+#: html.c:3951
747 msgid "Mention"
748 msgstr "Mention"
749
750-#: html.c:3574
751+#: html.c:3954
752 msgid "Finished poll"
753 msgstr "Sondage terminé"
754
755-#: html.c:3590
756+#: html.c:3979
757 msgid "Follow Request"
758 msgstr "Requête de suivi"
759
760-#: html.c:3674
761+#: html.c:4089
762 msgid "Context"
763 msgstr "Contexte"
764
765-#: html.c:3692
766+#: html.c:4107
767 msgid "New"
768 msgstr "Nouveau"
769
770-#: html.c:3707
771+#: html.c:4122
772 msgid "Already seen"
773 msgstr "Déjà vu"
774
775-#: html.c:3722
776+#: html.c:4137
777 msgid "None"
778 msgstr "Aucun"
779
780-#: html.c:3994
781+#: html.c:4414
782 #, c-format
783 msgid "Search results for account %s"
784 msgstr "Résultats de recherche pour le compte %s"
785
786-#: html.c:4001
787+#: html.c:4421
788 #, c-format
789 msgid "Account %s not found"
790 msgstr "Compte %s non trouvé"
791
792-#: html.c:4032
793+#: html.c:4452
794 #, c-format
795 msgid "Search results for tag %s"
796 msgstr "Résultats de recherche pour le tag %s"
797
798-#: html.c:4032
799+#: html.c:4452
800 #, c-format
801 msgid "Nothing found for tag %s"
802 msgstr "Rien n'a été trouvé pour le tag %s"
803
804-#: html.c:4048
805+#: html.c:4468
806 #, c-format
807 msgid "Search results for '%s' (may be more)"
808 msgstr "Résultats de recherche pour '%s' (il pourrait y en avoir davantage)"
809
810-#: html.c:4051
811+#: html.c:4471
812 #, c-format
813 msgid "Search results for '%s'"
814 msgstr "Résultats de recherche pour '%s'"
815
816-#: html.c:4054
817+#: html.c:4474
818 #, c-format
819 msgid "No more matches for '%s'"
820 msgstr "Pas davantage de résultats pour '%s'"
821
822-#: html.c:4056
823+#: html.c:4476
824 #, c-format
825 msgid "Nothing found for '%s'"
826 msgstr "Rien n'a été trouvé pour '%s'"
827
828-#: html.c:4154
829+#: html.c:4574
830 msgid "Showing instance timeline"
831 msgstr "Montrer la chronologie de l'instance"
832
833-#: html.c:4237
834+#: html.c:4657
835 #, c-format
836 msgid "Showing timeline for list '%s'"
837 msgstr "Montrer le chronologie pour la liste '%s'"
838
839-#: httpd.c:258
840+#: httpd.c:259
841 #, c-format
842 msgid "Search results for tag #%s"
843 msgstr "Résultats de recherche pour le tag #%s"
844
845-#: httpd.c:267
846+#: httpd.c:268
847 msgid "Recent posts by users in this instance"
848 msgstr "Messages récents des internautes de cette instance"
849
850-#: html.c:1764
851+#: html.c:1842
852 msgid "Blocked hashtags..."
853 msgstr "Hashtags bloqués…"
854
855-#: html.c:518
856+#: html.c:574
857 msgid "Optional URL to reply to"
858 msgstr "URL optionnelle pour répondre à"
859
860-#: html.c:695
861+#: html.c:751
862 msgid ""
863 "Option 1...\n"
864 "Option 2...\n"
865@@ -708,94 +708,106 @@ msgstr ""
866 "Option 3…\n"
867 "…"
868
869-#: html.c:1558
870+#: html.c:1636
871 msgid "Bot API key"
872 msgstr "Clé API de bot"
873
874-#: html.c:1564
875+#: html.c:1642
876 msgid "Chat id"
877 msgstr "Identifiant du salon"
878
879-#: html.c:1572
880+#: html.c:1650
881 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
882 msgstr "serveur ntfy – adresse complète (ex : https://ntfy.sh/VotreSujet)"
883
884-#: html.c:1578
885+#: html.c:1656
886 msgid "ntfy token - if needed"
887 msgstr "jeton ntfy – si nécessaire"
888
889-#: html.c:3078
890+#: html.c:3366
891 msgid "pinned"
892 msgstr "épinglé"
893
894-#: html.c:3090
895+#: html.c:3378
896 msgid "bookmarks"
897 msgstr "signets"
898
899-#: html.c:3102
900+#: html.c:3390
901 msgid "drafts"
902 msgstr "brouillons"
903
904-#: html.c:584
905+#: html.c:640
906 msgid "Scheduled post..."
907 msgstr "Publication planifiée…"
908
909 msgid "Post date and time:"
910 msgstr "Date et heure de publication :"
911
912-#: html.c:3113 html.c:4214
913+#: html.c:3401 html.c:4634
914 msgid "Scheduled posts"
915 msgstr "Publications planifiées"
916
917-#: html.c:3114
918+#: html.c:3402
919 msgid "scheduled posts"
920 msgstr "publications planifiées"
921
922-#: html.c:578
923+#: html.c:634
924 #, c-format
925 msgid "Post date and time (timezone: %s):"
926 msgstr "Date et heure de publication (fuseau horaire : %s) :"
927
928-#: html.c:1689
929+#: html.c:1767
930 msgid "Time zone:"
931 msgstr "Fuseau horaire :"
932
933-#: html.c:559
934+#: html.c:615
935 msgid "Language:"
936 msgstr ""
937
938-#: html.c:1580
939+#: html.c:1658
940 msgid "Notify webhook:"
941 msgstr ""
942
943-#: html.c:1586
944+#: html.c:1664
945 msgid "http://example.com/webhook"
946 msgstr ""
947
948-#: html.c:1694
949+#: html.c:1772
950 msgid "Languages you usually post in:"
951 msgstr ""
952
953-#: html.c:1700
954+#: html.c:1778
955 msgid "en fr es de_AT"
956 msgstr ""
957
958-#: html.c:460
959+#: html.c:428
960 msgid "Visibility: "
961 msgstr ""
962
963-#: html.c:468
964 msgid "Public"
965 msgstr ""
966
967-#: html.c:477
968 msgid "Unlisted"
969 msgstr ""
970
971-#: html.c:486
972 msgid "Followers-only"
973 msgstr ""
974
975-#: html.c:495
976 msgid "Direct Message"
977 msgstr ""
978+
979+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
980+msgid "EmojiUnreact"
981+msgstr ""
982+
983+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
984+msgid "EmojiReact"
985+msgstr ""
986+
987+#: html.c:2115
988+msgid "Emoji react..."
989+msgstr ""
990+
991+#: html.c:2609
992+msgid "Emoji reactions: "
993+msgstr ""
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: fy_NL\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Gefoelige ynhâld: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Beskriuwing fan gefoelige ynhâld"
14
15 msgid "Only for mentioned people: "
16 msgstr "Allinnich foar neamde personen: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Antwurd op (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Net ferstjoere, mar bewarje as konsept"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Konsept:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Bylagen..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Bestân:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Fjild leech meitsje om de bylage fuort te smiten"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Beskriuwing fan bylage"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Peiling..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Peilingopsjes (ien per rigel, oant 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Ien keuze"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Mear keuzes"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Einiget oer 5 minuten"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Einiget oer 1 oere"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Einiget oer 1 dei"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Berjocht"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Beskriuwing fan de side"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Admin e-mail"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Admin akkount"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d folgjend, %d folgers"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privé"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "publik"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notifikaasjes"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "minsken"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instantsje"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,575 +128,575 @@ msgstr ""
150 "Sykje berjochten op URL of ynh??ld (reguliere ekspresje), @brûker@host "
151 "akkounts, of #tag"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Ynhâld sêkje"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "ferifiearre keppeling"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Lokaasje: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nij berjocht..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Wat wolst diele?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Hannelens..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Folgje"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(fia URL of brûker@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Boost"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(fia URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Lyk"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Brûkersynstellings..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Werjeftenamme:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Jo namme"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Profylplaatsje: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Hjoeddeistige profylplaatsje fuortsmite"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Koptekstplaatsje (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Hjoeddeistige koptekstplaatsje fuortsmite"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Skriuw hjir wat oer josels..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Altyd gefoelige ynhâld toanje"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "E-mailadres foar notifikaasjes:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Telegram notifikaasjes (bot kaai en chat id):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "ntfy notifikaasjes (ntfy server en token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr ""
277 "Maksimaal oantal dagen om berjochten te bewarjen (0: serverynstellings):"
278
279-#: html.c:1602
280+#: html.c:1680
281 msgid "Drop direct messages from people you don't follow"
282 msgstr "Direktte berjochten fan minsken dy't jo net folgje fuortsmite"
283
284-#: html.c:1611
285+#: html.c:1689
286 msgid "This account is a bot"
287 msgstr "Dit akkount is in bot"
288
289-#: html.c:1620
290+#: html.c:1698
291 msgid "Auto-boost all mentions to this account"
292 msgstr "Automatysk boostje fan alle fermeldingen fan dit akkount"
293
294-#: html.c:1629
295+#: html.c:1707
296 msgid "This account is private (posts are not shown through the web)"
297 msgstr "Dit akkount is privé (berjochten wurde net toand fia it web)"
298
299-#: html.c:1639
300+#: html.c:1717
301 msgid "Collapse top threads by default"
302 msgstr "Standert topthreads ynklappe"
303
304-#: html.c:1648
305+#: html.c:1726
306 msgid "Follow requests must be approved"
307 msgstr "Folchfersiken moatte goedkeard wurde"
308
309-#: html.c:1657
310+#: html.c:1735
311 msgid "Publish follower and following metrics"
312 msgstr "Folger- en folchstatistiken publisearje"
313
314-#: html.c:1659
315+#: html.c:1737
316 msgid "Current location:"
317 msgstr "Hjoeddeistige lokaasje:"
318
319-#: html.c:1673
320+#: html.c:1751
321 msgid "Profile metadata (key=value pairs in each line):"
322 msgstr "Profylmetadata (kaai=wearde pearen yn eltse rigel):"
323
324-#: html.c:1684
325+#: html.c:1762
326 msgid "Web interface language:"
327 msgstr "Webynterfacetaal:"
328
329-#: html.c:1703
330+#: html.c:1781
331 msgid "New password:"
332 msgstr "Nij wachtwurd:"
333
334-#: html.c:1710
335+#: html.c:1788
336 msgid "Repeat new password:"
337 msgstr "Nij wachtwurd werhelje:"
338
339-#: html.c:1720
340+#: html.c:1798
341 msgid "Update user info"
342 msgstr "Brûkerynformaasje bywurkje"
343
344-#: html.c:1731
345+#: html.c:1809
346 msgid "Followed hashtags..."
347 msgstr "Folge hashtags..."
348
349-#: html.c:1733 html.c:1766
350+#: html.c:1811 html.c:1844
351 msgid "One hashtag per line"
352 msgstr "Ien hashtag per rigel"
353
354-#: html.c:1755 html.c:1787
355+#: html.c:1833 html.c:1865
356 msgid "Update hashtags"
357 msgstr "Hashtags bywurkje"
358
359-#: html.c:1904
360+#: html.c:1982
361 msgid "Say you like this post"
362 msgstr "Sis dat jo dit berjocht mooi fine"
363
364-#: html.c:1909 html.c:4775
365+#: html.c:1987 html.c:5219
366 msgid "Unlike"
367 msgstr "Net mooi fine"
368
369-#: html.c:1909
370+#: html.c:1987
371 msgid "Nah don't like it that much"
372 msgstr "Nee, ik find it net sa mooi"
373
374-#: html.c:1915 html.c:4912
375+#: html.c:1993 html.c:5356
376 msgid "Unpin"
377 msgstr "Net fêstsette"
378
379-#: html.c:1915
380+#: html.c:1993
381 msgid "Unpin this post from your timeline"
382 msgstr "Dit berjocht net mear fêstsette op jo tiidline"
383
384-#: html.c:1918 html.c:4907
385+#: html.c:1996 html.c:5351
386 msgid "Pin"
387 msgstr "Fêstsette"
388
389-#: html.c:1918
390+#: html.c:1996
391 msgid "Pin this post to the top of your timeline"
392 msgstr "Dit berjocht fêstsette boppe-oan jo tiidline"
393
394-#: html.c:1925
395+#: html.c:2003
396 msgid "Announce this post to your followers"
397 msgstr "Dit berjocht oankondichje by jo folgers"
398
399-#: html.c:1930 html.c:4783
400+#: html.c:2008 html.c:5227
401 msgid "Unboost"
402 msgstr "Untboostje"
403
404-#: html.c:1930
405+#: html.c:2008
406 msgid "I regret I boosted this"
407 msgstr "Ik betreure dat ik dit boostet ha"
408
409-#: html.c:1936 html.c:4922
410+#: html.c:2014 html.c:5366
411 msgid "Unbookmark"
412 msgstr "Ut favorite fuortsmite"
413
414-#: html.c:1936
415+#: html.c:2014
416 msgid "Delete this post from your bookmarks"
417 msgstr "Dit berjocht ut jo favorite fuortsmite"
418
419-#: html.c:1939 html.c:4917
420+#: html.c:2017 html.c:5361
421 msgid "Bookmark"
422 msgstr "Favoryt"
423
424-#: html.c:1939
425+#: html.c:2017
426 msgid "Add this post to your bookmarks"
427 msgstr "Dit berjocht tafoegje oan jo favorite"
428
429-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
430+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
431 msgid "Unfollow"
432 msgstr "Untfolgje"
433
434-#: html.c:1945 html.c:3387
435+#: html.c:2023 html.c:3763 html.c:4042
436 msgid "Stop following this user's activity"
437 msgstr "Stopje mei it folgjen fan de aktiviteit fan dizze brûker"
438
439-#: html.c:1949 html.c:3401
440+#: html.c:2027 html.c:3777 html.c:4044
441 msgid "Start following this user's activity"
442 msgstr "Begjinne mei it folgjen fan de aktiviteit fan dizze brûker"
443
444-#: html.c:1955 html.c:4860
445+#: html.c:2033 html.c:5304
446 msgid "Unfollow Group"
447 msgstr "Untfolgje groep"
448
449-#: html.c:1956
450+#: html.c:2034
451 msgid "Stop following this group or channel"
452 msgstr "Stopje mei it folgjen fan dizze groep of kanaal"
453
454-#: html.c:1960 html.c:4847
455+#: html.c:2038 html.c:5291
456 msgid "Follow Group"
457 msgstr "Folgje groep"
458
459-#: html.c:1961
460+#: html.c:2039
461 msgid "Start following this group or channel"
462 msgstr "Begjinne mei it folgjen fan dizze groep of kanaal"
463
464-#: html.c:1966 html.c:3423 html.c:4791
465+#: html.c:2044 html.c:3799 html.c:5235
466 msgid "MUTE"
467 msgstr "STILJE"
468
469-#: html.c:1967
470+#: html.c:2045
471 msgid "Block any activity from this user forever"
472 msgstr "Alle aktiviteit fan dizze brûker foar altyd blokkearje"
473
474-#: html.c:1972 html.c:3405 html.c:4877
475+#: html.c:2050 html.c:3781 html.c:5321
476 msgid "Delete"
477 msgstr "Fuortsmite"
478
479-#: html.c:1972
480+#: html.c:2050
481 msgid "Delete this post"
482 msgstr "Dit berjocht fuortsmite"
483
484-#: html.c:1975 html.c:4799
485+#: html.c:2053 html.c:5243
486 msgid "Hide"
487 msgstr "Ferbergje"
488
489-#: html.c:1975
490+#: html.c:2053
491 msgid "Hide this post and its children"
492 msgstr "Dit berjocht en syn bern ferbergje"
493
494-#: html.c:2017
495+#: html.c:2095
496 msgid "Edit..."
497 msgstr "Bewurkje..."
498
499-#: html.c:2039
500+#: html.c:2133
501 msgid "Reply..."
502 msgstr "Antwurd..."
503
504-#: html.c:2090
505+#: html.c:2184
506 msgid "Truncated (too deep)"
507 msgstr "Ofkapte (te djip)"
508
509-#: html.c:2108
510+#: html.c:2202
511 msgid "follows you"
512 msgstr "folget jo"
513
514-#: html.c:2182
515+#: html.c:2276
516 msgid "Pinned"
517 msgstr "Fêstsetten"
518
519-#: html.c:2190
520+#: html.c:2284
521 msgid "Bookmarked"
522 msgstr "Favoryt"
523
524-#: html.c:2198
525+#: html.c:2292
526 msgid "Poll"
527 msgstr "Peiling"
528
529-#: html.c:2205
530+#: html.c:2299
531 msgid "Voted"
532 msgstr "Stimme"
533
534-#: html.c:2214
535+#: html.c:2308
536 msgid "Event"
537 msgstr "Barrens"
538
539-#: html.c:2246 html.c:2275
540+#: html.c:2340 html.c:2369
541 msgid "boosted"
542 msgstr "boostet"
543
544-#: html.c:2289
545+#: html.c:2383
546 msgid "in reply to"
547 msgstr "as antwurd op"
548
549-#: html.c:2345
550+#: html.c:2439
551 msgid " [SENSITIVE CONTENT]"
552 msgstr " [GEFOELIGE YNHÂLD]"
553
554-#: html.c:2512
555+#: html.c:2796
556 msgid "Vote"
557 msgstr "Stimme"
558
559-#: html.c:2522
560+#: html.c:2806
561 msgid "Closed"
562 msgstr "Sletten"
563
564-#: html.c:2547
565+#: html.c:2831
566 msgid "Closes in"
567 msgstr "Slut oer"
568
569-#: html.c:2627
570+#: html.c:2911
571 msgid "Video"
572 msgstr "Fideo"
573
574-#: html.c:2642
575+#: html.c:2926
576 msgid "Audio"
577 msgstr "Audio"
578
579-#: html.c:2670
580+#: html.c:2954
581 msgid "Attachment"
582 msgstr "Bylage"
583
584-#: html.c:2684
585+#: html.c:2968
586 msgid "Alt..."
587 msgstr "Alt..."
588
589-#: html.c:2697
590+#: html.c:2981
591 msgid "Source channel or community"
592 msgstr "Boarnekanaal of mienskip"
593
594-#: html.c:2791
595+#: html.c:3075
596 msgid "Time: "
597 msgstr "Tiid: "
598
599-#: html.c:2872
600+#: html.c:3156
601 msgid "Older..."
602 msgstr "Alder..."
603
604-#: html.c:2974
605+#: html.c:3258
606 msgid "about this site"
607 msgstr "oer dizze side"
608
609-#: html.c:2976
610+#: html.c:3260
611 msgid "powered by "
612 msgstr "oanjoegen troch "
613
614-#: html.c:3041
615+#: html.c:3329
616 msgid "Dismiss"
617 msgstr "Wegerje"
618
619-#: html.c:3058
620+#: html.c:3346
621 #, c-format
622 msgid "Timeline for list '%s'"
623 msgstr "Tiidline foar list '%s'"
624
625-#: html.c:3077 html.c:4169
626+#: html.c:3365 html.c:4589
627 msgid "Pinned posts"
628 msgstr "Fêstsette berjochten"
629
630-#: html.c:3089 html.c:4184
631+#: html.c:3377 html.c:4604
632 msgid "Bookmarked posts"
633 msgstr "Favorite berjochten"
634
635-#: html.c:3101 html.c:4199
636+#: html.c:3389 html.c:4619
637 msgid "Post drafts"
638 msgstr "Berjochtkonsepten"
639
640-#: html.c:3177
641+#: html.c:3465
642 msgid "No more unseen posts"
643 msgstr "Gjin net-lêzene berjochten mear"
644
645-#: html.c:3181 html.c:3290
646+#: html.c:3469 html.c:3578
647 msgid "Back to top"
648 msgstr "Werom nei boppe"
649
650-#: html.c:3243
651+#: html.c:3531
652 msgid "History"
653 msgstr "Skiednis"
654
655-#: html.c:3295 html.c:3734
656+#: html.c:3583 html.c:4149
657 msgid "More..."
658 msgstr "Mear..."
659
660-#: html.c:3391 html.c:4813
661+#: html.c:3767 html.c:5257
662 msgid "Unlimit"
663 msgstr "Unbeheind"
664
665-#: html.c:3392
666+#: html.c:3768
667 msgid "Allow announces (boosts) from this user"
668 msgstr "Oankondichings (boosts) fan dizze brûker tasteane"
669
670-#: html.c:3395 html.c:4809
671+#: html.c:3771 html.c:5253
672 msgid "Limit"
673 msgstr "Beheine"
674
675-#: html.c:3396
676+#: html.c:3772
677 msgid "Block announces (boosts) from this user"
678 msgstr "Oankondichings (boosts) fan dizze brûker blokkearje"
679
680-#: html.c:3405
681+#: html.c:3781
682 msgid "Delete this user"
683 msgstr "Dizze brûker fuortsmite"
684
685-#: html.c:3410 html.c:4927
686+#: html.c:3786 html.c:5371
687 msgid "Approve"
688 msgstr "Goedkarre"
689
690-#: html.c:3411
691+#: html.c:3787
692 msgid "Approve this follow request"
693 msgstr "Dit folchfersk goedkarre"
694
695-#: html.c:3414 html.c:4951
696+#: html.c:3790 html.c:5395
697 msgid "Discard"
698 msgstr "Wegerje"
699
700-#: html.c:3414
701+#: html.c:3790
702 msgid "Discard this follow request"
703 msgstr "Dit folchfersk wegerje"
704
705-#: html.c:3419 html.c:4795
706+#: html.c:3795 html.c:5239
707 msgid "Unmute"
708 msgstr "Net mear stilje"
709
710-#: html.c:3420
711+#: html.c:3796
712 msgid "Stop blocking activities from this user"
713 msgstr "Stopje mei it blokkearjen fan aktiviteiten fan dizze brûker"
714
715-#: html.c:3424
716+#: html.c:3800
717 msgid "Block any activity from this user"
718 msgstr "Alle aktiviteit fan dizze brûker blokkearje"
719
720-#: html.c:3432
721+#: html.c:3808
722 msgid "Direct Message..."
723 msgstr "Persoanlik berjocht..."
724
725-#: html.c:3467
726+#: html.c:3843
727 msgid "Pending follow confirmations"
728 msgstr "Iepenstjitte folchbefestichings"
729
730-#: html.c:3471
731+#: html.c:3847
732 msgid "People you follow"
733 msgstr "Minsken dy't jo folge"
734
735-#: html.c:3472
736+#: html.c:3848
737 msgid "People that follow you"
738 msgstr "Minsken dy't jo folge"
739
740-#: html.c:3511
741+#: html.c:3887
742 msgid "Clear all"
743 msgstr "Alles wiskje"
744
745-#: html.c:3571
746+#: html.c:3951
747 msgid "Mention"
748 msgstr "Neame"
749
750-#: html.c:3574
751+#: html.c:3954
752 msgid "Finished poll"
753 msgstr "Ofêrunde peiling"
754
755-#: html.c:3590
756+#: html.c:3979
757 msgid "Follow Request"
758 msgstr "Folchfersk"
759
760-#: html.c:3674
761+#: html.c:4089
762 msgid "Context"
763 msgstr "Kontekst"
764
765-#: html.c:3692
766+#: html.c:4107
767 msgid "New"
768 msgstr "Nij"
769
770-#: html.c:3707
771+#: html.c:4122
772 msgid "Already seen"
773 msgstr "Al sjoen"
774
775-#: html.c:3722
776+#: html.c:4137
777 msgid "None"
778 msgstr "Gjin"
779
780-#: html.c:3994
781+#: html.c:4414
782 #, c-format
783 msgid "Search results for account %s"
784 msgstr "Sêkresultaten foar akkount %s"
785
786-#: html.c:4001
787+#: html.c:4421
788 #, c-format
789 msgid "Account %s not found"
790 msgstr "Akkount %s net foun"
791
792-#: html.c:4032
793+#: html.c:4452
794 #, c-format
795 msgid "Search results for tag %s"
796 msgstr "Sêkresultaten foar tag %s"
797
798-#: html.c:4032
799+#: html.c:4452
800 #, c-format
801 msgid "Nothing found for tag %s"
802 msgstr "Neat foun foar tag %s"
803
804-#: html.c:4048
805+#: html.c:4468
806 #, c-format
807 msgid "Search results for '%s' (may be more)"
808 msgstr "Sêkresultaten foar '%s' (mooglik mear)"
809
810-#: html.c:4051
811+#: html.c:4471
812 #, c-format
813 msgid "Search results for '%s'"
814 msgstr "Sêkresultaten foar '%s'"
815
816-#: html.c:4054
817+#: html.c:4474
818 #, c-format
819 msgid "No more matches for '%s'"
820 msgstr "Gjin fjirder oerienkomsten foar '%s'"
821
822-#: html.c:4056
823+#: html.c:4476
824 #, c-format
825 msgid "Nothing found for '%s'"
826 msgstr "Neat foun foar '%s'"
827
828-#: html.c:4154
829+#: html.c:4574
830 msgid "Showing instance timeline"
831 msgstr "Tiidline fan ynstallaasje toane"
832
833-#: html.c:4237
834+#: html.c:4657
835 #, c-format
836 msgid "Showing timeline for list '%s'"
837 msgstr "Tiidline foar list '%s' toane"
838
839-#: httpd.c:258
840+#: httpd.c:259
841 #, c-format
842 msgid "Search results for tag #%s"
843 msgstr "Sêkresultaten foar tag #%s"
844
845-#: httpd.c:267
846+#: httpd.c:268
847 msgid "Recent posts by users in this instance"
848 msgstr "Resinte berjochten fan brûkers yn dizze ynstallaasje"
849
850-#: html.c:1764
851+#: html.c:1842
852 msgid "Blocked hashtags..."
853 msgstr "Blokkearre hashtags..."
854
855-#: html.c:518
856+#: html.c:574
857 msgid "Optional URL to reply to"
858 msgstr "Opsjonele URL om op te antwurdjen"
859
860-#: html.c:695
861+#: html.c:751
862 msgid ""
863 "Option 1...\n"
864 "Option 2...\n"
865@@ -708,94 +708,106 @@ msgstr ""
866 "Optie 3...\n"
867 "..."
868
869-#: html.c:1558
870+#: html.c:1636
871 msgid "Bot API key"
872 msgstr "Bot API kaai"
873
874-#: html.c:1564
875+#: html.c:1642
876 msgid "Chat id"
877 msgstr "Chat id"
878
879-#: html.c:1572
880+#: html.c:1650
881 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
882 msgstr "ntfy server - folsleine URL (foarbyld: https://ntfy.sh/YourTopic)"
883
884-#: html.c:1578
885+#: html.c:1656
886 msgid "ntfy token - if needed"
887 msgstr "ntfy token - as nedich"
888
889-#: html.c:3078
890+#: html.c:3366
891 msgid "pinned"
892 msgstr "fêssetten"
893
894-#: html.c:3090
895+#: html.c:3378
896 msgid "bookmarks"
897 msgstr "favorite"
898
899-#: html.c:3102
900+#: html.c:3390
901 msgid "drafts"
902 msgstr "konsepten"
903
904-#: html.c:584
905+#: html.c:640
906 msgid "Scheduled post..."
907 msgstr "Planne berjocht..."
908
909 msgid "Post date and time:"
910 msgstr "Berjocht datum en tiid:"
911
912-#: html.c:3113 html.c:4214
913+#: html.c:3401 html.c:4634
914 msgid "Scheduled posts"
915 msgstr "Planne berjochten"
916
917-#: html.c:3114
918+#: html.c:3402
919 msgid "scheduled posts"
920 msgstr "planne berjochten"
921
922-#: html.c:578
923+#: html.c:634
924 #, c-format
925 msgid "Post date and time (timezone: %s):"
926 msgstr "Berjocht datum en tiid (tiidsone: %s):"
927
928-#: html.c:1689
929+#: html.c:1767
930 msgid "Time zone:"
931 msgstr "Tiidsone:"
932
933-#: html.c:559
934+#: html.c:615
935 msgid "Language:"
936 msgstr ""
937
938-#: html.c:1580
939+#: html.c:1658
940 msgid "Notify webhook:"
941 msgstr ""
942
943-#: html.c:1586
944+#: html.c:1664
945 msgid "http://example.com/webhook"
946 msgstr ""
947
948-#: html.c:1694
949+#: html.c:1772
950 msgid "Languages you usually post in:"
951 msgstr ""
952
953-#: html.c:1700
954+#: html.c:1778
955 msgid "en fr es de_AT"
956 msgstr ""
957
958-#: html.c:460
959+#: html.c:428
960 msgid "Visibility: "
961 msgstr ""
962
963-#: html.c:468
964 msgid "Public"
965 msgstr ""
966
967-#: html.c:477
968 msgid "Unlisted"
969 msgstr ""
970
971-#: html.c:486
972 msgid "Followers-only"
973 msgstr ""
974
975-#: html.c:495
976 msgid "Direct Message"
977 msgstr ""
978+
979+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
980+msgid "EmojiUnreact"
981+msgstr ""
982+
983+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
984+msgid "EmojiReact"
985+msgstr ""
986+
987+#: html.c:2115
988+msgid "Emoji react..."
989+msgstr ""
990+
991+#: html.c:2609
992+msgid "Emoji reactions: "
993+msgstr ""
M
po/it.po
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: it\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Contenuto sensibile"
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Descrizione del contenuto sensibile"
14
15 msgid "Only for mentioned people: "
16 msgstr "Riservato alle persone indicate: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Rispondi a (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Salva come bozza senza inviare"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Bozza"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Allegati..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "File:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Pulisci ed elimina l'allegato"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Descrizione dell'allegato"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Sondaggio..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Scelte per il sondaggio (una per linea, massimo 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Una scelta"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Scelte multiple"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Termina in 5 minuti"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Termina in 1 ora"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Termina in 1 giorno"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Post"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Descrizione del sito web"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Email dell'amministratore"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Account amministratore"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d seguiti, %d seguenti"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privato"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "pubblico"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notifiche"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "persone"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "istanza"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,574 +128,574 @@ msgstr ""
150 "Ricerca post per URL o contenuto (espressione regolare), @user@host "
151 "accounts, #tag"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Ricerca contenuto"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "link verificato"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Posizione: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nuovo post..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Cosa stai pensando?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Operazioni..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Segui"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(per URL o user@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Annuncia"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(per URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Mi piace"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Impostazioni..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Nome visualizzato:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Il tuo nome"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Avatar: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Elimina l'avatar"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Immagine intestazione (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Elimina l'immagine d'intestazione"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Descriviti qui..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Mostra sempre i contenuti sensibili"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Indirizzo email per le notifiche:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Notifiche Telegram (bot key e chat id):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "Notifiche ntfy (server ntfy e token)"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Giorni di mantenimento dei post (0: impostazione server)"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Elimina i messaggi diretti delle persone non seguite"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Questo account è un bot"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Annuncio automatico delle citazioni a quest'account"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr "Quest'account è privato (post invisibili nel web)"
297
298-#: html.c:1639
299+#: html.c:1717
300 msgid "Collapse top threads by default"
301 msgstr "Tieni chiuse le discussioni"
302
303-#: html.c:1648
304+#: html.c:1726
305 msgid "Follow requests must be approved"
306 msgstr "Devi approvare le richieste dei seguenti"
307
308-#: html.c:1657
309+#: html.c:1735
310 msgid "Publish follower and following metrics"
311 msgstr "Rendi pubblici seguenti e seguiti"
312
313-#: html.c:1659
314+#: html.c:1737
315 msgid "Current location:"
316 msgstr "Posizione corrente:"
317
318-#: html.c:1673
319+#: html.c:1751
320 msgid "Profile metadata (key=value pairs in each line):"
321 msgstr "Dati del profilo (coppie di chiave=valore per ogni linea):"
322
323-#: html.c:1684
324+#: html.c:1762
325 msgid "Web interface language:"
326 msgstr "Lingua dell'interfaccia web:"
327
328-#: html.c:1703
329+#: html.c:1781
330 msgid "New password:"
331 msgstr "Nuova password:"
332
333-#: html.c:1710
334+#: html.c:1788
335 msgid "Repeat new password:"
336 msgstr "Reinserisci la password:"
337
338-#: html.c:1720
339+#: html.c:1798
340 msgid "Update user info"
341 msgstr "Aggiorna dati utente"
342
343-#: html.c:1731
344+#: html.c:1809
345 msgid "Followed hashtags..."
346 msgstr "Hashtag seguiti..."
347
348-#: html.c:1733 html.c:1766
349+#: html.c:1811 html.c:1844
350 msgid "One hashtag per line"
351 msgstr "Un hashtag per linea"
352
353-#: html.c:1755 html.c:1787
354+#: html.c:1833 html.c:1865
355 msgid "Update hashtags"
356 msgstr "Aggiorna hashtags"
357
358-#: html.c:1904
359+#: html.c:1982
360 msgid "Say you like this post"
361 msgstr "Questo post ti piace"
362
363-#: html.c:1909 html.c:4775
364+#: html.c:1987 html.c:5219
365 msgid "Unlike"
366 msgstr "Non mi piace"
367
368-#: html.c:1909
369+#: html.c:1987
370 msgid "Nah don't like it that much"
371 msgstr "No, non mi piace molto"
372
373-#: html.c:1915 html.c:4912
374+#: html.c:1993 html.c:5356
375 msgid "Unpin"
376 msgstr "Sgancia"
377
378-#: html.c:1915
379+#: html.c:1993
380 msgid "Unpin this post from your timeline"
381 msgstr "Sgancia questo post dalla timeline"
382
383-#: html.c:1918 html.c:4907
384+#: html.c:1996 html.c:5351
385 msgid "Pin"
386 msgstr "Aggancia"
387
388-#: html.c:1918
389+#: html.c:1996
390 msgid "Pin this post to the top of your timeline"
391 msgstr "Aggancia questo post in cima alla timeline"
392
393-#: html.c:1925
394+#: html.c:2003
395 msgid "Announce this post to your followers"
396 msgstr "Annuncia questo post ai tuoi seguenti"
397
398-#: html.c:1930 html.c:4783
399+#: html.c:2008 html.c:5227
400 msgid "Unboost"
401 msgstr "Rimuovi annuncio"
402
403-#: html.c:1930
404+#: html.c:2008
405 msgid "I regret I boosted this"
406 msgstr "Mi pento di aver annunciato questo"
407
408-#: html.c:1936 html.c:4922
409+#: html.c:2014 html.c:5366
410 msgid "Unbookmark"
411 msgstr "Elimina segnalibro"
412
413-#: html.c:1936
414+#: html.c:2014
415 msgid "Delete this post from your bookmarks"
416 msgstr "Elimina questo post dai segnalibri"
417
418-#: html.c:1939 html.c:4917
419+#: html.c:2017 html.c:5361
420 msgid "Bookmark"
421 msgstr "Segnalibro"
422
423-#: html.c:1939
424+#: html.c:2017
425 msgid "Add this post to your bookmarks"
426 msgstr "Aggiungi questo post ai segnalibri"
427
428-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
429+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
430 msgid "Unfollow"
431 msgstr "Smetti di seguire"
432
433-#: html.c:1945 html.c:3387
434+#: html.c:2023 html.c:3763 html.c:4042
435 msgid "Stop following this user's activity"
436 msgstr "Smetti di seguire l'utente"
437
438-#: html.c:1949 html.c:3401
439+#: html.c:2027 html.c:3777 html.c:4044
440 msgid "Start following this user's activity"
441 msgstr "Sequi l'utente"
442
443-#: html.c:1955 html.c:4860
444+#: html.c:2033 html.c:5304
445 msgid "Unfollow Group"
446 msgstr "Smetti di seguire il gruppo"
447
448-#: html.c:1956
449+#: html.c:2034
450 msgid "Stop following this group or channel"
451 msgstr "Smetti di seguire il gruppo o canale"
452
453-#: html.c:1960 html.c:4847
454+#: html.c:2038 html.c:5291
455 msgid "Follow Group"
456 msgstr "Segui grupp"
457
458-#: html.c:1961
459+#: html.c:2039
460 msgid "Start following this group or channel"
461 msgstr "Segui il gruppo o canale"
462
463-#: html.c:1966 html.c:3423 html.c:4791
464+#: html.c:2044 html.c:3799 html.c:5235
465 msgid "MUTE"
466 msgstr "Silenzia"
467
468-#: html.c:1967
469+#: html.c:2045
470 msgid "Block any activity from this user forever"
471 msgstr "Blocca l'utente"
472
473-#: html.c:1972 html.c:3405 html.c:4877
474+#: html.c:2050 html.c:3781 html.c:5321
475 msgid "Delete"
476 msgstr "Elimina"
477
478-#: html.c:1972
479+#: html.c:2050
480 msgid "Delete this post"
481 msgstr "Elimina questo post"
482
483-#: html.c:1975 html.c:4799
484+#: html.c:2053 html.c:5243
485 msgid "Hide"
486 msgstr "Nascondi"
487
488-#: html.c:1975
489+#: html.c:2053
490 msgid "Hide this post and its children"
491 msgstr "Nascondi questo post completamente"
492
493-#: html.c:2017
494+#: html.c:2095
495 msgid "Edit..."
496 msgstr "Modifica..."
497
498-#: html.c:2039
499+#: html.c:2133
500 msgid "Reply..."
501 msgstr "Rispondi..."
502
503-#: html.c:2090
504+#: html.c:2184
505 msgid "Truncated (too deep)"
506 msgstr "Troncato (troppo lungo)"
507
508-#: html.c:2108
509+#: html.c:2202
510 msgid "follows you"
511 msgstr "Ti segue"
512
513-#: html.c:2182
514+#: html.c:2276
515 msgid "Pinned"
516 msgstr "Aggancia"
517
518-#: html.c:2190
519+#: html.c:2284
520 msgid "Bookmarked"
521 msgstr "Segnalibro"
522
523-#: html.c:2198
524+#: html.c:2292
525 msgid "Poll"
526 msgstr "Sondaggio"
527
528-#: html.c:2205
529+#: html.c:2299
530 msgid "Voted"
531 msgstr "Votato"
532
533-#: html.c:2214
534+#: html.c:2308
535 msgid "Event"
536 msgstr "Evento"
537
538-#: html.c:2246 html.c:2275
539+#: html.c:2340 html.c:2369
540 msgid "boosted"
541 msgstr "Annunciato"
542
543-#: html.c:2289
544+#: html.c:2383
545 msgid "in reply to"
546 msgstr "in risposta a"
547
548-#: html.c:2345
549+#: html.c:2439
550 msgid " [SENSITIVE CONTENT]"
551 msgstr " [CONTENUTO SENSIBILE]"
552
553-#: html.c:2512
554+#: html.c:2796
555 msgid "Vote"
556 msgstr "Vota"
557
558-#: html.c:2522
559+#: html.c:2806
560 msgid "Closed"
561 msgstr "Chiuso"
562
563-#: html.c:2547
564+#: html.c:2831
565 msgid "Closes in"
566 msgstr "Chiude in"
567
568-#: html.c:2627
569+#: html.c:2911
570 msgid "Video"
571 msgstr "Video"
572
573-#: html.c:2642
574+#: html.c:2926
575 msgid "Audio"
576 msgstr "Audio"
577
578-#: html.c:2670
579+#: html.c:2954
580 msgid "Attachment"
581 msgstr "Allegato"
582
583-#: html.c:2684
584+#: html.c:2968
585 msgid "Alt..."
586 msgstr "Testo alternativo..."
587
588-#: html.c:2697
589+#: html.c:2981
590 msgid "Source channel or community"
591 msgstr "Provenienza del canale o comunità"
592
593-#: html.c:2791
594+#: html.c:3075
595 msgid "Time: "
596 msgstr "Orario:"
597
598-#: html.c:2872
599+#: html.c:3156
600 msgid "Older..."
601 msgstr "Vecchi..."
602
603-#: html.c:2974
604+#: html.c:3258
605 msgid "about this site"
606 msgstr "descrizione"
607
608-#: html.c:2976
609+#: html.c:3260
610 msgid "powered by "
611 msgstr "gestito da "
612
613-#: html.c:3041
614+#: html.c:3329
615 msgid "Dismiss"
616 msgstr "Congeda"
617
618-#: html.c:3058
619+#: html.c:3346
620 #, c-format
621 msgid "Timeline for list '%s'"
622 msgstr "Timeline per la lista '%s'"
623
624-#: html.c:3077 html.c:4169
625+#: html.c:3365 html.c:4589
626 msgid "Pinned posts"
627 msgstr "Post appuntati"
628
629-#: html.c:3089 html.c:4184
630+#: html.c:3377 html.c:4604
631 msgid "Bookmarked posts"
632 msgstr "Post segnati"
633
634-#: html.c:3101 html.c:4199
635+#: html.c:3389 html.c:4619
636 msgid "Post drafts"
637 msgstr "Bozze"
638
639-#: html.c:3177
640+#: html.c:3465
641 msgid "No more unseen posts"
642 msgstr "Nessun ulteriore post"
643
644-#: html.c:3181 html.c:3290
645+#: html.c:3469 html.c:3578
646 msgid "Back to top"
647 msgstr "Torna in cima"
648
649-#: html.c:3243
650+#: html.c:3531
651 msgid "History"
652 msgstr "Storico"
653
654-#: html.c:3295 html.c:3734
655+#: html.c:3583 html.c:4149
656 msgid "More..."
657 msgstr "Ancora..."
658
659-#: html.c:3391 html.c:4813
660+#: html.c:3767 html.c:5257
661 msgid "Unlimit"
662 msgstr "Senza limite"
663
664-#: html.c:3392
665+#: html.c:3768
666 msgid "Allow announces (boosts) from this user"
667 msgstr "Permetti annunci dall'utente"
668
669-#: html.c:3395 html.c:4809
670+#: html.c:3771 html.c:5253
671 msgid "Limit"
672 msgstr "Limite"
673
674-#: html.c:3396
675+#: html.c:3772
676 msgid "Block announces (boosts) from this user"
677 msgstr "Blocca annunci dall'utente"
678
679-#: html.c:3405
680+#: html.c:3781
681 msgid "Delete this user"
682 msgstr "Elimina l'utente"
683
684-#: html.c:3410 html.c:4927
685+#: html.c:3786 html.c:5371
686 msgid "Approve"
687 msgstr "Approva"
688
689-#: html.c:3411
690+#: html.c:3787
691 msgid "Approve this follow request"
692 msgstr "Approva richiesta di seguirti"
693
694-#: html.c:3414 html.c:4951
695+#: html.c:3790 html.c:5395
696 msgid "Discard"
697 msgstr "Scarta"
698
699-#: html.c:3414
700+#: html.c:3790
701 msgid "Discard this follow request"
702 msgstr "Scarta richiesta di seguirti"
703
704-#: html.c:3419 html.c:4795
705+#: html.c:3795 html.c:5239
706 msgid "Unmute"
707 msgstr "Rimuovi silenziamento"
708
709-#: html.c:3420
710+#: html.c:3796
711 msgid "Stop blocking activities from this user"
712 msgstr "Sblocca l'utente"
713
714-#: html.c:3424
715+#: html.c:3800
716 msgid "Block any activity from this user"
717 msgstr "Blocca l'utente completamente"
718
719-#: html.c:3432
720+#: html.c:3808
721 msgid "Direct Message..."
722 msgstr "Messaggio diretto..."
723
724-#: html.c:3467
725+#: html.c:3843
726 msgid "Pending follow confirmations"
727 msgstr "Conferme di seguirti in attesa"
728
729-#: html.c:3471
730+#: html.c:3847
731 msgid "People you follow"
732 msgstr "Persone che segui"
733
734-#: html.c:3472
735+#: html.c:3848
736 msgid "People that follow you"
737 msgstr "Persone che ti seguono"
738
739-#: html.c:3511
740+#: html.c:3887
741 msgid "Clear all"
742 msgstr "Pulisci"
743
744-#: html.c:3571
745+#: html.c:3951
746 msgid "Mention"
747 msgstr "Citazione"
748
749-#: html.c:3574
750+#: html.c:3954
751 msgid "Finished poll"
752 msgstr "Sondaggio concluso"
753
754-#: html.c:3590
755+#: html.c:3979
756 msgid "Follow Request"
757 msgstr "Richiesta di seguire"
758
759-#: html.c:3674
760+#: html.c:4089
761 msgid "Context"
762 msgstr "Contesto"
763
764-#: html.c:3692
765+#: html.c:4107
766 msgid "New"
767 msgstr "Nuovo"
768
769-#: html.c:3707
770+#: html.c:4122
771 msgid "Already seen"
772 msgstr "Già visto"
773
774-#: html.c:3722
775+#: html.c:4137
776 msgid "None"
777 msgstr "Niente"
778
779-#: html.c:3994
780+#: html.c:4414
781 #, c-format
782 msgid "Search results for account %s"
783 msgstr "Risultati per account %s"
784
785-#: html.c:4001
786+#: html.c:4421
787 #, c-format
788 msgid "Account %s not found"
789 msgstr "Account %s non trovato"
790
791-#: html.c:4032
792+#: html.c:4452
793 #, c-format
794 msgid "Search results for tag %s"
795 msgstr "Risultati per tag %s"
796
797-#: html.c:4032
798+#: html.c:4452
799 #, c-format
800 msgid "Nothing found for tag %s"
801 msgstr "Nessun risultato per il tag %S"
802
803-#: html.c:4048
804+#: html.c:4468
805 #, c-format
806 msgid "Search results for '%s' (may be more)"
807 msgstr "Risultati per tag %s (ancora...)"
808
809-#: html.c:4051
810+#: html.c:4471
811 #, c-format
812 msgid "Search results for '%s'"
813 msgstr "Risultati per %s"
814
815-#: html.c:4054
816+#: html.c:4474
817 #, c-format
818 msgid "No more matches for '%s'"
819 msgstr "Nessuna corrispondenza per '%s'"
820
821-#: html.c:4056
822+#: html.c:4476
823 #, c-format
824 msgid "Nothing found for '%s'"
825 msgstr "Non trovato per '%s'"
826
827-#: html.c:4154
828+#: html.c:4574
829 msgid "Showing instance timeline"
830 msgstr "Mostra la timeline dell'istanza"
831
832-#: html.c:4237
833+#: html.c:4657
834 #, c-format
835 msgid "Showing timeline for list '%s'"
836 msgstr "Mostra la timeline della lista '%s'"
837
838-#: httpd.c:258
839+#: httpd.c:259
840 #, c-format
841 msgid "Search results for tag #%s"
842 msgstr "Risultati per tag #%s"
843
844-#: httpd.c:267
845+#: httpd.c:268
846 msgid "Recent posts by users in this instance"
847 msgstr "Post recenti in questa istanza"
848
849-#: html.c:1764
850+#: html.c:1842
851 msgid "Blocked hashtags..."
852 msgstr "Hashtag bloccati..."
853
854-#: html.c:518
855+#: html.c:574
856 msgid "Optional URL to reply to"
857 msgstr "URL facoltativo di risposta"
858
859-#: html.c:695
860+#: html.c:751
861 msgid ""
862 "Option 1...\n"
863 "Option 2...\n"
864@@ -707,94 +707,106 @@ msgstr ""
865 "Scelta 3...\n"
866 "..."
867
868-#: html.c:1558
869+#: html.c:1636
870 msgid "Bot API key"
871 msgstr "Chiave per le API del bot"
872
873-#: html.c:1564
874+#: html.c:1642
875 msgid "Chat id"
876 msgstr "Id della chat"
877
878-#: html.c:1572
879+#: html.c:1650
880 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
881 msgstr "Server ntfy - URL completo (esempio: https://ntfy.sh/YourTopic)"
882
883-#: html.c:1578
884+#: html.c:1656
885 msgid "ntfy token - if needed"
886 msgstr "Token ntfy - se richiesto"
887
888-#: html.c:3078
889+#: html.c:3366
890 msgid "pinned"
891 msgstr "appuntati"
892
893-#: html.c:3090
894+#: html.c:3378
895 msgid "bookmarks"
896 msgstr "segnalibri"
897
898-#: html.c:3102
899+#: html.c:3390
900 msgid "drafts"
901 msgstr "bozze"
902
903-#: html.c:584
904+#: html.c:640
905 msgid "Scheduled post..."
906 msgstr ""
907
908 msgid "Post date and time:"
909 msgstr ""
910
911-#: html.c:3113 html.c:4214
912+#: html.c:3401 html.c:4634
913 msgid "Scheduled posts"
914 msgstr ""
915
916-#: html.c:3114
917+#: html.c:3402
918 msgid "scheduled posts"
919 msgstr ""
920
921-#: html.c:578
922+#: html.c:634
923 #, c-format
924 msgid "Post date and time (timezone: %s):"
925 msgstr ""
926
927-#: html.c:1689
928+#: html.c:1767
929 msgid "Time zone:"
930 msgstr ""
931
932-#: html.c:559
933+#: html.c:615
934 msgid "Language:"
935 msgstr ""
936
937-#: html.c:1580
938+#: html.c:1658
939 msgid "Notify webhook:"
940 msgstr ""
941
942-#: html.c:1586
943+#: html.c:1664
944 msgid "http://example.com/webhook"
945 msgstr ""
946
947-#: html.c:1694
948+#: html.c:1772
949 msgid "Languages you usually post in:"
950 msgstr ""
951
952-#: html.c:1700
953+#: html.c:1778
954 msgid "en fr es de_AT"
955 msgstr ""
956
957-#: html.c:460
958+#: html.c:428
959 msgid "Visibility: "
960 msgstr ""
961
962-#: html.c:468
963 msgid "Public"
964 msgstr ""
965
966-#: html.c:477
967 msgid "Unlisted"
968 msgstr ""
969
970-#: html.c:486
971 msgid "Followers-only"
972 msgstr ""
973
974-#: html.c:495
975 msgid "Direct Message"
976 msgstr ""
977+
978+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
979+msgid "EmojiUnreact"
980+msgstr ""
981+
982+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
983+msgid "EmojiReact"
984+msgstr ""
985+
986+#: html.c:2115
987+msgid "Emoji react..."
988+msgstr ""
989+
990+#: html.c:2609
991+msgid "Emoji reactions: "
992+msgstr ""
+202,
-190
1@@ -8,119 +8,119 @@ msgstr ""
2 "Language: nl_NL\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Gevoelige inhoud: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Omschrijving van gevoelige inhoud"
14
15 msgid "Only for mentioned people: "
16 msgstr "Enkel voor genoemde personen: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Antwoord op (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Niet verzenden, maar opslaan als concept"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Concept:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Bijlagen..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Bestand:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Veld leegmaken om de bijlage te verwijderen"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Omschrijving van bijlage"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Peiling..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Peiling opties (één per regel, tot 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Eén keuze"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Meerdere keuzes"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Eindigt over 5 minuten"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Eindigt over 1 uur"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Eindigt over 1 dag"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Bericht"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Omschrijving van de site"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Admin e-mail"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Admin account"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d volgend, %d volgers"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "privé"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "publiek"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "notificaties"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "mensen"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "instantie"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -128,574 +128,574 @@ msgstr ""
150 "Zoek berichten op URL of inhoud (reguliere expressie), @user@host accounts, "
151 "of #tag"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Inhoud zoeken"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "verifieerde link"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Locatie: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Nieuw bericht..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Wat wil je delen?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Handelingen..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Volg"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(via URL of gebruiker@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Boost"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(via URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Leuk"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Gebruikersinstellingen..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Weergavenaam:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Jouw naam"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Profielafbeelding: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Verwijder huidige profielafbeelding"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Header afbeelding (banner): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Verwijder huidige header afbeelding"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Bio:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Schrijf hier iets over jezelf..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Altijd gevoelige inhoud tonen"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "E-mailadres voor notificaties:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Telegram notificaties (bot sleutel en chat id):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "ntfy notificaties (ntfy server en token):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Maximaal aantal dagen om berichten te bewaren (0: serverinstellingen):"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Verwijder directe berichten van mensen die je niet volgt"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Dit account is een bot"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Automatisch boosten van alle vermeldingen van dit account"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr "Dit account is privé (berichten worden niet getoond via het web)"
297
298-#: html.c:1639
299+#: html.c:1717
300 msgid "Collapse top threads by default"
301 msgstr "Klap standaard top threads in"
302
303-#: html.c:1648
304+#: html.c:1726
305 msgid "Follow requests must be approved"
306 msgstr "Volgverzoeken moeten worden goedgekeurd"
307
308-#: html.c:1657
309+#: html.c:1735
310 msgid "Publish follower and following metrics"
311 msgstr "Publiceer volger- en volgstatistieken"
312
313-#: html.c:1659
314+#: html.c:1737
315 msgid "Current location:"
316 msgstr "Huidige locatie:"
317
318-#: html.c:1673
319+#: html.c:1751
320 msgid "Profile metadata (key=value pairs in each line):"
321 msgstr "Profiel metadata (sleutel=waarde paren in elke regel):"
322
323-#: html.c:1684
324+#: html.c:1762
325 msgid "Web interface language:"
326 msgstr "Webinterface taal:"
327
328-#: html.c:1703
329+#: html.c:1781
330 msgid "New password:"
331 msgstr "Nieuw wachtwoord:"
332
333-#: html.c:1710
334+#: html.c:1788
335 msgid "Repeat new password:"
336 msgstr "Herhaal nieuw wachtwoord:"
337
338-#: html.c:1720
339+#: html.c:1798
340 msgid "Update user info"
341 msgstr "Werk gebruikersinformatie bij"
342
343-#: html.c:1731
344+#: html.c:1809
345 msgid "Followed hashtags..."
346 msgstr "Gevolgde hashtags..."
347
348-#: html.c:1733 html.c:1766
349+#: html.c:1811 html.c:1844
350 msgid "One hashtag per line"
351 msgstr "Eén hashtag per regel"
352
353-#: html.c:1755 html.c:1787
354+#: html.c:1833 html.c:1865
355 msgid "Update hashtags"
356 msgstr "Werk hashtags bij"
357
358-#: html.c:1904
359+#: html.c:1982
360 msgid "Say you like this post"
361 msgstr "Zeg dat je dit bericht leuk vindt"
362
363-#: html.c:1909 html.c:4775
364+#: html.c:1987 html.c:5219
365 msgid "Unlike"
366 msgstr "Niet leuk vinden"
367
368-#: html.c:1909
369+#: html.c:1987
370 msgid "Nah don't like it that much"
371 msgstr "Nee, ik vind het niet zo leuk"
372
373-#: html.c:1915 html.c:4912
374+#: html.c:1993 html.c:5356
375 msgid "Unpin"
376 msgstr "Niet vastzetten"
377
378-#: html.c:1915
379+#: html.c:1993
380 msgid "Unpin this post from your timeline"
381 msgstr "Zet dit bericht niet meer vast op je tijdlijn"
382
383-#: html.c:1918 html.c:4907
384+#: html.c:1996 html.c:5351
385 msgid "Pin"
386 msgstr "Vastzetten"
387
388-#: html.c:1918
389+#: html.c:1996
390 msgid "Pin this post to the top of your timeline"
391 msgstr "Zet dit bericht vast bovenaan je tijdlijn"
392
393-#: html.c:1925
394+#: html.c:2003
395 msgid "Announce this post to your followers"
396 msgstr "Kondig dit bericht aan bij je volgers"
397
398-#: html.c:1930 html.c:4783
399+#: html.c:2008 html.c:5227
400 msgid "Unboost"
401 msgstr "Ontboosten"
402
403-#: html.c:1930
404+#: html.c:2008
405 msgid "I regret I boosted this"
406 msgstr "Ik betreur dat ik dit heb geboost"
407
408-#: html.c:1936 html.c:4922
409+#: html.c:2014 html.c:5366
410 msgid "Unbookmark"
411 msgstr "Uit favorieten verwijderen"
412
413-#: html.c:1936
414+#: html.c:2014
415 msgid "Delete this post from your bookmarks"
416 msgstr "Verwijder dit bericht uit je favorieten"
417
418-#: html.c:1939 html.c:4917
419+#: html.c:2017 html.c:5361
420 msgid "Bookmark"
421 msgstr "Favoriet"
422
423-#: html.c:1939
424+#: html.c:2017
425 msgid "Add this post to your bookmarks"
426 msgstr "Voeg dit bericht toe aan je favorieten"
427
428-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
429+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
430 msgid "Unfollow"
431 msgstr "Ontvolgen"
432
433-#: html.c:1945 html.c:3387
434+#: html.c:2023 html.c:3763 html.c:4042
435 msgid "Stop following this user's activity"
436 msgstr "Stop met het volgen van de activiteit van deze gebruiker"
437
438-#: html.c:1949 html.c:3401
439+#: html.c:2027 html.c:3777 html.c:4044
440 msgid "Start following this user's activity"
441 msgstr "Start met het volgen van de activiteit van deze gebruiker"
442
443-#: html.c:1955 html.c:4860
444+#: html.c:2033 html.c:5304
445 msgid "Unfollow Group"
446 msgstr "Ontvolg groep"
447
448-#: html.c:1956
449+#: html.c:2034
450 msgid "Stop following this group or channel"
451 msgstr "Stop met het volgen van deze groep of kanaal"
452
453-#: html.c:1960 html.c:4847
454+#: html.c:2038 html.c:5291
455 msgid "Follow Group"
456 msgstr "Volg groep"
457
458-#: html.c:1961
459+#: html.c:2039
460 msgid "Start following this group or channel"
461 msgstr "Start met het volgen van deze groep of kanaal"
462
463-#: html.c:1966 html.c:3423 html.c:4791
464+#: html.c:2044 html.c:3799 html.c:5235
465 msgid "MUTE"
466 msgstr "DEMP"
467
468-#: html.c:1967
469+#: html.c:2045
470 msgid "Block any activity from this user forever"
471 msgstr "Blokkeer alle activiteit van deze gebruiker voor altijd"
472
473-#: html.c:1972 html.c:3405 html.c:4877
474+#: html.c:2050 html.c:3781 html.c:5321
475 msgid "Delete"
476 msgstr "Verwijderen"
477
478-#: html.c:1972
479+#: html.c:2050
480 msgid "Delete this post"
481 msgstr "Verwijder dit bericht"
482
483-#: html.c:1975 html.c:4799
484+#: html.c:2053 html.c:5243
485 msgid "Hide"
486 msgstr "Verberg"
487
488-#: html.c:1975
489+#: html.c:2053
490 msgid "Hide this post and its children"
491 msgstr "Verberg dit bericht en zijn kinderen"
492
493-#: html.c:2017
494+#: html.c:2095
495 msgid "Edit..."
496 msgstr "Bewerken..."
497
498-#: html.c:2039
499+#: html.c:2133
500 msgid "Reply..."
501 msgstr "Antwoord..."
502
503-#: html.c:2090
504+#: html.c:2184
505 msgid "Truncated (too deep)"
506 msgstr "Afgekapt (te diep)"
507
508-#: html.c:2108
509+#: html.c:2202
510 msgid "follows you"
511 msgstr "volgt jou"
512
513-#: html.c:2182
514+#: html.c:2276
515 msgid "Pinned"
516 msgstr "Vastgezet"
517
518-#: html.c:2190
519+#: html.c:2284
520 msgid "Bookmarked"
521 msgstr "Favoriet"
522
523-#: html.c:2198
524+#: html.c:2292
525 msgid "Poll"
526 msgstr "Peiling"
527
528-#: html.c:2205
529+#: html.c:2299
530 msgid "Voted"
531 msgstr "Gestemd"
532
533-#: html.c:2214
534+#: html.c:2308
535 msgid "Event"
536 msgstr "Evenement"
537
538-#: html.c:2246 html.c:2275
539+#: html.c:2340 html.c:2369
540 msgid "boosted"
541 msgstr "geboost"
542
543-#: html.c:2289
544+#: html.c:2383
545 msgid "in reply to"
546 msgstr "als antwoord op"
547
548-#: html.c:2345
549+#: html.c:2439
550 msgid " [SENSITIVE CONTENT]"
551 msgstr " [GEVOELIGE INHOUD]"
552
553-#: html.c:2512
554+#: html.c:2796
555 msgid "Vote"
556 msgstr "Stem"
557
558-#: html.c:2522
559+#: html.c:2806
560 msgid "Closed"
561 msgstr "Gesloten"
562
563-#: html.c:2547
564+#: html.c:2831
565 msgid "Closes in"
566 msgstr "Sluit over"
567
568-#: html.c:2627
569+#: html.c:2911
570 msgid "Video"
571 msgstr "Video"
572
573-#: html.c:2642
574+#: html.c:2926
575 msgid "Audio"
576 msgstr "Audio"
577
578-#: html.c:2670
579+#: html.c:2954
580 msgid "Attachment"
581 msgstr "Bijlage"
582
583-#: html.c:2684
584+#: html.c:2968
585 msgid "Alt..."
586 msgstr "Alt..."
587
588-#: html.c:2697
589+#: html.c:2981
590 msgid "Source channel or community"
591 msgstr "Bron kanaal of gemeenschap"
592
593-#: html.c:2791
594+#: html.c:3075
595 msgid "Time: "
596 msgstr "Tijd: "
597
598-#: html.c:2872
599+#: html.c:3156
600 msgid "Older..."
601 msgstr "Ouder..."
602
603-#: html.c:2974
604+#: html.c:3258
605 msgid "about this site"
606 msgstr "over deze site"
607
608-#: html.c:2976
609+#: html.c:3260
610 msgid "powered by "
611 msgstr "aangedreven door "
612
613-#: html.c:3041
614+#: html.c:3329
615 msgid "Dismiss"
616 msgstr "Verwerp"
617
618-#: html.c:3058
619+#: html.c:3346
620 #, c-format
621 msgid "Timeline for list '%s'"
622 msgstr "Tijdlijn voor lijst '%s'"
623
624-#: html.c:3077 html.c:4169
625+#: html.c:3365 html.c:4589
626 msgid "Pinned posts"
627 msgstr "Vastgezette berichten"
628
629-#: html.c:3089 html.c:4184
630+#: html.c:3377 html.c:4604
631 msgid "Bookmarked posts"
632 msgstr "Favoriete berichten"
633
634-#: html.c:3101 html.c:4199
635+#: html.c:3389 html.c:4619
636 msgid "Post drafts"
637 msgstr "Berichtenconcepten"
638
639-#: html.c:3177
640+#: html.c:3465
641 msgid "No more unseen posts"
642 msgstr "Geen ongelezen berichten meer"
643
644-#: html.c:3181 html.c:3290
645+#: html.c:3469 html.c:3578
646 msgid "Back to top"
647 msgstr "Terug naar boven"
648
649-#: html.c:3243
650+#: html.c:3531
651 msgid "History"
652 msgstr "Geschiedenis"
653
654-#: html.c:3295 html.c:3734
655+#: html.c:3583 html.c:4149
656 msgid "More..."
657 msgstr "Meer..."
658
659-#: html.c:3391 html.c:4813
660+#: html.c:3767 html.c:5257
661 msgid "Unlimit"
662 msgstr "Ongelimiteerd"
663
664-#: html.c:3392
665+#: html.c:3768
666 msgid "Allow announces (boosts) from this user"
667 msgstr "Sta aankondigingen (boosts) van deze gebruiker toe"
668
669-#: html.c:3395 html.c:4809
670+#: html.c:3771 html.c:5253
671 msgid "Limit"
672 msgstr "Limiteer"
673
674-#: html.c:3396
675+#: html.c:3772
676 msgid "Block announces (boosts) from this user"
677 msgstr "Blokkeer aankondigingen (boosts) van deze gebruiker"
678
679-#: html.c:3405
680+#: html.c:3781
681 msgid "Delete this user"
682 msgstr "Verwijder deze gebruiker"
683
684-#: html.c:3410 html.c:4927
685+#: html.c:3786 html.c:5371
686 msgid "Approve"
687 msgstr "Goedkeuren"
688
689-#: html.c:3411
690+#: html.c:3787
691 msgid "Approve this follow request"
692 msgstr "Keurt dit volgverzoek goed"
693
694-#: html.c:3414 html.c:4951
695+#: html.c:3790 html.c:5395
696 msgid "Discard"
697 msgstr "Afwijzen"
698
699-#: html.c:3414
700+#: html.c:3790
701 msgid "Discard this follow request"
702 msgstr "Wijs dit volgverzoek af"
703
704-#: html.c:3419 html.c:4795
705+#: html.c:3795 html.c:5239
706 msgid "Unmute"
707 msgstr "Niet meer dempen"
708
709-#: html.c:3420
710+#: html.c:3796
711 msgid "Stop blocking activities from this user"
712 msgstr "Stop met het blokkeren van activiteiten van deze gebruiker"
713
714-#: html.c:3424
715+#: html.c:3800
716 msgid "Block any activity from this user"
717 msgstr "Blokkeer alle activiteit van deze gebruiker"
718
719-#: html.c:3432
720+#: html.c:3808
721 msgid "Direct Message..."
722 msgstr "Persoonlijk bericht..."
723
724-#: html.c:3467
725+#: html.c:3843
726 msgid "Pending follow confirmations"
727 msgstr "Openstaande volgbevestigingen"
728
729-#: html.c:3471
730+#: html.c:3847
731 msgid "People you follow"
732 msgstr "Mensen die je volgt"
733
734-#: html.c:3472
735+#: html.c:3848
736 msgid "People that follow you"
737 msgstr "Mensen die jou volgen"
738
739-#: html.c:3511
740+#: html.c:3887
741 msgid "Clear all"
742 msgstr "Alle wissen"
743
744-#: html.c:3571
745+#: html.c:3951
746 msgid "Mention"
747 msgstr "Benoemen"
748
749-#: html.c:3574
750+#: html.c:3954
751 msgid "Finished poll"
752 msgstr "Afgeronde peiling"
753
754-#: html.c:3590
755+#: html.c:3979
756 msgid "Follow Request"
757 msgstr "Volgverzoek"
758
759-#: html.c:3674
760+#: html.c:4089
761 msgid "Context"
762 msgstr "Context"
763
764-#: html.c:3692
765+#: html.c:4107
766 msgid "New"
767 msgstr "Nieuw"
768
769-#: html.c:3707
770+#: html.c:4122
771 msgid "Already seen"
772 msgstr "Al gezien"
773
774-#: html.c:3722
775+#: html.c:4137
776 msgid "None"
777 msgstr "Geen"
778
779-#: html.c:3994
780+#: html.c:4414
781 #, c-format
782 msgid "Search results for account %s"
783 msgstr "Zoekresultaten voor account %s"
784
785-#: html.c:4001
786+#: html.c:4421
787 #, c-format
788 msgid "Account %s not found"
789 msgstr "Account %s niet gevonden"
790
791-#: html.c:4032
792+#: html.c:4452
793 #, c-format
794 msgid "Search results for tag %s"
795 msgstr "Zoekresultaten voor tag %s"
796
797-#: html.c:4032
798+#: html.c:4452
799 #, c-format
800 msgid "Nothing found for tag %s"
801 msgstr "Niets gevonden voor tag %s"
802
803-#: html.c:4048
804+#: html.c:4468
805 #, c-format
806 msgid "Search results for '%s' (may be more)"
807 msgstr "Zoekresultaten voor '%s' (mogelijk meer)"
808
809-#: html.c:4051
810+#: html.c:4471
811 #, c-format
812 msgid "Search results for '%s'"
813 msgstr "Zoekresultaten voor '%s'"
814
815-#: html.c:4054
816+#: html.c:4474
817 #, c-format
818 msgid "No more matches for '%s'"
819 msgstr "Geen verdere overeenkomsten voor '%s'"
820
821-#: html.c:4056
822+#: html.c:4476
823 #, c-format
824 msgid "Nothing found for '%s'"
825 msgstr "Niets gevonden voor '%s'"
826
827-#: html.c:4154
828+#: html.c:4574
829 msgid "Showing instance timeline"
830 msgstr "Toond tijdlijn van instantie"
831
832-#: html.c:4237
833+#: html.c:4657
834 #, c-format
835 msgid "Showing timeline for list '%s'"
836 msgstr "Toond tijdlijn voor lijst '%s'"
837
838-#: httpd.c:258
839+#: httpd.c:259
840 #, c-format
841 msgid "Search results for tag #%s"
842 msgstr "Zoekresultaten voor tag #%s"
843
844-#: httpd.c:267
845+#: httpd.c:268
846 msgid "Recent posts by users in this instance"
847 msgstr "Recente berichten van gebruikers in deze instantie"
848
849-#: html.c:1764
850+#: html.c:1842
851 msgid "Blocked hashtags..."
852 msgstr "Geblokkeerde hashtags..."
853
854-#: html.c:518
855+#: html.c:574
856 msgid "Optional URL to reply to"
857 msgstr "Optionele URL om op te antwoorden"
858
859-#: html.c:695
860+#: html.c:751
861 msgid ""
862 "Option 1...\n"
863 "Option 2...\n"
864@@ -707,94 +707,106 @@ msgstr ""
865 "Optie 3...\n"
866 "..."
867
868-#: html.c:1558
869+#: html.c:1636
870 msgid "Bot API key"
871 msgstr "Bot API sleutel"
872
873-#: html.c:1564
874+#: html.c:1642
875 msgid "Chat id"
876 msgstr "Chat id"
877
878-#: html.c:1572
879+#: html.c:1650
880 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
881 msgstr "ntfy server - volledige URL (voorbeeld: https://ntfy.sh/YourTopic)"
882
883-#: html.c:1578
884+#: html.c:1656
885 msgid "ntfy token - if needed"
886 msgstr "ntfy token - indien nodig"
887
888-#: html.c:3078
889+#: html.c:3366
890 msgid "pinned"
891 msgstr "vastgezet"
892
893-#: html.c:3090
894+#: html.c:3378
895 msgid "bookmarks"
896 msgstr "favorieten"
897
898-#: html.c:3102
899+#: html.c:3390
900 msgid "drafts"
901 msgstr "concepten"
902
903-#: html.c:584
904+#: html.c:640
905 msgid "Scheduled post..."
906 msgstr "Gepland bericht..."
907
908 msgid "Post date and time:"
909 msgstr "Bericht datum en tijd:"
910
911-#: html.c:3113 html.c:4214
912+#: html.c:3401 html.c:4634
913 msgid "Scheduled posts"
914 msgstr "Geplande berichten"
915
916-#: html.c:3114
917+#: html.c:3402
918 msgid "scheduled posts"
919 msgstr "geplande berichten"
920
921-#: html.c:578
922+#: html.c:634
923 #, c-format
924 msgid "Post date and time (timezone: %s):"
925 msgstr "Bericht datum en tijd (tijdzone: %s):"
926
927-#: html.c:1689
928+#: html.c:1767
929 msgid "Time zone:"
930 msgstr "Tijdzone:"
931
932-#: html.c:559
933+#: html.c:615
934 msgid "Language:"
935 msgstr ""
936
937-#: html.c:1580
938+#: html.c:1658
939 msgid "Notify webhook:"
940 msgstr ""
941
942-#: html.c:1586
943+#: html.c:1664
944 msgid "http://example.com/webhook"
945 msgstr ""
946
947-#: html.c:1694
948+#: html.c:1772
949 msgid "Languages you usually post in:"
950 msgstr ""
951
952-#: html.c:1700
953+#: html.c:1778
954 msgid "en fr es de_AT"
955 msgstr ""
956
957-#: html.c:460
958+#: html.c:428
959 msgid "Visibility: "
960 msgstr ""
961
962-#: html.c:468
963 msgid "Public"
964 msgstr ""
965
966-#: html.c:477
967 msgid "Unlisted"
968 msgstr ""
969
970-#: html.c:486
971 msgid "Followers-only"
972 msgstr ""
973
974-#: html.c:495
975 msgid "Direct Message"
976 msgstr ""
977+
978+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
979+msgid "EmojiUnreact"
980+msgstr ""
981+
982+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
983+msgid "EmojiReact"
984+msgstr ""
985+
986+#: html.c:2115
987+msgid "Emoji react..."
988+msgstr ""
989+
990+#: html.c:2609
991+msgid "Emoji reactions: "
992+msgstr ""
+204,
-192
1@@ -4,127 +4,127 @@
2 msgid ""
3 msgstr ""
4 "Project-Id-Version: snac\n"
5-"PO-Revision-Date: 2025-10-11 16:48-0300\n"
6+"PO-Revision-Date: 2025-12-22 07:55-0300\n"
7 "Last-Translator: Daltux <@daltux@snac.daltux.net>\n"
8 "Language: pt_BR\n"
9 "MIME-Version: 1.0\n"
10 "Content-Type: text/plain; charset=UTF-8\n"
11 "Content-Transfer-Encoding: 8bit\n"
12-"X-Generator: Poedit 3.7\n"
13+"X-Generator: Geany / PoHelper 2.0\n"
14
15-#: html.c:440
16+#: html.c:534
17 msgid "Sensitive content: "
18 msgstr "Conteúdo sensível: "
19
20-#: html.c:448
21+#: html.c:542
22 msgid "Sensitive content description"
23 msgstr "Descrição do conteúdo sensível"
24
25 msgid "Only for mentioned people: "
26 msgstr "Apenas para pessoas mencionadas: "
27
28-#: html.c:514
29+#: html.c:570
30 msgid "Reply to (URL): "
31 msgstr "Resposta para (URL): "
32
33-#: html.c:523
34+#: html.c:579
35 msgid "Don't send, but store as a draft"
36 msgstr "Não enviar, mas guardar como rascunho"
37
38-#: html.c:524
39+#: html.c:580
40 msgid "Draft:"
41 msgstr "Rascunho:"
42
43-#: html.c:614
44+#: html.c:670
45 msgid "Attachments..."
46 msgstr "Anexos..."
47
48-#: html.c:637
49+#: html.c:693
50 msgid "File:"
51 msgstr "Arquivo:"
52
53-#: html.c:641
54+#: html.c:697
55 msgid "Clear this field to delete the attachment"
56 msgstr "Limpe este campo para remover o anexo"
57
58-#: html.c:650 html.c:675
59+#: html.c:706 html.c:731
60 msgid "Attachment description"
61 msgstr "Descrição do anexo"
62
63-#: html.c:686
64+#: html.c:742
65 msgid "Poll..."
66 msgstr "Enquete..."
67
68-#: html.c:688
69+#: html.c:744
70 msgid "Poll options (one per line, up to 8):"
71 msgstr "Alternativas da enquete (uma por linha, até 8):"
72
73-#: html.c:700
74+#: html.c:756
75 msgid "One choice"
76 msgstr "Escolha única"
77
78-#: html.c:703
79+#: html.c:759
80 msgid "Multiple choices"
81 msgstr "Escolhas múltiplas"
82
83-#: html.c:709
84+#: html.c:765
85 msgid "End in 5 minutes"
86 msgstr "Encerrar em 5 minutos"
87
88-#: html.c:713
89+#: html.c:769
90 msgid "End in 1 hour"
91 msgstr "Encerrar em 1 hora"
92
93-#: html.c:716
94+#: html.c:772
95 msgid "End in 1 day"
96 msgstr "Encerrar em 1 dia"
97
98-#: html.c:724
99+#: html.c:780
100 msgid "Post"
101 msgstr "Publicar"
102
103-#: html.c:826 html.c:833
104+#: html.c:882 html.c:889
105 msgid "Site description"
106 msgstr "Descrição do sítio eletrônico"
107
108-#: html.c:844
109+#: html.c:900
110 msgid "Admin email"
111 msgstr "E-mail da administração"
112
113-#: html.c:857
114+#: html.c:913
115 msgid "Admin account"
116 msgstr "Conta de quem administra"
117
118-#: html.c:922 html.c:1278
119+#: html.c:978 html.c:1334
120 #, c-format
121 msgid "%d following, %d followers"
122 msgstr "%d seguidos, %d seguidores"
123
124-#: html.c:1019
125+#: html.c:1075
126 msgid "RSS"
127 msgstr "RSS"
128
129-#: html.c:1024 html.c:1063
130+#: html.c:1080 html.c:1119
131 msgid "private"
132 msgstr "privado"
133
134-#: html.c:1059
135+#: html.c:1115
136 msgid "public"
137 msgstr "público"
138
139-#: html.c:1067
140+#: html.c:1123
141 msgid "notifications"
142 msgstr "notificações"
143
144-#: html.c:1072
145+#: html.c:1128
146 msgid "people"
147 msgstr "pessoas"
148
149-#: html.c:1077
150+#: html.c:1133
151 msgid "instance"
152 msgstr "instância"
153
154-#: html.c:1086
155+#: html.c:1142
156 msgid ""
157 "Search posts by URL or content (regular expression), @user@host accounts, or "
158 "#tag"
159@@ -132,574 +132,574 @@ msgstr ""
160 "Procurar publicações por URL ou conteúdo (expressão regular), contas "
161 "(@perfil@servidor) ou #tag"
162
163-#: html.c:1087
164+#: html.c:1143
165 msgid "Content search"
166 msgstr "Buscar conteúdo"
167
168-#: html.c:1213
169+#: html.c:1269
170 msgid "verified link"
171 msgstr "ligação verificada"
172
173-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
174+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
175 msgid "Location: "
176 msgstr "Localização: "
177
178-#: html.c:1302
179+#: html.c:1358
180 msgid "New Post..."
181 msgstr "Nova publicação..."
182
183-#: html.c:1304
184+#: html.c:1360
185 msgid "What's on your mind?"
186 msgstr "O que tem em mente?"
187
188-#: html.c:1313
189+#: html.c:1369
190 msgid "Operations..."
191 msgstr "Operações..."
192
193-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
194+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
195 msgid "Follow"
196 msgstr "Seguir"
197
198-#: html.c:1330
199+#: html.c:1386
200 msgid "(by URL or user@host)"
201 msgstr "(por URL ou conta@servidor)"
202
203-#: html.c:1345 html.c:1925 html.c:4766
204+#: html.c:1401 html.c:2003 html.c:5210
205 msgid "Boost"
206 msgstr "Impulsionar"
207
208-#: html.c:1347 html.c:1364
209+#: html.c:1403 html.c:1420 html.c:1442
210 msgid "(by URL)"
211 msgstr "(por URL)"
212
213-#: html.c:1362 html.c:1904 html.c:4757
214+#: html.c:1418 html.c:1982 html.c:5201
215 msgid "Like"
216 msgstr "Curtir"
217
218-#: html.c:1490
219+#: html.c:1568
220 msgid "User Settings..."
221 msgstr "Definições da conta..."
222
223-#: html.c:1499
224+#: html.c:1577
225 msgid "Display name:"
226 msgstr "Nome a ser exibido:"
227
228-#: html.c:1505
229+#: html.c:1583
230 msgid "Your name"
231 msgstr "Seu nome"
232
233-#: html.c:1507
234+#: html.c:1585
235 msgid "Avatar: "
236 msgstr "Avatar: "
237
238-#: html.c:1515
239+#: html.c:1593
240 msgid "Delete current avatar"
241 msgstr "Remover avatar atual"
242
243-#: html.c:1517
244+#: html.c:1595
245 msgid "Header image (banner): "
246 msgstr "Imagem de cabeçalho (capa): "
247
248-#: html.c:1525
249+#: html.c:1603
250 msgid "Delete current header image"
251 msgstr "Remover imagem de cabeçalho atual"
252
253-#: html.c:1527
254+#: html.c:1605
255 msgid "Bio:"
256 msgstr "Biografia:"
257
258-#: html.c:1533
259+#: html.c:1611
260 msgid "Write about yourself here..."
261 msgstr "Escreva aqui sobre você..."
262
263-#: html.c:1542
264+#: html.c:1620
265 msgid "Always show sensitive content"
266 msgstr "Sempre exibir conteúdo sensível"
267
268-#: html.c:1544
269+#: html.c:1622
270 msgid "Email address for notifications:"
271 msgstr "Endereço de e-mail para notificações:"
272
273-#: html.c:1552
274+#: html.c:1630
275 msgid "Telegram notifications (bot key and chat id):"
276 msgstr "Notificações Telegram (chave do robô e ID da conversa):"
277
278-#: html.c:1566
279+#: html.c:1644
280 msgid "ntfy notifications (ntfy server and token):"
281 msgstr "ntfy - notificações (servidor ntfy e token):"
282
283-#: html.c:1588
284+#: html.c:1666
285 msgid "Maximum days to keep posts (0: server settings):"
286 msgstr "Máximo de dias a preservar publicações (0: definições do servidor):"
287
288-#: html.c:1602
289+#: html.c:1680
290 msgid "Drop direct messages from people you don't follow"
291 msgstr "Descartar mensagens diretas de quem você não segue"
292
293-#: html.c:1611
294+#: html.c:1689
295 msgid "This account is a bot"
296 msgstr "Esta conta é robotizada"
297
298-#: html.c:1620
299+#: html.c:1698
300 msgid "Auto-boost all mentions to this account"
301 msgstr "Impulsionar automaticamente todas as menções a esta conta"
302
303-#: html.c:1629
304+#: html.c:1707
305 msgid "This account is private (posts are not shown through the web)"
306 msgstr "Esta conta é privada (as publicações não são exibidas na Web)"
307
308-#: html.c:1639
309+#: html.c:1717
310 msgid "Collapse top threads by default"
311 msgstr "Recolher por padrão as sequências de publicações"
312
313-#: html.c:1648
314+#: html.c:1726
315 msgid "Follow requests must be approved"
316 msgstr "Solicitações de seguimento precisam ser aprovadas"
317
318-#: html.c:1657
319+#: html.c:1735
320 msgid "Publish follower and following metrics"
321 msgstr "Publicar métricas de seguidores e seguidos"
322
323-#: html.c:1659
324+#: html.c:1737
325 msgid "Current location:"
326 msgstr "Localização atual:"
327
328-#: html.c:1673
329+#: html.c:1751
330 msgid "Profile metadata (key=value pairs in each line):"
331 msgstr "Metadados do perfil (par de chave=valor em cada linha):"
332
333-#: html.c:1684
334+#: html.c:1762
335 msgid "Web interface language:"
336 msgstr "Idioma da interface Web:"
337
338-#: html.c:1703
339+#: html.c:1781
340 msgid "New password:"
341 msgstr "Nova senha:"
342
343-#: html.c:1710
344+#: html.c:1788
345 msgid "Repeat new password:"
346 msgstr "Repita a nova senha:"
347
348-#: html.c:1720
349+#: html.c:1798
350 msgid "Update user info"
351 msgstr "Atualizar informações da conta"
352
353-#: html.c:1731
354+#: html.c:1809
355 msgid "Followed hashtags..."
356 msgstr "Hashtags seguidas..."
357
358-#: html.c:1733 html.c:1766
359+#: html.c:1811 html.c:1844
360 msgid "One hashtag per line"
361 msgstr "Uma hashtag por linha"
362
363-#: html.c:1755 html.c:1787
364+#: html.c:1833 html.c:1865
365 msgid "Update hashtags"
366 msgstr "Atualizar hashtags"
367
368-#: html.c:1904
369+#: html.c:1982
370 msgid "Say you like this post"
371 msgstr "Declarar que gosta desta publicação"
372
373-#: html.c:1909 html.c:4775
374+#: html.c:1987 html.c:5219
375 msgid "Unlike"
376 msgstr "Descurtir"
377
378-#: html.c:1909
379+#: html.c:1987
380 msgid "Nah don't like it that much"
381 msgstr "Não gosto tanto assim disso"
382
383-#: html.c:1915 html.c:4912
384+#: html.c:1993 html.c:5356
385 msgid "Unpin"
386 msgstr "Desafixar"
387
388-#: html.c:1915
389+#: html.c:1993
390 msgid "Unpin this post from your timeline"
391 msgstr "Desafixar esta publicação da sua linha do tempo"
392
393-#: html.c:1918 html.c:4907
394+#: html.c:1996 html.c:5351
395 msgid "Pin"
396 msgstr "Afixar"
397
398-#: html.c:1918
399+#: html.c:1996
400 msgid "Pin this post to the top of your timeline"
401 msgstr "Afixar esta publicação no topo de sua linha do tempo"
402
403-#: html.c:1925
404+#: html.c:2003
405 msgid "Announce this post to your followers"
406 msgstr "Anunciar esta publicação para seus seguidores"
407
408-#: html.c:1930 html.c:4783
409+#: html.c:2008 html.c:5227
410 msgid "Unboost"
411 msgstr "Desimpulsionar"
412
413-#: html.c:1930
414+#: html.c:2008
415 msgid "I regret I boosted this"
416 msgstr "Arrependo-me de ter impulsionado isso"
417
418-#: html.c:1936 html.c:4922
419+#: html.c:2014 html.c:5366
420 msgid "Unbookmark"
421 msgstr "Desmarcar"
422
423-#: html.c:1936
424+#: html.c:2014
425 msgid "Delete this post from your bookmarks"
426 msgstr "Remover esta publicação dos seus marcadores"
427
428-#: html.c:1939 html.c:4917
429+#: html.c:2017 html.c:5361
430 msgid "Bookmark"
431 msgstr "Marcar"
432
433-#: html.c:1939
434+#: html.c:2017
435 msgid "Add this post to your bookmarks"
436 msgstr "Adicionar esta publicação aos seus marcadores"
437
438-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
439+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
440 msgid "Unfollow"
441 msgstr "Deixar de seguir"
442
443-#: html.c:1945 html.c:3387
444+#: html.c:2023 html.c:3763 html.c:4042
445 msgid "Stop following this user's activity"
446 msgstr "Parar de acompanhar a atividade deste perfil"
447
448-#: html.c:1949 html.c:3401
449+#: html.c:2027 html.c:3777 html.c:4044
450 msgid "Start following this user's activity"
451 msgstr "Começar a acompanhar a atividade deste perfil"
452
453-#: html.c:1955 html.c:4860
454+#: html.c:2033 html.c:5304
455 msgid "Unfollow Group"
456 msgstr "Deixar de seguir grupo"
457
458-#: html.c:1956
459+#: html.c:2034
460 msgid "Stop following this group or channel"
461 msgstr "Parar de acompanhar este grupo ou canal"
462
463-#: html.c:1960 html.c:4847
464+#: html.c:2038 html.c:5291
465 msgid "Follow Group"
466 msgstr "Seguir grupo"
467
468-#: html.c:1961
469+#: html.c:2039
470 msgid "Start following this group or channel"
471 msgstr "Começar a acompanhar este grupo ou canal"
472
473-#: html.c:1966 html.c:3423 html.c:4791
474+#: html.c:2044 html.c:3799 html.c:5235
475 msgid "MUTE"
476 msgstr "MUDO"
477
478-#: html.c:1967
479+#: html.c:2045
480 msgid "Block any activity from this user forever"
481 msgstr "Bloquear toda atividade deste perfil para sempre"
482
483-#: html.c:1972 html.c:3405 html.c:4877
484+#: html.c:2050 html.c:3781 html.c:5321
485 msgid "Delete"
486 msgstr "Eliminar"
487
488-#: html.c:1972
489+#: html.c:2050
490 msgid "Delete this post"
491 msgstr "Apagar esta publicação"
492
493-#: html.c:1975 html.c:4799
494+#: html.c:2053 html.c:5243
495 msgid "Hide"
496 msgstr "Ocultar"
497
498-#: html.c:1975
499+#: html.c:2053
500 msgid "Hide this post and its children"
501 msgstr "Ocultar esta publicação e suas respostas"
502
503-#: html.c:2017
504+#: html.c:2095
505 msgid "Edit..."
506 msgstr "Editar..."
507
508-#: html.c:2039
509+#: html.c:2133
510 msgid "Reply..."
511 msgstr "Responder..."
512
513-#: html.c:2090
514+#: html.c:2184
515 msgid "Truncated (too deep)"
516 msgstr "Truncada (muito extensa)"
517
518-#: html.c:2108
519+#: html.c:2202
520 msgid "follows you"
521 msgstr "segue você"
522
523-#: html.c:2182
524+#: html.c:2276
525 msgid "Pinned"
526 msgstr "Afixada"
527
528-#: html.c:2190
529+#: html.c:2284
530 msgid "Bookmarked"
531 msgstr "Marcada"
532
533-#: html.c:2198
534+#: html.c:2292
535 msgid "Poll"
536 msgstr "Enquete"
537
538-#: html.c:2205
539+#: html.c:2299
540 msgid "Voted"
541 msgstr "Votou"
542
543-#: html.c:2214
544+#: html.c:2308
545 msgid "Event"
546 msgstr "Evento"
547
548-#: html.c:2246 html.c:2275
549+#: html.c:2340 html.c:2369
550 msgid "boosted"
551 msgstr "impulsionou"
552
553-#: html.c:2289
554+#: html.c:2383
555 msgid "in reply to"
556 msgstr "em resposta a"
557
558-#: html.c:2345
559+#: html.c:2439
560 msgid " [SENSITIVE CONTENT]"
561 msgstr " [CONTEÚDO SENSÍVEL]"
562
563-#: html.c:2512
564+#: html.c:2796
565 msgid "Vote"
566 msgstr "Votar"
567
568-#: html.c:2522
569+#: html.c:2806
570 msgid "Closed"
571 msgstr "Encerrada"
572
573-#: html.c:2547
574+#: html.c:2831
575 msgid "Closes in"
576 msgstr "Encerra em"
577
578-#: html.c:2627
579+#: html.c:2911
580 msgid "Video"
581 msgstr "Vídeo"
582
583-#: html.c:2642
584+#: html.c:2926
585 msgid "Audio"
586 msgstr "Áudio"
587
588-#: html.c:2670
589+#: html.c:2954
590 msgid "Attachment"
591 msgstr "Anexo"
592
593-#: html.c:2684
594+#: html.c:2968
595 msgid "Alt..."
596 msgstr "Texto alternativo..."
597
598-#: html.c:2697
599+#: html.c:2981
600 msgid "Source channel or community"
601 msgstr "Canal ou comunidade de origem"
602
603-#: html.c:2791
604+#: html.c:3075
605 msgid "Time: "
606 msgstr "Horário: "
607
608-#: html.c:2872
609+#: html.c:3156
610 msgid "Older..."
611 msgstr "Anteriores..."
612
613-#: html.c:2974
614+#: html.c:3258
615 msgid "about this site"
616 msgstr "sobre este sítio eletrônico"
617
618-#: html.c:2976
619+#: html.c:3260
620 msgid "powered by "
621 msgstr "movido por "
622
623-#: html.c:3041
624+#: html.c:3329
625 msgid "Dismiss"
626 msgstr "Dispensar"
627
628-#: html.c:3058
629+#: html.c:3346
630 #, c-format
631 msgid "Timeline for list '%s'"
632 msgstr "Linha do tempo da lista '%s'"
633
634-#: html.c:3077 html.c:4169
635+#: html.c:3365 html.c:4589
636 msgid "Pinned posts"
637 msgstr "Publicações afixadas"
638
639-#: html.c:3089 html.c:4184
640+#: html.c:3377 html.c:4604
641 msgid "Bookmarked posts"
642 msgstr "Publicações marcadas"
643
644-#: html.c:3101 html.c:4199
645+#: html.c:3389 html.c:4619
646 msgid "Post drafts"
647 msgstr "Publicações em rascunho"
648
649-#: html.c:3177
650+#: html.c:3465
651 msgid "No more unseen posts"
652 msgstr "Sem mais publicações não vistas"
653
654-#: html.c:3181 html.c:3290
655+#: html.c:3469 html.c:3578
656 msgid "Back to top"
657 msgstr "Voltar ao topo"
658
659-#: html.c:3243
660+#: html.c:3531
661 msgid "History"
662 msgstr "Histórico"
663
664-#: html.c:3295 html.c:3734
665+#: html.c:3583 html.c:4149
666 msgid "More..."
667 msgstr "Mais..."
668
669-#: html.c:3391 html.c:4813
670+#: html.c:3767 html.c:5257
671 msgid "Unlimit"
672 msgstr "Retirar restrição"
673
674-#: html.c:3392
675+#: html.c:3768
676 msgid "Allow announces (boosts) from this user"
677 msgstr "Permitir anúncios (impulsionamentos) deste perfil"
678
679-#: html.c:3395 html.c:4809
680+#: html.c:3771 html.c:5253
681 msgid "Limit"
682 msgstr "Restringir"
683
684-#: html.c:3396
685+#: html.c:3772
686 msgid "Block announces (boosts) from this user"
687 msgstr "Bloquear anúncios (impulsionamentos) deste perfil"
688
689-#: html.c:3405
690+#: html.c:3781
691 msgid "Delete this user"
692 msgstr "Apagar este perfil"
693
694-#: html.c:3410 html.c:4927
695+#: html.c:3786 html.c:5371
696 msgid "Approve"
697 msgstr "Aprovar"
698
699-#: html.c:3411
700+#: html.c:3787
701 msgid "Approve this follow request"
702 msgstr "Aprovar esta solicitação de seguimento"
703
704-#: html.c:3414 html.c:4951
705+#: html.c:3790 html.c:5395
706 msgid "Discard"
707 msgstr "Descartar"
708
709-#: html.c:3414
710+#: html.c:3790
711 msgid "Discard this follow request"
712 msgstr "Descartar esta solicitação de seguimento"
713
714-#: html.c:3419 html.c:4795
715+#: html.c:3795 html.c:5239
716 msgid "Unmute"
717 msgstr "Desbloquear"
718
719-#: html.c:3420
720+#: html.c:3796
721 msgid "Stop blocking activities from this user"
722 msgstr "Parar de bloquear as atividades deste perfil"
723
724-#: html.c:3424
725+#: html.c:3800
726 msgid "Block any activity from this user"
727 msgstr "Bloquear toda atividade deste perfil"
728
729-#: html.c:3432
730+#: html.c:3808
731 msgid "Direct Message..."
732 msgstr "Mensagem direta..."
733
734-#: html.c:3467
735+#: html.c:3843
736 msgid "Pending follow confirmations"
737 msgstr "Confirmações de seguimento pendentes"
738
739-#: html.c:3471
740+#: html.c:3847
741 msgid "People you follow"
742 msgstr "Pessoas que você segue"
743
744-#: html.c:3472
745+#: html.c:3848
746 msgid "People that follow you"
747 msgstr "Pessoas que seguem você"
748
749-#: html.c:3511
750+#: html.c:3887
751 msgid "Clear all"
752 msgstr "Limpar tudo"
753
754-#: html.c:3571
755+#: html.c:3951
756 msgid "Mention"
757 msgstr "Menção"
758
759-#: html.c:3574
760+#: html.c:3954
761 msgid "Finished poll"
762 msgstr "Enquete encerrada"
763
764-#: html.c:3590
765+#: html.c:3979
766 msgid "Follow Request"
767 msgstr "Solicitação de seguimento"
768
769-#: html.c:3674
770+#: html.c:4089
771 msgid "Context"
772 msgstr "Contexto"
773
774-#: html.c:3692
775+#: html.c:4107
776 msgid "New"
777 msgstr "Novas"
778
779-#: html.c:3707
780+#: html.c:4122
781 msgid "Already seen"
782 msgstr "Já vistas"
783
784-#: html.c:3722
785+#: html.c:4137
786 msgid "None"
787 msgstr "Nenhuma"
788
789-#: html.c:3994
790+#: html.c:4414
791 #, c-format
792 msgid "Search results for account %s"
793 msgstr "Resultados da busca pela conta %s"
794
795-#: html.c:4001
796+#: html.c:4421
797 #, c-format
798 msgid "Account %s not found"
799 msgstr "Conta %s não encontrada"
800
801-#: html.c:4032
802+#: html.c:4452
803 #, c-format
804 msgid "Search results for tag %s"
805 msgstr "Resultados da busca pela hashtag %s"
806
807-#: html.c:4032
808+#: html.c:4452
809 #, c-format
810 msgid "Nothing found for tag %s"
811 msgstr "Nada consta com hashtag %s"
812
813-#: html.c:4048
814+#: html.c:4468
815 #, c-format
816 msgid "Search results for '%s' (may be more)"
817 msgstr "Resultados da busca por '%s' (pode haver mais)"
818
819-#: html.c:4051
820+#: html.c:4471
821 #, c-format
822 msgid "Search results for '%s'"
823 msgstr "Resultados da busca por '%s'"
824
825-#: html.c:4054
826+#: html.c:4474
827 #, c-format
828 msgid "No more matches for '%s'"
829 msgstr "Sem mais combinações para '%s'"
830
831-#: html.c:4056
832+#: html.c:4476
833 #, c-format
834 msgid "Nothing found for '%s'"
835 msgstr "Nada consta com '%s'"
836
837-#: html.c:4154
838+#: html.c:4574
839 msgid "Showing instance timeline"
840 msgstr "Exibindo linha do tempo da instância"
841
842-#: html.c:4237
843+#: html.c:4657
844 #, c-format
845 msgid "Showing timeline for list '%s'"
846 msgstr "Exibindo linha do tempo da lista '%s'"
847
848-#: httpd.c:258
849+#: httpd.c:259
850 #, c-format
851 msgid "Search results for tag #%s"
852 msgstr "Resultados da busca pela hashtag #%s"
853
854-#: httpd.c:267
855+#: httpd.c:268
856 msgid "Recent posts by users in this instance"
857 msgstr "Publicações recentes de perfis desta instância"
858
859-#: html.c:1764
860+#: html.c:1842
861 msgid "Blocked hashtags..."
862 msgstr "Hashtags bloqueadas..."
863
864-#: html.c:518
865+#: html.c:574
866 msgid "Optional URL to reply to"
867 msgstr "URL opcional para a qual responder"
868
869-#: html.c:695
870+#: html.c:751
871 msgid ""
872 "Option 1...\n"
873 "Option 2...\n"
874@@ -711,94 +711,106 @@ msgstr ""
875 "Opção 3...\n"
876 "..."
877
878-#: html.c:1558
879+#: html.c:1636
880 msgid "Bot API key"
881 msgstr "Chave de API do robô"
882
883-#: html.c:1564
884+#: html.c:1642
885 msgid "Chat id"
886 msgstr "ID da conversa"
887
888-#: html.c:1572
889+#: html.c:1650
890 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
891 msgstr "ntfy - servidor - URL completa (exemplo: https://ntfy.sh/SeuTópico)"
892
893-#: html.c:1578
894+#: html.c:1656
895 msgid "ntfy token - if needed"
896 msgstr "ntfy - token (se necessário)"
897
898-#: html.c:3078
899+#: html.c:3366
900 msgid "pinned"
901 msgstr "afixadas"
902
903-#: html.c:3090
904+#: html.c:3378
905 msgid "bookmarks"
906 msgstr "marcadores"
907
908-#: html.c:3102
909+#: html.c:3390
910 msgid "drafts"
911 msgstr "rascunhos"
912
913-#: html.c:584
914+#: html.c:640
915 msgid "Scheduled post..."
916 msgstr "Publicação agendada..."
917
918 msgid "Post date and time:"
919 msgstr "Data e horário da publicação:"
920
921-#: html.c:3113 html.c:4214
922+#: html.c:3401 html.c:4634
923 msgid "Scheduled posts"
924 msgstr "Publicações agendadas"
925
926-#: html.c:3114
927+#: html.c:3402
928 msgid "scheduled posts"
929 msgstr "publicações agendadas"
930
931-#: html.c:578
932+#: html.c:634
933 #, c-format
934 msgid "Post date and time (timezone: %s):"
935 msgstr "Data e hora da publicação (fuso horário: %s):"
936
937-#: html.c:1689
938+#: html.c:1767
939 msgid "Time zone:"
940 msgstr "Fuso horário:"
941
942-#: html.c:559
943+#: html.c:615
944 msgid "Language:"
945 msgstr "Idioma:"
946
947-#: html.c:1580
948+#: html.c:1658
949 msgid "Notify webhook:"
950 msgstr "Webhook para notificar:"
951
952-#: html.c:1586
953+#: html.c:1664
954 msgid "http://example.com/webhook"
955 msgstr "http://exemplo.com.br/webhook"
956
957-#: html.c:1694
958+#: html.c:1772
959 msgid "Languages you usually post in:"
960 msgstr "Idiomas em que costuma postar:"
961
962-#: html.c:1700
963+#: html.c:1778
964 msgid "en fr es de_AT"
965 msgstr "pt en fr es de_AT"
966
967-#: html.c:460
968+#: html.c:428
969 msgid "Visibility: "
970 msgstr "Visibilidade: "
971
972-#: html.c:468
973 msgid "Public"
974 msgstr "Pública"
975
976-#: html.c:477
977 msgid "Unlisted"
978 msgstr "Não listada"
979
980-#: html.c:486
981 msgid "Followers-only"
982 msgstr "Seguidores apenas"
983
984-#: html.c:495
985 msgid "Direct Message"
986 msgstr "Mensagem direta"
987+
988+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
989+msgid "Desfazer EmojiReação"
990+msgstr ""
991+
992+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
993+msgid "EmojiReact"
994+msgstr "EmojiReação"
995+
996+#: html.c:2115
997+msgid "Emoji react..."
998+msgstr "EmojiReagir..."
999+
1000+#: html.c:2609
1001+msgid "Emoji reactions: "
1002+msgstr "EmojiReações: "
M
po/ru.po
+202,
-190
1@@ -15,119 +15,119 @@ msgstr ""
2 "Content-Transfer-Encoding: 8bit\n"
3 "X-Generator: Poedit 3.0\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Чувствительное содержимое: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Описание чувствительного содержимого"
14
15 msgid "Only for mentioned people: "
16 msgstr "Только для упомянутых людей: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Ответ на (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Не отправлять, сохранить черновик"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Черновик:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Вложения..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Файл:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Очистите это поле, чтоб удалить вложение"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Описание вложения"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Опрос..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Варианты ответа (один на строку, до 8 шт):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Один выбор"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Множественный выбор"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Заканчивается через 5 минут"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Заканчивается через 1 час"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Заканчивается через 1 день"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Отправить"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Описание сайта"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Почта админа"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Учётная запись админа"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d подписан, %d подписчиков"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "личное"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "публичное"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "уведомления"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "люди"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "сервер"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -135,574 +135,574 @@ msgstr ""
150 "Поиск сообщений по URL или содержимому (регулярное выражение), учетной "
151 "записи вида @user@host, или #тегу"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Поиск содержимого"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "проверенная ссылка"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Местоположение: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Новое сообщение..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Что у вас на уме?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Действия..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Подписаться"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(по URL или user@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Продвинуть"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(по URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Лайкнуть"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Пользовательские настройки..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Отображаемое имя:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Ваше имя"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Аватар: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Удалить текущий аватар"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Заглавное изображение (баннер): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Удалить текущее заглавное изображение"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "О себе:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Напишите что-нибудь про себя..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Всегда показывать чувствительное содержимое"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Почтовый адрес для уведомлений:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Уведомления в Telegram (ключ бота и id чата):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "уведомления в ntfy (сервер и токен ntfy):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Максимальное время хранения сообщений (0: настройки сервера):"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Отклонять личные сообщения от незнакомцев"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Это аккаунт бота"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Автоматически продвигать все упоминания этого аккаунта"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr "Это закрытый аккаунт (сообщения не показываются в сети)"
297
298-#: html.c:1639
299+#: html.c:1717
300 msgid "Collapse top threads by default"
301 msgstr "Сворачивать обсуждения по умолчанию"
302
303-#: html.c:1648
304+#: html.c:1726
305 msgid "Follow requests must be approved"
306 msgstr "Запросы подписки требуют подтверждения"
307
308-#: html.c:1657
309+#: html.c:1735
310 msgid "Publish follower and following metrics"
311 msgstr "Публиковать статистику подписок и подписчиков"
312
313-#: html.c:1659
314+#: html.c:1737
315 msgid "Current location:"
316 msgstr "Текущее метоположение:"
317
318-#: html.c:1673
319+#: html.c:1751
320 msgid "Profile metadata (key=value pairs in each line):"
321 msgstr "Метаданные профиля (пары ключ=значение, по одной на строку)"
322
323-#: html.c:1684
324+#: html.c:1762
325 msgid "Web interface language:"
326 msgstr "Язык интерфейса:"
327
328-#: html.c:1703
329+#: html.c:1781
330 msgid "New password:"
331 msgstr "Новый пароль:"
332
333-#: html.c:1710
334+#: html.c:1788
335 msgid "Repeat new password:"
336 msgstr "Повторите новый пароль:"
337
338-#: html.c:1720
339+#: html.c:1798
340 msgid "Update user info"
341 msgstr "Обновить данные пользователя"
342
343-#: html.c:1731
344+#: html.c:1809
345 msgid "Followed hashtags..."
346 msgstr "Отслеживаемые хештеги..."
347
348-#: html.c:1733 html.c:1766
349+#: html.c:1811 html.c:1844
350 msgid "One hashtag per line"
351 msgstr "По одному на строку"
352
353-#: html.c:1755 html.c:1787
354+#: html.c:1833 html.c:1865
355 msgid "Update hashtags"
356 msgstr "Обновить хештеги"
357
358-#: html.c:1904
359+#: html.c:1982
360 msgid "Say you like this post"
361 msgstr "Отметить сообщение понравившимся"
362
363-#: html.c:1909 html.c:4775
364+#: html.c:1987 html.c:5219
365 msgid "Unlike"
366 msgstr "Больше не нравится"
367
368-#: html.c:1909
369+#: html.c:1987
370 msgid "Nah don't like it that much"
371 msgstr "Не так уж и понравилось"
372
373-#: html.c:1915 html.c:4912
374+#: html.c:1993 html.c:5356
375 msgid "Unpin"
376 msgstr "Открепить"
377
378-#: html.c:1915
379+#: html.c:1993
380 msgid "Unpin this post from your timeline"
381 msgstr "Открепить это сообщение из своей ленты"
382
383-#: html.c:1918 html.c:4907
384+#: html.c:1996 html.c:5351
385 msgid "Pin"
386 msgstr "Закрепить"
387
388-#: html.c:1918
389+#: html.c:1996
390 msgid "Pin this post to the top of your timeline"
391 msgstr "Закрепить это сообщение в своей ленте"
392
393-#: html.c:1925
394+#: html.c:2003
395 msgid "Announce this post to your followers"
396 msgstr "Поделиться этим сообщением со своими подписчиками"
397
398-#: html.c:1930 html.c:4783
399+#: html.c:2008 html.c:5227
400 msgid "Unboost"
401 msgstr "Отменить продвижение"
402
403-#: html.c:1930
404+#: html.c:2008
405 msgid "I regret I boosted this"
406 msgstr "Не буду продвигать, пожалуй"
407
408-#: html.c:1936 html.c:4922
409+#: html.c:2014 html.c:5366
410 msgid "Unbookmark"
411 msgstr "Удалить из закладок"
412
413-#: html.c:1936
414+#: html.c:2014
415 msgid "Delete this post from your bookmarks"
416 msgstr "Удалить это сообщение из закладок"
417
418-#: html.c:1939 html.c:4917
419+#: html.c:2017 html.c:5361
420 msgid "Bookmark"
421 msgstr "Добавить в закладки"
422
423-#: html.c:1939
424+#: html.c:2017
425 msgid "Add this post to your bookmarks"
426 msgstr "Добавить сообщение в закладки"
427
428-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
429+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
430 msgid "Unfollow"
431 msgstr "Отписаться"
432
433-#: html.c:1945 html.c:3387
434+#: html.c:2023 html.c:3763 html.c:4042
435 msgid "Stop following this user's activity"
436 msgstr "Отменить подписку на этого пользователя"
437
438-#: html.c:1949 html.c:3401
439+#: html.c:2027 html.c:3777 html.c:4044
440 msgid "Start following this user's activity"
441 msgstr "Начать следовать за этим пользователем"
442
443-#: html.c:1955 html.c:4860
444+#: html.c:2033 html.c:5304
445 msgid "Unfollow Group"
446 msgstr "Отписаться от группы"
447
448-#: html.c:1956
449+#: html.c:2034
450 msgid "Stop following this group or channel"
451 msgstr "Отписаться от группы или канала"
452
453-#: html.c:1960 html.c:4847
454+#: html.c:2038 html.c:5291
455 msgid "Follow Group"
456 msgstr "Подписаться на группу"
457
458-#: html.c:1961
459+#: html.c:2039
460 msgid "Start following this group or channel"
461 msgstr "Подписаться на группу или канал"
462
463-#: html.c:1966 html.c:3423 html.c:4791
464+#: html.c:2044 html.c:3799 html.c:5235
465 msgid "MUTE"
466 msgstr "Заглушить"
467
468-#: html.c:1967
469+#: html.c:2045
470 msgid "Block any activity from this user forever"
471 msgstr "Заглушить всю активность от этого пользователя, навсегда"
472
473-#: html.c:1972 html.c:3405 html.c:4877
474+#: html.c:2050 html.c:3781 html.c:5321
475 msgid "Delete"
476 msgstr "Удалить"
477
478-#: html.c:1972
479+#: html.c:2050
480 msgid "Delete this post"
481 msgstr "Удалить это сообщение"
482
483-#: html.c:1975 html.c:4799
484+#: html.c:2053 html.c:5243
485 msgid "Hide"
486 msgstr "Скрыть"
487
488-#: html.c:1975
489+#: html.c:2053
490 msgid "Hide this post and its children"
491 msgstr "Скрыть это сообщение вместе с обсуждением"
492
493-#: html.c:2017
494+#: html.c:2095
495 msgid "Edit..."
496 msgstr "Редактировать..."
497
498-#: html.c:2039
499+#: html.c:2133
500 msgid "Reply..."
501 msgstr "Ответить..."
502
503-#: html.c:2090
504+#: html.c:2184
505 msgid "Truncated (too deep)"
506 msgstr "Обрезано (слишком много)"
507
508-#: html.c:2108
509+#: html.c:2202
510 msgid "follows you"
511 msgstr "подписан на вас"
512
513-#: html.c:2182
514+#: html.c:2276
515 msgid "Pinned"
516 msgstr "Закреплено"
517
518-#: html.c:2190
519+#: html.c:2284
520 msgid "Bookmarked"
521 msgstr "Добавлено в закладки"
522
523-#: html.c:2198
524+#: html.c:2292
525 msgid "Poll"
526 msgstr "Опрос"
527
528-#: html.c:2205
529+#: html.c:2299
530 msgid "Voted"
531 msgstr "Проголосовано"
532
533-#: html.c:2214
534+#: html.c:2308
535 msgid "Event"
536 msgstr "Событие"
537
538-#: html.c:2246 html.c:2275
539+#: html.c:2340 html.c:2369
540 msgid "boosted"
541 msgstr "поделился"
542
543-#: html.c:2289
544+#: html.c:2383
545 msgid "in reply to"
546 msgstr "в ответ на"
547
548-#: html.c:2345
549+#: html.c:2439
550 msgid " [SENSITIVE CONTENT]"
551 msgstr " [ЧУВСТВИТЕЛЬНО СОДЕРЖИМОЕ]"
552
553-#: html.c:2512
554+#: html.c:2796
555 msgid "Vote"
556 msgstr "Голос"
557
558-#: html.c:2522
559+#: html.c:2806
560 msgid "Closed"
561 msgstr "Закрыт"
562
563-#: html.c:2547
564+#: html.c:2831
565 msgid "Closes in"
566 msgstr "Закрывается через"
567
568-#: html.c:2627
569+#: html.c:2911
570 msgid "Video"
571 msgstr "Видео"
572
573-#: html.c:2642
574+#: html.c:2926
575 msgid "Audio"
576 msgstr "Аудио"
577
578-#: html.c:2670
579+#: html.c:2954
580 msgid "Attachment"
581 msgstr "Вложение"
582
583-#: html.c:2684
584+#: html.c:2968
585 msgid "Alt..."
586 msgstr "Описание..."
587
588-#: html.c:2697
589+#: html.c:2981
590 msgid "Source channel or community"
591 msgstr "Исходный канал или сообщество"
592
593-#: html.c:2791
594+#: html.c:3075
595 msgid "Time: "
596 msgstr "Время: "
597
598-#: html.c:2872
599+#: html.c:3156
600 msgid "Older..."
601 msgstr "Ранее..."
602
603-#: html.c:2974
604+#: html.c:3258
605 msgid "about this site"
606 msgstr "про этот сайт"
607
608-#: html.c:2976
609+#: html.c:3260
610 msgid "powered by "
611 msgstr "на основе "
612
613-#: html.c:3041
614+#: html.c:3329
615 msgid "Dismiss"
616 msgstr "Скрыть"
617
618-#: html.c:3058
619+#: html.c:3346
620 #, c-format
621 msgid "Timeline for list '%s'"
622 msgstr "Ленты для списка '%s'"
623
624-#: html.c:3077 html.c:4169
625+#: html.c:3365 html.c:4589
626 msgid "Pinned posts"
627 msgstr "Закреплённые сообщения"
628
629-#: html.c:3089 html.c:4184
630+#: html.c:3377 html.c:4604
631 msgid "Bookmarked posts"
632 msgstr "Сообщения в закладках"
633
634-#: html.c:3101 html.c:4199
635+#: html.c:3389 html.c:4619
636 msgid "Post drafts"
637 msgstr "Черновики сообщений"
638
639-#: html.c:3177
640+#: html.c:3465
641 msgid "No more unseen posts"
642 msgstr "Всё просмотрено"
643
644-#: html.c:3181 html.c:3290
645+#: html.c:3469 html.c:3578
646 msgid "Back to top"
647 msgstr "Вернуться наверх"
648
649-#: html.c:3243
650+#: html.c:3531
651 msgid "History"
652 msgstr "История"
653
654-#: html.c:3295 html.c:3734
655+#: html.c:3583 html.c:4149
656 msgid "More..."
657 msgstr "Ещё..."
658
659-#: html.c:3391 html.c:4813
660+#: html.c:3767 html.c:5257
661 msgid "Unlimit"
662 msgstr "Без ограничения"
663
664-#: html.c:3392
665+#: html.c:3768
666 msgid "Allow announces (boosts) from this user"
667 msgstr "Разрешить продвижения от этого пользователя"
668
669-#: html.c:3395 html.c:4809
670+#: html.c:3771 html.c:5253
671 msgid "Limit"
672 msgstr "Лимит"
673
674-#: html.c:3396
675+#: html.c:3772
676 msgid "Block announces (boosts) from this user"
677 msgstr "Запретить продвижения от этого пользователя"
678
679-#: html.c:3405
680+#: html.c:3781
681 msgid "Delete this user"
682 msgstr "Удалить пользователя"
683
684-#: html.c:3410 html.c:4927
685+#: html.c:3786 html.c:5371
686 msgid "Approve"
687 msgstr "Подтвердить"
688
689-#: html.c:3411
690+#: html.c:3787
691 msgid "Approve this follow request"
692 msgstr "Подтвердить запрос на подписку"
693
694-#: html.c:3414 html.c:4951
695+#: html.c:3790 html.c:5395
696 msgid "Discard"
697 msgstr "Отклонить"
698
699-#: html.c:3414
700+#: html.c:3790
701 msgid "Discard this follow request"
702 msgstr "Отклонить этот запрос на подписку"
703
704-#: html.c:3419 html.c:4795
705+#: html.c:3795 html.c:5239
706 msgid "Unmute"
707 msgstr "Отменить глушение"
708
709-#: html.c:3420
710+#: html.c:3796
711 msgid "Stop blocking activities from this user"
712 msgstr "Прекратить глушение действий этого пользователя"
713
714-#: html.c:3424
715+#: html.c:3800
716 msgid "Block any activity from this user"
717 msgstr "Заглушить все действия этого пользователя"
718
719-#: html.c:3432
720+#: html.c:3808
721 msgid "Direct Message..."
722 msgstr "Личное сообщение..."
723
724-#: html.c:3467
725+#: html.c:3843
726 msgid "Pending follow confirmations"
727 msgstr "Ожидающие запросы на подписку"
728
729-#: html.c:3471
730+#: html.c:3847
731 msgid "People you follow"
732 msgstr "Ваши подписки"
733
734-#: html.c:3472
735+#: html.c:3848
736 msgid "People that follow you"
737 msgstr "Ваши подписчики"
738
739-#: html.c:3511
740+#: html.c:3887
741 msgid "Clear all"
742 msgstr "Очистить всё"
743
744-#: html.c:3571
745+#: html.c:3951
746 msgid "Mention"
747 msgstr "Упоминание"
748
749-#: html.c:3574
750+#: html.c:3954
751 msgid "Finished poll"
752 msgstr "Завершённый опрос"
753
754-#: html.c:3590
755+#: html.c:3979
756 msgid "Follow Request"
757 msgstr "Запрос на подписку"
758
759-#: html.c:3674
760+#: html.c:4089
761 msgid "Context"
762 msgstr "Контекст"
763
764-#: html.c:3692
765+#: html.c:4107
766 msgid "New"
767 msgstr "Новое"
768
769-#: html.c:3707
770+#: html.c:4122
771 msgid "Already seen"
772 msgstr "Уже просмотрено"
773
774-#: html.c:3722
775+#: html.c:4137
776 msgid "None"
777 msgstr "Нет"
778
779-#: html.c:3994
780+#: html.c:4414
781 #, c-format
782 msgid "Search results for account %s"
783 msgstr "Результаты поиска для учётной записи %s"
784
785-#: html.c:4001
786+#: html.c:4421
787 #, c-format
788 msgid "Account %s not found"
789 msgstr "Учётная запись %s не найдена"
790
791-#: html.c:4032
792+#: html.c:4452
793 #, c-format
794 msgid "Search results for tag %s"
795 msgstr "Результаты поиска тега %s"
796
797-#: html.c:4032
798+#: html.c:4452
799 #, c-format
800 msgid "Nothing found for tag %s"
801 msgstr "Ничего не найдено по тегу %s"
802
803-#: html.c:4048
804+#: html.c:4468
805 #, c-format
806 msgid "Search results for '%s' (may be more)"
807 msgstr "Результаты поиска для '%s' (возможно, есть ещё)"
808
809-#: html.c:4051
810+#: html.c:4471
811 #, c-format
812 msgid "Search results for '%s'"
813 msgstr "Результаты поиска для '%s'"
814
815-#: html.c:4054
816+#: html.c:4474
817 #, c-format
818 msgid "No more matches for '%s'"
819 msgstr "Больше нет совпадений для '%s'"
820
821-#: html.c:4056
822+#: html.c:4476
823 #, c-format
824 msgid "Nothing found for '%s'"
825 msgstr "Ничего не найдено для '%s'"
826
827-#: html.c:4154
828+#: html.c:4574
829 msgid "Showing instance timeline"
830 msgstr "Показываем ленту сервера"
831
832-#: html.c:4237
833+#: html.c:4657
834 #, c-format
835 msgid "Showing timeline for list '%s'"
836 msgstr "Показываем ленту для списка '%s'"
837
838-#: httpd.c:258
839+#: httpd.c:259
840 #, c-format
841 msgid "Search results for tag #%s"
842 msgstr "Результаты поиска для тега #%s"
843
844-#: httpd.c:267
845+#: httpd.c:268
846 msgid "Recent posts by users in this instance"
847 msgstr "Последние сообщения на этом сервере"
848
849-#: html.c:1764
850+#: html.c:1842
851 msgid "Blocked hashtags..."
852 msgstr "Заблокированные теги..."
853
854-#: html.c:518
855+#: html.c:574
856 msgid "Optional URL to reply to"
857 msgstr "Необязательный URL для ответа"
858
859-#: html.c:695
860+#: html.c:751
861 msgid ""
862 "Option 1...\n"
863 "Option 2...\n"
864@@ -714,94 +714,106 @@ msgstr ""
865 "Вариант 3...\n"
866 "..."
867
868-#: html.c:1558
869+#: html.c:1636
870 msgid "Bot API key"
871 msgstr "Ключ API для бота"
872
873-#: html.c:1564
874+#: html.c:1642
875 msgid "Chat id"
876 msgstr "Id чата"
877
878-#: html.c:1572
879+#: html.c:1650
880 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
881 msgstr "полный URL сервера ntfy (например https://ntfy.sh/YourTopic)"
882
883-#: html.c:1578
884+#: html.c:1656
885 msgid "ntfy token - if needed"
886 msgstr "токен ntfy - если нужен"
887
888-#: html.c:3078
889+#: html.c:3366
890 msgid "pinned"
891 msgstr "закреплено"
892
893-#: html.c:3090
894+#: html.c:3378
895 msgid "bookmarks"
896 msgstr "закладки"
897
898-#: html.c:3102
899+#: html.c:3390
900 msgid "drafts"
901 msgstr "черновики"
902
903-#: html.c:584
904+#: html.c:640
905 msgid "Scheduled post..."
906 msgstr "Запланировать..."
907
908 msgid "Post date and time:"
909 msgstr "Время поста:"
910
911-#: html.c:3113 html.c:4214
912+#: html.c:3401 html.c:4634
913 msgid "Scheduled posts"
914 msgstr "Запланированные посты"
915
916-#: html.c:3114
917+#: html.c:3402
918 msgid "scheduled posts"
919 msgstr "запланированные посты"
920
921-#: html.c:578
922+#: html.c:634
923 #, c-format
924 msgid "Post date and time (timezone: %s):"
925 msgstr "Время поста (Часовой пояс: %s):"
926
927-#: html.c:1689
928+#: html.c:1767
929 msgid "Time zone:"
930 msgstr "Часовой пояс:"
931
932-#: html.c:559
933+#: html.c:615
934 msgid "Language:"
935 msgstr ""
936
937-#: html.c:1580
938+#: html.c:1658
939 msgid "Notify webhook:"
940 msgstr ""
941
942-#: html.c:1586
943+#: html.c:1664
944 msgid "http://example.com/webhook"
945 msgstr ""
946
947-#: html.c:1694
948+#: html.c:1772
949 msgid "Languages you usually post in:"
950 msgstr ""
951
952-#: html.c:1700
953+#: html.c:1778
954 msgid "en fr es de_AT"
955 msgstr ""
956
957-#: html.c:460
958+#: html.c:428
959 msgid "Visibility: "
960 msgstr ""
961
962-#: html.c:468
963 msgid "Public"
964 msgstr ""
965
966-#: html.c:477
967 msgid "Unlisted"
968 msgstr ""
969
970-#: html.c:486
971 msgid "Followers-only"
972 msgstr ""
973
974-#: html.c:495
975 msgid "Direct Message"
976 msgstr ""
977+
978+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
979+msgid "EmojiUnreact"
980+msgstr ""
981+
982+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
983+msgid "EmojiReact"
984+msgstr ""
985+
986+#: html.c:2115
987+msgid "Emoji react..."
988+msgstr ""
989+
990+#: html.c:2609
991+msgid "Emoji reactions: "
992+msgstr ""
M
po/uk.po
+202,
-190
1@@ -15,119 +15,119 @@ msgstr ""
2 "Content-Transfer-Encoding: 8bit\n"
3 "X-Generator: Poedit 3.0\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "Делікатний вміст: "
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "Опис делікатного вмісту"
14
15 msgid "Only for mentioned people: "
16 msgstr "Тільки для зазначених осіб: "
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "Відповісти до (URL): "
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "Не надсилати, але зберігти як чернетку"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "Чернетка:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "Вкладення..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "Файл:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "Очистіть це поле, щоб видалити вкладення"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "Опис вкладення"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "Опитування..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "Варіанти відповідей (по одному в рядку, до 8):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "Єдиний вибір"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "Декілька варіантів вибору"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "Закінчення через 5 хвилин"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "Закінчення через 1 годину"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "Закінчення через 1 день"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "Надіслати"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "Опис сайту"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "Пошта админа"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "Обліковий запис адміна"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d підписок, %d підписників"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "особисте"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "публічне"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "повідомлення"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "люди"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "сервер"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149@@ -135,574 +135,574 @@ msgstr ""
150 "Шукати дописи за URL або вмістом (регулярний вираз), акаунтами @user@host "
151 "або #тегом"
152
153-#: html.c:1087
154+#: html.c:1143
155 msgid "Content search"
156 msgstr "Пошук за вмістом"
157
158-#: html.c:1213
159+#: html.c:1269
160 msgid "verified link"
161 msgstr "перевірене посилання"
162
163-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
164+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
165 msgid "Location: "
166 msgstr "Місце знаходження: "
167
168-#: html.c:1302
169+#: html.c:1358
170 msgid "New Post..."
171 msgstr "Новий допис..."
172
173-#: html.c:1304
174+#: html.c:1360
175 msgid "What's on your mind?"
176 msgstr "Що у вас на думці?"
177
178-#: html.c:1313
179+#: html.c:1369
180 msgid "Operations..."
181 msgstr "Дії..."
182
183-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
184+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
185 msgid "Follow"
186 msgstr "Підписатися"
187
188-#: html.c:1330
189+#: html.c:1386
190 msgid "(by URL or user@host)"
191 msgstr "(за URL або user@host)"
192
193-#: html.c:1345 html.c:1925 html.c:4766
194+#: html.c:1401 html.c:2003 html.c:5210
195 msgid "Boost"
196 msgstr "Просувати"
197
198-#: html.c:1347 html.c:1364
199+#: html.c:1403 html.c:1420 html.c:1442
200 msgid "(by URL)"
201 msgstr "(за URL)"
202
203-#: html.c:1362 html.c:1904 html.c:4757
204+#: html.c:1418 html.c:1982 html.c:5201
205 msgid "Like"
206 msgstr "Вподобайка"
207
208-#: html.c:1490
209+#: html.c:1568
210 msgid "User Settings..."
211 msgstr "Налаштування користувача..."
212
213-#: html.c:1499
214+#: html.c:1577
215 msgid "Display name:"
216 msgstr "Видиме ім'я:"
217
218-#: html.c:1505
219+#: html.c:1583
220 msgid "Your name"
221 msgstr "Ваше ім'я"
222
223-#: html.c:1507
224+#: html.c:1585
225 msgid "Avatar: "
226 msgstr "Аватар: "
227
228-#: html.c:1515
229+#: html.c:1593
230 msgid "Delete current avatar"
231 msgstr "Видалити поточний аватар"
232
233-#: html.c:1517
234+#: html.c:1595
235 msgid "Header image (banner): "
236 msgstr "Зображення заголовка (банер): "
237
238-#: html.c:1525
239+#: html.c:1603
240 msgid "Delete current header image"
241 msgstr "Видалити поточне зображення заголовка"
242
243-#: html.c:1527
244+#: html.c:1605
245 msgid "Bio:"
246 msgstr "Про себе:"
247
248-#: html.c:1533
249+#: html.c:1611
250 msgid "Write about yourself here..."
251 msgstr "Напишіть про себе тут..."
252
253-#: html.c:1542
254+#: html.c:1620
255 msgid "Always show sensitive content"
256 msgstr "Завжди показувати делікатний вміст"
257
258-#: html.c:1544
259+#: html.c:1622
260 msgid "Email address for notifications:"
261 msgstr "Поштова адреса для повідомлень:"
262
263-#: html.c:1552
264+#: html.c:1630
265 msgid "Telegram notifications (bot key and chat id):"
266 msgstr "Повідомлення в Telegram (ключ бота та id чату):"
267
268-#: html.c:1566
269+#: html.c:1644
270 msgid "ntfy notifications (ntfy server and token):"
271 msgstr "Повідомлення в ntfy (сервер та токен ntfy):"
272
273-#: html.c:1588
274+#: html.c:1666
275 msgid "Maximum days to keep posts (0: server settings):"
276 msgstr "Максимальний час для зберігання дописів (0: налаштування сервера):"
277
278-#: html.c:1602
279+#: html.c:1680
280 msgid "Drop direct messages from people you don't follow"
281 msgstr "Відхиляти особисті повідомлення від незнайомців"
282
283-#: html.c:1611
284+#: html.c:1689
285 msgid "This account is a bot"
286 msgstr "Цей акаунт є ботом"
287
288-#: html.c:1620
289+#: html.c:1698
290 msgid "Auto-boost all mentions to this account"
291 msgstr "Автоматично просувати всі згадки цього акаунта"
292
293-#: html.c:1629
294+#: html.c:1707
295 msgid "This account is private (posts are not shown through the web)"
296 msgstr "Це закритий акаунт (дописи не показуються в мережі)"
297
298-#: html.c:1639
299+#: html.c:1717
300 msgid "Collapse top threads by default"
301 msgstr "Згорнути потоки за замовчуванням"
302
303-#: html.c:1648
304+#: html.c:1726
305 msgid "Follow requests must be approved"
306 msgstr "Запити на підписку мають бути схвалені"
307
308-#: html.c:1657
309+#: html.c:1735
310 msgid "Publish follower and following metrics"
311 msgstr "Публікувати метрики підписок та підписників"
312
313-#: html.c:1659
314+#: html.c:1737
315 msgid "Current location:"
316 msgstr "Поточне місцезнаходження:"
317
318-#: html.c:1673
319+#: html.c:1751
320 msgid "Profile metadata (key=value pairs in each line):"
321 msgstr "Метадані профілю (пари ключ=значення в кожному рядку):"
322
323-#: html.c:1684
324+#: html.c:1762
325 msgid "Web interface language:"
326 msgstr "Мова інтерфейсу:"
327
328-#: html.c:1703
329+#: html.c:1781
330 msgid "New password:"
331 msgstr "Новий пароль:"
332
333-#: html.c:1710
334+#: html.c:1788
335 msgid "Repeat new password:"
336 msgstr "Повторити новий пароль:"
337
338-#: html.c:1720
339+#: html.c:1798
340 msgid "Update user info"
341 msgstr "Оновлення даних користувача"
342
343-#: html.c:1731
344+#: html.c:1809
345 msgid "Followed hashtags..."
346 msgstr "Підписані хештеги..."
347
348-#: html.c:1733 html.c:1766
349+#: html.c:1811 html.c:1844
350 msgid "One hashtag per line"
351 msgstr "Один хештег на рядок"
352
353-#: html.c:1755 html.c:1787
354+#: html.c:1833 html.c:1865
355 msgid "Update hashtags"
356 msgstr "Оновити хештеги"
357
358-#: html.c:1904
359+#: html.c:1982
360 msgid "Say you like this post"
361 msgstr "Позначте допис як вподобаний"
362
363-#: html.c:1909 html.c:4775
364+#: html.c:1987 html.c:5219
365 msgid "Unlike"
366 msgstr "Більше не подобається"
367
368-#: html.c:1909
369+#: html.c:1987
370 msgid "Nah don't like it that much"
371 msgstr "Мені це не дуже подобається"
372
373-#: html.c:1915 html.c:4912
374+#: html.c:1993 html.c:5356
375 msgid "Unpin"
376 msgstr "Відкріпити"
377
378-#: html.c:1915
379+#: html.c:1993
380 msgid "Unpin this post from your timeline"
381 msgstr "Відкріпити цей допис зі власної стрічки"
382
383-#: html.c:1918 html.c:4907
384+#: html.c:1996 html.c:5351
385 msgid "Pin"
386 msgstr "Закріпити"
387
388-#: html.c:1918
389+#: html.c:1996
390 msgid "Pin this post to the top of your timeline"
391 msgstr "Закріпити цей допис до власної стрічки"
392
393-#: html.c:1925
394+#: html.c:2003
395 msgid "Announce this post to your followers"
396 msgstr "Поділитися цим дописом зі своїми підписниками"
397
398-#: html.c:1930 html.c:4783
399+#: html.c:2008 html.c:5227
400 msgid "Unboost"
401 msgstr "Скасувати просування"
402
403-#: html.c:1930
404+#: html.c:2008
405 msgid "I regret I boosted this"
406 msgstr "Я шкодую, що просував це"
407
408-#: html.c:1936 html.c:4922
409+#: html.c:2014 html.c:5366
410 msgid "Unbookmark"
411 msgstr "Видалити з закладок"
412
413-#: html.c:1936
414+#: html.c:2014
415 msgid "Delete this post from your bookmarks"
416 msgstr "Видалити цей допис з закладок"
417
418-#: html.c:1939 html.c:4917
419+#: html.c:2017 html.c:5361
420 msgid "Bookmark"
421 msgstr "Додати в закладки"
422
423-#: html.c:1939
424+#: html.c:2017
425 msgid "Add this post to your bookmarks"
426 msgstr "Додайте цей допис в закладки"
427
428-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
429+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
430 msgid "Unfollow"
431 msgstr "Відписатися"
432
433-#: html.c:1945 html.c:3387
434+#: html.c:2023 html.c:3763 html.c:4042
435 msgid "Stop following this user's activity"
436 msgstr "Відписатися від цього користувача"
437
438-#: html.c:1949 html.c:3401
439+#: html.c:2027 html.c:3777 html.c:4044
440 msgid "Start following this user's activity"
441 msgstr "Підписатися до цього користувача"
442
443-#: html.c:1955 html.c:4860
444+#: html.c:2033 html.c:5304
445 msgid "Unfollow Group"
446 msgstr "Відписатися від групи"
447
448-#: html.c:1956
449+#: html.c:2034
450 msgid "Stop following this group or channel"
451 msgstr "Відписатися від групи чи канала"
452
453-#: html.c:1960 html.c:4847
454+#: html.c:2038 html.c:5291
455 msgid "Follow Group"
456 msgstr "Підписатися на групу"
457
458-#: html.c:1961
459+#: html.c:2039
460 msgid "Start following this group or channel"
461 msgstr "Підписатися на групу чи канал"
462
463-#: html.c:1966 html.c:3423 html.c:4791
464+#: html.c:2044 html.c:3799 html.c:5235
465 msgid "MUTE"
466 msgstr "Заглушити"
467
468-#: html.c:1967
469+#: html.c:2045
470 msgid "Block any activity from this user forever"
471 msgstr "Назавжди заблокувати активність цього користувача"
472
473-#: html.c:1972 html.c:3405 html.c:4877
474+#: html.c:2050 html.c:3781 html.c:5321
475 msgid "Delete"
476 msgstr "Видалити"
477
478-#: html.c:1972
479+#: html.c:2050
480 msgid "Delete this post"
481 msgstr "Видалити цей допис"
482
483-#: html.c:1975 html.c:4799
484+#: html.c:2053 html.c:5243
485 msgid "Hide"
486 msgstr "Приховати"
487
488-#: html.c:1975
489+#: html.c:2053
490 msgid "Hide this post and its children"
491 msgstr "Приховати цей допис разом з обговоренням"
492
493-#: html.c:2017
494+#: html.c:2095
495 msgid "Edit..."
496 msgstr "Редагувати..."
497
498-#: html.c:2039
499+#: html.c:2133
500 msgid "Reply..."
501 msgstr "Відповісти..."
502
503-#: html.c:2090
504+#: html.c:2184
505 msgid "Truncated (too deep)"
506 msgstr "Обрізано (занадто багато)"
507
508-#: html.c:2108
509+#: html.c:2202
510 msgid "follows you"
511 msgstr "підписан на вас"
512
513-#: html.c:2182
514+#: html.c:2276
515 msgid "Pinned"
516 msgstr "Закріплено"
517
518-#: html.c:2190
519+#: html.c:2284
520 msgid "Bookmarked"
521 msgstr "Додано до закладок"
522
523-#: html.c:2198
524+#: html.c:2292
525 msgid "Poll"
526 msgstr "Опитування"
527
528-#: html.c:2205
529+#: html.c:2299
530 msgid "Voted"
531 msgstr "Проголосовано"
532
533-#: html.c:2214
534+#: html.c:2308
535 msgid "Event"
536 msgstr "Подія"
537
538-#: html.c:2246 html.c:2275
539+#: html.c:2340 html.c:2369
540 msgid "boosted"
541 msgstr "просунуто"
542
543-#: html.c:2289
544+#: html.c:2383
545 msgid "in reply to"
546 msgstr "у відповідь на"
547
548-#: html.c:2345
549+#: html.c:2439
550 msgid " [SENSITIVE CONTENT]"
551 msgstr " [ДЕЛІКАТНИЙ ВМІСТ]"
552
553-#: html.c:2512
554+#: html.c:2796
555 msgid "Vote"
556 msgstr "Голос"
557
558-#: html.c:2522
559+#: html.c:2806
560 msgid "Closed"
561 msgstr "Завершено"
562
563-#: html.c:2547
564+#: html.c:2831
565 msgid "Closes in"
566 msgstr "Завершується через"
567
568-#: html.c:2627
569+#: html.c:2911
570 msgid "Video"
571 msgstr "Відео"
572
573-#: html.c:2642
574+#: html.c:2926
575 msgid "Audio"
576 msgstr "Аудіо"
577
578-#: html.c:2670
579+#: html.c:2954
580 msgid "Attachment"
581 msgstr "Вкладення"
582
583-#: html.c:2684
584+#: html.c:2968
585 msgid "Alt..."
586 msgstr "Опис..."
587
588-#: html.c:2697
589+#: html.c:2981
590 msgid "Source channel or community"
591 msgstr "Вихідний канал або спільнота"
592
593-#: html.c:2791
594+#: html.c:3075
595 msgid "Time: "
596 msgstr "Час: "
597
598-#: html.c:2872
599+#: html.c:3156
600 msgid "Older..."
601 msgstr "Раніше..."
602
603-#: html.c:2974
604+#: html.c:3258
605 msgid "about this site"
606 msgstr "про цей сайт"
607
608-#: html.c:2976
609+#: html.c:3260
610 msgid "powered by "
611 msgstr "на базі "
612
613-#: html.c:3041
614+#: html.c:3329
615 msgid "Dismiss"
616 msgstr "Відхилити"
617
618-#: html.c:3058
619+#: html.c:3346
620 #, c-format
621 msgid "Timeline for list '%s'"
622 msgstr "Стрічки для списку '%s'"
623
624-#: html.c:3077 html.c:4169
625+#: html.c:3365 html.c:4589
626 msgid "Pinned posts"
627 msgstr "Закріплені дописи"
628
629-#: html.c:3089 html.c:4184
630+#: html.c:3377 html.c:4604
631 msgid "Bookmarked posts"
632 msgstr "Дописи у закладках"
633
634-#: html.c:3101 html.c:4199
635+#: html.c:3389 html.c:4619
636 msgid "Post drafts"
637 msgstr "Чернетки дописів"
638
639-#: html.c:3177
640+#: html.c:3465
641 msgid "No more unseen posts"
642 msgstr "Усе переглянуто"
643
644-#: html.c:3181 html.c:3290
645+#: html.c:3469 html.c:3578
646 msgid "Back to top"
647 msgstr "Повернутися до початку"
648
649-#: html.c:3243
650+#: html.c:3531
651 msgid "History"
652 msgstr "Історія"
653
654-#: html.c:3295 html.c:3734
655+#: html.c:3583 html.c:4149
656 msgid "More..."
657 msgstr "Більше..."
658
659-#: html.c:3391 html.c:4813
660+#: html.c:3767 html.c:5257
661 msgid "Unlimit"
662 msgstr "Без обмеження"
663
664-#: html.c:3392
665+#: html.c:3768
666 msgid "Allow announces (boosts) from this user"
667 msgstr "Дозволити просування від цього користувача"
668
669-#: html.c:3395 html.c:4809
670+#: html.c:3771 html.c:5253
671 msgid "Limit"
672 msgstr "Обмежити"
673
674-#: html.c:3396
675+#: html.c:3772
676 msgid "Block announces (boosts) from this user"
677 msgstr "Заборонити просування від цього користувача"
678
679-#: html.c:3405
680+#: html.c:3781
681 msgid "Delete this user"
682 msgstr "Видалити користувача"
683
684-#: html.c:3410 html.c:4927
685+#: html.c:3786 html.c:5371
686 msgid "Approve"
687 msgstr "Підтвердити"
688
689-#: html.c:3411
690+#: html.c:3787
691 msgid "Approve this follow request"
692 msgstr "Підтвердити цей запит на підписку"
693
694-#: html.c:3414 html.c:4951
695+#: html.c:3790 html.c:5395
696 msgid "Discard"
697 msgstr "Відхилити"
698
699-#: html.c:3414
700+#: html.c:3790
701 msgid "Discard this follow request"
702 msgstr "Відхилити цей запит на підписку"
703
704-#: html.c:3419 html.c:4795
705+#: html.c:3795 html.c:5239
706 msgid "Unmute"
707 msgstr "Скасувати глушіння"
708
709-#: html.c:3420
710+#: html.c:3796
711 msgid "Stop blocking activities from this user"
712 msgstr "Припинити глушіння дій цього користувача"
713
714-#: html.c:3424
715+#: html.c:3800
716 msgid "Block any activity from this user"
717 msgstr "Заглушити всі дії цього користувача"
718
719-#: html.c:3432
720+#: html.c:3808
721 msgid "Direct Message..."
722 msgstr "Особисте повідомлення..."
723
724-#: html.c:3467
725+#: html.c:3843
726 msgid "Pending follow confirmations"
727 msgstr "Запити на підписку очікують на розгляд"
728
729-#: html.c:3471
730+#: html.c:3847
731 msgid "People you follow"
732 msgstr "Ваші підписки"
733
734-#: html.c:3472
735+#: html.c:3848
736 msgid "People that follow you"
737 msgstr "Ваші підписники"
738
739-#: html.c:3511
740+#: html.c:3887
741 msgid "Clear all"
742 msgstr "Очистити все"
743
744-#: html.c:3571
745+#: html.c:3951
746 msgid "Mention"
747 msgstr "Згадка"
748
749-#: html.c:3574
750+#: html.c:3954
751 msgid "Finished poll"
752 msgstr "Завершене опитування"
753
754-#: html.c:3590
755+#: html.c:3979
756 msgid "Follow Request"
757 msgstr "Запит на підписку"
758
759-#: html.c:3674
760+#: html.c:4089
761 msgid "Context"
762 msgstr "Контекст"
763
764-#: html.c:3692
765+#: html.c:4107
766 msgid "New"
767 msgstr "Нове"
768
769-#: html.c:3707
770+#: html.c:4122
771 msgid "Already seen"
772 msgstr "Вже переглянуто"
773
774-#: html.c:3722
775+#: html.c:4137
776 msgid "None"
777 msgstr "Нема"
778
779-#: html.c:3994
780+#: html.c:4414
781 #, c-format
782 msgid "Search results for account %s"
783 msgstr "Результати пошуку для облікового запису %s"
784
785-#: html.c:4001
786+#: html.c:4421
787 #, c-format
788 msgid "Account %s not found"
789 msgstr "Обліковий запис %s не знайдений"
790
791-#: html.c:4032
792+#: html.c:4452
793 #, c-format
794 msgid "Search results for tag %s"
795 msgstr "Результати пошуку тега %s"
796
797-#: html.c:4032
798+#: html.c:4452
799 #, c-format
800 msgid "Nothing found for tag %s"
801 msgstr "Нічого не знайдено за тегом %s"
802
803-#: html.c:4048
804+#: html.c:4468
805 #, c-format
806 msgid "Search results for '%s' (may be more)"
807 msgstr "Результати пошуку для '%s' (можливо є більше)"
808
809-#: html.c:4051
810+#: html.c:4471
811 #, c-format
812 msgid "Search results for '%s'"
813 msgstr "Результати пошуку для '%s'"
814
815-#: html.c:4054
816+#: html.c:4474
817 #, c-format
818 msgid "No more matches for '%s'"
819 msgstr "Немає більше збігів для '%s'"
820
821-#: html.c:4056
822+#: html.c:4476
823 #, c-format
824 msgid "Nothing found for '%s'"
825 msgstr "Нічого не знайдено для '%s'"
826
827-#: html.c:4154
828+#: html.c:4574
829 msgid "Showing instance timeline"
830 msgstr "Показуємо стрічку сервера"
831
832-#: html.c:4237
833+#: html.c:4657
834 #, c-format
835 msgid "Showing timeline for list '%s'"
836 msgstr "Показуємо стрічку для списку '%s'"
837
838-#: httpd.c:258
839+#: httpd.c:259
840 #, c-format
841 msgid "Search results for tag #%s"
842 msgstr "Результати пошуку для тега #%s"
843
844-#: httpd.c:267
845+#: httpd.c:268
846 msgid "Recent posts by users in this instance"
847 msgstr "Останні повідомлення на цьому сервері"
848
849-#: html.c:1764
850+#: html.c:1842
851 msgid "Blocked hashtags..."
852 msgstr "Заблоковані теги..."
853
854-#: html.c:518
855+#: html.c:574
856 msgid "Optional URL to reply to"
857 msgstr "Необов'язковий URL для відповіді"
858
859-#: html.c:695
860+#: html.c:751
861 msgid ""
862 "Option 1...\n"
863 "Option 2...\n"
864@@ -714,94 +714,106 @@ msgstr ""
865 "Варіант 3...\n"
866 "..."
867
868-#: html.c:1558
869+#: html.c:1636
870 msgid "Bot API key"
871 msgstr "Ключ API для бота"
872
873-#: html.c:1564
874+#: html.c:1642
875 msgid "Chat id"
876 msgstr "Id чату"
877
878-#: html.c:1572
879+#: html.c:1650
880 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
881 msgstr "повна URL сервера ntfy (наприклад https://ntfy.sh/YourTopic)"
882
883-#: html.c:1578
884+#: html.c:1656
885 msgid "ntfy token - if needed"
886 msgstr "токен ntfy - якщо потрібно"
887
888-#: html.c:3078
889+#: html.c:3366
890 msgid "pinned"
891 msgstr "закріплено"
892
893-#: html.c:3090
894+#: html.c:3378
895 msgid "bookmarks"
896 msgstr "закладки"
897
898-#: html.c:3102
899+#: html.c:3390
900 msgid "drafts"
901 msgstr "чернетки"
902
903-#: html.c:584
904+#: html.c:640
905 msgid "Scheduled post..."
906 msgstr "Запланувати..."
907
908 msgid "Post date and time:"
909 msgstr "Час допису:"
910
911-#: html.c:3113 html.c:4214
912+#: html.c:3401 html.c:4634
913 msgid "Scheduled posts"
914 msgstr "Заплановані дописи"
915
916-#: html.c:3114
917+#: html.c:3402
918 msgid "scheduled posts"
919 msgstr "заплановані дописи"
920
921-#: html.c:578
922+#: html.c:634
923 #, c-format
924 msgid "Post date and time (timezone: %s):"
925 msgstr "Дата та час допису (часовий пояс: %s):"
926
927-#: html.c:1689
928+#: html.c:1767
929 msgid "Time zone:"
930 msgstr "Часовий пояс:"
931
932-#: html.c:559
933+#: html.c:615
934 msgid "Language:"
935 msgstr ""
936
937-#: html.c:1580
938+#: html.c:1658
939 msgid "Notify webhook:"
940 msgstr ""
941
942-#: html.c:1586
943+#: html.c:1664
944 msgid "http://example.com/webhook"
945 msgstr ""
946
947-#: html.c:1694
948+#: html.c:1772
949 msgid "Languages you usually post in:"
950 msgstr ""
951
952-#: html.c:1700
953+#: html.c:1778
954 msgid "en fr es de_AT"
955 msgstr ""
956
957-#: html.c:460
958+#: html.c:428
959 msgid "Visibility: "
960 msgstr ""
961
962-#: html.c:468
963 msgid "Public"
964 msgstr ""
965
966-#: html.c:477
967 msgid "Unlisted"
968 msgstr ""
969
970-#: html.c:486
971 msgid "Followers-only"
972 msgstr ""
973
974-#: html.c:495
975 msgid "Direct Message"
976 msgstr ""
977+
978+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
979+msgid "EmojiUnreact"
980+msgstr ""
981+
982+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
983+msgid "EmojiReact"
984+msgstr ""
985+
986+#: html.c:2115
987+msgid "Emoji react..."
988+msgstr ""
989+
990+#: html.c:2609
991+msgid "Emoji reactions: "
992+msgstr ""
M
po/zh.po
+202,
-190
1@@ -8,693 +8,693 @@ msgstr ""
2 "Language: zh\n"
3 "Content-Type: text/plain; charset=UTF-8\n"
4
5-#: html.c:440
6+#: html.c:534
7 msgid "Sensitive content: "
8 msgstr "敏感内容:"
9
10-#: html.c:448
11+#: html.c:542
12 msgid "Sensitive content description"
13 msgstr "敏感内容描述"
14
15 msgid "Only for mentioned people: "
16 msgstr "只有提及到的人:"
17
18-#: html.c:514
19+#: html.c:570
20 msgid "Reply to (URL): "
21 msgstr "回复给(URL):"
22
23-#: html.c:523
24+#: html.c:579
25 msgid "Don't send, but store as a draft"
26 msgstr "不发送,但保存为草稿"
27
28-#: html.c:524
29+#: html.c:580
30 msgid "Draft:"
31 msgstr "草稿:"
32
33-#: html.c:614
34+#: html.c:670
35 msgid "Attachments..."
36 msgstr "附件..."
37
38-#: html.c:637
39+#: html.c:693
40 msgid "File:"
41 msgstr "文件:"
42
43-#: html.c:641
44+#: html.c:697
45 msgid "Clear this field to delete the attachment"
46 msgstr "清除此项以删除附件"
47
48-#: html.c:650 html.c:675
49+#: html.c:706 html.c:731
50 msgid "Attachment description"
51 msgstr "附件描述"
52
53-#: html.c:686
54+#: html.c:742
55 msgid "Poll..."
56 msgstr "投票..."
57
58-#: html.c:688
59+#: html.c:744
60 msgid "Poll options (one per line, up to 8):"
61 msgstr "投票选项(每行一项,最多八项):"
62
63-#: html.c:700
64+#: html.c:756
65 msgid "One choice"
66 msgstr "单选"
67
68-#: html.c:703
69+#: html.c:759
70 msgid "Multiple choices"
71 msgstr "多选"
72
73-#: html.c:709
74+#: html.c:765
75 msgid "End in 5 minutes"
76 msgstr "五分钟后结束"
77
78-#: html.c:713
79+#: html.c:769
80 msgid "End in 1 hour"
81 msgstr "一小时后结束"
82
83-#: html.c:716
84+#: html.c:772
85 msgid "End in 1 day"
86 msgstr "一天后结束"
87
88-#: html.c:724
89+#: html.c:780
90 msgid "Post"
91 msgstr "发布"
92
93-#: html.c:826 html.c:833
94+#: html.c:882 html.c:889
95 msgid "Site description"
96 msgstr "站点描述"
97
98-#: html.c:844
99+#: html.c:900
100 msgid "Admin email"
101 msgstr "管理员邮箱"
102
103-#: html.c:857
104+#: html.c:913
105 msgid "Admin account"
106 msgstr "管理员帐号"
107
108-#: html.c:922 html.c:1278
109+#: html.c:978 html.c:1334
110 #, c-format
111 msgid "%d following, %d followers"
112 msgstr "%d 个正在关注,%d 个关注者"
113
114-#: html.c:1019
115+#: html.c:1075
116 msgid "RSS"
117 msgstr "RSS"
118
119-#: html.c:1024 html.c:1063
120+#: html.c:1080 html.c:1119
121 msgid "private"
122 msgstr "私密"
123
124-#: html.c:1059
125+#: html.c:1115
126 msgid "public"
127 msgstr "公开"
128
129-#: html.c:1067
130+#: html.c:1123
131 msgid "notifications"
132 msgstr "通知"
133
134-#: html.c:1072
135+#: html.c:1128
136 msgid "people"
137 msgstr "成员"
138
139-#: html.c:1077
140+#: html.c:1133
141 msgid "instance"
142 msgstr "实例"
143
144-#: html.c:1086
145+#: html.c:1142
146 msgid ""
147 "Search posts by URL or content (regular expression), @user@host accounts, or "
148 "#tag"
149 msgstr ""
150 "通过 URL、内容(正则表达式)、@<用户名>@<主机名>帐号,或者 #话题标签 搜索贴子"
151
152-#: html.c:1087
153+#: html.c:1143
154 msgid "Content search"
155 msgstr "搜索内容"
156
157-#: html.c:1213
158+#: html.c:1269
159 msgid "verified link"
160 msgstr "已验证的链接"
161
162-#: html.c:1270 html.c:2726 html.c:2739 html.c:2748 html.c:3680
163+#: html.c:1326 html.c:3010 html.c:3023 html.c:3032 html.c:4095
164 msgid "Location: "
165 msgstr "位置:"
166
167-#: html.c:1302
168+#: html.c:1358
169 msgid "New Post..."
170 msgstr "新贴子..."
171
172-#: html.c:1304
173+#: html.c:1360
174 msgid "What's on your mind?"
175 msgstr "你在想什么?"
176
177-#: html.c:1313
178+#: html.c:1369
179 msgid "Operations..."
180 msgstr "操作..."
181
182-#: html.c:1328 html.c:1949 html.c:3400 html.c:4817
183+#: html.c:1384 html.c:2027 html.c:3776 html.c:4044 html.c:5261
184 msgid "Follow"
185 msgstr "关注"
186
187-#: html.c:1330
188+#: html.c:1386
189 msgid "(by URL or user@host)"
190 msgstr "(通过 URL 或者 <用户名>@<主机名>)"
191
192-#: html.c:1345 html.c:1925 html.c:4766
193+#: html.c:1401 html.c:2003 html.c:5210
194 msgid "Boost"
195 msgstr "转发"
196
197-#: html.c:1347 html.c:1364
198+#: html.c:1403 html.c:1420 html.c:1442
199 msgid "(by URL)"
200 msgstr "(通过 URL)"
201
202-#: html.c:1362 html.c:1904 html.c:4757
203+#: html.c:1418 html.c:1982 html.c:5201
204 msgid "Like"
205 msgstr "点赞"
206
207-#: html.c:1490
208+#: html.c:1568
209 msgid "User Settings..."
210 msgstr "用户设置..."
211
212-#: html.c:1499
213+#: html.c:1577
214 msgid "Display name:"
215 msgstr "显示名字:"
216
217-#: html.c:1505
218+#: html.c:1583
219 msgid "Your name"
220 msgstr "你的名字"
221
222-#: html.c:1507
223+#: html.c:1585
224 msgid "Avatar: "
225 msgstr "头像:"
226
227-#: html.c:1515
228+#: html.c:1593
229 msgid "Delete current avatar"
230 msgstr "删除当前头像"
231
232-#: html.c:1517
233+#: html.c:1595
234 msgid "Header image (banner): "
235 msgstr "页眉图像(横幅)"
236
237-#: html.c:1525
238+#: html.c:1603
239 msgid "Delete current header image"
240 msgstr "删除当前的页眉图像"
241
242-#: html.c:1527
243+#: html.c:1605
244 msgid "Bio:"
245 msgstr "简介"
246
247-#: html.c:1533
248+#: html.c:1611
249 msgid "Write about yourself here..."
250 msgstr "在这里介绍你自己..."
251
252-#: html.c:1542
253+#: html.c:1620
254 msgid "Always show sensitive content"
255 msgstr "总是显示敏感内容"
256
257-#: html.c:1544
258+#: html.c:1622
259 msgid "Email address for notifications:"
260 msgstr "用于通知的电子邮箱地址"
261
262-#: html.c:1552
263+#: html.c:1630
264 msgid "Telegram notifications (bot key and chat id):"
265 msgstr "Telegram 通知(bot 密钥和聊天 ID)"
266
267-#: html.c:1566
268+#: html.c:1644
269 msgid "ntfy notifications (ntfy server and token):"
270 msgstr "ntfy 通知(ntfy 服务器和令牌):"
271
272-#: html.c:1588
273+#: html.c:1666
274 msgid "Maximum days to keep posts (0: server settings):"
275 msgstr "保存贴子的最大天数(0:服务器设置)"
276
277-#: html.c:1602
278+#: html.c:1680
279 msgid "Drop direct messages from people you don't follow"
280 msgstr "丢弃你没有关注的人的私信"
281
282-#: html.c:1611
283+#: html.c:1689
284 msgid "This account is a bot"
285 msgstr "此帐号是机器人"
286
287-#: html.c:1620
288+#: html.c:1698
289 msgid "Auto-boost all mentions to this account"
290 msgstr "自动转发所有对此帐号的提及"
291
292-#: html.c:1629
293+#: html.c:1707
294 msgid "This account is private (posts are not shown through the web)"
295 msgstr "这是一个私密帐号(贴子不会在网页中显示)"
296
297-#: html.c:1639
298+#: html.c:1717
299 msgid "Collapse top threads by default"
300 msgstr "默认收起主题帖"
301
302-#: html.c:1648
303+#: html.c:1726
304 msgid "Follow requests must be approved"
305 msgstr "关注请求必须经过审批"
306
307-#: html.c:1657
308+#: html.c:1735
309 msgid "Publish follower and following metrics"
310 msgstr "展示关注者和正在关注的数量"
311
312-#: html.c:1659
313+#: html.c:1737
314 msgid "Current location:"
315 msgstr "当前位置:"
316
317-#: html.c:1673
318+#: html.c:1751
319 msgid "Profile metadata (key=value pairs in each line):"
320 msgstr "个人资料元数据(每行一条 键=值)"
321
322-#: html.c:1684
323+#: html.c:1762
324 msgid "Web interface language:"
325 msgstr "网页界面语言:"
326
327-#: html.c:1703
328+#: html.c:1781
329 msgid "New password:"
330 msgstr "新密码:"
331
332-#: html.c:1710
333+#: html.c:1788
334 msgid "Repeat new password:"
335 msgstr "重复新密码:"
336
337-#: html.c:1720
338+#: html.c:1798
339 msgid "Update user info"
340 msgstr "更新用户信息:"
341
342-#: html.c:1731
343+#: html.c:1809
344 msgid "Followed hashtags..."
345 msgstr "关注的标签..."
346
347-#: html.c:1733 html.c:1766
348+#: html.c:1811 html.c:1844
349 msgid "One hashtag per line"
350 msgstr "每行一个标签"
351
352-#: html.c:1755 html.c:1787
353+#: html.c:1833 html.c:1865
354 msgid "Update hashtags"
355 msgstr "更新标签"
356
357-#: html.c:1904
358+#: html.c:1982
359 msgid "Say you like this post"
360 msgstr "说你喜欢这个贴子"
361
362-#: html.c:1909 html.c:4775
363+#: html.c:1987 html.c:5219
364 msgid "Unlike"
365 msgstr "不喜欢"
366
367-#: html.c:1909
368+#: html.c:1987
369 msgid "Nah don't like it that much"
370 msgstr "啊,不怎么喜欢这个"
371
372-#: html.c:1915 html.c:4912
373+#: html.c:1993 html.c:5356
374 msgid "Unpin"
375 msgstr "取消置顶"
376
377-#: html.c:1915
378+#: html.c:1993
379 msgid "Unpin this post from your timeline"
380 msgstr "从你的时间线上取消置顶这个贴子"
381
382-#: html.c:1918 html.c:4907
383+#: html.c:1996 html.c:5351
384 msgid "Pin"
385 msgstr "置顶"
386
387-#: html.c:1918
388+#: html.c:1996
389 msgid "Pin this post to the top of your timeline"
390 msgstr "把这条贴子置顶在你的时间线上"
391
392-#: html.c:1925
393+#: html.c:2003
394 msgid "Announce this post to your followers"
395 msgstr "向你的关注者宣布这条贴子"
396
397-#: html.c:1930 html.c:4783
398+#: html.c:2008 html.c:5227
399 msgid "Unboost"
400 msgstr "取消转发"
401
402-#: html.c:1930
403+#: html.c:2008
404 msgid "I regret I boosted this"
405 msgstr "我后悔转发这个了"
406
407-#: html.c:1936 html.c:4922
408+#: html.c:2014 html.c:5366
409 msgid "Unbookmark"
410 msgstr "取消收藏"
411
412-#: html.c:1936
413+#: html.c:2014
414 msgid "Delete this post from your bookmarks"
415 msgstr "从收藏夹中删除这个贴子"
416
417-#: html.c:1939 html.c:4917
418+#: html.c:2017 html.c:5361
419 msgid "Bookmark"
420 msgstr "收藏"
421
422-#: html.c:1939
423+#: html.c:2017
424 msgid "Add this post to your bookmarks"
425 msgstr "把这个贴子加入收藏夹"
426
427-#: html.c:1945 html.c:3386 html.c:3577 html.c:4830
428+#: html.c:2023 html.c:3762 html.c:3957 html.c:4042 html.c:5274
429 msgid "Unfollow"
430 msgstr "取消关注"
431
432-#: html.c:1945 html.c:3387
433+#: html.c:2023 html.c:3763 html.c:4042
434 msgid "Stop following this user's activity"
435 msgstr "停止关注此用户的动态"
436
437-#: html.c:1949 html.c:3401
438+#: html.c:2027 html.c:3777 html.c:4044
439 msgid "Start following this user's activity"
440 msgstr "开始关注此用户的动态"
441
442-#: html.c:1955 html.c:4860
443+#: html.c:2033 html.c:5304
444 msgid "Unfollow Group"
445 msgstr "取消关注群组"
446
447-#: html.c:1956
448+#: html.c:2034
449 msgid "Stop following this group or channel"
450 msgstr "取消关注这个群组或频道"
451
452-#: html.c:1960 html.c:4847
453+#: html.c:2038 html.c:5291
454 msgid "Follow Group"
455 msgstr "关注群组"
456
457-#: html.c:1961
458+#: html.c:2039
459 msgid "Start following this group or channel"
460 msgstr "开始关注这个群组或频道"
461
462-#: html.c:1966 html.c:3423 html.c:4791
463+#: html.c:2044 html.c:3799 html.c:5235
464 msgid "MUTE"
465 msgstr "静音"
466
467-#: html.c:1967
468+#: html.c:2045
469 msgid "Block any activity from this user forever"
470 msgstr "永久屏蔽来自这个用户的任何动态"
471
472-#: html.c:1972 html.c:3405 html.c:4877
473+#: html.c:2050 html.c:3781 html.c:5321
474 msgid "Delete"
475 msgstr "删除"
476
477-#: html.c:1972
478+#: html.c:2050
479 msgid "Delete this post"
480 msgstr "删除这条贴子"
481
482-#: html.c:1975 html.c:4799
483+#: html.c:2053 html.c:5243
484 msgid "Hide"
485 msgstr "隐藏"
486
487-#: html.c:1975
488+#: html.c:2053
489 msgid "Hide this post and its children"
490 msgstr "删除这条贴子及其回复"
491
492-#: html.c:2017
493+#: html.c:2095
494 msgid "Edit..."
495 msgstr "编辑..."
496
497-#: html.c:2039
498+#: html.c:2133
499 msgid "Reply..."
500 msgstr "回复..."
501
502-#: html.c:2090
503+#: html.c:2184
504 msgid "Truncated (too deep)"
505 msgstr "已被截断(太深了)"
506
507-#: html.c:2108
508+#: html.c:2202
509 msgid "follows you"
510 msgstr "关注了你"
511
512-#: html.c:2182
513+#: html.c:2276
514 msgid "Pinned"
515 msgstr "已置顶"
516
517-#: html.c:2190
518+#: html.c:2284
519 msgid "Bookmarked"
520 msgstr "已收藏"
521
522-#: html.c:2198
523+#: html.c:2292
524 msgid "Poll"
525 msgstr "投票"
526
527-#: html.c:2205
528+#: html.c:2299
529 msgid "Voted"
530 msgstr "已投票"
531
532-#: html.c:2214
533+#: html.c:2308
534 msgid "Event"
535 msgstr "事件"
536
537-#: html.c:2246 html.c:2275
538+#: html.c:2340 html.c:2369
539 msgid "boosted"
540 msgstr "已转发"
541
542-#: html.c:2289
543+#: html.c:2383
544 msgid "in reply to"
545 msgstr "回复给"
546
547-#: html.c:2345
548+#: html.c:2439
549 msgid " [SENSITIVE CONTENT]"
550 msgstr "【敏感内容】"
551
552-#: html.c:2512
553+#: html.c:2796
554 msgid "Vote"
555 msgstr "投票"
556
557-#: html.c:2522
558+#: html.c:2806
559 msgid "Closed"
560 msgstr "已关闭"
561
562-#: html.c:2547
563+#: html.c:2831
564 msgid "Closes in"
565 msgstr "距离关闭还有"
566
567-#: html.c:2627
568+#: html.c:2911
569 msgid "Video"
570 msgstr "视频"
571
572-#: html.c:2642
573+#: html.c:2926
574 msgid "Audio"
575 msgstr "音频"
576
577-#: html.c:2670
578+#: html.c:2954
579 msgid "Attachment"
580 msgstr "附件"
581
582-#: html.c:2684
583+#: html.c:2968
584 msgid "Alt..."
585 msgstr "描述..."
586
587-#: html.c:2697
588+#: html.c:2981
589 msgid "Source channel or community"
590 msgstr "来源频道或者社群"
591
592-#: html.c:2791
593+#: html.c:3075
594 msgid "Time: "
595 msgstr "时间:"
596
597-#: html.c:2872
598+#: html.c:3156
599 msgid "Older..."
600 msgstr "更早的..."
601
602-#: html.c:2974
603+#: html.c:3258
604 msgid "about this site"
605 msgstr "关于此站点"
606
607-#: html.c:2976
608+#: html.c:3260
609 msgid "powered by "
610 msgstr "驱动自"
611
612-#: html.c:3041
613+#: html.c:3329
614 msgid "Dismiss"
615 msgstr "忽略"
616
617-#: html.c:3058
618+#: html.c:3346
619 #, c-format
620 msgid "Timeline for list '%s'"
621 msgstr "列表'%s'的时间线"
622
623-#: html.c:3077 html.c:4169
624+#: html.c:3365 html.c:4589
625 msgid "Pinned posts"
626 msgstr "置顶的贴子"
627
628-#: html.c:3089 html.c:4184
629+#: html.c:3377 html.c:4604
630 msgid "Bookmarked posts"
631 msgstr "收藏的贴子"
632
633-#: html.c:3101 html.c:4199
634+#: html.c:3389 html.c:4619
635 msgid "Post drafts"
636 msgstr "贴子草稿"
637
638-#: html.c:3177
639+#: html.c:3465
640 msgid "No more unseen posts"
641 msgstr "没有更多未读贴子了"
642
643-#: html.c:3181 html.c:3290
644+#: html.c:3469 html.c:3578
645 msgid "Back to top"
646 msgstr "返回顶部"
647
648-#: html.c:3243
649+#: html.c:3531
650 msgid "History"
651 msgstr "历史"
652
653-#: html.c:3295 html.c:3734
654+#: html.c:3583 html.c:4149
655 msgid "More..."
656 msgstr "更多..."
657
658-#: html.c:3391 html.c:4813
659+#: html.c:3767 html.c:5257
660 msgid "Unlimit"
661 msgstr "取消限制"
662
663-#: html.c:3392
664+#: html.c:3768
665 msgid "Allow announces (boosts) from this user"
666 msgstr "允许来自这个用户的通知(转发)"
667
668-#: html.c:3395 html.c:4809
669+#: html.c:3771 html.c:5253
670 msgid "Limit"
671 msgstr "限制"
672
673-#: html.c:3396
674+#: html.c:3772
675 msgid "Block announces (boosts) from this user"
676 msgstr "屏蔽来自这个用户的通知(转发)"
677
678-#: html.c:3405
679+#: html.c:3781
680 msgid "Delete this user"
681 msgstr "删除此用户"
682
683-#: html.c:3410 html.c:4927
684+#: html.c:3786 html.c:5371
685 msgid "Approve"
686 msgstr "允许"
687
688-#: html.c:3411
689+#: html.c:3787
690 msgid "Approve this follow request"
691 msgstr "允许这个关注请求"
692
693-#: html.c:3414 html.c:4951
694+#: html.c:3790 html.c:5395
695 msgid "Discard"
696 msgstr "丢弃"
697
698-#: html.c:3414
699+#: html.c:3790
700 msgid "Discard this follow request"
701 msgstr "丢弃这个关注请求"
702
703-#: html.c:3419 html.c:4795
704+#: html.c:3795 html.c:5239
705 msgid "Unmute"
706 msgstr "取消静音"
707
708-#: html.c:3420
709+#: html.c:3796
710 msgid "Stop blocking activities from this user"
711 msgstr "停止屏蔽来自此用户的动态"
712
713-#: html.c:3424
714+#: html.c:3800
715 msgid "Block any activity from this user"
716 msgstr "屏蔽来自此用户的任何动态"
717
718-#: html.c:3432
719+#: html.c:3808
720 msgid "Direct Message..."
721 msgstr "私信..."
722
723-#: html.c:3467
724+#: html.c:3843
725 msgid "Pending follow confirmations"
726 msgstr "待处理的关注确认"
727
728-#: html.c:3471
729+#: html.c:3847
730 msgid "People you follow"
731 msgstr "你关注的人"
732
733-#: html.c:3472
734+#: html.c:3848
735 msgid "People that follow you"
736 msgstr "关注你的人"
737
738-#: html.c:3511
739+#: html.c:3887
740 msgid "Clear all"
741 msgstr "清除全部"
742
743-#: html.c:3571
744+#: html.c:3951
745 msgid "Mention"
746 msgstr "提及"
747
748-#: html.c:3574
749+#: html.c:3954
750 msgid "Finished poll"
751 msgstr "结束投票"
752
753-#: html.c:3590
754+#: html.c:3979
755 msgid "Follow Request"
756 msgstr "关注请求"
757
758-#: html.c:3674
759+#: html.c:4089
760 msgid "Context"
761 msgstr "上下文"
762
763-#: html.c:3692
764+#: html.c:4107
765 msgid "New"
766 msgstr "新建"
767
768-#: html.c:3707
769+#: html.c:4122
770 msgid "Already seen"
771 msgstr "已经看过"
772
773-#: html.c:3722
774+#: html.c:4137
775 msgid "None"
776 msgstr "没有"
777
778-#: html.c:3994
779+#: html.c:4414
780 #, c-format
781 msgid "Search results for account %s"
782 msgstr "账户 %s 的搜索结果"
783
784-#: html.c:4001
785+#: html.c:4421
786 #, c-format
787 msgid "Account %s not found"
788 msgstr "没有找到账户 %s"
789
790-#: html.c:4032
791+#: html.c:4452
792 #, c-format
793 msgid "Search results for tag %s"
794 msgstr "标签 %s 的搜索结果"
795
796-#: html.c:4032
797+#: html.c:4452
798 #, c-format
799 msgid "Nothing found for tag %s"
800 msgstr "没有找到标签'%s'的结果"
801
802-#: html.c:4048
803+#: html.c:4468
804 #, c-format
805 msgid "Search results for '%s' (may be more)"
806 msgstr "'%s'的搜索结果(可能还有更多)"
807
808-#: html.c:4051
809+#: html.c:4471
810 #, c-format
811 msgid "Search results for '%s'"
812 msgstr "'%s'的搜索结果"
813
814-#: html.c:4054
815+#: html.c:4474
816 #, c-format
817 msgid "No more matches for '%s'"
818 msgstr "没有更多匹配'%s'的结果了"
819
820-#: html.c:4056
821+#: html.c:4476
822 #, c-format
823 msgid "Nothing found for '%s'"
824 msgstr "没有找到'%s'的结果"
825
826-#: html.c:4154
827+#: html.c:4574
828 msgid "Showing instance timeline"
829 msgstr "显示实例时间线"
830
831-#: html.c:4237
832+#: html.c:4657
833 #, c-format
834 msgid "Showing timeline for list '%s'"
835 msgstr "显示列表'%s'的事件线"
836
837-#: httpd.c:258
838+#: httpd.c:259
839 #, c-format
840 msgid "Search results for tag #%s"
841 msgstr "标签 #%s 的搜索结果"
842
843-#: httpd.c:267
844+#: httpd.c:268
845 msgid "Recent posts by users in this instance"
846 msgstr "此实例上的用户最近的贴子"
847
848-#: html.c:1764
849+#: html.c:1842
850 msgid "Blocked hashtags..."
851 msgstr "已屏蔽的话题标签"
852
853-#: html.c:518
854+#: html.c:574
855 msgid "Optional URL to reply to"
856 msgstr "可选的回复的网址"
857
858-#: html.c:695
859+#: html.c:751
860 msgid ""
861 "Option 1...\n"
862 "Option 2...\n"
863@@ -706,94 +706,106 @@ msgstr ""
864 "选项 3...\n"
865 "..."
866
867-#: html.c:1558
868+#: html.c:1636
869 msgid "Bot API key"
870 msgstr "Bot API 密钥"
871
872-#: html.c:1564
873+#: html.c:1642
874 msgid "Chat id"
875 msgstr "聊天 ID"
876
877-#: html.c:1572
878+#: html.c:1650
879 msgid "ntfy server - full URL (example: https://ntfy.sh/YourTopic)"
880 msgstr "ntfy 服务器 - 完整网址(例如:https://ntft.sh/YourTopic)"
881
882-#: html.c:1578
883+#: html.c:1656
884 msgid "ntfy token - if needed"
885 msgstr "ntft 令牌 - 如果需要的话"
886
887-#: html.c:3078
888+#: html.c:3366
889 msgid "pinned"
890 msgstr "置顶"
891
892-#: html.c:3090
893+#: html.c:3378
894 msgid "bookmarks"
895 msgstr "收藏夹"
896
897-#: html.c:3102
898+#: html.c:3390
899 msgid "drafts"
900 msgstr "草稿"
901
902-#: html.c:584
903+#: html.c:640
904 msgid "Scheduled post..."
905 msgstr "计划发布定时贴文"
906
907 msgid "Post date and time:"
908 msgstr "发布日期和时间"
909
910-#: html.c:3113 html.c:4214
911+#: html.c:3401 html.c:4634
912 msgid "Scheduled posts"
913 msgstr "已发布的定时帖文"
914
915-#: html.c:3114
916+#: html.c:3402
917 msgid "scheduled posts"
918 msgstr "计划发布定时贴文"
919
920-#: html.c:578
921+#: html.c:634
922 #, c-format
923 msgid "Post date and time (timezone: %s):"
924 msgstr "发布日期和时间(时区: %s)"
925
926-#: html.c:1689
927+#: html.c:1767
928 msgid "Time zone:"
929 msgstr "时区"
930
931-#: html.c:559
932+#: html.c:615
933 msgid "Language:"
934 msgstr "语言"
935
936-#: html.c:1580
937+#: html.c:1658
938 msgid "Notify webhook:"
939 msgstr ""
940
941-#: html.c:1586
942+#: html.c:1664
943 msgid "http://example.com/webhook"
944 msgstr ""
945
946-#: html.c:1694
947+#: html.c:1772
948 msgid "Languages you usually post in:"
949 msgstr "您通常使用的语言:"
950
951-#: html.c:1700
952+#: html.c:1778
953 msgid "en fr es de_AT"
954 msgstr ""
955
956-#: html.c:460
957+#: html.c:428
958 msgid "Visibility: "
959 msgstr ""
960
961-#: html.c:468
962 msgid "Public"
963 msgstr ""
964
965-#: html.c:477
966 msgid "Unlisted"
967 msgstr ""
968
969-#: html.c:486
970 msgid "Followers-only"
971 msgstr ""
972
973-#: html.c:495
974 msgid "Direct Message"
975 msgstr ""
976+
977+#: html.c:488 html.c:2534 html.c:2559 html.c:5177
978+msgid "EmojiUnreact"
979+msgstr ""
980+
981+#: html.c:488 html.c:1440 html.c:2534 html.c:2559 html.c:5188
982+msgid "EmojiReact"
983+msgstr ""
984+
985+#: html.c:2115
986+msgid "Emoji react..."
987+msgstr ""
988+
989+#: html.c:2609
990+msgid "Emoji reactions: "
991+msgstr ""
M
rss.c
+11,
-3
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2025 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_html.h"
8@@ -10,6 +10,7 @@
9 #include "xs_openssl.h"
10 #include "xs_json.h"
11 #include "xs_http.h"
12+#include "xs_unicode.h"
13
14 #include "snac.h"
15
16@@ -59,7 +60,7 @@ xs_str *rss_from_timeline(snac *user, const xs_list *timeline,
17 const char *content = xs_dict_get(msg, "content");
18 const char *published = xs_dict_get(msg, "published");
19
20- if (user && !xs_startswith(id, user->actor))
21+ if (user && !is_msg_mine(user, id))
22 continue;
23
24 if (!id || !content || !published)
25@@ -74,7 +75,14 @@ xs_str *rss_from_timeline(snac *user, const xs_list *timeline,
26 title = xs_regex_replace_i(title, "&[^;]+;", " ");
27 int i;
28
29- for (i = 0; title[i] && title[i] != '\n' && i < 50; i++);
30+ for (i = 0; title[i] && title[i] != '\n' && i < 50; ) {
31+ const char *p = &title[i];
32+ unsigned int cp = xs_utf8_dec(&p);
33+ int n = p - title;
34+ if (cp == 0xfffd || n > 50)
35+ break;
36+ i = n;
37+ }
38
39 if (title[i] != '\0') {
40 title[i] = '\0';
M
snac.c
+152,
-1
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #define XS_IMPLEMENTATION
7
8@@ -27,11 +27,15 @@
9 #include "xs_html.h"
10 #include "xs_po.h"
11 #include "xs_webmention.h"
12+#include "xs_list_tools.h"
13
14 #include "snac.h"
15
16 #include <sys/time.h>
17 #include <sys/stat.h>
18+#include <sys/wait.h>
19+#include <limits.h>
20+#include <stdlib.h>
21
22 xs_str *srv_basedir = NULL;
23 xs_dict *srv_config = NULL;
24@@ -170,3 +174,150 @@ int check_password(const char *uid, const char *passwd, const char *hash)
25
26 return ret;
27 }
28+
29+
30+int strip_media(const char *fn)
31+/* strips EXIF data from a file */
32+{
33+ int ret = 0;
34+
35+ const xs_val *v = xs_dict_get(srv_config, "strip_exif");
36+
37+ if (xs_type(v) == XSTYPE_TRUE) {
38+ /* Heuristic: find 'user/' in the path to make it relative */
39+ /* This works for ~/user/..., /var/snac/user/..., etc. */
40+ const char *r_fn = strstr(fn, "user/");
41+
42+ if (r_fn == NULL) {
43+ /* Fallback: try to strip ~/ if present */
44+ if (strncmp(fn, "~/", 2) == 0)
45+ r_fn = fn + 2;
46+ else
47+ r_fn = fn;
48+ }
49+
50+ xs *l_fn = xs_tolower_i(xs_dup(r_fn));
51+
52+ /* check image extensions */
53+ if (xs_endswith(l_fn, ".jpg") || xs_endswith(l_fn, ".jpeg") ||
54+ xs_endswith(l_fn, ".png") || xs_endswith(l_fn, ".webp") ||
55+ xs_endswith(l_fn, ".heic") || xs_endswith(l_fn, ".heif") ||
56+ xs_endswith(l_fn, ".avif") || xs_endswith(l_fn, ".tiff") ||
57+ xs_endswith(l_fn, ".gif") || xs_endswith(l_fn, ".bmp")) {
58+
59+ const char *mp = xs_dict_get(srv_config, "mogrify_path");
60+ if (mp == NULL)
61+ mp = "mogrify";
62+
63+ xs *cmd = xs_fmt("cd \"%s\" && %s -auto-orient -strip \"%s\" 2>/dev/null", srv_basedir, mp, r_fn);
64+
65+ ret = system(cmd);
66+
67+ if (ret != 0) {
68+ int code = 0;
69+ if (WIFEXITED(ret))
70+ code = WEXITSTATUS(ret);
71+
72+ if (code == 127)
73+ srv_log(xs_fmt("strip_media: error stripping %s. '%s' not found (exit 127). Set 'mogrify_path' in server.json.", r_fn, mp));
74+ else
75+ srv_log(xs_fmt("strip_media: error stripping %s %d", r_fn, ret));
76+ }
77+ else
78+ srv_debug(1, xs_fmt("strip_media: stripped %s", r_fn));
79+ }
80+ else
81+ /* check video extensions */
82+ if (xs_endswith(l_fn, ".mp4") || xs_endswith(l_fn, ".m4v") ||
83+ xs_endswith(l_fn, ".mov") || xs_endswith(l_fn, ".webm") ||
84+ xs_endswith(l_fn, ".mkv") || xs_endswith(l_fn, ".avi")) {
85+
86+ const char *fp = xs_dict_get(srv_config, "ffmpeg_path");
87+ if (fp == NULL)
88+ fp = "ffmpeg";
89+
90+ /* ffmpeg cannot modify in-place, so we need a temp file */
91+ /* we must preserve valid extension for ffmpeg to guess the format */
92+ const char *ext = strrchr(r_fn, '.');
93+ if (ext == NULL) ext = "";
94+ xs *tmp_fn = xs_fmt("%s.tmp%s", r_fn, ext);
95+
96+ /* -map_metadata -1 strips all global metadata */
97+ /* -c copy copies input streams without re-encoding */
98+ /* we don't silence stderr so we can debug issues */
99+ /* we explicitly cd to srv_basedir to ensure relative paths work */
100+ xs *cmd = xs_fmt("cd \"%s\" && %s -y -i \"%s\" -map_metadata -1 -c copy \"%s\"", srv_basedir, fp, r_fn, tmp_fn);
101+
102+ ret = system(cmd);
103+
104+ if (ret != 0) {
105+ int code = 0;
106+ if (WIFEXITED(ret))
107+ code = WEXITSTATUS(ret);
108+
109+ if (code == 127)
110+ srv_log(xs_fmt("strip_media: error stripping %s. '%s' not found (exit 127). Set 'ffmpeg_path' in server.json.", r_fn, fp));
111+ else {
112+ srv_log(xs_fmt("strip_media: error stripping %s %d", r_fn, ret));
113+ srv_log(xs_fmt("strip_media: command was: %s", cmd));
114+ }
115+
116+ /* try to cleanup, just in case */
117+ /* unlink needs full path too if we are not in basedir */
118+ xs *full_tmp_fn = xs_fmt("%s/%s", srv_basedir, tmp_fn);
119+ unlink(full_tmp_fn);
120+ }
121+ else {
122+ /* rename tmp file to original */
123+ /* use full path for source because it was created relative to basedir */
124+ xs *full_tmp_fn = xs_fmt("%s/%s", srv_basedir, tmp_fn);
125+
126+ if (rename(full_tmp_fn, fn) == 0)
127+ srv_debug(1, xs_fmt("strip_media: stripped %s", fn));
128+ else
129+ srv_log(xs_fmt("strip_media: error renaming %s to %s", full_tmp_fn, fn));
130+ }
131+ }
132+ }
133+
134+ return ret;
135+}
136+
137+
138+int check_strip_tool(void)
139+{
140+ const xs_val *v = xs_dict_get(srv_config, "strip_exif");
141+ int ret = 1;
142+
143+ if (xs_type(v) == XSTYPE_TRUE) {
144+ /* check mogrify */
145+ {
146+ const char *mp = xs_dict_get(srv_config, "mogrify_path");
147+ if (mp == NULL)
148+ mp = "mogrify";
149+
150+ xs *cmd = xs_fmt("%s -version 2>/dev/null >/dev/null", mp);
151+
152+ if (system(cmd) != 0) {
153+ srv_log(xs_fmt("check_strip_tool: '%s' not working", mp));
154+ ret = 0;
155+ }
156+ }
157+
158+ /* check ffmpeg */
159+ if (ret) {
160+ const char *fp = xs_dict_get(srv_config, "ffmpeg_path");
161+ if (fp == NULL)
162+ fp = "ffmpeg";
163+
164+ xs *cmd = xs_fmt("%s -version 2>/dev/null >/dev/null", fp);
165+
166+ if (system(cmd) != 0) {
167+ srv_log(xs_fmt("check_strip_tool: '%s' not working", fp));
168+ ret = 0;
169+ }
170+ }
171+ }
172+
173+ return ret;
174+}
M
snac.h
+19,
-4
1@@ -1,7 +1,7 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6-#define VERSION "2.85-dev"
7+#define VERSION "2.89"
8
9 #define USER_AGENT "snac/" VERSION
10
11@@ -105,6 +105,9 @@ int validate_uid(const char *uid);
12 xs_str *hash_password(const char *uid, const char *passwd, const char *nonce);
13 int check_password(const char *uid, const char *passwd, const char *hash);
14
15+int strip_media(const char *fn);
16+int check_strip_tool(void);
17+
18 void srv_archive(const char *direction, const char *url, xs_dict *req,
19 const char *payload, int p_size,
20 int status, xs_dict *headers,
21@@ -146,12 +149,15 @@ void object_touch(const char *id);
22 int object_admire(const char *id, const char *actor, int like);
23 int object_unadmire(const char *id, const char *actor, int like);
24
25+int object_emoji_react(const char *mid, const char *eid);
26+int object_rm_emoji_react(const char *mid, const char *eid);
27 int object_likes_len(const char *id);
28 int object_announces_len(const char *id);
29
30 xs_list *object_children(const char *id);
31 xs_list *object_likes(const char *id);
32 xs_list *object_announces(const char *id);
33+xs_list *object_get_emoji_reacts(const char *id);
34 int object_parent(const char *md5, char parent[MD5_HEX_SIZE]);
35
36 int object_user_cache_add(snac *snac, const char *id, const char *cachedir);
37@@ -180,7 +186,8 @@ xs_str *user_index_fn(snac *user, const char *idx_name);
38 xs_list *timeline_simple_list(snac *user, const char *idx_name, int skip, int show, int *more);
39 xs_list *timeline_list(snac *snac, const char *idx_name, int skip, int show, int *more);
40 int timeline_add(snac *snac, const char *id, const xs_dict *o_msg);
41-int timeline_admire(snac *snac, const char *id, const char *admirer, int like);
42+int timeline_admire(snac *snac, const char *id, const char *admirer, int like, const xs_dict *msg);
43+int timeline_emoji_react(const char *atto, const char *id, const xs_dict *o_msg);
44
45 xs_list *timeline_top_level(snac *snac, const xs_list *list);
46 void timeline_add_mark(snac *user);
47@@ -201,6 +208,8 @@ void unmute(snac *snac, const char *actor);
48 int is_muted(snac *snac, const char *actor);
49 xs_list *muted_list(snac *user);
50
51+xs_str *emoji_reacted(snac *user, const char *id);
52+
53 int is_bookmarked(snac *user, const char *id);
54 int bookmark(snac *user, const char *id);
55 int unbookmark(snac *user, const char *id);
56@@ -358,6 +367,8 @@ xs_list *get_attachments(const xs_dict *msg);
57
58 xs_dict *msg_admiration(snac *snac, const char *object, const char *type);
59 xs_dict *msg_repulsion(snac *user, const char *id, const char *type);
60+xs_dict *msg_emoji_init(snac *user, const char *mid, const char *eid);
61+xs_dict *msg_emoji_unreact(snac *user, const char *id, const char *type);
62 xs_dict *msg_create(snac *snac, const xs_dict *object);
63 xs_dict *msg_follow(snac *snac, const char *actor);
64
65@@ -388,6 +399,7 @@ int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg,
66 xs_str *get_actor_inbox(const char *actor, int shared);
67 int send_to_actor(snac *snac, const char *actor, const xs_dict *msg,
68 xs_val **payload, int *p_size, int timeout);
69+int is_msg_mine(snac *user, const char *id);
70 int is_msg_public(const xs_dict *msg);
71 int is_msg_from_private_user(const xs_dict *msg);
72 int is_msg_for_me(snac *snac, const xs_dict *msg);
73@@ -403,6 +415,7 @@ int activitypub_post_handler(const xs_dict *req, const char *q_path,
74 char **body, int *b_size, char **ctype);
75
76 xs_dict *emojis(void);
77+xs_dict *emojis_rm_categories(void);
78 xs_str *format_text_with_emoji(snac *user, const char *text, int ems, const char *proxy);
79 xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag);
80 xs_str *sanitize(const char *content);
81@@ -410,7 +423,7 @@ xs_str *encode_html(const char *str);
82
83 xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
84 int skip, int show, int show_more,
85- const char *title, const char *page, int utl, const char *error);
86+ const char *title, const char *page, int utl, const char *error, int terse);
87
88 int html_get_handler(const xs_dict *req, const char *q_path,
89 char **body, int *b_size, char **ctype,
90@@ -485,3 +498,5 @@ void rss_to_timeline(snac *user, const char *url);
91 void rss_poll_hashtags(void);
92
93 void data_fsck(void);
94+
95+xs_list *user_top_ten(snac *user, int count);
+2,
-2
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
8@@ -213,7 +213,7 @@ int snac_upgrade(xs_str **error)
9 object_add_ow(id, o);
10
11 /* if it's from us, add to public */
12- if (xs_startswith(id, snac.actor)) {
13+ if (is_msg_mine(&snac, id)) {
14 const xs_list *p;
15 const char *v;
16 int c;
M
utils.c
+77,
-1
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_io.h"
8@@ -11,6 +11,8 @@
9 #include "xs_curl.h"
10 #include "xs_regex.h"
11 #include "xs_http.h"
12+#include "xs_list_tools.h"
13+#include "xs_set.h"
14
15 #include "snac.h"
16
17@@ -78,11 +80,15 @@ static const char * const default_css =
18 ".snac-list-of-lists li { display: inline; border: 1px solid #a0a0a0; border-radius: 25px;\n"
19 " margin-right: 0.5em; padding-left: 0.5em; padding-right: 0.5em; }\n"
20 ".snac-no-more-unseen-posts { border-top: 1px solid #a0a0a0; border-bottom: 1px solid #a0a0a0; padding: 0.5em 0; margin: 1em 0; }\n"
21+ ".snac-reaction { padding:5px; padding-left: 10px; padding-right: 10px; display: inline-flex; margin-right: 5px; font-family: inherit; font-size: medium; height: 2.5rem; vertical-align:middle; align-items:center;}\n"
22+ ".snac-reaction-image { max-width: 100%; max-height: 100%; }\n"
23+ ".snac-reaction-div { border-left: darkgray; border-left-style: solid; margin-bottom: .3em; padding-left: .3em; border-left-width: 2px; }\n"
24 "@media (prefers-color-scheme: dark) { \n"
25 " body, input, textarea { background-color: #000; color: #fff; }\n"
26 " a { color: #7799dd }\n"
27 " a:visited { color: #aa99dd }\n"
28 "}\n"
29+ "select { max-width: 40%; }\n"
30 ;
31
32 const char *snac_blurb =
33@@ -999,6 +1005,76 @@ void import_csv(snac *user)
34 snac_log(user, xs_fmt("Cannot open file %s", fn));
35 }
36
37+
38+static int top_ten_sort(const void *v1, const void *v2)
39+{
40+ const xs_list *l1 = *(const xs_list **)v1;
41+ const xs_list *l2 = *(const xs_list **)v2;
42+
43+ const char *c1 = xs_list_get(l1, 3);
44+ const char *c2 = xs_list_get(l2, 3);
45+
46+ return xs_cmp(c2, c1);
47+}
48+
49+
50+xs_list *user_top_ten(snac *user, int count)
51+/* returns the top ten more popular posts by a user */
52+{
53+ xs *idx = xs_fmt("%s/private.idx", user->basedir);
54+ xs *list = index_list(idx, XS_ALL);
55+ xs *u_list = xs_list_new();
56+ xs_set u;
57+
58+ xs_set_init(&u);
59+
60+ const char *md5;
61+
62+ xs_list_foreach(list, md5) {
63+ xs *obj = NULL;
64+
65+ if (!valid_status(object_get_by_md5(md5, &obj)))
66+ continue;
67+
68+ const char *id = xs_dict_get_def(obj, "id", "-");
69+
70+ if (!is_msg_mine(user, id))
71+ continue;
72+
73+ if (xs_set_add(&u, id) != 1)
74+ continue;
75+
76+ /* get metrics */
77+ int ls = object_likes_len(id);
78+ int as = object_announces_len(id);
79+
80+ /* build the entry and convert to list */
81+ xs *s = xs_fmt("%s\t%d\t%d\t%010d", id, ls, as, ls + as);
82+ xs *l = xs_split(s, "\t");
83+
84+ u_list = xs_list_append(u_list, l);
85+ }
86+
87+ /* sort by the sum of likes and boosts */
88+ xs *s_list = xs_list_sort(u_list, top_ten_sort);
89+
90+ xs_list *r = xs_list_new();
91+ const xs_list *i;
92+
93+ xs_list_foreach(s_list, i) {
94+ r = xs_list_append(r, i);
95+
96+ if (--count <= 0)
97+ break;
98+ }
99+
100+ xs_set_free(&u);
101+
102+ return r;
103+}
104+
105+
106+
107 static const struct {
108 const char *proto;
109 unsigned short default_port;
+1,
-1
1@@ -1,5 +1,5 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
5
6 #include "xs.h"
7 #include "xs_json.h"
M
xs.h
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_CURL_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 /*
6 This is an intentionally-dead-simple FastCGI implementation;
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_GLOB_H
6
M
xs_hex.h
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_HEX_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_HTML_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_HTTP_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_HTTPD_H
6
M
xs_io.h
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_IO_H
6
+3,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_JSON_H
6
7@@ -28,6 +28,8 @@ int xs_json_load_object(FILE *f, int maxdepth, xs_dict **d);
8
9 /** IMPLEMENTATION **/
10
11+#include "xs_unicode.h"
12+
13 /** JSON dumps **/
14
15 static void _xs_json_dump_str(const char *data, FILE *f)
+169,
-0
1@@ -0,0 +1,169 @@
2+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
3+
4+#ifndef _XS_LIST_TOOLS_H
5+
6+#define _XS_LIST_TOOLS_H
7+
8+ xs_list *xs_list_insert_sorted(xs_list *list, const xs_val *nv);
9+ xs_list *xs_list_reverse(const xs_list *l);
10+ xs_val **xs_list_to_array(const xs_list *l, int *len);
11+ int xs_list_sort_cmp(const void *p1, const void *p2);
12+ int xs_list_sort_inv_cmp(const void *p1, const void *p2);
13+ int xs_list_sort_dict_cmp(const char *field, const void *p1, const void *p2);
14+ xs_list *xs_list_sort(const xs_list *l, int (*cmp)(const void *, const void *));
15+ xs_list *xs_list_shuffle(const xs_list *l);
16+
17+#ifdef XS_IMPLEMENTATION
18+
19+#include "xs_random.h"
20+
21+xs_list *xs_list_insert_sorted(xs_list *list, const xs_val *nv)
22+/* inserts a string in the list in its ordered position */
23+{
24+ XS_ASSERT_TYPE(list, XSTYPE_LIST);
25+
26+ int offset = xs_size(list);
27+
28+ const xs_val *v;
29+ xs_list_foreach(list, v) {
30+ /* if this element is greater or equal, insert here */
31+ if (xs_cmp(v, nv) >= 0) {
32+ offset = v - list;
33+ break;
34+ }
35+ }
36+
37+ return _xs_list_write_litem(list, offset - 1, nv, xs_size(nv));
38+}
39+
40+
41+xs_list *xs_list_reverse(const xs_list *l)
42+/* creates a new list as a reverse version of l */
43+{
44+ xs_list *n = xs_dup(l);
45+ const xs_val *v;
46+
47+ /* move to one byte before the EOM */
48+ char *p = n + xs_size(n) - 1;
49+
50+ xs_list_foreach(l, v) {
51+ /* size of v, plus the LITEM */
52+ int z = xs_size(v) + 1;
53+
54+ p -= z;
55+
56+ /* copy v, including its LITEM */
57+ memcpy(p, v - 1, z);
58+ }
59+
60+ return n;
61+}
62+
63+
64+xs_val **xs_list_to_array(const xs_list *l, int *len)
65+/* converts a list to an array of values */
66+/* must be freed after use */
67+{
68+ *len = xs_list_len(l);
69+ xs_val **a = xs_realloc(NULL, *len * sizeof(xs_val *));
70+ const xs_val *v;
71+ int n = 0;
72+
73+ xs_list_foreach(l, v)
74+ a[n++] = (xs_val *)v;
75+
76+ return a;
77+}
78+
79+
80+int xs_list_sort_cmp(const void *p1, const void *p2)
81+/* default list sorting function */
82+{
83+ const xs_val *v1 = *(xs_val **)p1;
84+ const xs_val *v2 = *(xs_val **)p2;
85+
86+ return xs_cmp(v1, v2);
87+}
88+
89+
90+int xs_list_sort_inv_cmp(const void *p1, const void *p2)
91+/* default list inverse sorting function */
92+{
93+ const xs_val *v1 = *(xs_val **)p1;
94+ const xs_val *v2 = *(xs_val **)p2;
95+
96+ return xs_cmp(v2, v1);
97+}
98+
99+
100+int xs_list_sort_dict_cmp(const char *field, const void *p1, const void *p2)
101+/* compare sorting function for a field an array of dicts */
102+{
103+ const xs_dict *d1 = *(xs_val **)p1;
104+ const xs_dict *d2 = *(xs_val **)p2;
105+
106+ if (xs_type(d1) != XSTYPE_DICT || xs_type(d2) != XSTYPE_DICT)
107+ return 0;
108+
109+ return xs_cmp(xs_dict_get_def(d1, field, ""),
110+ xs_dict_get_def(d2, field, ""));
111+}
112+
113+
114+xs_list *xs_list_sort(const xs_list *l, int (*cmp)(const void *, const void *))
115+/* returns a sorted copy of l. cmp can be null for standard sorting */
116+{
117+ int sz;
118+ xs_val **a = xs_list_to_array(l, &sz);
119+ xs_list *nl = xs_dup(l);
120+ char *p = nl + 1 + _XS_TYPE_SIZE;
121+
122+ /* sort the array */
123+ qsort(a, sz, sizeof(xs_val *), cmp ? cmp : xs_list_sort_cmp);
124+
125+ /* transfer the sorted list over the copy */
126+ for (int n = 0; n < sz; n++) {
127+ /* get the litem */
128+ const char *e = a[n] - 1;
129+ int z = xs_size(e);
130+
131+ memcpy(p, e, z);
132+ p += z;
133+ }
134+
135+ xs_free(a);
136+
137+ return nl;
138+}
139+
140+
141+xs_list *xs_list_shuffle(const xs_list *l)
142+/* returns a shuffled list */
143+{
144+ int sz;
145+ xs_val **a = xs_list_to_array(l, &sz);
146+ xs_list *nl = xs_list_new();
147+ unsigned int seed = 0;
148+
149+ xs_rnd_buf(&seed, sizeof(seed));
150+
151+ /* shuffle */
152+ for (int n = sz - 1; n > 0; n--) {
153+ int m = xs_rnd_int32_d(&seed) % n;
154+ void *p = a[n];
155+ a[n] = a[m];
156+ a[m] = p;
157+ }
158+
159+ for (int n = 0; n < sz; n++)
160+ nl = xs_list_append(nl, a[n]);
161+
162+ xs_free(a);
163+
164+ return nl;
165+}
166+
167+
168+#endif /* XS_IMPLEMENTATION */
169+
170+#endif /* XS_LIST_TOOLS_H */
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_MATCH_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_MIME_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_OPENSSL_H
6
M
xs_po.h
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2025 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_PO_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_RANDOM_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_REGEX_H
6
M
xs_set.h
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_SET_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_SOCKET_H
6
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_TIME_H
6
+8,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_UNICODE_H
6
7@@ -22,6 +22,7 @@
8 int xs_unicode_nfc(unsigned int base, unsigned int diac, unsigned int *cpoint);
9 int xs_unicode_is_alpha(unsigned int cpoint);
10 int xs_unicode_is_right_to_left(unsigned int cpoint);
11+ int xs_is_emoji(unsigned int cpoint);
12
13 #ifdef _XS_H
14 xs_str *xs_utf8_insert(xs_str *str, unsigned int cpoint, int *offset);
15@@ -134,6 +135,12 @@ static unsigned int xs_unicode_width_table[] = {
16 0x20000, 0x2fffd, 2 /* more CJK */
17 };
18
19+/* magic number from https://en.wikipedia.org/wiki/Emoji#Unicode_blocks */
20+int xs_is_emoji(unsigned int cpoint) {
21+/* returns wether the input is an utf8 emoji */
22+ return cpoint > 0x00A9 && cpoint < 0x1ffff;
23+}
24+
25 int xs_unicode_width(unsigned int cpoint)
26 /* returns the width in columns of a Unicode codepoint (somewhat simplified) */
27 {
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_UNIX_SOCKET_H
6
M
xs_url.h
+34,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_URL_H
6
7@@ -6,6 +6,7 @@
8
9 xs_str *xs_url_dec(const char *str);
10 xs_str *xs_url_enc(const char *str);
11+xs_str *xs_url_dec_emoji(const char *str);
12 xs_dict *xs_url_vars(const char *str);
13 xs_dict *xs_multipart_form_data(const char *payload, int p_size, const char *header);
14
15@@ -79,6 +80,38 @@ xs_str *xs_url_dec(const char *str)
16 }
17
18
19+xs_str *xs_url_dec_emoji(const char *str)
20+/* decodes an URL, returns NULL if not every char is an encoded hex */
21+{
22+ xs_str *s = xs_str_new(NULL);
23+
24+ while (*str) {
25+ if (!xs_is_string(str))
26+ break;
27+
28+ if (*str == '%') {
29+ unsigned int i;
30+
31+ if (sscanf(str + 1, "%02x", &i) == 1) {
32+ unsigned char uc = i;
33+
34+ if (!xs_is_string((char *)&uc))
35+ break;
36+
37+ s = xs_append_m(s, (char *)&uc, 1);
38+ str += 2;
39+ }
40+ }
41+ else
42+ return NULL;
43+
44+ str++;
45+ }
46+
47+ return s;
48+}
49+
50+
51 xs_str *xs_url_enc(const char *str)
52 /* URL-encodes a string (RFC 3986) */
53 {
+1,
-1
1@@ -1 +1 @@
2-/* 0a8b987d7bb945fe7844411727d03ac73f417455 2025-10-14T05:21:05+02:00 */
3+/* 270f9376eabd4f8e0ed3ae22a1f8eb6e06ea8b8b 2026-01-10T20:39:12+01:00 */
+1,
-1
1@@ -1,4 +1,4 @@
2-/* copyright (c) 2025 grunfink et al. / MIT license */
3+/* copyright (c) 2025 - 2026 grunfink et al. / MIT license */
4
5 #ifndef _XS_WEBMENTION_H
6