From 18be78475c74b3f3593fc9123b609877a5a85f08 Mon Sep 17 00:00:00 2001 From: Chewbacca Date: Mon, 24 Jul 2023 11:11:44 -0400 Subject: [PATCH 001/170] Fix bug trying to switch accounts In the profile dropdown, you couldn't click the avatar or the user's name because we had the `to` attribute on the LinkEl. This fixes that by only adding the link props when we render a Link. --- app/soapbox/components/account.tsx | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/app/soapbox/components/account.tsx b/app/soapbox/components/account.tsx index 861b8d475..18b4de814 100644 --- a/app/soapbox/components/account.tsx +++ b/app/soapbox/components/account.tsx @@ -179,6 +179,11 @@ const Account = ({ if (withDate) timestamp = account.created_at; const LinkEl: any = withLinkToProfile ? Link : 'div'; + const linkProps = withLinkToProfile ? { + to: `/@${account.acct}`, + title: account.acct, + onClick: (event: React.MouseEvent) => event.stopPropagation(), + } : {}; return (
@@ -188,11 +193,7 @@ const Account = ({ condition={showProfileHoverCard} wrapper={(children) => {children}} > - event.stopPropagation()} - > + {emoji && ( {children}} > - event.stopPropagation()} - > + Date: Thu, 10 Aug 2023 15:31:24 -0400 Subject: [PATCH 002/170] Import response data from mute/block endpoints --- app/soapbox/actions/accounts.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/soapbox/actions/accounts.ts b/app/soapbox/actions/accounts.ts index fdb2367fb..27cf94455 100644 --- a/app/soapbox/actions/accounts.ts +++ b/app/soapbox/actions/accounts.ts @@ -231,6 +231,7 @@ const blockAccount = (id: string) => return api(getState) .post(`/api/v1/accounts/${id}/block`) .then(response => { + dispatch(importEntities([response.data], Entities.RELATIONSHIPS)); // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers return dispatch(blockAccountSuccess(response.data, getState().statuses)); }).catch(error => dispatch(blockAccountFail(error))); @@ -244,7 +245,10 @@ const unblockAccount = (id: string) => return api(getState) .post(`/api/v1/accounts/${id}/unblock`) - .then(response => dispatch(unblockAccountSuccess(response.data))) + .then(response => { + dispatch(importEntities([response.data], Entities.RELATIONSHIPS)); + return dispatch(unblockAccountSuccess(response.data)); + }) .catch(error => dispatch(unblockAccountFail(error))); }; @@ -304,6 +308,7 @@ const muteAccount = (id: string, notifications?: boolean, duration = 0) => return api(getState) .post(`/api/v1/accounts/${id}/mute`, params) .then(response => { + dispatch(importEntities([response.data], Entities.RELATIONSHIPS)); // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers return dispatch(muteAccountSuccess(response.data, getState().statuses)); }) @@ -318,7 +323,10 @@ const unmuteAccount = (id: string) => return api(getState) .post(`/api/v1/accounts/${id}/unmute`) - .then(response => dispatch(unmuteAccountSuccess(response.data))) + .then(response => { + dispatch(importEntities([response.data], Entities.RELATIONSHIPS)); + return dispatch(unmuteAccountSuccess(response.data)); + }) .catch(error => dispatch(unmuteAccountFail(error))); }; From 1e7a5fb65506bb396e2fe16e8ce192cd4adb2009 Mon Sep 17 00:00:00 2001 From: jonnysemon Date: Mon, 17 Jul 2023 22:10:44 +0000 Subject: [PATCH 003/170] Translated using Weblate (Arabic) Currently translated at 99.6% (1589 of 1594 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/ar/ --- app/soapbox/locales/ar.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/soapbox/locales/ar.json b/app/soapbox/locales/ar.json index c28df482d..00be888e7 100644 --- a/app/soapbox/locales/ar.json +++ b/app/soapbox/locales/ar.json @@ -308,7 +308,7 @@ "column.app_create": "إنشاء تطبيق", "column.backups": "النُّسخ الاحتياطية", "column.birthdays": "أيام الميلاد", - "column.blocks": "الحسابات المحظورة", + "column.blocks": "الحسابات المحجوبة", "column.bookmarks": "المحفوظات", "column.chats": "المحادثات", "column.community": "الخط المحلي", @@ -511,6 +511,9 @@ "confirmations.mute.confirm": "كتم", "confirmations.mute.heading": "كتم @{name}", "confirmations.mute.message": "هل تود حقًا حجب {name}؟", + "confirmations.mute_group.confirm": "كتم", + "confirmations.mute_group.heading": "كتم المجموعة", + "confirmations.mute_group.message": "أنت على وشك كتم المجموعة. هل تريد الاستمرار؟", "confirmations.redraft.confirm": "إزالة و إعادة الصياغة", "confirmations.redraft.heading": "إزالة وإعادة الصياغة", "confirmations.redraft.message": "هل تود حقًّا حذف المنشور وإعادة صياغته؟ ستفقد التفاعلات والمشاركات المتعلّقة به وستظهر الردود كمنشورات منفصلة.", @@ -791,6 +794,9 @@ "group.manage": "إدارة المجموعة", "group.member.admin.limit.summary": "يمكنك تعيين ما يصل إلى {count, plural, one {مشرف} two {مشرفيْن} few {مشرفِين} many {مشرفًا} other {مشرف}} للمجموعة في الوقت الحالي.", "group.member.admin.limit.title": "تم الوصول عدد المسؤولين إلى حد", + "group.mute.label": "كتم", + "group.mute.long_label": "كتم المجموعة", + "group.mute.success": "كتمت المجموعة", "group.popover.action": "عرض المجموعة", "group.popover.summary": "يجب أن تكون عضوًا في المجموعة للرد على هذه الحالة.", "group.popover.title": "العضوية مطلوبة", @@ -824,8 +830,13 @@ "group.tags.unpin": "موضوع غير مُثبّت", "group.tags.unpin.success": "تم إلغاء التثبيت!", "group.tags.visible.success": "الموضوع ظاهر", + "group.unmute.label": "إلغاء الكتم", + "group.unmute.long_label": "إلغاء كتم المجموعة", + "group.unmute.success": "أُلغيت كتم المجموعة", "group.update.success": "حُفظت المجموعة بنجاح", + "group.upload_avatar": "رفع الأفاتار", "group.upload_banner": "رفع الصورة", + "group.upload_banner.title": "رفع صورة الخلفية", "groups.discover.popular.empty": "غير قادر على جلب المجموعات الشعبية في هذا الوقت. يرجى التحقق مرة أخرى في وقت لاحق.", "groups.discover.popular.show_more": "عرض المزيد", "groups.discover.popular.title": "مجموعات شعبية", @@ -1037,6 +1048,7 @@ "mute_modal.auto_expire": "إنهاء الكتم تلقائيا؟", "mute_modal.duration": "المدة", "mute_modal.hide_notifications": "هل تود إخفاء الإشعارات القادمة من هذا المستخدم؟", + "mutes.empty.groups": "لم تُكتم أي مجموعة حتى الأن.", "navbar.login.action": "تسجيل الدخول", "navbar.login.email.placeholder": "البريد الإلكتروني", "navbar.login.forgot_password": "هل نسيت كلمة المرور؟", @@ -1350,6 +1362,7 @@ "security.update_password.fail": "فشلت عملية تحديث كلمة المرور.", "security.update_password.success": "تم تحديث كلمة المرور بنجاح.", "settings.account_migration": "نقل الحساب", + "settings.blocks": "الحسابات المحجوبة", "settings.change_email": "تغيير البريد الإلكتروني", "settings.change_password": "تغيير كلمة المرور", "settings.configure_mfa": "إعداد المصادقة المتعددة", From 74fe1d2df12cef9a4fc9e5b6657eababbb7f1311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Wed, 19 Jul 2023 23:19:22 +0000 Subject: [PATCH 004/170] Translated using Weblate (Polish) Currently translated at 96.2% (1534 of 1594 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/pl/ --- app/soapbox/locales/pl.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/soapbox/locales/pl.json b/app/soapbox/locales/pl.json index 7df05fe92..27c6dbc1e 100644 --- a/app/soapbox/locales/pl.json +++ b/app/soapbox/locales/pl.json @@ -343,6 +343,7 @@ "column.filters.title": "Tytuł", "column.filters.whole_word": "Całe słowo", "column.follow_requests": "Prośby o obserwację", + "column.followed_tags": "Obserwowane hasztagi", "column.followers": "Obserwujący", "column.following": "Obserwowani", "column.group_blocked_members": "Zablokowani członkowie", @@ -503,6 +504,9 @@ "confirmations.mute.confirm": "Wycisz", "confirmations.mute.heading": "Wycisz @{name}", "confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?", + "confirmations.mute_group.confirm": "Wycisz", + "confirmations.mute_group.heading": "Wycisz grupę", + "confirmations.mute_group.message": "Zamierzasz wyciszyć grupę. Czy na pewno chcesz to zrobić?", "confirmations.redraft.confirm": "Usuń i przeredaguj", "confirmations.redraft.heading": "Usuń i przeredaguj", "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.", @@ -661,6 +665,7 @@ "empty_column.filters": "Nie wyciszyłeś(-aś) jeszcze żadnego słowa.", "empty_column.follow_recommendations": "Wygląda na to, że nie można wygenerować dla Ciebie sugestii kont do obserwacji. Możesz spróbować użyć wyszukiwania aby odnaleźć ciekawe profile, lub przejrzeć trendujące hashtagi.", "empty_column.follow_requests": "Nie masz żadnych próśb o możliwość obserwacji. Kiedy ktoś utworzy ją, pojawi się tutaj.", + "empty_column.followed_tags": "Nie obserwujesz jeszcze żadnego hashtagu.", "empty_column.group": "Nie ma wpisów w tej grupie.", "empty_column.group_blocks": "Ta grupa nie zablokowała jeszcze nikogo.", "empty_column.group_membership_requests": "Brak oczekujących próśb o członkostwo w tej grupie.", @@ -755,7 +760,7 @@ "gdpr.message": "{siteTitle} korzysta z ciasteczek sesji, które są niezbędne dla działania strony.", "gdpr.title": "{siteTitle} korzysta z ciasteczek", "getting_started.open_source_notice": "{code_name} jest oprogramowaniem o otwartym źródle. Możesz pomóc w rozwoju lub zgłaszać błędy na GitLabie tutaj: {code_link} (v{code_version}).", - "group.banned.message": "Jesteś zablokowany(-a) z", + "group.banned.message": "Jesteś zablokowany(-a) na {group}", "group.cancel_request": "Anuluj zgłoszenie", "group.delete.success": "Pomyślnie usunięto grupę", "group.deleted.message": "Ta grupa została usunięta.", @@ -1005,6 +1010,7 @@ "mute_modal.auto_expire": "Automatycznie wygasić wyciszenie?", "mute_modal.duration": "Czas trwania", "mute_modal.hide_notifications": "Chcesz ukryć powiadomienia od tego użytkownika?", + "mutes.empty.groups": "Nie wyciszyłeś(-aś) jeszcze żadnej grupy.", "navbar.login.action": "Zaloguj się", "navbar.login.email.placeholder": "Adres e-mail", "navbar.login.forgot_password": "Nie pamiętasz hasła?", @@ -1037,6 +1043,7 @@ "navigation_bar.favourites": "Ulubione", "navigation_bar.filters": "Wyciszone słowa", "navigation_bar.follow_requests": "Prośby o obserwację", + "navigation_bar.followed_tags": "Obserwowane hasztagu", "navigation_bar.import_data": "Importuj dane", "navigation_bar.in_reply_to": "W odpowiedzi do", "navigation_bar.invites": "Zaproszenia", @@ -1046,6 +1053,7 @@ "navigation_bar.profile_directory": "Katalog profilów", "navigation_bar.soapbox_config": "Konfiguracja Soapbox", "new_event_panel.action": "Utwórz wydarzenie", + "new_event_panel.subtitle": "Hasztagi", "new_event_panel.title": "Utwórz nowe wydarzenie", "new_group_panel.action": "Utwórz grupę", "new_group_panel.subtitle": "Nie możesz znaleźć tego, czego szukasz? Utwórz własną prywatną lub publiczną grupę.", @@ -1053,6 +1061,8 @@ "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych", "notification.follow": "{name} zaczął(-ęła) Cię obserwować", "notification.follow_request": "{name} poprosił(a) Cię o możliwość obserwacji", + "notification.group_favourite": "{name} polubił(a) Twój graficzny wpis", + "notification.group_reblog": "{name} udostępnił(a) Twój grupowy wpis", "notification.mention": "{name} wspomniał(a) o tobie", "notification.mentioned": "{name} wspomniał(a) o tobie", "notification.move": "{name} przeniósł(-osła) się na {targetName}", @@ -1061,6 +1071,7 @@ "notification.pleroma:chat_mention": "{name} wysłał(a) Ci wiadomośść", "notification.pleroma:emoji_reaction": "{name} zareagował(a) na Twój wpis", "notification.pleroma:event_reminder": "Wydarzenie w którym bierzesz udział wkrótce się zaczyna", + "notification.pleroma:participation_accepted": "Twoje zgłoszenie udziału do wydarzenia zostało przyjęte", "notification.pleroma:participation_request": "{name} cce wziąć udział w Twoim wydarzeniu", "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", "notification.reblog": "{name} podbił(a) Twój wpis", @@ -1225,6 +1236,8 @@ "remote_instance.unpin_host": "Odepnij {host}", "remote_interaction.account_placeholder": "Wprowadź nazwę@domenę użytkownika, z którego chcesz wykonać działanie", "remote_interaction.divider": "lub", + "remote_interaction.event_join": "Przejdź do dołączenia", + "remote_interaction.event_join_title": "Dołącz do wydarzenia zdalnie", "remote_interaction.favourite": "Przejdź do polubienia", "remote_interaction.favourite_title": "Polub wpis zdalnie", "remote_interaction.follow": "Przejdź do obserwacji", @@ -1314,6 +1327,7 @@ "settings.messages.label": "Pozwól użytkownikom rozpocząć rozmowę z Tobą", "settings.other": "Pozostałe opcje", "settings.preferences": "Preferencje", + "settings.privacy": "Prywatność", "settings.profile": "Profil", "settings.save.success": "Pomyślnie zapisano preferencje!", "settings.security": "Bezpieczeństwo", @@ -1376,6 +1390,7 @@ "soapbox_config.promo_panel.meta_fields.url_placeholder": "Adres URL", "soapbox_config.raw_json_hint": "Edytuj ustawienia bezpośrednio. Zmiany dokonane w pliku JSON zastąpią powyższe ustawienia. Naciśnij Zapisz, aby zastosować zmiany.", "soapbox_config.raw_json_label": "Zaawansowane: Edytuj surowe dane JSON", + "soapbox_config.redirect_root_no_login_label": "Przekieruj stronę główną", "soapbox_config.save": "Zapisz", "soapbox_config.saved": "Zapisano konfigurację Soapbox!", "soapbox_config.verified_can_edit_name_label": "Pozwól zweryfikowanym użytkownikom na zmianę swojej nazwy wyświetlanej.", @@ -1384,6 +1399,8 @@ "sponsored.subtitle": "Wpis sponsorowany", "status.admin_account": "Moderuj @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", + "status.approval.pending": "Oczekuje na zatwierdzenie", + "status.approval.rejected": "Odrzucono", "status.bookmark": "Dodaj do zakładek", "status.bookmarked": "Dodano do zakładek.", "status.cancel_reblog_private": "Cofnij podbicie", @@ -1393,6 +1410,7 @@ "status.delete": "Usuń", "status.detailed_status": "Szczegółowy widok konwersacji", "status.direct": "Wyślij wiadomość bezpośrednią do @{name}", + "status.disabled_replies.group_membership": "Tylko członkowie grupy mogą odpowiedzieć", "status.edit": "Edytuj", "status.embed": "Osadź", "status.external": "View post on {domain}", @@ -1409,6 +1427,8 @@ "status.mute_conversation": "Wycisz konwersację", "status.open": "Rozwiń ten wpis", "status.pin": "Przypnij do profilu", + "status.pin_to_group": "Przypnij do grupy", + "status.pin_to_group.success": "Przypięto w grupie!", "status.pinned": "Przypięty wpis", "status.quote": "Cytuj wpis", "status.reactions.cry": "Przykro mi", @@ -1422,6 +1442,7 @@ "status.reblog": "Podbij", "status.reblog_private": "Podbij dla odbiorców oryginalnego wpisu", "status.reblogged_by": "{name} podbił(a)", + "status.reblogged_by_with_group": "{name} udostępnił(a) z {group}", "status.reblogs.empty": "Nikt nie podbił jeszcze tego wpisu. Gdy ktoś to zrobi, pojawi się tutaj.", "status.redraft": "Usuń i przeredaguj", "status.remove_account_from_group": "Usuń konto z grupy", @@ -1444,6 +1465,7 @@ "status.unbookmarked": "Usunięto z zakładek.", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", + "status.unpin_to_group": "Odepnij z grupy", "status_list.queue_label": "Naciśnij aby zobaczyć {count} {count, plural, one {nowy wpis} few {nowe wpisy} many {nowych wpisów} other {nowe wpisy}}", "statuses.quote_tombstone": "Wpis jest niedostępny.", "statuses.tombstone": "Jeden lub więcej z wpisów jest już niedostępny.", @@ -1469,8 +1491,13 @@ "tabs_bar.profile": "Profil", "tabs_bar.search": "Szukaj", "tabs_bar.settings": "Ustawienia", + "textarea.counter.label": "Pozostało {count} znaków", + "theme_editor.Reset": "Resetuj", "theme_editor.export": "Eksportuj motyw", "theme_editor.import": "Importuj motyw", + "theme_editor.import_success": "Pomyślnie zaimportowano motyw!", + "theme_editor.restore": "Przywróć domyślny motyw", + "theme_editor.save": "Zapisz motyw", "theme_editor.saved": "Zaktualizowano motyw!", "theme_toggle.dark": "Ciemny", "theme_toggle.light": "Jasny", From 6b982af9cd6b006f6d2e801c09977e4a5dce7b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Thu, 20 Jul 2023 23:20:55 +0000 Subject: [PATCH 005/170] Translated using Weblate (Polish) Currently translated at 96.8% (1544 of 1594 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/pl/ --- app/soapbox/locales/pl.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/soapbox/locales/pl.json b/app/soapbox/locales/pl.json index 27c6dbc1e..5f67a1210 100644 --- a/app/soapbox/locales/pl.json +++ b/app/soapbox/locales/pl.json @@ -949,18 +949,23 @@ "login_form.header": "Zaloguj się", "manage_group.blocked_members": "Zablokowani członkowie", "manage_group.confirmation.copy": "Kopiuj odnośnik", - "manage_group.create": "Utwórz", + "manage_group.confirmation.share": "Udostępnij grupę", + "manage_group.confirmation.title": "Wszystko gotowe!", + "manage_group.create": "Utwórz grupę", "manage_group.delete_group": "Usuń grupę", "manage_group.done": "Gotowe", "manage_group.edit_group": "Edytuj grupę", + "manage_group.fields.cannot_change_hint": "Nie możesz tego zmienić po utworzeniu grupy.", "manage_group.fields.description_label": "Opis", "manage_group.fields.description_placeholder": "Opis", "manage_group.fields.hashtag_placeholder": "Dodaj temat", + "manage_group.fields.name_help": "Nie możesz tego zmienić po utworzeniu grupy.", "manage_group.fields.name_label": "Nazwa grupy (wymagana)", "manage_group.fields.name_label_optional": "Nazwa grupy", "manage_group.fields.name_placeholder": "Nazwa grupy", "manage_group.get_started": "Rozpocznijmy!", "manage_group.next": "Dalej", + "manage_group.pending_requests": "Oczekujące zgłoszenia", "manage_group.privacy.hint": "To ustawienie nie może zostać później zmienione.", "manage_group.privacy.label": "Ustawienia prywatności", "manage_group.privacy.private.hint": "Widoczna w mechanizmach odkrywania. Użytkownicy mogą dołączyć po zatwierdzeniu ich prośby.", @@ -1002,6 +1007,7 @@ "missing_description_modal.text": "Nie podałeś(-aś) opisu dla wszystkich załączników.", "missing_indicator.label": "Nie znaleziono", "missing_indicator.sublabel": "Nie można odnaleźć tego zasobu", + "modals.policy.submit": "Akceptuję i kontynuuję", "moderation_overlay.contact": "Kontakt", "moderation_overlay.hide": "Ukryj", "moderation_overlay.show": "Wyświetl", @@ -1390,9 +1396,12 @@ "soapbox_config.promo_panel.meta_fields.url_placeholder": "Adres URL", "soapbox_config.raw_json_hint": "Edytuj ustawienia bezpośrednio. Zmiany dokonane w pliku JSON zastąpią powyższe ustawienia. Naciśnij Zapisz, aby zastosować zmiany.", "soapbox_config.raw_json_label": "Zaawansowane: Edytuj surowe dane JSON", + "soapbox_config.redirect_root_no_login_hint": "Cel przekierowania, jeśli użytkownik jest niezalogowany.", "soapbox_config.redirect_root_no_login_label": "Przekieruj stronę główną", "soapbox_config.save": "Zapisz", "soapbox_config.saved": "Zapisano konfigurację Soapbox!", + "soapbox_config.tile_server_attribution_label": "Atrybucja kafelków map", + "soapbox_config.tile_server_label": "Serwer kafelków map", "soapbox_config.verified_can_edit_name_label": "Pozwól zweryfikowanym użytkownikom na zmianę swojej nazwy wyświetlanej.", "sponsored.info.message": "{siteTitle} wyświetla reklamy, aby utrzymać naszą usługę.", "sponsored.info.title": "Dlaczego widzę tę reklamę?", From 3d9e7a8fecb63921d4bd89116aa0b29710b8ddb3 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 22 Jul 2023 23:00:02 +0200 Subject: [PATCH 006/170] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/ --- app/soapbox/locales/ar.json | 3 --- app/soapbox/locales/ast.json | 1 - app/soapbox/locales/bg.json | 1 - app/soapbox/locales/bn.json | 3 --- app/soapbox/locales/br.json | 1 - app/soapbox/locales/ca.json | 3 --- app/soapbox/locales/co.json | 3 --- app/soapbox/locales/cs.json | 3 --- app/soapbox/locales/cy.json | 3 --- app/soapbox/locales/da.json | 3 --- app/soapbox/locales/de.json | 3 --- app/soapbox/locales/el.json | 3 --- app/soapbox/locales/en-Shaw.json | 3 --- app/soapbox/locales/eo.json | 3 --- app/soapbox/locales/es-AR.json | 3 --- app/soapbox/locales/es.json | 3 --- app/soapbox/locales/et.json | 3 --- app/soapbox/locales/eu.json | 3 --- app/soapbox/locales/fa.json | 3 --- app/soapbox/locales/fi.json | 3 --- app/soapbox/locales/fr.json | 3 --- app/soapbox/locales/ga.json | 3 --- app/soapbox/locales/gl.json | 3 --- app/soapbox/locales/he.json | 3 --- app/soapbox/locales/hi.json | 3 --- app/soapbox/locales/hr.json | 3 --- app/soapbox/locales/hu.json | 3 --- app/soapbox/locales/hy.json | 1 - app/soapbox/locales/id.json | 3 --- app/soapbox/locales/io.json | 3 --- app/soapbox/locales/is.json | 3 --- app/soapbox/locales/it.json | 3 --- app/soapbox/locales/ja.json | 3 --- app/soapbox/locales/ka.json | 1 - app/soapbox/locales/kk.json | 3 --- app/soapbox/locales/ko.json | 3 --- app/soapbox/locales/lt.json | 3 --- app/soapbox/locales/lv.json | 3 --- app/soapbox/locales/mk.json | 3 --- app/soapbox/locales/ms.json | 3 --- app/soapbox/locales/nl.json | 3 --- app/soapbox/locales/nn.json | 3 --- app/soapbox/locales/no.json | 3 --- app/soapbox/locales/oc.json | 3 --- app/soapbox/locales/pl.json | 3 --- app/soapbox/locales/pt-BR.json | 3 --- app/soapbox/locales/pt.json | 3 --- app/soapbox/locales/ro.json | 3 --- app/soapbox/locales/ru.json | 3 --- app/soapbox/locales/sk.json | 3 --- app/soapbox/locales/sl.json | 3 --- app/soapbox/locales/sq.json | 3 --- app/soapbox/locales/sr-Latn.json | 3 --- app/soapbox/locales/sr.json | 3 --- app/soapbox/locales/sv.json | 3 --- app/soapbox/locales/ta.json | 3 --- app/soapbox/locales/te.json | 3 --- app/soapbox/locales/th.json | 3 --- app/soapbox/locales/tr.json | 3 --- app/soapbox/locales/uk.json | 3 --- app/soapbox/locales/zh-CN.json | 3 --- app/soapbox/locales/zh-HK.json | 3 --- app/soapbox/locales/zh-TW.json | 3 --- 63 files changed, 179 deletions(-) diff --git a/app/soapbox/locales/ar.json b/app/soapbox/locales/ar.json index 00be888e7..d7ae2f6e6 100644 --- a/app/soapbox/locales/ar.json +++ b/app/soapbox/locales/ar.json @@ -868,9 +868,6 @@ "groups.search.placeholder": "ابحث في مجموعاتي", "groups.suggested.label": "المجموعات المقترحة", "groups.tags.title": "تصفح المواضيع", - "hashtag.column_header.tag_mode.all": "و {additional}", - "hashtag.column_header.tag_mode.any": "أو {additional}", - "hashtag.column_header.tag_mode.none": "بدون {additional}", "hashtag.follow": "اتبع الهاشتاج", "header.home.label": "الرئيسية", "header.login.email.placeholder": "البريد الإلكتروني", diff --git a/app/soapbox/locales/ast.json b/app/soapbox/locales/ast.json index 43f6971b8..28d7c8d32 100644 --- a/app/soapbox/locales/ast.json +++ b/app/soapbox/locales/ast.json @@ -148,7 +148,6 @@ "follow_request.authorize": "Autorizar", "follow_request.reject": "Refugar", "getting_started.open_source_notice": "{code_name} ye software de códigu abiertu. Pues collaborar o informar de fallos en {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.any": "or {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/bg.json b/app/soapbox/locales/bg.json index 076e7d2a5..54155faab 100644 --- a/app/soapbox/locales/bg.json +++ b/app/soapbox/locales/bg.json @@ -116,7 +116,6 @@ "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "export_data.actions.export": "Export", "getting_started.open_source_notice": "{code_name} е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в GitLab: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.any": "or {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/bn.json b/app/soapbox/locales/bn.json index af06d33cc..b52cbdb42 100644 --- a/app/soapbox/locales/bn.json +++ b/app/soapbox/locales/bn.json @@ -180,9 +180,6 @@ "follow_request.authorize": "অনুমতি দিন", "follow_request.reject": "প্রত্যাখ্যান করুন", "getting_started.open_source_notice": "{code_name} একটি মুক্ত সফটওয়্যার। তৈরিতে সাহায্য করতে বা কোনো সমস্যা সম্পর্কে জানাতে আমাদের গিটহাবে যেতে পারেন {code_link} (v{code_version})।", - "hashtag.column_header.tag_mode.all": "এবং {additional}", - "hashtag.column_header.tag_mode.any": "অথবা {additional}", - "hashtag.column_header.tag_mode.none": "বাদ দিয়ে {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/br.json b/app/soapbox/locales/br.json index d468f5ffa..0736a093e 100644 --- a/app/soapbox/locales/br.json +++ b/app/soapbox/locales/br.json @@ -115,7 +115,6 @@ "empty_column.favourites": "No one has favorited this post yet. When someone does, they will show up here.", "empty_column.home.local_tab": "the {site_title} tab", "export_data.actions.export": "Export", - "hashtag.column_header.tag_mode.any": "or {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/ca.json b/app/soapbox/locales/ca.json index 7d8bbeb75..5b028be9e 100644 --- a/app/soapbox/locales/ca.json +++ b/app/soapbox/locales/ca.json @@ -271,9 +271,6 @@ "follow_request.authorize": "Autoritzar", "follow_request.reject": "Rebutjar", "getting_started.open_source_notice": "{code_name} és un programari de codi obert. Pots contribuir o informar de problemes a {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "i {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "sense {additional}", "header.home.label": "Inici", "header.login.label": "Inici de sessió", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/co.json b/app/soapbox/locales/co.json index d599ae70f..3903b4a8e 100644 --- a/app/soapbox/locales/co.json +++ b/app/soapbox/locales/co.json @@ -179,9 +179,6 @@ "follow_request.authorize": "Auturizà", "follow_request.reject": "Righjittà", "getting_started.open_source_notice": "{code_name} ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitLab: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "è {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "senza {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/cs.json b/app/soapbox/locales/cs.json index f090e7cd5..7bb0dab75 100644 --- a/app/soapbox/locales/cs.json +++ b/app/soapbox/locales/cs.json @@ -338,9 +338,6 @@ "follow_request.authorize": "Autorizovat", "follow_request.reject": "Odmítnout", "getting_started.open_source_notice": "{code_name} je otevřený software. Na GitLabu k němu můžete přispět nebo nahlásit chyby: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "a {additional}", - "hashtag.column_header.tag_mode.any": "nebo {additional}", - "hashtag.column_header.tag_mode.none": "bez {additional}", "header.home.label": "Domů", "header.login.forgot_password": "Zapomněli jste heslo?", "header.login.label": "Přihlásit se", diff --git a/app/soapbox/locales/cy.json b/app/soapbox/locales/cy.json index c9a469ac0..7a744faa7 100644 --- a/app/soapbox/locales/cy.json +++ b/app/soapbox/locales/cy.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "Mae {code_name} yn feddalwedd côd agored. Mae modd cyfrannu neu adrodd materion ar GitLab ar {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "a {additional}", - "hashtag.column_header.tag_mode.any": "neu {additional}", - "hashtag.column_header.tag_mode.none": "heb {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/da.json b/app/soapbox/locales/da.json index 218cf6bc2..91d6495c1 100644 --- a/app/soapbox/locales/da.json +++ b/app/soapbox/locales/da.json @@ -180,9 +180,6 @@ "follow_request.authorize": "Godkend", "follow_request.reject": "Afvis", "getting_started.open_source_notice": "{code_name} er et open source software. Du kan bidrage eller rapporterer fejl på GitLab {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "og {additional}", - "hashtag.column_header.tag_mode.any": "eller {additional}", - "hashtag.column_header.tag_mode.none": "uden {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/de.json b/app/soapbox/locales/de.json index 1eafbed1a..e16dc7e44 100644 --- a/app/soapbox/locales/de.json +++ b/app/soapbox/locales/de.json @@ -725,9 +725,6 @@ "group.tabs.members": "Mitglieder", "groups.empty.subtitle": "Entdecke Gruppen zum teilnehmen oder erstelle deine eigene.", "groups.empty.title": "Noch keine Gruppen", - "hashtag.column_header.tag_mode.all": "und {additional}", - "hashtag.column_header.tag_mode.any": "oder {additional}", - "hashtag.column_header.tag_mode.none": "ohne {additional}", "header.home.label": "Start", "header.login.forgot_password": "Passwort vergessen?", "header.login.label": "Anmelden", diff --git a/app/soapbox/locales/el.json b/app/soapbox/locales/el.json index 78e0f39ab..11dd34a95 100644 --- a/app/soapbox/locales/el.json +++ b/app/soapbox/locales/el.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "Το {code_name} είναι ελεύθερο λογισμικό. Μπορείς να συνεισφέρεις ή να αναφέρεις ζητήματα στο GitLab στο {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "και {additional}", - "hashtag.column_header.tag_mode.any": "ή {additional}", - "hashtag.column_header.tag_mode.none": "χωρίς {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/en-Shaw.json b/app/soapbox/locales/en-Shaw.json index 50b518945..a9de4534c 100644 --- a/app/soapbox/locales/en-Shaw.json +++ b/app/soapbox/locales/en-Shaw.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} 𐑦𐑟 𐑴𐑐𐑩𐑯 𐑕𐑹𐑕 𐑕𐑪𐑓𐑑𐑢𐑺. 𐑿 𐑒𐑨𐑯 𐑒𐑩𐑯𐑑𐑮𐑦𐑚𐑿𐑑 𐑹 𐑮𐑦𐑐𐑹𐑑 𐑦𐑖𐑵𐑟 𐑨𐑑 {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "𐑯 {additional}", - "hashtag.column_header.tag_mode.any": "𐑹 {additional}", - "hashtag.column_header.tag_mode.none": "𐑢𐑦𐑞𐑬𐑑 {additional}", "header.home.label": "𐑣𐑴𐑥", "header.login.forgot_password": "Forgot password?", "header.login.label": "𐑤𐑪𐑜 𐑦𐑯", diff --git a/app/soapbox/locales/eo.json b/app/soapbox/locales/eo.json index b0706a932..47d0e6193 100644 --- a/app/soapbox/locales/eo.json +++ b/app/soapbox/locales/eo.json @@ -180,9 +180,6 @@ "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", "getting_started.open_source_notice": "{code_name} estas malfermitkoda programo. Vi povas kontribui aŭ raporti problemojn en GitLab je {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "kaj {additional}", - "hashtag.column_header.tag_mode.any": "aŭ {additional}", - "hashtag.column_header.tag_mode.none": "sen {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/es-AR.json b/app/soapbox/locales/es-AR.json index eb1a459a9..4889eccb1 100644 --- a/app/soapbox/locales/es-AR.json +++ b/app/soapbox/locales/es-AR.json @@ -588,9 +588,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} es software libre. Podés contribuir o informar errores en {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "y {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "sin {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/es.json b/app/soapbox/locales/es.json index 019cbbad8..75259e38b 100644 --- a/app/soapbox/locales/es.json +++ b/app/soapbox/locales/es.json @@ -815,9 +815,6 @@ "groups.pending.empty.title": "Ninguna solicitud pendiente", "groups.pending.label": "Solicitudes pendientes", "groups.popular.label": "Grupos recomendados", - "hashtag.column_header.tag_mode.all": "y {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "sin {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/et.json b/app/soapbox/locales/et.json index b899c3f32..87c95cec0 100644 --- a/app/soapbox/locales/et.json +++ b/app/soapbox/locales/et.json @@ -180,9 +180,6 @@ "follow_request.authorize": "Autoriseeri", "follow_request.reject": "Hülga", "getting_started.open_source_notice": "{code_name} on avatud lähtekoodiga tarkvara. Saad panustada või teatada probleemidest GitLabis {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "ja {additional}", - "hashtag.column_header.tag_mode.any": "või {additional}", - "hashtag.column_header.tag_mode.none": "ilma {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/eu.json b/app/soapbox/locales/eu.json index cd693407d..b2c631252 100644 --- a/app/soapbox/locales/eu.json +++ b/app/soapbox/locales/eu.json @@ -180,9 +180,6 @@ "follow_request.authorize": "Baimendu", "follow_request.reject": "Ukatu", "getting_started.open_source_notice": "{code_name} software librea da. Ekarpenak egin ditzakezu edo akatsen berri eman GitLab bidez: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "eta {additional}", - "hashtag.column_header.tag_mode.any": "edo {additional}", - "hashtag.column_header.tag_mode.none": "gabe {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/fa.json b/app/soapbox/locales/fa.json index 727121e60..a149224fd 100644 --- a/app/soapbox/locales/fa.json +++ b/app/soapbox/locales/fa.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "ماستدون یک نرم‌افزار آزاد است. می‌توانید در ساخت آن مشارکت کنید یا مشکلاتش را در {code_link} (v{code_version}) گزارش دهید.", - "hashtag.column_header.tag_mode.all": "و {additional}", - "hashtag.column_header.tag_mode.any": "یا {additional}", - "hashtag.column_header.tag_mode.none": "بدون {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/fi.json b/app/soapbox/locales/fi.json index cd700964e..1a2b311ea 100644 --- a/app/soapbox/locales/fi.json +++ b/app/soapbox/locales/fi.json @@ -180,9 +180,6 @@ "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", "getting_started.open_source_notice": "{code_name} on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitLabissa: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "ja {additional}", - "hashtag.column_header.tag_mode.any": "tai {additional}", - "hashtag.column_header.tag_mode.none": "ilman {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/fr.json b/app/soapbox/locales/fr.json index 0ab74a043..7c0c34cdb 100644 --- a/app/soapbox/locales/fr.json +++ b/app/soapbox/locales/fr.json @@ -679,9 +679,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} est un logiciel libre. Vous pouvez contribuer et envoyer vos commentaires et rapports de bogues via {code_link} (v{code_version}) sur GitLab.", - "hashtag.column_header.tag_mode.all": "et {additional}", - "hashtag.column_header.tag_mode.any": "ou {additional}", - "hashtag.column_header.tag_mode.none": "sans {additional}", "header.home.label": "Home", "header.login.forgot_password": "Mot de passe oublié ?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/ga.json b/app/soapbox/locales/ga.json index 99114e524..067f5f658 100644 --- a/app/soapbox/locales/ga.json +++ b/app/soapbox/locales/ga.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/gl.json b/app/soapbox/locales/gl.json index 04db48782..d46d67d50 100644 --- a/app/soapbox/locales/gl.json +++ b/app/soapbox/locales/gl.json @@ -184,9 +184,6 @@ "follow_request.authorize": "Autorizar", "follow_request.reject": "Rexeitar", "getting_started.open_source_notice": "{code_name} é software de código aberto. Pode contribuír ou informar de fallos en {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "e {additional}", - "hashtag.column_header.tag_mode.any": "ou {additional}", - "hashtag.column_header.tag_mode.none": "sen {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/he.json b/app/soapbox/locales/he.json index e86a87dc1..81900f19e 100644 --- a/app/soapbox/locales/he.json +++ b/app/soapbox/locales/he.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "סבוניה היא תוכנה חופשית (בקוד פתוח). ניתן לתרום או לדווח על בעיות בגיטהאב: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "ו-{additional}", - "hashtag.column_header.tag_mode.any": "או {additional}", - "hashtag.column_header.tag_mode.none": "בלי {additional}", "header.home.label": "בית", "header.login.forgot_password": "Forgot password?", "header.login.label": "התחברות", diff --git a/app/soapbox/locales/hi.json b/app/soapbox/locales/hi.json index 1f4e9e8f8..de296af48 100644 --- a/app/soapbox/locales/hi.json +++ b/app/soapbox/locales/hi.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/hr.json b/app/soapbox/locales/hr.json index 59f02b14c..4eff32293 100644 --- a/app/soapbox/locales/hr.json +++ b/app/soapbox/locales/hr.json @@ -678,9 +678,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} je softver otvorenog koda. Možeš doprinijeti ili prijaviti probleme na {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Naslovnica", "header.login.forgot_password": "Zaboravili ste lozinku?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/hu.json b/app/soapbox/locales/hu.json index 82360fafb..1f38a2c99 100644 --- a/app/soapbox/locales/hu.json +++ b/app/soapbox/locales/hu.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "A {code_name} nyílt forráskódú szoftver. Csatlakozhatsz a fejlesztéshez vagy jelenthetsz problémákat GitLab-on {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "és {additional}", - "hashtag.column_header.tag_mode.any": "vagy {additional}", - "hashtag.column_header.tag_mode.none": "nélküle {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/hy.json b/app/soapbox/locales/hy.json index f821a822a..f714b4a51 100644 --- a/app/soapbox/locales/hy.json +++ b/app/soapbox/locales/hy.json @@ -156,7 +156,6 @@ "follow_request.authorize": "Վավերացնել", "follow_request.reject": "Մերժել", "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {code_link} (v{code_version})։", - "hashtag.column_header.tag_mode.any": "or {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/id.json b/app/soapbox/locales/id.json index ed6704b14..5e1d995a9 100644 --- a/app/soapbox/locales/id.json +++ b/app/soapbox/locales/id.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Gitlab {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "dan {additional}", - "hashtag.column_header.tag_mode.any": "atau {additional}", - "hashtag.column_header.tag_mode.none": "tanpa {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/io.json b/app/soapbox/locales/io.json index e7762c0fb..86c9be31d 100644 --- a/app/soapbox/locales/io.json +++ b/app/soapbox/locales/io.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} esas programaro kun apertita kodexo. Tu povas kontributar o signalar problemi en GitLab ye {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/is.json b/app/soapbox/locales/is.json index afabe9223..50690fbbe 100644 --- a/app/soapbox/locales/is.json +++ b/app/soapbox/locales/is.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} er opinn og frjáls hugbúnaður. Þú getur lagt þitt af mörkum eða tilkynnt um vandamál á {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "og {additional}", - "hashtag.column_header.tag_mode.any": "eða {additional}", - "hashtag.column_header.tag_mode.none": "án {additional}", "header.home.label": "Heima", "header.login.forgot_password": "Gleymt lykilorð?", "header.login.label": "Skrá inn", diff --git a/app/soapbox/locales/it.json b/app/soapbox/locales/it.json index 016e50484..f59e4e654 100644 --- a/app/soapbox/locales/it.json +++ b/app/soapbox/locales/it.json @@ -853,9 +853,6 @@ "groups.search.placeholder": "Cerca nei miei gruppi", "groups.suggested.label": "Gruppi suggeriti", "groups.tags.title": "Sfoglia gli argomenti", - "hashtag.column_header.tag_mode.all": "e {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "senza {additional}", "hashtag.follow": "Segui l'hashtag", "header.home.label": "Home", "header.login.email.placeholder": "Indirizzo email", diff --git a/app/soapbox/locales/ja.json b/app/soapbox/locales/ja.json index 16a932c25..ca014d61e 100644 --- a/app/soapbox/locales/ja.json +++ b/app/soapbox/locales/ja.json @@ -597,9 +597,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name}はオープンソースソフトウェアです。誰でもGitLab ( {code_link} (v{code_version}) ) から開発に参加したり、問題を報告したりできます。", - "hashtag.column_header.tag_mode.all": "と {additional}", - "hashtag.column_header.tag_mode.any": "か {additional}", - "hashtag.column_header.tag_mode.none": "({additional} を除く)", "header.home.label": "ホーム", "header.login.forgot_password": "Forgot password?", "header.login.label": "ログイン", diff --git a/app/soapbox/locales/ka.json b/app/soapbox/locales/ka.json index 30a19ee18..fdc4fde6a 100644 --- a/app/soapbox/locales/ka.json +++ b/app/soapbox/locales/ka.json @@ -170,7 +170,6 @@ "follow_request.authorize": "ავტორიზაცია", "follow_request.reject": "უარყოფა", "getting_started.open_source_notice": "მასტოდონი ღია პროგრამაა. შეგიძლიათ შეუწყოთ ხელი ან შექმნათ პრობემის რეპორტი {code_link} (v{code_version})-ზე.", - "hashtag.column_header.tag_mode.any": "or {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/kk.json b/app/soapbox/locales/kk.json index 4845da814..66b46b379 100644 --- a/app/soapbox/locales/kk.json +++ b/app/soapbox/locales/kk.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} - ашық кодты құрылым. Түзету енгізу немесе ұсыныстарды GitLab арқылы жасаңыз {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "және {additional}", - "hashtag.column_header.tag_mode.any": "немесе {additional}", - "hashtag.column_header.tag_mode.none": "{additional} болмай", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/ko.json b/app/soapbox/locales/ko.json index 3297c1f4a..512abbc42 100644 --- a/app/soapbox/locales/ko.json +++ b/app/soapbox/locales/ko.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name}은 오픈 소스 소프트웨어입니다. 누구나 GitLab({code_link} (v{code_version}))에서 개발에 참여하거나, 문제를 보고할 수 있습니다.", - "hashtag.column_header.tag_mode.all": "그리고 {additional}", - "hashtag.column_header.tag_mode.any": "또는 {additional}", - "hashtag.column_header.tag_mode.none": "({additional}를 제외)", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/lt.json b/app/soapbox/locales/lt.json index 8b0eb6deb..8a1efef34 100644 --- a/app/soapbox/locales/lt.json +++ b/app/soapbox/locales/lt.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/lv.json b/app/soapbox/locales/lv.json index c7b5373e0..3843b7689 100644 --- a/app/soapbox/locales/lv.json +++ b/app/soapbox/locales/lv.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/mk.json b/app/soapbox/locales/mk.json index 56cf9fb94..1ca5d7e3d 100644 --- a/app/soapbox/locales/mk.json +++ b/app/soapbox/locales/mk.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/ms.json b/app/soapbox/locales/ms.json index 1209a7f6c..6592f766e 100644 --- a/app/soapbox/locales/ms.json +++ b/app/soapbox/locales/ms.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/nl.json b/app/soapbox/locales/nl.json index 2263267b8..94b61103e 100644 --- a/app/soapbox/locales/nl.json +++ b/app/soapbox/locales/nl.json @@ -179,9 +179,6 @@ "follow_request.authorize": "Goedkeuren", "follow_request.reject": "Afkeuren", "getting_started.open_source_notice": "{code_name} is vrije software. Je kunt bijdragen of problemen melden op GitLab via {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "en {additional}", - "hashtag.column_header.tag_mode.any": "of {additional}", - "hashtag.column_header.tag_mode.none": "zonder {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/nn.json b/app/soapbox/locales/nn.json index 83de98344..585c19eb4 100644 --- a/app/soapbox/locales/nn.json +++ b/app/soapbox/locales/nn.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} har åpen kilde kode. Du kan hjelpe til med problemar på GitLab gjennom {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "og {additional}", - "hashtag.column_header.tag_mode.any": "eller {additional}", - "hashtag.column_header.tag_mode.none": "uten {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/no.json b/app/soapbox/locales/no.json index d26976ee7..2730c4d87 100644 --- a/app/soapbox/locales/no.json +++ b/app/soapbox/locales/no.json @@ -829,9 +829,6 @@ "groups.pending.label": "Ventende forespørsler", "groups.popular.label": "Foreslåtte grupper", "groups.search.placeholder": "Søk i mine grupper", - "hashtag.column_header.tag_mode.all": "og {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "uten {additional}", "header.home.label": "Home", "header.login.forgot_password": "Glemt passord?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/oc.json b/app/soapbox/locales/oc.json index 45e43f884..990a48550 100644 --- a/app/soapbox/locales/oc.json +++ b/app/soapbox/locales/oc.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {code_link} (v{code_version}) sus GitLab.", - "hashtag.column_header.tag_mode.all": "e {additional}", - "hashtag.column_header.tag_mode.any": "o {additional}", - "hashtag.column_header.tag_mode.none": "sens {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/pl.json b/app/soapbox/locales/pl.json index 5f67a1210..ccb95b1ba 100644 --- a/app/soapbox/locales/pl.json +++ b/app/soapbox/locales/pl.json @@ -841,9 +841,6 @@ "groups.popular.label": "Proponowane grupy", "groups.suggested.label": "Proponowane grupy", "groups.tags.title": "Szukaj tematów", - "hashtag.column_header.tag_mode.all": "i {additional}", - "hashtag.column_header.tag_mode.any": "lub {additional}", - "hashtag.column_header.tag_mode.none": "bez {additional}", "hashtag.follow": "Obserwuj hashtagi", "header.home.label": "Strona główna", "header.login.email.placeholder": "Adres e-mail", diff --git a/app/soapbox/locales/pt-BR.json b/app/soapbox/locales/pt-BR.json index 581b8e5d9..83f2ca46f 100644 --- a/app/soapbox/locales/pt-BR.json +++ b/app/soapbox/locales/pt-BR.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} é um software de código aberto. Você pode contribuir ou reportar problemas na página do GitLab do projeto: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "e {additional}", - "hashtag.column_header.tag_mode.any": "ou {additional}", - "hashtag.column_header.tag_mode.none": "sem {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/pt.json b/app/soapbox/locales/pt.json index b7198c50e..0a9fa432c 100644 --- a/app/soapbox/locales/pt.json +++ b/app/soapbox/locales/pt.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} é software de código aberto (open source). Podes contribuir ou reportar problemas no GitLab do projecto: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "e {additional}", - "hashtag.column_header.tag_mode.any": "ou {additional}", - "hashtag.column_header.tag_mode.none": "sem {additional}", "header.home.label": "Início", "header.login.forgot_password": "Forgot password?", "header.login.label": "Iniciar Sessão", diff --git a/app/soapbox/locales/ro.json b/app/soapbox/locales/ro.json index f9a9b6193..fd371ba40 100644 --- a/app/soapbox/locales/ro.json +++ b/app/soapbox/locales/ro.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} este o rețea de socializare de tip open source. Puteți contribuii la dezvoltarea ei sau să semnalați erorile pe GitLab la {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "și {additional}", - "hashtag.column_header.tag_mode.any": "sau {additional}", - "hashtag.column_header.tag_mode.none": "fără {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/ru.json b/app/soapbox/locales/ru.json index 4368d928c..079a57918 100644 --- a/app/soapbox/locales/ru.json +++ b/app/soapbox/locales/ru.json @@ -615,9 +615,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} — сервис с открытым исходным кодом. Вы можете внести вклад или сообщить о проблемах на GitLab: {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "и {additional}", - "hashtag.column_header.tag_mode.any": "или {additional}", - "hashtag.column_header.tag_mode.none": "без {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/sk.json b/app/soapbox/locales/sk.json index 791184170..ce440b954 100644 --- a/app/soapbox/locales/sk.json +++ b/app/soapbox/locales/sk.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitLabe v {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "a {additional}", - "hashtag.column_header.tag_mode.any": "alebo {additional}", - "hashtag.column_header.tag_mode.none": "bez {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/sl.json b/app/soapbox/locales/sl.json index cdc34ea7b..c342c9c48 100644 --- a/app/soapbox/locales/sl.json +++ b/app/soapbox/locales/sl.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} je odprtokodna programska oprema. Na GitLabu na {code_link} (v{code_version}) lahko prispevate ali poročate o napakah.", - "hashtag.column_header.tag_mode.all": "in {additional}", - "hashtag.column_header.tag_mode.any": "ali {additional}", - "hashtag.column_header.tag_mode.none": "brez {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/sq.json b/app/soapbox/locales/sq.json index 4ee54b212..eafdce0c2 100644 --- a/app/soapbox/locales/sq.json +++ b/app/soapbox/locales/sq.json @@ -176,9 +176,6 @@ "follow_request.authorize": "Autorizoje", "follow_request.reject": "Hidhe tej", "getting_started.open_source_notice": "{code_name}-i është software me burim të hapur. Mund të jepni ndihmesë ose të njoftoni probleme në GitLab, te {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "dhe {additional}", - "hashtag.column_header.tag_mode.any": "ose {additional}", - "hashtag.column_header.tag_mode.none": "pa {additional}", "header.home.label": "Home", "header.login.label": "Log in", "header.login.password.label": "Password", diff --git a/app/soapbox/locales/sr-Latn.json b/app/soapbox/locales/sr-Latn.json index 7a0962579..c6cd4def5 100644 --- a/app/soapbox/locales/sr-Latn.json +++ b/app/soapbox/locales/sr-Latn.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} je softver otvorenog koda. Možete mu doprineti ili prijaviti probleme preko GitLab-a na {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/sr.json b/app/soapbox/locales/sr.json index 97f4a279e..9f708598d 100644 --- a/app/soapbox/locales/sr.json +++ b/app/soapbox/locales/sr.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко ГитХаба на {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/sv.json b/app/soapbox/locales/sv.json index 651617407..2a1a4457b 100644 --- a/app/soapbox/locales/sv.json +++ b/app/soapbox/locales/sv.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitLab på {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "och {additional}", - "hashtag.column_header.tag_mode.any": "eller {additional}", - "hashtag.column_header.tag_mode.none": "utan {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/ta.json b/app/soapbox/locales/ta.json index 052bf9228..84a866c7b 100644 --- a/app/soapbox/locales/ta.json +++ b/app/soapbox/locales/ta.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} திறந்த மூல மென்பொருள். GitLab இல் நீங்கள் பங்களிக்கவோ அல்லது புகார் அளிக்கவோ முடியும் {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "மற்றும் {additional}", - "hashtag.column_header.tag_mode.any": "அல்லது {additional}", - "hashtag.column_header.tag_mode.none": "இல்லாமல் {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/te.json b/app/soapbox/locales/te.json index 55d92a360..ae695354f 100644 --- a/app/soapbox/locales/te.json +++ b/app/soapbox/locales/te.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "మాస్టొడొన్ ఓపెన్ సోర్స్ సాఫ్ట్వేర్. మీరు {code_link} (v{code_version}) వద్ద GitLab పై సమస్యలను నివేదించవచ్చు లేదా తోడ్పడచ్చు.", - "hashtag.column_header.tag_mode.all": "మరియు {additional}", - "hashtag.column_header.tag_mode.any": "లేదా {additional}", - "hashtag.column_header.tag_mode.none": "{additional} లేకుండా", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/th.json b/app/soapbox/locales/th.json index e2ce554b7..c561c1dc5 100644 --- a/app/soapbox/locales/th.json +++ b/app/soapbox/locales/th.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} เป็นซอฟต์แวร์เปิดต้นฉบับ คุณสามารถมีส่วนร่วมหรือรายงานปัญหาที่ GitLab ที่ {code_link} (v{code_version})", - "hashtag.column_header.tag_mode.all": "และ {additional}", - "hashtag.column_header.tag_mode.any": "หรือ {additional}", - "hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}", "header.home.label": "Home", "header.login.forgot_password": "Forgot password?", "header.login.label": "Log in", diff --git a/app/soapbox/locales/tr.json b/app/soapbox/locales/tr.json index 3a413834f..3ea317325 100644 --- a/app/soapbox/locales/tr.json +++ b/app/soapbox/locales/tr.json @@ -868,9 +868,6 @@ "groups.search.placeholder": "Gruplarımda Ara", "groups.suggested.label": "Önerilen Guruplar", "groups.tags.title": "Konulara Gözat", - "hashtag.column_header.tag_mode.all": "ve {additional}", - "hashtag.column_header.tag_mode.any": "ya da {additional}", - "hashtag.column_header.tag_mode.none": "{additional} olmadan", "hashtag.follow": "Hashtag'i takip edin", "header.home.label": "Anasayfa", "header.login.email.placeholder": "E-posta adresi", diff --git a/app/soapbox/locales/uk.json b/app/soapbox/locales/uk.json index d6db01a53..9cfd5ddf0 100644 --- a/app/soapbox/locales/uk.json +++ b/app/soapbox/locales/uk.json @@ -538,9 +538,6 @@ "gdpr.message": "{siteTitle} uses session cookies, which are essential to the website's functioning.", "gdpr.title": "{siteTitle} uses cookies", "getting_started.open_source_notice": "{code_name} — програмне забезпечення з відкритим кодом. Ви можете допомогти проєкту, або повідомити про проблеми на GitLab за адресою {code_link} (v{code_version}).", - "hashtag.column_header.tag_mode.all": "та {additional}", - "hashtag.column_header.tag_mode.any": "або {additional}", - "hashtag.column_header.tag_mode.none": "без {additional}", "header.home.label": "Головна", "header.login.forgot_password": "Forgot password?", "header.login.label": "Увійти", diff --git a/app/soapbox/locales/zh-CN.json b/app/soapbox/locales/zh-CN.json index 670dc1dc9..e0b68da31 100644 --- a/app/soapbox/locales/zh-CN.json +++ b/app/soapbox/locales/zh-CN.json @@ -866,9 +866,6 @@ "groups.search.placeholder": "搜索我的群组", "groups.suggested.label": "推荐群组", "groups.tags.title": "浏览主题", - "hashtag.column_header.tag_mode.all": "以及{additional}", - "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而不用{additional}", "hashtag.follow": "关注话题标签", "header.home.label": "主页", "header.login.email.placeholder": "电子邮箱地址", diff --git a/app/soapbox/locales/zh-HK.json b/app/soapbox/locales/zh-HK.json index f37957d0f..5e22743c1 100644 --- a/app/soapbox/locales/zh-HK.json +++ b/app/soapbox/locales/zh-HK.json @@ -488,9 +488,6 @@ "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "getting_started.open_source_notice": "{code_name} 是開源軟體。你可以在 GitLab {code_link} (v{code_version}) 上貢獻或是回報問題。", - "hashtag.column_header.tag_mode.all": "以及{additional}", - "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而無需{additional}", "header.home.label": "首頁", "header.login.forgot_password": "忘記了密碼?", "header.login.label": "登入", diff --git a/app/soapbox/locales/zh-TW.json b/app/soapbox/locales/zh-TW.json index 2131fea74..f8f1359c8 100644 --- a/app/soapbox/locales/zh-TW.json +++ b/app/soapbox/locales/zh-TW.json @@ -488,9 +488,6 @@ "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "getting_started.open_source_notice": "{code_name} 是開源軟體。你可以在 GitLab {code_link} (v{code_version}) 上貢獻或是回報問題。", - "hashtag.column_header.tag_mode.all": "以及{additional}", - "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而無需{additional}", "header.home.label": "首頁", "header.login.forgot_password": "忘記了密碼?", "header.login.label": "登入", From ed0fe6198c7eb9359c87b499a1f135d4d0e3e651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=AD=C4=8Dek=20Rosi=C4=8D?= Date: Sun, 23 Jul 2023 16:05:29 +0000 Subject: [PATCH 007/170] Translated using Weblate (Icelandic) Currently translated at 70.9% (1129 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/is/ --- app/soapbox/locales/is.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/soapbox/locales/is.json b/app/soapbox/locales/is.json index 50690fbbe..6f50cbbe7 100644 --- a/app/soapbox/locales/is.json +++ b/app/soapbox/locales/is.json @@ -853,12 +853,13 @@ "registrations.create_account": "Create an account", "registrations.error": "Failed to register your account.", "registrations.get_started": "Let's get started!", - "registrations.password.label": "Password", - "registrations.success": "Welcome to {siteTitle}!", + "registrations.password.label": "Lykilorð", + "registrations.success": "Velkomin(n) á {siteTitle}!", "registrations.tagline": "Social Media Without Discrimination", - "registrations.unprocessable_entity": "This username has already been taken.", - "registrations.username.hint": "May only contain A-Z, 0-9, and underscores", - "registrations.username.label": "Your username", + "registrations.unprocessable_entity": "Þetta notendanafn hefur þegar verið tekið.", + "registrations.username.hint": "Má aðeins innihalda A-Z, 0-9, og undirstrik", + "registrations.username.label": "Notandanafnið þitt", + "reject.success": "Hafnað", "relative_time.days": "{number}d", "relative_time.hours": "{number}klst", "relative_time.just_now": "núna", From d07635131cadc7ea32c5ea5b6e57fe4da6153615 Mon Sep 17 00:00:00 2001 From: Poesty Li Date: Mon, 24 Jul 2023 08:06:18 +0000 Subject: [PATCH 008/170] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1592 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/zh_Hans/ --- app/soapbox/locales/zh-CN.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/soapbox/locales/zh-CN.json b/app/soapbox/locales/zh-CN.json index e0b68da31..e302188c6 100644 --- a/app/soapbox/locales/zh-CN.json +++ b/app/soapbox/locales/zh-CN.json @@ -834,7 +834,9 @@ "group.unmute.long_label": "取消静音群组", "group.unmute.success": "已取消静音群组", "group.update.success": "群组已成功保存", + "group.upload_avatar": "上传头像", "group.upload_banner": "已上传照片", + "group.upload_banner.title": "上传背景图片", "groups.discover.popular.empty": "目前无法获取热门群组。请稍后再试。", "groups.discover.popular.show_more": "显示更多", "groups.discover.popular.title": "热门群组", @@ -907,7 +909,7 @@ "keyboard_shortcuts.back": "返回上一页", "keyboard_shortcuts.blocked": "打开被屏蔽用户列表", "keyboard_shortcuts.boost": "转发", - "keyboard_shortcuts.compose": "选择帖文撰写框", + "keyboard_shortcuts.compose": "打开帖文撰写框", "keyboard_shortcuts.down": "在列表中让光标下移", "keyboard_shortcuts.enter": "展开帖文", "keyboard_shortcuts.favourite": "点赞帖文", @@ -1191,6 +1193,7 @@ "preferences.fields.language_label": "显示语言", "preferences.fields.media_display_label": "敏感内容", "preferences.fields.missing_description_modal_label": "在发送没有媒体描述的帖子前显示确认对话框", + "preferences.fields.preserve_spoilers_label": "回复时保留内容警告", "preferences.fields.privacy_label": "默认帖文可见范围", "preferences.fields.reduce_motion_label": "减少动画中的动作", "preferences.fields.system_font_label": "使用系统默认字体", From 9db8157ff190537e1a95c3fb8a979155a0894015 Mon Sep 17 00:00:00 2001 From: Liberal dev Date: Wed, 26 Jul 2023 14:55:23 +0000 Subject: [PATCH 009/170] Translated using Weblate (Korean) Currently translated at 70.6% (1125 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/ko/ --- app/soapbox/locales/ko.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/soapbox/locales/ko.json b/app/soapbox/locales/ko.json index 512abbc42..e83e30cd4 100644 --- a/app/soapbox/locales/ko.json +++ b/app/soapbox/locales/ko.json @@ -827,7 +827,7 @@ "register_invite.lead": "Complete the form below to create an account.", "register_invite.title": "You've been invited to join {siteTitle}!", "registration.acceptance": "By registering, you agree to the {terms} and {privacy}.", - "registration.agreement": "I agree to the {tos}.", + "registration.agreement": "{tos}에 동의합니다.", "registration.captcha.hint": "Click the image to get a new captcha", "registration.captcha.placeholder": "Enter the pictured text", "registration.closed_message": "{instance} is not accepting new members", @@ -841,7 +841,7 @@ "registration.header": "Register your account", "registration.newsletter": "Subscribe to newsletter.", "registration.password_mismatch": "Passwords don't match.", - "registration.privacy": "개인정보처리방", + "registration.privacy": "개인정보처리방침", "registration.reason": "Why do you want to join?", "registration.reason_hint": "This will help us review your application", "registration.sign_up": "Sign up", From ae6c84ef361eb1e92b8c57403749fd7918629f4d Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Wed, 2 Aug 2023 18:15:39 +0000 Subject: [PATCH 010/170] Translated using Weblate (French) Currently translated at 87.5% (1394 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/fr/ --- app/soapbox/locales/fr.json | 95 +++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 9 deletions(-) diff --git a/app/soapbox/locales/fr.json b/app/soapbox/locales/fr.json index 7c0c34cdb..f070f2c1d 100644 --- a/app/soapbox/locales/fr.json +++ b/app/soapbox/locales/fr.json @@ -10,6 +10,7 @@ "account.block_domain": "Tout masquer venant de {domain}", "account.blocked": "Bloqué", "account.chat": "Chat with @{name}", + "account.copy": "Copier le lien vers le profil", "account.deactivated": "Désactivé", "account.direct": "Envoyer un message direct à @{name}", "account.domain_blocked": "Domaine masqué", @@ -47,6 +48,7 @@ "account.report": "Signaler @{name}", "account.requested": "En attente d’approbation. Cliquez pour annuler la requête", "account.requested_small": "En attente d'approbation", + "account.rss_feed": "S'abonner au flux RSS", "account.search": "Recherche depuis @{name}", "account.search_self": "Chercher dans vos publications", "account.share": "Partager le profil de @{name}", @@ -84,6 +86,12 @@ "account_search.placeholder": "Rechercher un compte", "actualStatus.edited": "Edité le {date}", "actualStatuses.quote_tombstone": "Publication indisponible.", + "admin.announcements.action": "Créer une annonce", + "admin.announcements.all_day": "Toute la journée", + "admin.announcements.delete": "Effacer", + "admin.announcements.edit": "Editer", + "admin.announcements.ends_at": "Se termine à :", + "admin.announcements.starts_at": "Commence à :", "admin.awaiting_approval.empty_message": "Personne n'attend d'approbation. Quand un nouveau compte s'affiche, vous pouvez l'examiner ici.", "admin.dashboard.registration_mode.approval_hint": "Tout le monde peut s'inscrire, mais leur compte ne s'active qu'après approbation.", "admin.dashboard.registration_mode.approval_label": "Approbation requise", @@ -100,6 +108,18 @@ "admin.dashcounters.user_count_label": "comptes au total", "admin.dashwidgets.email_list_header": "Email list", "admin.dashwidgets.software_header": "Software", + "admin.edit_announcement.created": "Annonce créée", + "admin.edit_announcement.deleted": "Annonce supprimée", + "admin.edit_announcement.fields.all_day_hint": "Si cette case est cochée, seules les dates de la plage horaire seront affichées.", + "admin.edit_announcement.fields.all_day_label": "Événement d'une journée", + "admin.edit_announcement.fields.content_label": "Contenu", + "admin.edit_announcement.fields.content_placeholder": "Contenu de l'annonce", + "admin.edit_announcement.fields.end_time_label": "Date de fin", + "admin.edit_announcement.fields.end_time_placeholder": "L'annonce se termine le :", + "admin.edit_announcement.fields.start_time_label": "Date de début", + "admin.edit_announcement.fields.start_time_placeholder": "L'annonce commence le :", + "admin.edit_announcement.save": "Sauvegarder", + "admin.edit_announcement.updated": "Annonce éditée", "admin.latest_accounts_panel.more": "Cliquez pour voir {count, plural, one {# account} other {# accounts}}", "admin.latest_accounts_panel.title": "Derniers comptes", "admin.moderation_log.empty_message": "Vous n'avez pas encore effectué d'acte de modération. Quand vous le ferez, un historique sera montrée ici.", @@ -137,7 +157,7 @@ "admin_nav.awaiting_approval": "Awaiting Approval", "admin_nav.dashboard": "Dashboard", "admin_nav.reports": "Reports", - "age_verification.body": "{siteTitle} exige que les utilisateurs soient âgés de {ageMinimum, plural, one {# year} other {# years}} ans pour accéder à sa plateforme. oute personne âgée de moins de {ageMinimum, plural, one {# year} other {# years}} ans ne peut accéder à cette plateforme.", + "age_verification.body": "{siteTitle} exige que les utilisateurs soient âgés de {ageMinimum, plural, one {# an} other {# ans}} pour accéder à sa plateforme. Toute personne âgée de moins de {ageMinimum, plural, one {# an} other {# ans}} ne peut accéder à cette plateforme.", "age_verification.fail": "Vous devez être âgé⋅e de {ageMinimum, plural, one {# year} other {# years}} ans ou plus.", "age_verification.header": "Entrez votre date de naissance", "alert.unexpected.body": "Nous vous prions de nous excuser pour l'interruption. Si le problème persiste, veuillez contacter notre équipe de support. Vous pouvez également essayer de {clearCookies} (ceci vous déconnectera).", @@ -171,6 +191,7 @@ "auth.invalid_credentials": "Mauvais identifiant ou mot de passe", "auth.logged_out": "Session déconnectée.", "auth_layout.register": "Créer un compte", + "authorize.success": "Approuvé", "backups.actions.create": "Créer une sauvegarde", "backups.empty_message": "Pas de sauvegarde trouvée. {action}", "backups.empty_message.action": "Créer maintenant ?", @@ -231,7 +252,7 @@ "chat_settings.auto_delete.30days": "30 jours", "chat_settings.auto_delete.7days": "7 jours", "chat_settings.auto_delete.90days": "90 jours", - "chat_settings.auto_delete.days": "{day} jours", + "chat_settings.auto_delete.days": "{day, plural, one {# jour} other {# jours}}", "chat_settings.auto_delete.hint": "Les messages envoyés seront supprimés automatiquement après la période selectionnée", "chat_settings.auto_delete.label": "Supprimer les messages automatiquement", "chat_settings.block.confirm": "Bloquer", @@ -248,8 +269,8 @@ "chat_settings.unblock.confirm": "Débloquer", "chat_settings.unblock.heading": "Débloquer @{acct}", "chat_settings.unblock.message": "Débloquer permettra à ce profil de vous envoyer des messages directs et voir votre contenu.", - "chat_window.auto_delete_label": "Supprimer automatiquement après {day} jours", - "chat_window.auto_delete_tooltip": "Les messages de discussion sont paramétrer pour suppression automatique au bout de {day} jours après envoi.", + "chat_window.auto_delete_label": "Supprimer automatiquement après {day, plural, one {# jour} other {# jours}}", + "chat_window.auto_delete_tooltip": "Les messages de discussion sont paramétrer pour suppression automatique au bout de {day, plural, one {# jour} other {# jours}} après envoi.", "chats.actions.copy": "Copier", "chats.actions.delete": "Delete message", "chats.actions.deleteForMe": "Supprimer pour moi", @@ -262,8 +283,18 @@ "chats.main.blankslate_with_chats.subtitle": "Sélectionner depuis l'une de vos conversations ou créer un nouveau message.", "chats.main.blankslate_with_chats.title": "Sélectionner une discussion", "chats.search_placeholder": "Start a chat with…", + "colum.filters.expiration.1800": "30 minutes", + "colum.filters.expiration.21600": "6 heures", + "colum.filters.expiration.3600": "1 heure", + "colum.filters.expiration.43200": "12 heures", + "colum.filters.expiration.604800": "1 semaine", + "colum.filters.expiration.86400": "1 jour", + "colum.filters.expiration.never": "Jamais", + "column.admin.announcements": "Annonces", "column.admin.awaiting_approval": "En attente d'approbation", + "column.admin.create_announcement": "Créer une annonce", "column.admin.dashboard": "Dashboard", + "column.admin.edit_announcement": "Éditer une annonce", "column.admin.moderation_log": "Historique de modération", "column.admin.reports": "Reports", "column.admin.reports.menu.moderation_log": "Historique de modération", @@ -286,6 +317,7 @@ "column.developers.service_worker": "Service Worker", "column.direct": "Messages privés", "column.directory": "Parcourir les profils", + "column.dislikes": "Je n'aime pas", "column.domain_blocks": "Domaines cachés", "column.edit_profile": "Éditer le profil", "column.event_map": "Emplacement de l'évènement", @@ -297,6 +329,7 @@ "column.favourites": "Favoris", "column.federation_restrictions": "Restriction de fédération", "column.filters": "Mots mis en sourdine", + "column.filters.accounts": "Comptes", "column.filters.add_new": "Ajouter un nouveau filtre", "column.filters.conversations": "Discussions", "column.filters.create_error": "Erreur en ajoutant le filtre", @@ -304,19 +337,30 @@ "column.filters.delete_error": "Erreur en supprimant le filtre", "column.filters.drop_header": "Supprimer au lieu de cacher", "column.filters.drop_hint": "Les publication filtrées disparaîtront de façon irréversible et ce même si le filtre est supprimé ultérieurement", + "column.filters.edit": "Éditer", "column.filters.expires": "Expire après", + "column.filters.hide_header": "Cacher entièrement", + "column.filters.hide_hint": "Cacher entièrement le contenu filtré au lieu de montrer un avertissement", "column.filters.home_timeline": "Fil d'accueil", "column.filters.keyword": "Mot-clé ou phrase", + "column.filters.keywords": "Mot-clés ou phrases", "column.filters.notifications": "Notifications", "column.filters.public_timeline": "Fil public", "column.filters.subheading_add_new": "Ajouter un nouveau filtre", + "column.filters.title": "Titre", + "column.filters.whole_word": "Mot entier", "column.follow_requests": "Demandes de suivi", + "column.followed_tags": "Hashtags suivis", "column.followers": "Abonnés", "column.following": "Abonnements", + "column.group_blocked_members": "Membres banni⋅e⋅s", + "column.group_pending_requests": "Requêtes en attente", + "column.groups": "Groupes", "column.home": "Accueil", "column.import_data": "Import data", "column.info": "Server information", "column.lists": "Listes", + "column.manage_group": "Gérer le groupe", "column.mentions": "Mentions", "column.mfa": "Authentification à multiples facteurs", "column.mfa_cancel": "Annuler", @@ -342,9 +386,10 @@ "common.cancel": "Annuler", "common.error": "Quelque chose ne va pas. Essayez de recharger la page.", "compare_history_modal.header": "Éditer l'historique", - "compose.character_counter.title": "{chars} caractères utilisés sur {maxChars}", + "compose.character_counter.title": "{chars} sur {maxChars} {maxChars, plural, one {caractère} other {caractères}} {maxChars, plural, one {utilisé} other {utilisés}}", "compose.edit_success": "Votre publication a été modifiée", "compose.invalid_schedule": "Vous devez programmer votre publication avec un délai de 5 minutes au minimum", + "compose.reply_group_indicator.message": "", "compose.submit_success": "Votre publication a été envoyée !", "compose_event.create": "Créer", "compose_event.edit_success": "Votre évènement a été édité", @@ -401,10 +446,14 @@ "compose_form.spoiler_placeholder": "Écrivez ici votre avertissement", "compose_form.spoiler_remove": "Supprimer le statut sensible", "compose_form.spoiler_title": "Contenu sensible", + "compose_group.share_to_followers": "Partager avec mes abonné⋅e⋅s", "confirmation_modal.cancel": "Annuler", "confirmations.admin.deactivate_user.confirm": "Désactiver @{name}", "confirmations.admin.deactivate_user.heading": "Désactiver @{acct}", "confirmations.admin.deactivate_user.message": "Vous allez désactiver @{acct}. Cette action est réversible.", + "confirmations.admin.delete_announcement.confirm": "Supprimer", + "confirmations.admin.delete_announcement.heading": "Supprimer l'annonce", + "confirmations.admin.delete_announcement.message": "Souhaitez-vous vraiment supprimer l'annonce ?", "confirmations.admin.delete_local_user.checkbox": "Je comprends que je vais supprimer un utilisateur local.", "confirmations.admin.delete_status.confirm": "Delete post", "confirmations.admin.delete_status.heading": "Delete post", @@ -425,6 +474,9 @@ "confirmations.block.confirm": "Bloquer", "confirmations.block.heading": "Block @{name}", "confirmations.block.message": "Confirmez-vous le blocage de {name} ?", + "confirmations.block_from_group.confirm": "Bannir ce compte", + "confirmations.block_from_group.heading": "Bannir du groupe", + "confirmations.block_from_group.message": "Souhaitez-vous vraiment bannir @{name} du groupe ?", "confirmations.cancel.confirm": "Abandonner", "confirmations.cancel.heading": "Abandonner la publication", "confirmations.cancel.message": "Êtes-vous sûr⋅e de vouloir abandonner la création de cette publication ?", @@ -439,17 +491,29 @@ "confirmations.delete_event.confirm": "Supprimer", "confirmations.delete_event.heading": "Supprimer l'évènement", "confirmations.delete_event.message": "Êtes-vous sûr⋅e de vouloir supprimer cet évènement ?", + "confirmations.delete_from_group.message": "Souhaitez-vous vraiment supprimer la publication de @{name} ?", + "confirmations.delete_group.confirm": "Supprimer", + "confirmations.delete_group.heading": "Supprimer le groupe", + "confirmations.delete_group.message": "Souhaitez-vous vraiment supprimer ce groupe ? C'est une action irréversible.", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.heading": "Delete list", "confirmations.delete_list.message": "Êtes-vous sûr·e de vouloir supprimer définitivement cette liste ?", "confirmations.domain_block.confirm": "Masquer le domaine entier", "confirmations.domain_block.heading": "Block {domain}", "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.", + "confirmations.kick_from_group.confirm": "Éjecter", + "confirmations.kick_from_group.message": "Souhaitez-vous vraiment éjecter @{name} du groupe ?", "confirmations.leave_event.confirm": "Quitter l'évènement", "confirmations.leave_event.message": "Si vous voulez rejoindre à nouveau l'évènement, la requête sera à nouveau validée manuellement. Êtes-vous sûr⋅e de continuer ?", + "confirmations.leave_group.confirm": "Quitter", + "confirmations.leave_group.heading": "Quitter le groupe", + "confirmations.leave_group.message": "Vous allez quitter le groupe. Souhaitez-vous continuer ?", "confirmations.mute.confirm": "Masquer", "confirmations.mute.heading": "Mettre en sourdine @{name}", "confirmations.mute.message": "Êtes-vous sûr·e de vouloir masquer {name} ?", + "confirmations.mute_group.confirm": "Ignorer", + "confirmations.mute_group.heading": "Ignorer le groupe", + "confirmations.mute_group.message": "Vous allez ignorer le groupe. Souhaitez-vous continuer ?", "confirmations.redraft.confirm": "Effacer et ré-écrire", "confirmations.redraft.heading": "Supprimer et réécrire", "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.", @@ -468,9 +532,10 @@ "confirmations.scheduled_status_delete.heading": "Annuler la publication programmée", "confirmations.scheduled_status_delete.message": "Annuler cette publication programmée ?", "confirmations.unfollow.confirm": "Ne plus suivre", + "copy.success": "Copié dans le presse-papier !", "crypto_donate.explanation_box.message": "{siteTitle} accepte les dons en cryptomonnaies. Vous pouvez envoyer un don à l'une des adresses ci-dessous. Merci de votre soutien !", "crypto_donate.explanation_box.title": "Envoyer des dons en cryptomonnaie", - "crypto_donate_panel.actions.view": "Cliquez pour voir {count} {count, plural, one {wallet} other {wallets}}", + "crypto_donate_panel.actions.view": "Cliquer pour voir {count, plural, one {# le portefeuille} other {# les portefeuilles}}", "crypto_donate_panel.heading": "Donner en cryptomonnaie", "crypto_donate_panel.intro.message": "{siteTitle} accepte les dons en cryptomonnaies pour financer notre service. Merci de votre soutien !", "datepicker.day": "Day", @@ -565,6 +630,7 @@ "email_verifilcation.exists": "This email has already been taken.", "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.", "emoji_button.activity": "Activités", + "emoji_button.add_custom": "Ajouter un emoji personnalisé", "emoji_button.custom": "Personnalisé", "emoji_button.flags": "Drapeaux", "emoji_button.food": "Nourriture & Boisson", @@ -572,22 +638,33 @@ "emoji_button.nature": "Nature", "emoji_button.not_found": "Pas d’émojis trouvés.", "emoji_button.objects": "Objets", + "emoji_button.oh_no": "Oh non !", "emoji_button.people": "Personnes", + "emoji_button.pick": "Choisir un emoji", "emoji_button.recent": "Fréquemment utilisés", "emoji_button.search": "Recherche…", "emoji_button.search_results": "Résultats de la recherche", + "emoji_button.skins_1": "Par défaut", + "emoji_button.skins_2": "Clair", + "emoji_button.skins_3": "Moyen-clair", + "emoji_button.skins_4": "Moyen", + "emoji_button.skins_5": "Moyen-sombre", + "emoji_button.skins_6": "Sombre", + "emoji_button.skins_choose": "Choisir le ton de skin par défaut", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", "empty_column.account_blocked": "You are blocked by @{accountUsername}.", "empty_column.account_favourited_statuses": "This user doesn't have any liked posts yet.", "empty_column.account_timeline": "Aucun pouet ici !", "empty_column.account_unavailable": "Profil non disponible", + "empty_column.admin.announcements": "Il n'y a aucune annonce pour le moment.", "empty_column.aliases": "You haven't created any account alias yet.", "empty_column.aliases.suggestions": "There are no account suggestions available for the provided term.", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", "empty_column.bookmarks": "You don't have any bookmarks yet. When you add one, it will show up here.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", + "empty_column.dislikes": "Personne n'a détesté cette publication pour l'instant. Quand quelqu'un le fera cela se verra ici.", "empty_column.domain_blocks": "Il n’y a aucun domaine caché pour le moment.", "empty_column.event_participant_requests": "Il n'y a pas de requête de participation en attente.", "empty_column.event_participants": "Personne n'a rejoint cet évènement pour le moment. Quand quelqu'un le fera, cela apparaîtra ici.", @@ -718,7 +795,7 @@ "keyboard_shortcuts.back": "pour revenir en arrière", "keyboard_shortcuts.blocked": "pour ouvrir une liste d’utilisateur·rice·s bloqué·e·s", "keyboard_shortcuts.boost": "pour partager", - "keyboard_shortcuts.compose": "pour focaliser la zone de rédaction", + "keyboard_shortcuts.compose": "pour ouvrir la zone de rédaction", "keyboard_shortcuts.down": "pour descendre dans la liste", "keyboard_shortcuts.enter": "pour ouvrir le statut", "keyboard_shortcuts.favourite": "pour ajouter aux favoris", @@ -863,7 +940,7 @@ "notification.mentioned": "{name} mentioned you", "notification.move": "{name} moved to {targetName}", "notification.name": "{link}{others}", - "notification.others": " + {count} {count, plural, one {other} other {others}}", + "notification.others": " + {count} {count, plural, one {autre} other {autres}}", "notification.pleroma:chat_mention": "{name} sent you a message", "notification.pleroma:emoji_reaction": "{name} reacted to your post", "notification.pleroma:event_reminder": "Un évènement auquel vous participez commence bientôt", @@ -882,7 +959,7 @@ "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Résultats des sondages", "notifications.filter.statuses": "Updates from people you follow", - "notifications.group": "{count} notifications", + "notifications.group": "{count, plural, one {# notification} other {# notifications}}", "notifications.queue_label": "Click to see {count} new {count, plural, one {notification} other {notifications}}", "oauth_consumer.tooltip": "Sign in with {provider}", "oauth_consumers.title": "Other ways to sign in", From e81634d0e5b5966658123e3f4165dd9bb360b650 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 2 Aug 2023 22:14:27 +0200 Subject: [PATCH 011/170] Update translation files Updated by "Remove blank strings" hook in Weblate. Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/ --- app/soapbox/locales/fr.json | 1 - 1 file changed, 1 deletion(-) diff --git a/app/soapbox/locales/fr.json b/app/soapbox/locales/fr.json index f070f2c1d..5bc716726 100644 --- a/app/soapbox/locales/fr.json +++ b/app/soapbox/locales/fr.json @@ -389,7 +389,6 @@ "compose.character_counter.title": "{chars} sur {maxChars} {maxChars, plural, one {caractère} other {caractères}} {maxChars, plural, one {utilisé} other {utilisés}}", "compose.edit_success": "Votre publication a été modifiée", "compose.invalid_schedule": "Vous devez programmer votre publication avec un délai de 5 minutes au minimum", - "compose.reply_group_indicator.message": "", "compose.submit_success": "Votre publication a été envoyée !", "compose_event.create": "Créer", "compose_event.edit_success": "Votre évènement a été édité", From 9044172b1e33b5ef4befb1b2ca81821101bbde74 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Wed, 2 Aug 2023 20:42:32 +0000 Subject: [PATCH 012/170] Translated using Weblate (French) Currently translated at 88.0% (1402 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/fr/ --- app/soapbox/locales/fr.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/soapbox/locales/fr.json b/app/soapbox/locales/fr.json index 5bc716726..eeac3fed4 100644 --- a/app/soapbox/locales/fr.json +++ b/app/soapbox/locales/fr.json @@ -1131,7 +1131,7 @@ "report.block_hint": "Souhaitez-vous également bloquer ce compte ?", "report.chatMessage.context": "En signalant le message d’un utilisateur, les cinq messages avant et cinq après celui sélectionné seront transmis à notre équipe de modération pour contexte.", "report.chatMessage.title": "Signaler le message", - "report.confirmation.content": "If we find that this account is violating the {link} we will take further action on the matter.", + "report.confirmation.content": "Si nous nous aperçevons que cette {entity} viole le {link} nous mettrons en oeuvre des actions supplémentaires.", "report.confirmation.title": "Thanks for submitting your report.", "report.done": "Done", "report.forward": "Transférer à {target}", @@ -1193,7 +1193,7 @@ "settings.delete_account": "Delete Account", "settings.edit_profile": "Edit Profile", "settings.messages.label": "Permettre aux autres de commencer une nouvelle discussion avec vous", - "settings.other": "Other options", + "settings.other": "Autres options", "settings.preferences": "Preferences", "settings.profile": "Profile", "settings.save.success": "Vos préférences ont été enregistrées !", @@ -1277,7 +1277,7 @@ "status.cancel_reblog_private": "Dé-booster", "status.cannot_reblog": "Cette publication ne peut être boostée", "status.chat": "Chat with @{name}", - "status.copy": "Copier le lien vers le pouet", + "status.copy": "Copier le lien vers la publication", "status.delete": "Effacer", "status.detailed_status": "Vue détaillée de la conversation", "status.direct": "Envoyer un message direct à @{name}", @@ -1292,8 +1292,8 @@ "status.load_more": "Charger plus", "status.mention": "Mentionner @{name}", "status.more": "Plus", - "status.mute_conversation": "Masquer la conversation", - "status.open": "Déplier ce statut", + "status.mute_conversation": "Ignorer la conversation", + "status.open": "Déplier cette publication", "status.pin": "Épingler sur le profil", "status.pinned": "Pouet épinglé", "status.quote": "Quote post", @@ -1321,13 +1321,13 @@ "status.show_less_all": "Tout replier", "status.show_more_all": "Tout déplier", "status.show_original": "Show original", - "status.title": "Post", + "status.title": "Détail de la publication", "status.title_direct": "Direct message", "status.translate": "Translate", "status.translated_from_with": "Translated from {lang} using {provider}", "status.unbookmark": "Remove bookmark", "status.unbookmarked": "Bookmark removed.", - "status.unmute_conversation": "Ne plus masquer la conversation", + "status.unmute_conversation": "Ne plus ignorer la conversation", "status.unpin": "Retirer du profil", "status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}", "statuses.quote_tombstone": "Post is unavailable.", @@ -1382,7 +1382,7 @@ "upload_error.image_size_limit": "Image exceeds the current file size limit ({limit})", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", - "upload_error.video_duration_limit": "Video exceeds the current duration limit ({limit} seconds)", + "upload_error.video_duration_limit": "La vidéo dépasse les limites de durées actuelles ({limit, plural, one {# seconde} other {# secondes}})", "upload_error.video_size_limit": "Video exceeds the current file size limit ({limit})", "upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.preview": "Preview", From 5a678f84c71d190e19a0ec25487c36d479f2f19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Fri, 4 Aug 2023 10:49:07 +0000 Subject: [PATCH 013/170] Translated using Weblate (Polish) Currently translated at 99.4% (1584 of 1592 strings) Translation: Soapbox/Soapbox Translate-URL: https://hosted.weblate.org/projects/soapbox-pub/soapbox/pl/ --- app/soapbox/locales/pl.json | 41 +++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/app/soapbox/locales/pl.json b/app/soapbox/locales/pl.json index ccb95b1ba..35ed5b457 100644 --- a/app/soapbox/locales/pl.json +++ b/app/soapbox/locales/pl.json @@ -110,6 +110,7 @@ "admin.dashwidgets.software_header": "Oprogramowanie", "admin.edit_announcement.created": "Utworzono ogłoszenie", "admin.edit_announcement.deleted": "Usunięto ogłoszenie", + "admin.edit_announcement.fields.all_day_hint": "Jeżeli zaznaczone, ogłoszenie będzie wyświetlane tylko w dni z przedziału czasu", "admin.edit_announcement.fields.all_day_label": "Całodniowe wydarzenie", "admin.edit_announcement.fields.content_label": "Treść", "admin.edit_announcement.fields.content_placeholder": "Treść ogłoszenia", @@ -256,8 +257,10 @@ "chat_settings.auto_delete.label": "Automatycznie usuwaj wiadomości", "chat_settings.block.confirm": "Zablokuj", "chat_settings.block.heading": "Zablokuj @{acct}", + "chat_settings.block.message": "Zablokowanie uniemożliwi tej osobie wysyłanie Ci wiadomości bezpośrednich i wyświetlanie Twoich treści. Możesz odblokować ją później.", "chat_settings.leave.confirm": "Opuść czat", "chat_settings.leave.heading": "Opuść czat", + "chat_settings.leave.message": "Czy na pewno chcesz opuścić ten czat? Wiadomości przestaną być dla Ciebie widoczne, a czat zostanie usunięty z Twojej skrzynki.", "chat_settings.options.block_user": "Zablokuj @{acct}", "chat_settings.options.leave_chat": "Opuść czat", "chat_settings.options.report_user": "Zgłoś @{acct}", @@ -265,7 +268,9 @@ "chat_settings.title": "Szczegóły czatu", "chat_settings.unblock.confirm": "Odblokuj", "chat_settings.unblock.heading": "Odblokuj @{acct}", + "chat_settings.unblock.message": "Odblokowanie pozwoli tej osobie na wysyłanie Ci wiadomości bezpośrednich i wyświetlanie Twoich treści.", "chat_window.auto_delete_label": "Usuwaj automatycznie po {day, plural, one {# dniu} other {# dniach}}", + "chat_window.auto_delete_tooltip": "Wiadomości będą usuwane po {day, plural, one {# dniu} other {# dniach}} od wysłania.", "chats.actions.copy": "Kopiuj", "chats.actions.delete": "Usuń wiadomość", "chats.actions.deleteForMe": "Usuń dla mnie", @@ -334,6 +339,7 @@ "column.filters.edit": "Edytuj", "column.filters.expires": "Wygasaj po", "column.filters.hide_header": "Całkowicie ukryj", + "column.filters.hide_hint": "Całkowicie ukrywaj filtrowaną zawartość, zamiast wyświetlać ostrzeżenie", "column.filters.home_timeline": "Główna oś czasu", "column.filters.keyword": "Słowo kluczowe lub fraza", "column.filters.keywords": "Słowa kluczowe lub frazy", @@ -379,7 +385,7 @@ "common.cancel": "Anuluj", "common.error": "Coś poszło nie tak. Spróbuj odświeżyć stronę.", "compare_history_modal.header": "Historia edycji", - "compose.character_counter.title": "Wykorzystano {chars} z {maxChars} znaków", + "compose.character_counter.title": "Wykorzystano {chars} z {maxChars} {maxChars, plural, one {znaku} other {znaków}}", "compose.edit_success": "Twój wpis został zedytowany", "compose.invalid_schedule": "Musisz zaplanować wpis przynajmniej 5 minut wcześniej.", "compose.reply_group_indicator.message": "Publikujesz w {groupLink}", @@ -784,8 +790,11 @@ "group.leave.label": "Opuść", "group.leave.success": "Opuść grupę", "group.manage": "Zarządzaj grupę", - "group.member.admin.limit.summary": "Możesz teraz przypisać do {count} administratorów.", + "group.member.admin.limit.summary": "Możesz teraz przypisać do {count, plural, one {# administratora}, other {# administratorów}} do grupy.", "group.member.admin.limit.title": "Przekroczono limit administratorów", + "group.mute.label": "Wycisz", + "group.mute.long_label": "Wycisz grupę", + "group.mute.success": "Wyciszono grupę", "group.popover.action": "Wyświetl grupę", "group.popover.summary": "Musisz być członkiem grupy, aby odpowiedzieć na ten wpis.", "group.popover.title": "Poproszono o dołączenie", @@ -817,13 +826,20 @@ "group.tags.unpin": "Odepnij temat", "group.tags.unpin.success": "Odpięto!", "group.tags.visible.success": "Oznaczono temat jako widoczny", + "group.unmute.label": "Cofniij wyciszenie", + "group.unmute.long_label": "Cofnij wyciszenie grupy", + "group.unmute.success": "Cofnięto wyciszenie grupy", "group.update.success": "Pomyślnie zapisano grupę", + "group.upload_avatar": "Wyślij awatar", "group.upload_banner": "Wyślij zdjęcie", + "group.upload_banner.title": "Wyślij zdjęcie w tle", + "groups.discover.popular.empty": "Nie udało się pobrać najpopularniejszych grup. Spróbuj ponownie później.", "groups.discover.popular.show_more": "Pokaż więcej", "groups.discover.popular.title": "Popularne grupy", "groups.discover.search.error.subtitle": "Spróbuj ponownie później.", "groups.discover.search.error.title": "Wystąpił błąd", "groups.discover.search.no_results.subtitle": "Spróbuj szukać innej grupy.", + "groups.discover.search.no_results.title": "Brak wyników", "groups.discover.search.placeholder": "Szukaj", "groups.discover.search.recent_searches.blankslate.subtitle": "Szukaj nazw grup, tematów lub słów kluczowych", "groups.discover.search.recent_searches.blankslate.title": "Brak ostatnich wyszukiwań", @@ -831,14 +847,21 @@ "groups.discover.search.recent_searches.title": "Ostatnie wyszukiwania", "groups.discover.search.results.groups": "Grupy", "groups.discover.search.results.member_count": "{members, plural, one {członek} other {członków}}", + "groups.discover.suggested.empty": "Nie udało się pobrać proponowanych grup. Spróbuj ponownie później.", "groups.discover.suggested.show_more": "Pokaż więcej", "groups.discover.suggested.title": "Dla Ciebie", + "groups.discover.tags.empty": "Nie udało się pobrać popularnych tematów. Spróbuj ponownie później.", "groups.discover.tags.show_more": "Pokaż więcej", "groups.discover.tags.title": "Przeglądaj tematy", "groups.discovery.tags.no_of_groups": "Liczba grup", "groups.empty.subtitle": "Odkrywaj grupy do których możesz dołączyć lub utwórz własną.", "groups.empty.title": "Brak grup", + "groups.pending.count": "{number, plural, one {# oczekujące zgłoszenie} few {# oczekujące zgłoszenia} other {# oczekujących zgłoszeń}}", + "groups.pending.empty.subtitle": "Nie masz teraz oczekujących zgłoszeń.", + "groups.pending.empty.title": "Brak oczekujących zgłoszeń", + "groups.pending.label": "Oczekujące zgłoszenia", "groups.popular.label": "Proponowane grupy", + "groups.search.placeholder": "Szukaj moich grup", "groups.suggested.label": "Proponowane grupy", "groups.tags.title": "Szukaj tematów", "hashtag.follow": "Obserwuj hashtagi", @@ -876,6 +899,7 @@ "join_event.hint": "Powiedz organizatorowi, dlaczego chcesz wziąć udział:", "join_event.join": "Poproś o dołączenie", "join_event.placeholder": "Wiadomość dla organizatora", + "join_event.request_success": "Poproszono o dołączenie do wydarzenia", "join_event.success": "Dołączono do wydarzenia", "join_event.title": "Dołącz do wydarzenia", "keyboard_shortcuts.back": "cofnij się", @@ -946,6 +970,9 @@ "login_form.header": "Zaloguj się", "manage_group.blocked_members": "Zablokowani członkowie", "manage_group.confirmation.copy": "Kopiuj odnośnik", + "manage_group.confirmation.info_1": "Jako właściciel grupy, możesz przypisywać zarządzających, usuwać wpisy i nie tylko.", + "manage_group.confirmation.info_2": "Utwórz pierwszy wpis na grupie, aby rozpocząć dyskusje.", + "manage_group.confirmation.info_3": "Podziel się nową grupą ze znajomymi, rodziną i obserwującymi, aby zwiększyć liczbę członków.", "manage_group.confirmation.share": "Udostępnij grupę", "manage_group.confirmation.title": "Wszystko gotowe!", "manage_group.create": "Utwórz grupę", @@ -1005,6 +1032,7 @@ "missing_indicator.label": "Nie znaleziono", "missing_indicator.sublabel": "Nie można odnaleźć tego zasobu", "modals.policy.submit": "Akceptuję i kontynuuję", + "modals.policy.updateTitle": "Jesteś na najnowszej wersji {siteTitle}! Poświęć chwilę aby zapoznać się z najnowszymi funkcjami, nad którymi pracowaliśmy.", "moderation_overlay.contact": "Kontakt", "moderation_overlay.hide": "Ukryj", "moderation_overlay.show": "Wyświetl", @@ -1035,6 +1063,8 @@ "navigation_bar.compose_direct": "Wiadomość bezpośrednia", "navigation_bar.compose_edit": "Edytuj wpis", "navigation_bar.compose_event": "Zarządzaj wydarzeniem", + "navigation_bar.compose_group": "Utwórz wpis w grupie", + "navigation_bar.compose_group_reply": "Odpowiedz na wpis w grupie", "navigation_bar.compose_quote": "Cytuj wpis", "navigation_bar.compose_reply": "Odpowiedz na wpis", "navigation_bar.create_event": "Utwórz nowe wydarzenie", @@ -1159,6 +1189,7 @@ "preferences.fields.language_label": "Język", "preferences.fields.media_display_label": "Wyświetlanie zawartości multimedialnej", "preferences.fields.missing_description_modal_label": "Pokazuj prośbę o potwierdzenie przed wysłaniem wpisu bez opisu multimediów", + "preferences.fields.preserve_spoilers_label": "Pozostaw ostrzeżenie o zawartości, gdy odpowiadasz na wpis", "preferences.fields.privacy_label": "Prywatność wpisów", "preferences.fields.reduce_motion_label": "Ogranicz ruch w animacjach", "preferences.fields.system_font_label": "Używaj domyślnej czcionki systemu", @@ -1262,6 +1293,7 @@ "reply_mentions.reply_empty": "W odpowiedzi na wpis", "report.block": "Zablokuj {target}", "report.block_hint": "Czy chcesz też zablokować to konto?", + "report.chatMessage.context": "Kiedy zgłaszasz wiadomość użytkownika, zespół moderacyjny otrzyma dostęp do pięciu wiadomości przed i po zaznaczonej, dla dodatkowego kontekstu.", "report.chatMessage.title": "Zgłoś wiadomość", "report.confirmation.content": "Jeżeli uznamy, że {entity} narusza {link}, podejmiemy działania z tym związane.", "report.confirmation.entity.account": "to konto", @@ -1322,12 +1354,14 @@ "security.update_password.fail": "Zmiana hasła nie powiodła się.", "security.update_password.success": "Pomyślnie zmieniono hasło.", "settings.account_migration": "Przenieś konto", + "settings.blocks": "Blokady", "settings.change_email": "Zmień e-mail", "settings.change_password": "Zmień hasło", "settings.configure_mfa": "Konfiguruj uwierzytelnianie wieloskładnikowe", "settings.delete_account": "Usuń konto", "settings.edit_profile": "Edytuj profil", "settings.messages.label": "Pozwól użytkownikom rozpocząć rozmowę z Tobą", + "settings.mutes": "Wyciszenia", "settings.other": "Pozostałe opcje", "settings.preferences": "Preferencje", "settings.privacy": "Prywatność", @@ -1388,10 +1422,13 @@ "soapbox_config.hints.promo_panel_icons.link": "Lista ikon Soapbox", "soapbox_config.home_footer.meta_fields.label_placeholder": "Podpis", "soapbox_config.home_footer.meta_fields.url_placeholder": "Adres URL", + "soapbox_config.media_preview_hint": "Niektóre back-endy pozwalają korzystać ze zoptymalizowanych wersji mediów do wyświetlania na osi czasu. Mogą one jednak być zbyt małe bez dodatkowej konfiguracji.", + "soapbox_config.media_preview_label": "Preferuj poglądowe media w miniaturach", "soapbox_config.promo_panel.meta_fields.icon_placeholder": "Ikona", "soapbox_config.promo_panel.meta_fields.label_placeholder": "Podpis", "soapbox_config.promo_panel.meta_fields.url_placeholder": "Adres URL", "soapbox_config.raw_json_hint": "Edytuj ustawienia bezpośrednio. Zmiany dokonane w pliku JSON zastąpią powyższe ustawienia. Naciśnij Zapisz, aby zastosować zmiany.", + "soapbox_config.raw_json_invalid": "jest nieprawidłowe", "soapbox_config.raw_json_label": "Zaawansowane: Edytuj surowe dane JSON", "soapbox_config.redirect_root_no_login_hint": "Cel przekierowania, jeśli użytkownik jest niezalogowany.", "soapbox_config.redirect_root_no_login_label": "Przekieruj stronę główną", From 95829aa28989eddbade30c1757a5683cd9a67587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Mon, 14 Aug 2023 22:37:42 +0200 Subject: [PATCH 014/170] Add margin-bottom to events list heading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/features/events/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/soapbox/features/events/index.tsx b/app/soapbox/features/events/index.tsx index ced05af05..831712ccf 100644 --- a/app/soapbox/features/events/index.tsx +++ b/app/soapbox/features/events/index.tsx @@ -33,7 +33,7 @@ const Events = () => { return ( - + } />
- {onClick ? ( + {(to || onClick) ? ( {children} @@ -105,7 +107,7 @@ const ListItem: React.FC = ({ label, hint, children, onClick, onSelec ) : null} - {typeof onClick === 'undefined' && typeof onSelect === 'undefined' ? renderChildren() : null} + {typeof to === 'undefined' && typeof onClick === 'undefined' && typeof onSelect === 'undefined' ? renderChildren() : null} ); }; diff --git a/app/soapbox/features/admin/tabs/dashboard.tsx b/app/soapbox/features/admin/tabs/dashboard.tsx index 9f7279a40..b8b9efcac 100644 --- a/app/soapbox/features/admin/tabs/dashboard.tsx +++ b/app/soapbox/features/admin/tabs/dashboard.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; -import { useHistory } from 'react-router-dom'; import { getSubscribersCsv, getUnsubscribersCsv, getCombinedCsv } from 'soapbox/actions/email-list'; import List, { ListItem } from 'soapbox/components/list'; @@ -15,7 +14,6 @@ import RegistrationModePicker from '../components/registration-mode-picker'; const Dashboard: React.FC = () => { const dispatch = useAppDispatch(); - const history = useHistory(); const instance = useInstance(); const features = useFeatures(); const { account } = useOwnAccount(); @@ -41,10 +39,6 @@ const Dashboard: React.FC = () => { e.preventDefault(); }; - const navigateToSoapboxConfig = () => history.push('/soapbox/config'); - const navigateToModerationLog = () => history.push('/soapbox/admin/log'); - const navigateToAnnouncements = () => history.push('/soapbox/admin/announcements'); - const v = parseVersion(instance.version); const userCount = instance.stats.get('user_count'); @@ -87,19 +81,19 @@ const Dashboard: React.FC = () => { {account.admin && ( } /> )} } /> {features.announcements && ( } /> )} diff --git a/app/soapbox/features/edit-email/index.tsx b/app/soapbox/features/edit-email/index.tsx index ee7e1d35c..70d511ce1 100644 --- a/app/soapbox/features/edit-email/index.tsx +++ b/app/soapbox/features/edit-email/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeEmail } from 'soapbox/actions/security'; -import { Button, Card, CardBody, CardHeader, CardTitle, Column, Form, FormActions, FormGroup, Input } from 'soapbox/components/ui'; +import { Button, Column, Form, FormActions, FormGroup, Input } from 'soapbox/components/ui'; import { useAppDispatch } from 'soapbox/hooks'; import toast from 'soapbox/toast'; @@ -48,47 +48,33 @@ const EditEmail = () => { }, [email, password, dispatch, intl]); return ( - - - - +
+ + - + - - - - - + + + - - - - - - - - - -
-
+ + + + +
); }; diff --git a/app/soapbox/features/edit-password/index.tsx b/app/soapbox/features/edit-password/index.tsx index eb6b1c100..026515d53 100644 --- a/app/soapbox/features/edit-password/index.tsx +++ b/app/soapbox/features/edit-password/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changePassword } from 'soapbox/actions/security'; -import { Button, Card, CardBody, CardHeader, CardTitle, Column, Form, FormActions, FormGroup, Input } from 'soapbox/components/ui'; +import { Button, Column, Form, FormActions, FormGroup, Input } from 'soapbox/components/ui'; import { useAppDispatch, useFeatures } from 'soapbox/hooks'; import toast from 'soapbox/toast'; @@ -55,57 +55,49 @@ const EditPassword = () => { }, [currentPassword, newPassword, newPasswordConfirmation, dispatch, intl]); return ( - - - - - + +
+ + + - - - - - + + - - + {passwordRequirements && ( + + )} + - {passwordRequirements && ( - - )} - + + + - - - + + - - - - - - -
-
+ + +
); }; diff --git a/app/soapbox/features/group/manage-group.tsx b/app/soapbox/features/group/manage-group.tsx index d57b8792a..625d28478 100644 --- a/app/soapbox/features/group/manage-group.tsx +++ b/app/soapbox/features/group/manage-group.tsx @@ -76,10 +76,6 @@ const ManageGroup: React.FC = ({ params }) => { }, })); - const navigateToEdit = () => history.push(`/group/${group.slug}/manage/edit`); - const navigateToPending = () => history.push(`/group/${group.slug}/manage/requests`); - const navigateToBlocks = () => history.push(`/group/${group.slug}/manage/blocks`); - return ( @@ -90,7 +86,7 @@ const ManageGroup: React.FC = ({ params }) => { - + @@ -103,10 +99,10 @@ const ManageGroup: React.FC = ({ params }) => { {backend.software !== TRUTHSOCIAL && ( - + )} - + {isOwner && ( diff --git a/app/soapbox/features/groups/components/group-link-preview.tsx b/app/soapbox/features/groups/components/group-link-preview.tsx index 98ca03076..0b2cb7cdd 100644 --- a/app/soapbox/features/groups/components/group-link-preview.tsx +++ b/app/soapbox/features/groups/components/group-link-preview.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { useHistory } from 'react-router-dom'; import { Avatar, Button, CardTitle, Stack } from 'soapbox/components/ui'; import { type Card as StatusCard } from 'soapbox/types/entities'; @@ -9,13 +8,9 @@ interface IGroupLinkPreview { } const GroupLinkPreview: React.FC = ({ card }) => { - const history = useHistory(); - const { group } = card; if (!group) return null; - const navigateToGroup = () => history.push(`/group/${group.slug}`); - return (
= ({ card }) => { } /> - @@ -40,4 +35,4 @@ const GroupLinkPreview: React.FC = ({ card }) => { ); }; -export { GroupLinkPreview }; \ No newline at end of file +export { GroupLinkPreview }; diff --git a/app/soapbox/features/settings/index.tsx b/app/soapbox/features/settings/index.tsx index 96b349bd4..1cd30fa4b 100644 --- a/app/soapbox/features/settings/index.tsx +++ b/app/soapbox/features/settings/index.tsx @@ -1,6 +1,5 @@ import React, { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; -import { useHistory } from 'react-router-dom'; import { fetchMfa } from 'soapbox/actions/mfa'; import List, { ListItem } from 'soapbox/components/list'; @@ -38,27 +37,12 @@ const messages = defineMessages({ /** User settings page. */ const Settings = () => { const dispatch = useAppDispatch(); - const history = useHistory(); const intl = useIntl(); const mfa = useAppSelector((state) => state.security.get('mfa')); const features = useFeatures(); const { account } = useOwnAccount(); - const navigateToChangeEmail = () => history.push('/settings/email'); - const navigateToChangePassword = () => history.push('/settings/password'); - const navigateToMfa = () => history.push('/settings/mfa'); - const navigateToSessions = () => history.push('/settings/tokens'); - const navigateToEditProfile = () => history.push('/settings/profile'); - const navigateToDeleteAccount = () => history.push('/settings/account'); - const navigateToMoveAccount = () => history.push('/settings/migration'); - const navigateToAliases = () => history.push('/settings/aliases'); - const navigateToBackups = () => history.push('/settings/backups'); - const navigateToImportData = () => history.push('/settings/import'); - const navigateToExportData = () => history.push('/settings/export'); - const navigateToMutes = () => history.push('/mutes'); - const navigateToBlocks = () => history.push('/blocks'); - const isMfaEnabled = mfa.getIn(['settings', 'totp']); useEffect(() => { @@ -78,7 +62,7 @@ const Settings = () => { - + {displayName} @@ -90,8 +74,8 @@ const Settings = () => { - - + + @@ -105,9 +89,9 @@ const Settings = () => { {features.security && ( <> - - - + + + {isMfaEnabled ? intl.formatMessage(messages.mfaEnabled) : @@ -117,7 +101,7 @@ const Settings = () => { )} {features.sessions && ( - + )} @@ -153,25 +137,25 @@ const Settings = () => { {features.importData && ( - + )} {features.exportData && ( - + )} {features.backups && ( - + )} {features.federating && (features.accountMoving ? ( - + ) : features.accountAliases && ( - + ))} {features.security && ( - {intl.formatMessage(messages.deleteAccount)}} onClick={navigateToDeleteAccount} /> + {intl.formatMessage(messages.deleteAccount)}} to='/settings/account' /> )} diff --git a/app/soapbox/features/soapbox-config/index.tsx b/app/soapbox/features/soapbox-config/index.tsx index b700e6401..15295e212 100644 --- a/app/soapbox/features/soapbox-config/index.tsx +++ b/app/soapbox/features/soapbox-config/index.tsx @@ -1,7 +1,6 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; import React, { useState, useEffect, useMemo } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; -import { useHistory } from 'react-router-dom'; import { updateSoapboxConfig } from 'soapbox/actions/admin'; import { uploadMedia } from 'soapbox/actions/media'; @@ -70,7 +69,6 @@ const templates: Record = { const SoapboxConfig: React.FC = () => { const intl = useIntl(); - const history = useHistory(); const dispatch = useAppDispatch(); const features = useFeatures(); @@ -83,8 +81,6 @@ const SoapboxConfig: React.FC = () => { const [rawJSON, setRawJSON] = useState(JSON.stringify(initialData, null, 2)); const [jsonValid, setJsonValid] = useState(true); - const navigateToThemeEditor = () => history.push('/soapbox/admin/theme'); - const soapbox = useMemo(() => { return normalizeSoapboxConfig(data); }, [data]); @@ -211,7 +207,7 @@ const SoapboxConfig: React.FC = () => { } - onClick={navigateToThemeEditor} + to='/soapbox/admin/theme' /> diff --git a/app/soapbox/features/status/components/status-interaction-bar.tsx b/app/soapbox/features/status/components/status-interaction-bar.tsx index bbbf0c115..9647120ff 100644 --- a/app/soapbox/features/status/components/status-interaction-bar.tsx +++ b/app/soapbox/features/status/components/status-interaction-bar.tsx @@ -2,7 +2,7 @@ import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; import React from 'react'; import { FormattedMessage } from 'react-intl'; -import { useHistory } from 'react-router-dom'; +import { Link } from 'react-router-dom'; import { openModal } from 'soapbox/actions/modals'; import { HStack, Text, Emoji } from 'soapbox/components/ui'; @@ -17,8 +17,6 @@ interface IStatusInteractionBar { } const StatusInteractionBar: React.FC = ({ status }): JSX.Element | null => { - const history = useHistory(); - const me = useAppSelector(({ me }) => me); const { allowedEmoji } = useSoapboxConfig(); const dispatch = useAppDispatch(); @@ -91,16 +89,10 @@ const StatusInteractionBar: React.FC = ({ status }): JSX. return null; }; - const navigateToQuotes: React.EventHandler = (e) => { - e.preventDefault(); - - history.push(`/@${status.getIn(['account', 'acct'])}/posts/${status.id}/quotes`); - }; - const getQuotes = () => { if (status.quotes_count) { return ( - + = ({ status }): JSX. interface IInteractionCounter { count: number - onClick?: React.MouseEventHandler children: React.ReactNode + onClick?: React.MouseEventHandler + to?: string } -const InteractionCounter: React.FC = ({ count, onClick, children }) => { +const InteractionCounter: React.FC = ({ count, children, onClick, to }) => { const features = useFeatures(); + const className = clsx({ + 'text-gray-600 dark:text-gray-700': true, + 'hover:underline': features.exposableReactions, + 'cursor-default': !features.exposableReactions, + }); + + const body = ( + + + {shortNumberFormat(count)} + + + + {children} + + + ); + + if (to) { + return ( + + {body} + + ); + } + return ( ); }; From 1011be5333453cd2fef50fb6410b3866b8fb8a09 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 26 Aug 2023 23:24:18 -0500 Subject: [PATCH 023/170] Nostr: sign events with NIP-46 --- app/soapbox/actions/streaming.ts | 5 -- app/soapbox/api/hooks/index.ts | 1 - .../api/hooks/nostr/useSignerStream.ts | 57 +++++++++++++ .../api/hooks/streaming/useNostrStream.ts | 20 ----- app/soapbox/api/index.ts | 1 + app/soapbox/features/ui/index.tsx | 5 +- .../normalizers/__tests__/instance.test.ts | 4 + app/soapbox/normalizers/instance.ts | 4 + app/soapbox/schemas/nostr.ts | 34 ++++++++ app/soapbox/schemas/utils.ts | 11 ++- app/soapbox/types/nostr.ts | 4 + package.json | 2 +- yarn.lock | 80 +++++++++---------- 13 files changed, 158 insertions(+), 70 deletions(-) create mode 100644 app/soapbox/api/hooks/nostr/useSignerStream.ts delete mode 100644 app/soapbox/api/hooks/streaming/useNostrStream.ts create mode 100644 app/soapbox/schemas/nostr.ts diff --git a/app/soapbox/actions/streaming.ts b/app/soapbox/actions/streaming.ts index 6a4219af6..fa117d690 100644 --- a/app/soapbox/actions/streaming.ts +++ b/app/soapbox/actions/streaming.ts @@ -173,11 +173,6 @@ const connectTimelineStream = ( case 'marker': dispatch({ type: MARKER_FETCH_SUCCESS, marker: JSON.parse(data.payload) }); break; - case 'nostr.sign': - window.nostr?.signEvent(JSON.parse(data.payload)) - .then((data) => websocket.send(JSON.stringify({ type: 'nostr.sign', data }))) - .catch(() => console.warn('Failed to sign Nostr event.')); - break; } }, }; diff --git a/app/soapbox/api/hooks/index.ts b/app/soapbox/api/hooks/index.ts index ee5733c9f..ce9c9fad1 100644 --- a/app/soapbox/api/hooks/index.ts +++ b/app/soapbox/api/hooks/index.ts @@ -53,4 +53,3 @@ export { useHashtagStream } from './streaming/useHashtagStream'; export { useListStream } from './streaming/useListStream'; export { useGroupStream } from './streaming/useGroupStream'; export { useRemoteStream } from './streaming/useRemoteStream'; -export { useNostrStream } from './streaming/useNostrStream'; \ No newline at end of file diff --git a/app/soapbox/api/hooks/nostr/useSignerStream.ts b/app/soapbox/api/hooks/nostr/useSignerStream.ts new file mode 100644 index 000000000..3fe6a3ac7 --- /dev/null +++ b/app/soapbox/api/hooks/nostr/useSignerStream.ts @@ -0,0 +1,57 @@ +import { relayInit, type Relay } from 'nostr-tools'; +import { useEffect } from 'react'; + +import { useInstance } from 'soapbox/hooks'; +import { connectRequestSchema } from 'soapbox/schemas/nostr'; +import { jsonSchema } from 'soapbox/schemas/utils'; + +function useSignerStream() { + const { nostr } = useInstance(); + + const relayUrl = nostr.get('relay') as string | undefined; + const pubkey = nostr.get('pubkey') as string | undefined; + + useEffect(() => { + let relay: Relay | undefined; + + if (relayUrl && pubkey && window.nostr?.nip04) { + relay = relayInit(relayUrl); + relay.connect(); + + relay + .sub([{ kinds: [24133], authors: [pubkey], limit: 0 }]) + .on('event', async (event) => { + if (!relay || !window.nostr?.nip04) return; + + const decrypted = await window.nostr.nip04.decrypt(pubkey, event.content); + const reqMsg = jsonSchema.pipe(connectRequestSchema).safeParse(decrypted); + + if (!reqMsg.success) { + console.warn(decrypted); + console.warn(reqMsg.error); + return; + } + + const signed = await window.nostr.signEvent(reqMsg.data.params[0]); + const respMsg = { + id: reqMsg.data.id, + result: signed, + }; + + const respEvent = await window.nostr.signEvent({ + kind: 24133, + content: await window.nostr.nip04.encrypt(pubkey, JSON.stringify(respMsg)), + tags: [['p', pubkey]], + created_at: Math.floor(Date.now() / 1000), + }); + + relay.publish(respEvent); + }); + } + return () => { + relay?.close(); + }; + }, [relayUrl, pubkey]); +} + +export { useSignerStream }; \ No newline at end of file diff --git a/app/soapbox/api/hooks/streaming/useNostrStream.ts b/app/soapbox/api/hooks/streaming/useNostrStream.ts deleted file mode 100644 index 6748f95ea..000000000 --- a/app/soapbox/api/hooks/streaming/useNostrStream.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { useFeatures, useLoggedIn } from 'soapbox/hooks'; - -import { useTimelineStream } from './useTimelineStream'; - -function useNostrStream() { - const features = useFeatures(); - const { isLoggedIn } = useLoggedIn(); - - return useTimelineStream( - 'nostr', - 'nostr', - null, - null, - { - enabled: isLoggedIn && features.nostrSign && Boolean(window.nostr), - }, - ); -} - -export { useNostrStream }; \ No newline at end of file diff --git a/app/soapbox/api/index.ts b/app/soapbox/api/index.ts index 850f8478e..664085653 100644 --- a/app/soapbox/api/index.ts +++ b/app/soapbox/api/index.ts @@ -66,6 +66,7 @@ export const baseClient = (accessToken?: string | null, baseURL: string = ''): A baseURL: isURL(BuildConfig.BACKEND_URL) ? BuildConfig.BACKEND_URL : baseURL, headers: Object.assign(accessToken ? { 'Authorization': `Bearer ${accessToken}`, + 'X-Nostr-Sign': 'true', } : {}), transformResponse: [maybeParseJSON], }); diff --git a/app/soapbox/features/ui/index.tsx b/app/soapbox/features/ui/index.tsx index 16e1861f3..cb2da25d1 100644 --- a/app/soapbox/features/ui/index.tsx +++ b/app/soapbox/features/ui/index.tsx @@ -16,7 +16,8 @@ import { register as registerPushNotifications } from 'soapbox/actions/push-noti import { fetchScheduledStatuses } from 'soapbox/actions/scheduled-statuses'; import { fetchSuggestionsForTimeline } from 'soapbox/actions/suggestions'; import { expandHomeTimeline } from 'soapbox/actions/timelines'; -import { useNostrStream, useUserStream } from 'soapbox/api/hooks'; +import { useUserStream } from 'soapbox/api/hooks'; +import { useSignerStream } from 'soapbox/api/hooks/nostr/useSignerStream'; import GroupLookupHoc from 'soapbox/components/hoc/group-lookup-hoc'; import withHoc from 'soapbox/components/hoc/with-hoc'; import SidebarNavigation from 'soapbox/components/sidebar-navigation'; @@ -443,7 +444,7 @@ const UI: React.FC = ({ children }) => { }, []); useUserStream(); - useNostrStream(); + useSignerStream(); // The user has logged in useEffect(() => { diff --git a/app/soapbox/normalizers/__tests__/instance.test.ts b/app/soapbox/normalizers/__tests__/instance.test.ts index f2bac4867..3e950dcdc 100644 --- a/app/soapbox/normalizers/__tests__/instance.test.ts +++ b/app/soapbox/normalizers/__tests__/instance.test.ts @@ -62,6 +62,10 @@ describe('normalizeInstance()', () => { uri: '', urls: {}, version: '0.0.0', + nostr: { + pubkey: undefined, + relay: undefined, + }, }; const result = normalizeInstance(ImmutableMap()); diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts index 77233c143..b198c7b6a 100644 --- a/app/soapbox/normalizers/instance.ts +++ b/app/soapbox/normalizers/instance.ts @@ -69,6 +69,10 @@ export const InstanceRecord = ImmutableRecord({ status_count: 0, user_count: 0, }), + nostr: ImmutableMap({ + relay: undefined as string | undefined, + pubkey: undefined as string | undefined, + }), title: '', thumbnail: '', uri: '', diff --git a/app/soapbox/schemas/nostr.ts b/app/soapbox/schemas/nostr.ts new file mode 100644 index 000000000..41c3290c3 --- /dev/null +++ b/app/soapbox/schemas/nostr.ts @@ -0,0 +1,34 @@ +import { verifySignature } from 'nostr-tools'; +import { z } from 'zod'; + +/** Schema to validate Nostr hex IDs such as event IDs and pubkeys. */ +const nostrIdSchema = z.string().regex(/^[0-9a-f]{64}$/); +/** Nostr kinds are positive integers. */ +const kindSchema = z.number().int().positive(); + +/** Nostr event template schema. */ +const eventTemplateSchema = z.object({ + kind: kindSchema, + tags: z.array(z.array(z.string())), + content: z.string(), + created_at: z.number(), +}); + +/** Nostr event schema. */ +const eventSchema = eventTemplateSchema.extend({ + id: nostrIdSchema, + pubkey: nostrIdSchema, + sig: z.string(), +}); + +/** Nostr event schema that also verifies the event's signature. */ +const signedEventSchema = eventSchema.refine(verifySignature); + +/** NIP-46 signer request. */ +const connectRequestSchema = z.object({ + id: z.string(), + method: z.literal('sign_event'), + params: z.tuple([eventTemplateSchema]), +}); + +export { nostrIdSchema, kindSchema, eventSchema, signedEventSchema, connectRequestSchema }; \ No newline at end of file diff --git a/app/soapbox/schemas/utils.ts b/app/soapbox/schemas/utils.ts index c85b2b2b1..e8172ad9e 100644 --- a/app/soapbox/schemas/utils.ts +++ b/app/soapbox/schemas/utils.ts @@ -30,4 +30,13 @@ function makeCustomEmojiMap(customEmojis: CustomEmoji[]) { }, {}); } -export { filteredArray, makeCustomEmojiMap, emojiSchema, contentSchema, dateSchema }; \ No newline at end of file +const jsonSchema = z.string().transform((value, ctx) => { + try { + return JSON.parse(value) as unknown; + } catch (_e) { + ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Invalid JSON' }); + return z.NEVER; + } +}); + +export { filteredArray, makeCustomEmojiMap, emojiSchema, contentSchema, dateSchema, jsonSchema }; \ No newline at end of file diff --git a/app/soapbox/types/nostr.ts b/app/soapbox/types/nostr.ts index b395268ef..d17a1055f 100644 --- a/app/soapbox/types/nostr.ts +++ b/app/soapbox/types/nostr.ts @@ -3,6 +3,10 @@ import type { Event, EventTemplate } from 'nostr-tools'; interface Nostr { getPublicKey(): Promise signEvent(event: EventTemplate): Promise + nip04?: { + encrypt: (pubkey: string, plaintext: string) => Promise + decrypt: (pubkey: string, ciphertext: string) => Promise + } } export default Nostr; \ No newline at end of file diff --git a/package.json b/package.json index 074afadc9..0d7f20cbd 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "localforage": "^1.10.0", "lodash": "^4.7.11", "mini-css-extract-plugin": "^2.6.0", - "nostr-tools": "^1.8.1", + "nostr-tools": "^1.14.2", "path-browserify": "^1.0.1", "postcss": "^8.4.14", "postcss-loader": "^7.0.0", diff --git a/yarn.lock b/yarn.lock index 1c425cb89..8a5befd7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2184,27 +2184,32 @@ dependencies: eslint-scope "5.1.1" -"@noble/curves@~0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-0.8.3.tgz#ad6d48baf2599cf1d58dcb734c14d5225c8996e0" - integrity sha512-OqaOf4RWDaCRuBKJLDURrgVxjLmneGsiCXGuzYB5y95YithZMA6w4uk34DHSm0rKMrrYiaeZj48/81EvaAScLQ== +"@noble/ciphers@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-0.2.0.tgz#a12cda60f3cf1ab5d7c77068c3711d2366649ed7" + integrity sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw== + +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== dependencies: - "@noble/hashes" "1.3.0" + "@noble/hashes" "1.3.1" -"@noble/hashes@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" - integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@noble/hashes@1.3.0", "@noble/hashes@~1.3.0": +"@noble/hashes@~1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== -"@noble/secp256k1@^1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== +"@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2471,24 +2476,24 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.2.1.tgz#812edd4104a15a493dda1ccac0b352270d7a188c" integrity sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ== -"@scure/base@^1.1.1", "@scure/base@~1.1.0": +"@scure/base@1.1.1", "@scure/base@~1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@scure/bip32@^1.1.5": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.2.0.tgz#35692d8f8cc3207200239fc119f9e038e5f465df" - integrity sha512-O+vT/hBVk+ag2i6j2CDemwd1E1MtGt+7O1KzrPNsaNvSsiEK55MyPIxJIMI2PS8Ijj464B2VbQlpRoQXxw1uHg== +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== dependencies: - "@noble/curves" "~0.8.3" - "@noble/hashes" "~1.3.0" + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" "@scure/base" "~1.1.0" -"@scure/bip39@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.0.tgz#a207e2ef96de354de7d0002292ba1503538fc77b" - integrity sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg== +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== dependencies: "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" @@ -8730,17 +8735,17 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -nostr-tools@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nostr-tools/-/nostr-tools-1.8.1.tgz#4e54a354cc88ea0200634da3ee5a1c3466e1794c" - integrity sha512-/2IUe5xINUYT5hYBoEz51dfRaodbRHnyF8n+ZbKWCoh0ZRX6AL88OoDNrWaWWo7tP5j5OyzSL9g/z4TP7bshEA== +nostr-tools@^1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/nostr-tools/-/nostr-tools-1.14.2.tgz#161c9401467725e87c07fcf1c9924d31b12fd45c" + integrity sha512-QEe8+tMDW0632eNDcQ+EG1edmsCXLV4WPiWLDcdT3uoE+GM15pVcy18sKwbN7SmgO4GKFEqQ49k45eANC6++SQ== dependencies: - "@noble/hashes" "1.0.0" - "@noble/secp256k1" "^1.7.1" - "@scure/base" "^1.1.1" - "@scure/bip32" "^1.1.5" - "@scure/bip39" "^1.1.1" - prettier "^2.8.4" + "@noble/ciphers" "^0.2.0" + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/base" "1.1.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" npm-run-path@^4.0.1: version "4.0.1" @@ -9512,11 +9517,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.8.4: - version "2.8.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" - integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== - pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" From a6bdf651bf34c0149bf7bf2bc531e65647bbd491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Fri, 25 Aug 2023 23:48:48 +0200 Subject: [PATCH 024/170] Fix types? MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/components/list.tsx | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/app/soapbox/components/list.tsx b/app/soapbox/components/list.tsx index cbf183805..6df1bac9f 100644 --- a/app/soapbox/components/list.tsx +++ b/app/soapbox/components/list.tsx @@ -35,9 +35,7 @@ const ListItem: React.FC = ({ label, hint, children, to, onClick, onS } }; - const Comp = to ? Link : (onClick ? 'a' : 'div'); const LabelComp = to || onClick || onSelect ? 'span' : 'label'; - const linkProps = to ? { to } : (onClick || onSelect ? { onClick: onClick || onSelect, onKeyDown, tabIndex: 0, role: 'link' } : {}); const renderChildren = React.useCallback(() => { return React.Children.map(children, (child) => { @@ -57,13 +55,12 @@ const ListItem: React.FC = ({ label, hint, children, to, onClick, onS }); }, [children, domId]); - return ( - + const className = clsx('flex items-center justify-between overflow-hidden bg-gradient-to-r from-gradient-start/20 to-gradient-end/20 px-4 py-2 first:rounded-t-lg last:rounded-b-lg dark:from-gradient-start/10 dark:to-gradient-end/10', { + 'cursor-pointer hover:from-gradient-start/30 hover:to-gradient-end/30 dark:hover:from-gradient-start/5 dark:hover:to-gradient-end/5': typeof to !== 'undefined' || typeof onClick !== 'undefined' || typeof onSelect !== 'undefined', + }); + + const body = ( + <>
{label} @@ -108,7 +105,23 @@ const ListItem: React.FC = ({ label, hint, children, to, onClick, onS ) : null} {typeof to === 'undefined' && typeof onClick === 'undefined' && typeof onSelect === 'undefined' ? renderChildren() : null} - + + ); + + if (to) return ( + + {body} + + ); + + const Comp = onClick ? 'a' : 'div'; + const linkProps = onClick || onSelect ? { onClick: onClick || onSelect, onKeyDown, tabIndex: 0, role: 'link' } : {}; + + return ( + ); }; From f518a7e5e450eae36a93a076bc2c7a7155dc7436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Mon, 28 Aug 2023 19:58:11 +0200 Subject: [PATCH 025/170] Add title to created_at label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/api/hooks/nostr/useSignerStream.ts | 2 +- app/soapbox/components/profile-hover-card.tsx | 3 ++- app/soapbox/components/relative-timestamp.tsx | 2 +- app/soapbox/features/ui/components/profile-info-panel.tsx | 3 ++- app/soapbox/utils/scopes.ts | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/soapbox/api/hooks/nostr/useSignerStream.ts b/app/soapbox/api/hooks/nostr/useSignerStream.ts index 3fe6a3ac7..ae86b7fbe 100644 --- a/app/soapbox/api/hooks/nostr/useSignerStream.ts +++ b/app/soapbox/api/hooks/nostr/useSignerStream.ts @@ -54,4 +54,4 @@ function useSignerStream() { }, [relayUrl, pubkey]); } -export { useSignerStream }; \ No newline at end of file +export { useSignerStream }; diff --git a/app/soapbox/components/profile-hover-card.tsx b/app/soapbox/components/profile-hover-card.tsx index 363c69c1a..98b9f70e8 100644 --- a/app/soapbox/components/profile-hover-card.tsx +++ b/app/soapbox/components/profile-hover-card.tsx @@ -18,6 +18,7 @@ import { useAppSelector, useAppDispatch } from 'soapbox/hooks'; import { isLocal } from 'soapbox/utils/accounts'; import { showProfileHoverCard } from './hover-ref-wrapper'; +import { dateFormatOptions } from './relative-timestamp'; import { Card, CardBody, HStack, Icon, Stack, Text } from './ui'; import type { Account, PatronUser } from 'soapbox/schemas'; @@ -128,7 +129,7 @@ export const ProfileHoverCard: React.FC = ({ visible = true } className='h-4 w-4 text-gray-800 dark:text-gray-200' /> - + = ({ account, username }) => className='h-4 w-4 text-gray-800 dark:text-gray-200' /> - + { export { getInstanceScopes, getScopes, -}; \ No newline at end of file +}; From 6a8efcfc03b3c1363ec196172e0550960b81c2a2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 28 Aug 2023 16:28:51 -0500 Subject: [PATCH 026/170] api: don't send the X-Nostr-Sign header unless the backend supports it --- app/soapbox/api/index.ts | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/app/soapbox/api/index.ts b/app/soapbox/api/index.ts index 664085653..09587e443 100644 --- a/app/soapbox/api/index.ts +++ b/app/soapbox/api/index.ts @@ -60,14 +60,25 @@ const getAuthBaseURL = createSelector([ * @param {string} baseURL * @returns {object} Axios instance */ -export const baseClient = (accessToken?: string | null, baseURL: string = ''): AxiosInstance => { +export const baseClient = ( + accessToken?: string | null, + baseURL: string = '', + nostrSign = false, +): AxiosInstance => { + const headers: Record = {}; + + if (accessToken) { + headers.Authorization = `Bearer ${accessToken}`; + } + + if (nostrSign) { + headers['X-Nostr-Sign'] = 'true'; + } + return axios.create({ // When BACKEND_URL is set, always use it. baseURL: isURL(BuildConfig.BACKEND_URL) ? BuildConfig.BACKEND_URL : baseURL, - headers: Object.assign(accessToken ? { - 'Authorization': `Bearer ${accessToken}`, - 'X-Nostr-Sign': 'true', - } : {}), + headers, transformResponse: [maybeParseJSON], }); }; @@ -95,7 +106,11 @@ export default (getState: () => RootState, authType: string = 'user'): AxiosInst const me = state.me; const baseURL = me ? getAuthBaseURL(state, me) : ''; - return baseClient(accessToken, baseURL); + const relayUrl = state.getIn(['instance', 'nostr', 'relay']) as string | undefined; + const pubkey = state.getIn(['instance', 'nostr', 'pubkey']) as string | undefined; + const nostrSign = Boolean(relayUrl && pubkey); + + return baseClient(accessToken, baseURL, nostrSign); }; // The Jest mock exports these, so they're needed for TypeScript. From edce3bb6b8fb7e16802581bf50416a9cda37c635 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Thu, 31 Aug 2023 09:14:04 +0000 Subject: [PATCH 027/170] fix: body is not used if `ListItem` is not a link --- app/soapbox/components/list.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/soapbox/components/list.tsx b/app/soapbox/components/list.tsx index 6df1bac9f..06a202535 100644 --- a/app/soapbox/components/list.tsx +++ b/app/soapbox/components/list.tsx @@ -121,7 +121,9 @@ const ListItem: React.FC = ({ label, hint, children, to, onClick, onS + > + {body} + ); }; From 41616c084e6a885a83a57d151e03604b38d04683 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 1 Sep 2023 13:48:24 -0500 Subject: [PATCH 028/170] favourites: fix isOwnAccount check --- app/soapbox/features/favourited-statuses/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/soapbox/features/favourited-statuses/index.tsx b/app/soapbox/features/favourited-statuses/index.tsx index 558fa9ee6..7b539542b 100644 --- a/app/soapbox/features/favourited-statuses/index.tsx +++ b/app/soapbox/features/favourited-statuses/index.tsx @@ -29,7 +29,7 @@ const Favourites: React.FC = ({ params }) => { const { account, isUnavailable } = useAccountLookup(params?.username, { withRelationship: true }); const username = params?.username || ''; - const isOwnAccount = username.toLowerCase() === ownAccount?.username?.toLowerCase(); + const isOwnAccount = username.toLowerCase() === ownAccount?.acct?.toLowerCase(); const timelineKey = isOwnAccount ? 'favourites' : `favourites:${account?.id}`; const statusIds = useAppSelector(state => state.status_lists.get(timelineKey)?.items || ImmutableOrderedSet()); From a22c628c73383e569ebb7d38fa20ea6394d65837 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 3 Sep 2023 18:48:07 -0500 Subject: [PATCH 029/170] features: enable frontendConfigurations on Ditto --- app/soapbox/utils/features.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/soapbox/utils/features.ts b/app/soapbox/utils/features.ts index eb73ac48c..9fb04b394 100644 --- a/app/soapbox/utils/features.ts +++ b/app/soapbox/utils/features.ts @@ -534,7 +534,10 @@ const getInstanceFeatures = (instance: Instance) => { * Whether client settings can be retrieved from the API. * @see GET /api/pleroma/frontend_configurations */ - frontendConfigurations: v.software === PLEROMA, + frontendConfigurations: any([ + v.software === PLEROMA, + v.software === DITTO, + ]), /** * Groups. From 990944dddaa38bcbddb7d1322dcbc3975fd30e70 Mon Sep 17 00:00:00 2001 From: Soapbox Bot Date: Wed, 6 Sep 2023 03:05:29 +0000 Subject: [PATCH 030/170] chore(deps): update docker docker tag to v24 --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 97892e166..858694c67 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -149,9 +149,9 @@ pages: docker: stage: deploy - image: docker:23.0.0 + image: docker:24.0.6 services: - - docker:23.0.0-dind + - docker:24.0.6-dind tags: - dind # https://medium.com/devops-with-valentine/how-to-build-a-docker-image-and-push-it-to-the-gitlab-container-registry-from-a-gitlab-ci-pipeline-acac0d1f26df From b476d6441ed34fca1e3eacf8174d84bd71b85a7d Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 8 Sep 2023 13:28:23 -0500 Subject: [PATCH 031/170] bun: improve types so it runs with bun --- app/soapbox/__tests__/toast.test.tsx | 6 ++++-- app/soapbox/features/auth-login/components/captcha.tsx | 2 +- app/soapbox/features/home-timeline/index.tsx | 2 +- app/soapbox/utils/tailwind.ts | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/soapbox/__tests__/toast.test.tsx b/app/soapbox/__tests__/toast.test.tsx index 4c38755e2..795c11493 100644 --- a/app/soapbox/__tests__/toast.test.tsx +++ b/app/soapbox/__tests__/toast.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { AxiosError } from 'axios'; +import { AxiosError, AxiosHeaders } from 'axios'; import React from 'react'; import { IntlProvider } from 'react-intl'; @@ -73,7 +73,9 @@ describe('toasts', () =>{ statusText: String(status), status, headers: {}, - config: {}, + config: { + headers: new AxiosHeaders(), + }, }); describe('with a 502 status code', () => { diff --git a/app/soapbox/features/auth-login/components/captcha.tsx b/app/soapbox/features/auth-login/components/captcha.tsx index 65179bea6..28f2d911f 100644 --- a/app/soapbox/features/auth-login/components/captcha.tsx +++ b/app/soapbox/features/auth-login/components/captcha.tsx @@ -38,7 +38,7 @@ const CaptchaField: React.FC = ({ const dispatch = useAppDispatch(); const [captcha, setCaptcha] = useState(ImmutableMap()); - const [refresh, setRefresh] = useState(undefined); + const [refresh, setRefresh] = useState(undefined); const getCaptcha = () => { dispatch(fetchCaptcha()).then((response: AxiosResponse) => { diff --git a/app/soapbox/features/home-timeline/index.tsx b/app/soapbox/features/home-timeline/index.tsx index 611fcf7ce..57c19b777 100644 --- a/app/soapbox/features/home-timeline/index.tsx +++ b/app/soapbox/features/home-timeline/index.tsx @@ -22,7 +22,7 @@ const HomeTimeline: React.FC = () => { const features = useFeatures(); const instance = useInstance(); - const polling = useRef(null); + const polling = useRef(null); const isPartial = useAppSelector(state => state.timelines.get('home')?.isPartial === true); const currentAccountId = useAppSelector(state => state.timelines.get('home')?.feedAccountId as string | undefined); diff --git a/app/soapbox/utils/tailwind.ts b/app/soapbox/utils/tailwind.ts index 3315a7209..2209573a5 100644 --- a/app/soapbox/utils/tailwind.ts +++ b/app/soapbox/utils/tailwind.ts @@ -50,7 +50,7 @@ export const fromLegacyColors = (soapboxConfig: SoapboxConfig): TailwindColorPal /** Convert Soapbox Config into Tailwind colors */ export const toTailwind = (soapboxConfig: SoapboxConfig): SoapboxConfig => { const colors: SoapboxColors = ImmutableMap(soapboxConfig.get('colors')); - const legacyColors: SoapboxColors = ImmutableMap(fromJS(fromLegacyColors(soapboxConfig))); + const legacyColors = ImmutableMap(fromJS(fromLegacyColors(soapboxConfig))) as SoapboxColors; return soapboxConfig.set('colors', legacyColors.mergeDeep(colors)); }; From c942a101ec300e317de2adcc294a5c7c0a437119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Sun, 10 Sep 2023 16:49:48 +0200 Subject: [PATCH 032/170] Compose: Don't focus on spoiler input on first render MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- .../compose/components/compose-form.tsx | 35 +++++++++++-------- app/soapbox/hooks/index.ts | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/app/soapbox/features/compose/components/compose-form.tsx b/app/soapbox/features/compose/components/compose-form.tsx index ceea75951..ad67ff5d5 100644 --- a/app/soapbox/features/compose/components/compose-form.tsx +++ b/app/soapbox/features/compose/components/compose-form.tsx @@ -89,6 +89,7 @@ const ComposeForm = ({ id, shouldCondense, autoFocus, clickab const [composeFocused, setComposeFocused] = useState(false); + const firstRender = useRef(true); const formRef = useRef(null); const spoilerTextRef = useRef(null); const autosuggestTextareaRef = useRef(null); @@ -214,10 +215,13 @@ const ComposeForm = ({ id, shouldCondense, autoFocus, clickab }, []); useEffect(() => { - if (spoiler && !prevSpoiler) { - focusSpoilerInput(); + if (firstRender.current) { + focusTextarea(); + firstRender.current = false; } else if (!spoiler && prevSpoiler) { focusTextarea(); + } else if (spoiler && !prevSpoiler) { + focusSpoilerInput(); } }, [spoiler]); @@ -320,21 +324,22 @@ const ComposeForm = ({ id, shouldCondense, autoFocus, clickab id='compose-textarea' > { - !condensed && - - - + !condensed && ( + + + - + - - + + + ) } diff --git a/app/soapbox/hooks/index.ts b/app/soapbox/hooks/index.ts index 1da5fb9e4..98d600547 100644 --- a/app/soapbox/hooks/index.ts +++ b/app/soapbox/hooks/index.ts @@ -22,4 +22,4 @@ export { useRegistrationStatus } from './useRegistrationStatus'; export { useSettings } from './useSettings'; export { useSoapboxConfig } from './useSoapboxConfig'; export { useSystemTheme } from './useSystemTheme'; -export { useTheme } from './useTheme'; \ No newline at end of file +export { useTheme } from './useTheme'; From 82c6f658e84a1198f79c3b10b945dd92b16b1f74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Tue, 12 Sep 2023 01:11:07 +0200 Subject: [PATCH 033/170] Allow to drag files to avatar/header pickers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- .../edit-profile/components/avatar-picker.tsx | 23 +++++++++++++++---- .../edit-profile/components/header-picker.tsx | 22 ++++++++++++++---- .../manage-group-modal/steps/details-step.tsx | 5 ++-- app/soapbox/hooks/forms/useImageField.ts | 2 +- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/app/soapbox/features/edit-profile/components/avatar-picker.tsx b/app/soapbox/features/edit-profile/components/avatar-picker.tsx index 09a6b0d29..afbd54a71 100644 --- a/app/soapbox/features/edit-profile/components/avatar-picker.tsx +++ b/app/soapbox/features/edit-profile/components/avatar-picker.tsx @@ -1,30 +1,43 @@ import clsx from 'clsx'; -import React from 'react'; +import React, { useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { Avatar, Icon, HStack } from 'soapbox/components/ui'; +import { useDraggedFiles } from 'soapbox/hooks'; interface IMediaInput { className?: string src: string | undefined accept: string - onChange: React.ChangeEventHandler + onChange: (files: FileList | null) => void disabled?: boolean } const AvatarPicker = React.forwardRef(({ className, src, onChange, accept, disabled }, ref) => { + const picker = useRef(null); + + const { isDragging, isDraggedOver } = useDraggedFiles(picker, (files) => { + onChange(files); + }); + return (