From 1b4902fabf1a43684552b3e5f57616174997b541 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 13:46:07 +0200 Subject: [PATCH 01/10] New Crowdin Translations (automated) (#26913) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 8 ++-- app/javascript/mastodon/locales/de.json | 30 +++++++------- app/javascript/mastodon/locales/ko.json | 20 +++++----- app/javascript/mastodon/locales/my.json | 8 ++++ app/javascript/mastodon/locales/sk.json | 2 + app/javascript/mastodon/locales/vi.json | 30 +++++++------- app/javascript/mastodon/locales/zh-TW.json | 8 ++-- config/locales/ar.yml | 46 ++++++++++++++++++++++ config/locales/de.yml | 40 +++++++++---------- config/locales/doorkeeper.ar.yml | 2 +- config/locales/doorkeeper.de.yml | 4 +- config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/doorkeeper.vi.yml | 42 ++++++++++---------- config/locales/es-MX.yml | 12 +++--- config/locales/ko.yml | 32 +++++++-------- config/locales/my.yml | 29 ++++++++++++++ config/locales/simple_form.ca.yml | 2 +- config/locales/simple_form.de.yml | 18 ++++----- config/locales/simple_form.es-MX.yml | 22 +++++------ config/locales/simple_form.my.yml | 6 +++ config/locales/simple_form.vi.yml | 24 +++++------ config/locales/vi.yml | 42 ++++++++++---------- 22 files changed, 260 insertions(+), 169 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 4ad2e12883..99640953af 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -181,7 +181,7 @@ "confirmations.mute.confirm": "Silencia", "confirmations.mute.explanation": "Això amagarà els tuts d'ells i els d'els que els mencionin, però encara els permetrà veure els teus tuts i seguir-te.", "confirmations.mute.message": "Segur que vols silenciar {name}?", - "confirmations.redraft.confirm": "Elimina i reescriu-la", + "confirmations.redraft.confirm": "Esborra i reescriu", "confirmations.redraft.message": "Segur que vols eliminar aquest tut i tornar a escriure'l? Es perdran tots els impulsos i els favorits, i les respostes al tut original quedaran aïllades.", "confirmations.reply.confirm": "Respon", "confirmations.reply.message": "Si respons ara, sobreescriuràs el missatge que estàs editant. Segur que vols continuar?", @@ -308,7 +308,7 @@ "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", "home.explore_prompt.body": "La teva línia de temps Inici tindrà una barreja dels tuts de les etiquetes que has triat seguir, de les persones que has triat seguir i dels tuts que s'impulsen. Ara mateix es veu força tranquil·la, què et sembla si:", - "home.explore_prompt.title": "Aquest és la teva base a Mastodon.", + "home.explore_prompt.title": "Aquesta és la teva base inicial a Mastodon.", "home.hide_announcements": "Amaga els anuncis", "home.pending_critical_update.body": "Si us plau actualitza el teu servidor Mastodon tant aviat com sigui possible!", "home.pending_critical_update.link": "Veure actualitzacions", @@ -581,7 +581,7 @@ "report_notification.categories.other": "Altres", "report_notification.categories.spam": "Brossa", "report_notification.categories.violation": "Violació de norma", - "report_notification.open": "Obre un informe", + "report_notification.open": "Obre l'informe", "search.no_recent_searches": "No hi ha cerques recents", "search.placeholder": "Cerca", "search.quick_action.account_search": "Perfils coincidint amb {x}", @@ -652,7 +652,7 @@ "status.reblog_private": "Impulsa amb la visibilitat original", "status.reblogged_by": "impulsat per {name}", "status.reblogs.empty": "Encara no ha impulsat ningú aquest tut. Quan algú ho faci, apareixerà aquí.", - "status.redraft": "Elimina i reescriu-la", + "status.redraft": "Esborra i reescriu", "status.remove_bookmark": "Elimina el marcador", "status.replied_to": "En resposta a {name}", "status.reply": "Respon", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index eaa979f3a6..f4ac4c0ce3 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -42,7 +42,7 @@ "account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden", "account.in_memoriam": "Zum Andenken.", "account.joined_short": "Beigetreten", - "account.languages": "Genutzte Sprachen überarbeiten", + "account.languages": "Ausgewählte Sprachen ändern", "account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt", "account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.", "account.media": "Medien", @@ -201,9 +201,9 @@ "disabled_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert.", "dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.", "dismissable_banner.dismiss": "Ablehnen", - "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im sozialen Netzwerk geteilt. Neuere Nachrichten, die von vielen verschiedenen Konten veröffentlicht wurden, haben höhere Priorität.", + "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im sozialen Netzwerk geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen veröffentlicht wurden, werden höher eingestuft.", "dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netzwerk und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.", - "dismissable_banner.explore_tags": "Das sind Hashtags, die derzeit an Reichweite gewinnen. Hashtags, die von vielen verschiedenen Konten verwendet werden, haben höhere Priorität.", + "dismissable_banner.explore_tags": "Das sind Hashtags, die derzeit an Reichweite gewinnen. Hashtags, die von vielen verschiedenen Profilen verwendet werden, werden höher eingestuft.", "dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im sozialen Netzwerk, denen Leute auf {domain} folgen.", "embed.instructions": "Du kannst diesen Beitrag außerhalb des Fediverse (z. B. auf deiner Website) einbetten, indem du diesen iFrame-Code einfügst.", "embed.preview": "Vorschau:", @@ -244,8 +244,8 @@ "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Timeline aufzufüllen", "error.unexpected_crash.explanation": "Wegen eines Fehlers in unserem Code oder aufgrund einer Browser-Inkompatibilität kann diese Seite nicht korrekt angezeigt werden.", "error.unexpected_crash.explanation_addons": "Diese Seite konnte nicht korrekt angezeigt werden. Dieser Fehler wird wahrscheinlich durch ein Browser-Add-on oder automatische Übersetzungswerkzeuge verursacht.", - "error.unexpected_crash.next_steps": "Versuche, diese Seite zu aktualisieren. Wenn das nicht helfen sollte, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du nutzt eine mobile (native) App.", - "error.unexpected_crash.next_steps_addons": "Versuche, die Seite zu deaktivieren und lade sie dann neu. Sollte das Problem weiter bestehen, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du nutzt eine mobile (native) App.", + "error.unexpected_crash.next_steps": "Versuche, die Seite neu zu laden. Wenn das nicht helfen sollte, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du verwendest eine mobile (native) App.", + "error.unexpected_crash.next_steps_addons": "Versuche, das Add-on oder Übersetzungswerkzeug zu deaktivieren und lade die Seite anschließend neu. Sollte das Problem weiter bestehen, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du verwendest eine mobile (native) App.", "errors.unexpected_crash.copy_stacktrace": "Fehlerdiagnose in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Fehler melden", "explore.search_results": "Suchergebnisse", @@ -352,7 +352,7 @@ "keyboard_shortcuts.mention": "Profil erwähnen", "keyboard_shortcuts.muted": "Liste stummgeschalteter Profile öffnen", "keyboard_shortcuts.my_profile": "Eigenes Profil aufrufen", - "keyboard_shortcuts.notifications": "Mitteilungen aufrufen", + "keyboard_shortcuts.notifications": "Benachrichtigungen aufrufen", "keyboard_shortcuts.open_media": "Medieninhalt öffnen", "keyboard_shortcuts.pinned": "Liste angehefteter Beiträge öffnen", "keyboard_shortcuts.profile": "Profil aufrufen", @@ -464,7 +464,7 @@ "notifications.grant_permission": "Berechtigung erteilen.", "notifications.group": "{count} Benachrichtigungen", "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", - "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", + "notifications.permission_denied": "Desktop-Benachrichtigungen können aufgrund einer zuvor verweigerten Berechtigung nicht aktiviert werden", "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", "notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", @@ -527,7 +527,7 @@ "relative_time.days": "{number} T.", "relative_time.full.days": "vor {number, plural, one {# Tag} other {# Tagen}}", "relative_time.full.hours": "vor {number, plural, one {# Stunde} other {# Stunden}}", - "relative_time.full.just_now": "soeben", + "relative_time.full.just_now": "gerade eben", "relative_time.full.minutes": "vor {number, plural, one {# Minute} other {# Minuten}}", "relative_time.full.seconds": "vor {number, plural, one {1 Sekunde} other {# Sekunden}}", "relative_time.hours": "{number} Std.", @@ -609,7 +609,7 @@ "server_banner.administered_by": "Verwaltet von:", "server_banner.introduction": "{domain} ist Teil eines dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.", "server_banner.learn_more": "Mehr erfahren", - "server_banner.server_stats": "Serverstatistiken:", + "server_banner.server_stats": "Serverstatistik:", "sign_in_banner.create_account": "Konto erstellen", "sign_in_banner.sign_in": "Anmelden", "sign_in_banner.sso_redirect": "Anmelden oder registrieren", @@ -636,7 +636,7 @@ "status.hide": "Beitrag ausblenden", "status.history.created": "{name} erstellte {date}", "status.history.edited": "{name} bearbeitete {date}", - "status.load_more": "Weitere laden", + "status.load_more": "Mehr laden", "status.media.open": "Zum Öffnen anklicken", "status.media.show": "Zum Anzeigen anklicken", "status.media_hidden": "Inhalt ausgeblendet", @@ -662,9 +662,9 @@ "status.share": "Teilen", "status.show_filter_reason": "Trotzdem anzeigen", "status.show_less": "Weniger anzeigen", - "status.show_less_all": "Alle Inhaltswarnungen zuklappen", + "status.show_less_all": "Alles einklappen", "status.show_more": "Mehr anzeigen", - "status.show_more_all": "Alle Inhaltswarnungen aufklappen", + "status.show_more_all": "Alles ausklappen", "status.show_original": "Ursprünglichen Beitrag anzeigen", "status.title.with_attachments": "{user} veröffentlichte {attachmentCount, plural, one {ein Medium} other {{attachmentCount} Medien}}", "status.translate": "Übersetzen", @@ -684,7 +684,7 @@ "time_remaining.seconds": "noch {number, plural, one {# Sekunde} other {# Sekunden}}", "timeline_hint.remote_resource_not_displayed": "{resource} von anderen Servern werden nicht angezeigt.", "timeline_hint.resources.followers": "Follower", - "timeline_hint.resources.follows": "Folge ich", + "timeline_hint.resources.follows": "„Folge ich“", "timeline_hint.resources.statuses": "Ältere Beiträge", "trends.counter_by_accounts": "{count, plural, one {{counter} Profil} other {{counter} Profile}} {days, plural, one {seit gestern} other {in {days} Tagen}}", "trends.trending_now": "Aktuelle Trends", @@ -717,7 +717,7 @@ "upload_progress.processing": "Wird verarbeitet…", "username.taken": "Dieser Profilname ist vergeben. Versuche einen anderen", "video.close": "Video schließen", - "video.download": "Video-Datei herunterladen", + "video.download": "Datei herunterladen", "video.exit_fullscreen": "Vollbild verlassen", "video.expand": "Video vergrößern", "video.fullscreen": "Vollbild", @@ -725,5 +725,5 @@ "video.mute": "Stummschalten", "video.pause": "Pausieren", "video.play": "Abspielen", - "video.unmute": "Ton einschalten" + "video.unmute": "Stummschaltung aufheben" } diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 42692168c8..6e5a8c6f58 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -428,8 +428,8 @@ "notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.mention": "{name} 님의 멘션", - "notification.own_poll": "투표를 마쳤습니다", - "notification.poll": "참여했던 투표가 끝났습니다.", + "notification.own_poll": "설문을 마침", + "notification.poll": "참여한 설문이 종료됨", "notification.reblog": "{name} 님이 부스트했습니다", "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notification.update": "{name} 님이 게시물을 수정했습니다", @@ -445,7 +445,7 @@ "notifications.column_settings.follow": "새 팔로워:", "notifications.column_settings.follow_request": "새 팔로우 요청:", "notifications.column_settings.mention": "멘션:", - "notifications.column_settings.poll": "투표 결과:", + "notifications.column_settings.poll": "설문 결과:", "notifications.column_settings.push": "푸시 알림", "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", @@ -459,7 +459,7 @@ "notifications.filter.favourites": "좋아요", "notifications.filter.follows": "팔로우", "notifications.filter.mentions": "멘션", - "notifications.filter.polls": "투표 결과", + "notifications.filter.polls": "설문 결과", "notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물", "notifications.grant_permission": "권한 부여.", "notifications.group": "{count}개의 알림", @@ -500,16 +500,16 @@ "password_confirmation.exceeds_maxlength": "암호 확인 값이 최대 암호 길이를 초과하였습니다", "password_confirmation.mismatching": "암호 확인 값이 일치하지 않습니다", "picture_in_picture.restore": "다시 넣기", - "poll.closed": "마감됨", + "poll.closed": "마감", "poll.refresh": "새로고침", "poll.reveal": "결과 보기", "poll.total_people": "{count}명", "poll.total_votes": "{count} 표", "poll.vote": "투표", - "poll.voted": "이 답변에 투표했습니다", + "poll.voted": "이 답변에 투표함", "poll.votes": "{votes} 표", - "poll_button.add_poll": "투표 추가", - "poll_button.remove_poll": "투표 삭제", + "poll_button.add_poll": "설문 추가", + "poll_button.remove_poll": "설문 제거", "privacy.change": "게시물의 프라이버시 설정을 변경", "privacy.direct.long": "언급된 사용자만 볼 수 있음", "privacy.direct.short": "멘션한 사람들만", @@ -577,7 +577,7 @@ "report.unfollow": "@{name}을 팔로우 해제", "report.unfollow_explanation": "이 계정을 팔로우하고 있습니다. 홈 피드에서 더 이상 게시물을 받아 보지 않으려면 팔로우를 해제하십시오.", "report_notification.attached_statuses": "{count}개의 게시물 첨부됨", - "report_notification.categories.legal": "법적 문제 관련", + "report_notification.categories.legal": "법령", "report_notification.categories.other": "기타", "report_notification.categories.spam": "스팸", "report_notification.categories.violation": "규칙 위반", @@ -695,7 +695,7 @@ "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", - "upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.", + "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없어요.", "upload_form.audio_description": "청각 장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명", "upload_form.description_missing": "설명이 추가되지 않음", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index a5f73c6edb..8e0b7ab41e 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -310,6 +310,8 @@ "home.explore_prompt.body": "သင့်ရဲ့သတင်းစဥ် မှာ သင် စောင့်ကြည့်​နေတယ့် ခေါင်းစဥ်​တွေ၊သင်​စောင့်ကြည့်​နေတယ့်အ​ကောင့်​တွေ နဲ့ အဆိုပါ အ​ကောင့်​တွေပြန်မျှ​ဝေထားတယ့် ပိုစ့်​တွေကို မြင်ရမှာပါ။:", "home.explore_prompt.title": "ဤသည်မှာ Mastodon ရှိ သင့်ပင်မစာမျက်နှာဖြစ်သည်။", "home.hide_announcements": "ကြေညာချက်များကို ဖျောက်ပါ", + "home.pending_critical_update.body": "သင့် Mastodon ဆာဗာ အမြန်ဆုံး အပ်ဒိတ်လုပ်ပါ။", + "home.pending_critical_update.link": "အပ်ဒိတ်များကြည့်ရန်", "home.show_announcements": "ကြေညာချက်များကို ပြပါ", "interaction_modal.description.favourite": "Mastodon အကောင့်ဖြင့် ဤပို့စ်ကို သင် favorite ပြုလုပ်ကြောင်း စာရေးသူအား အသိပေးပြီး နောက်ပိုင်းတွင် သိမ်းဆည်းနိုင်သည်။", "interaction_modal.description.follow": "Mastodon အကောင့်ဖြင့် သင်၏ ပင်မစာမျက်နှာတွင် ၎င်းတို့၏ ပို့စ်များကို ရရှိရန်အတွက် {name} ကို စောင့်ကြည့်နိုင်ပါသည်။", @@ -411,6 +413,7 @@ "navigation_bar.lists": "စာရင်းများ", "navigation_bar.logout": "ထွက်မယ်", "navigation_bar.mutes": "အသုံးပြုသူများကို ပိတ်ထားပါ", + "navigation_bar.opened_in_classic_interface": "ပို့စ်များ၊ အကောင့်များနှင့် အခြားသီးခြားစာမျက်နှာများကို classic ဝဘ်အင်တာဖေ့စ်တွင် ဖွင့်ထားသည်။", "navigation_bar.personal": "ကိုယ်ရေးကိုယ်တာ", "navigation_bar.pins": "ပင်တွဲထားသောပို့စ်များ", "navigation_bar.preferences": "စိတ်ကြိုက်သတ်မှတ်ချက်များ", @@ -586,12 +589,17 @@ "search.quick_action.open_url": "Mastodon တွင် URL ကိုဖွင့်မည်", "search.quick_action.status_search": "{x} နှင့် ကိုက်ညီသော ပို့စ်များ", "search.search_or_paste": "URL ရိုက်ထည့်ပါ သို့မဟုတ် ရှာဖွေပါ", + "search_popout.full_text_search_disabled_message": "{domain} တွင် မရနိုင်ပါ။", + "search_popout.language_code": "ISO ဘာသာစကားကုဒ်", + "search_popout.options": "ရွေးချယ်ထားသည်များ ရှာဖွေရန်", "search_popout.quick_actions": "အမြန်လုပ်ဆောင်မှုများ", "search_popout.recent": "လတ်တလော ရှာဖွေမှုများ", + "search_popout.user": "အသုံးပြုသူ", "search_results.accounts": "စာမျက်နှာ", "search_results.all": "အားလုံး", "search_results.hashtags": "ဟက်ရှ်တက်များ", "search_results.nothing_found": "ရှာဖွေလိုသောအရာမရှိပါ", + "search_results.see_all": "အားလုံးကို ကြည့်ရန်", "search_results.statuses": "ပို့စ်တင်မယ်", "search_results.title": "{q} ကို ရှာပါ", "server_banner.about_active_users": "ပြီးခဲ့သည့် ရက်ပေါင်း ၃၀ အတွင်း ဤဆာဗာကို အသုံးပြုသူများ (လအလိုက် လက်ရှိအသုံးပြုသူများ)", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 92846912fe..6c08f899a4 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -581,6 +581,7 @@ "search_results.all": "Všetky", "search_results.hashtags": "Haštagy", "search_results.nothing_found": "Pre tieto výrazy nemožno nič nájsť", + "search_results.see_all": "Ukáž všetky", "search_results.statuses": "Príspevky", "search_results.title": "Hľadaj {q}", "server_banner.active_users": "aktívni užívatelia", @@ -599,6 +600,7 @@ "status.copy": "Skopíruj odkaz na príspevok", "status.delete": "Zmazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", + "status.direct": "Spomeň @{name} v súkromí", "status.direct_indicator": "Súkromné spomenutie", "status.edit": "Uprav", "status.edited": "Upravené {date}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 8a37d5bd53..e5cdf0d619 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -12,7 +12,7 @@ "about.powered_by": "Mạng xã hội liên hợp {mastodon}", "about.rules": "Nội quy máy chủ", "account.account_note_header": "Ghi chú", - "account.add_or_remove_from_list": "Thêm vào danh sách", + "account.add_or_remove_from_list": "Sửa danh sách", "account.badges.bot": "Bot", "account.badges.group": "Nhóm", "account.block": "Chặn @{name}", @@ -47,7 +47,7 @@ "account.locked_info": "Đây là tài khoản riêng tư. Chủ tài khoản tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Media", "account.mention": "Nhắc đến @{name}", - "account.moved_to": "{name} đã chuyển sang máy chủ khác:", + "account.moved_to": "{name} đã chuyển sang máy chủ khác", "account.mute": "Ẩn @{name}", "account.mute_notifications_short": "Ẩn thông báo", "account.mute_short": "Ẩn", @@ -101,7 +101,7 @@ "bundle_modal_error.close": "Đóng", "bundle_modal_error.message": "Đã có lỗi xảy ra trong khi tải nội dung này.", "bundle_modal_error.retry": "Thử lại", - "closed_registrations.other_server_instructions": "Vì Mastodon liên hợp nên bạn có thể tạo tài khoản trên máy chủ khác và vẫn tương tác với máy chủ này.", + "closed_registrations.other_server_instructions": "Tạo tài khoản trên máy chủ khác và vẫn tương tác với máy chủ này.", "closed_registrations_modal.description": "{domain} hiện tắt đăng ký, nhưng hãy lưu ý rằng bạn không cần một tài khoản riêng trên {domain} để sử dụng Mastodon.", "closed_registrations_modal.find_another_server": "Tìm máy chủ khác", "closed_registrations_modal.preamble": "Mastodon liên hợp nên bất kể bạn tạo tài khoản ở đâu, bạn cũng sẽ có thể theo dõi và tương tác với mọi người trên máy chủ này. Bạn thậm chí có thể tự mở máy chủ!", @@ -380,8 +380,8 @@ "lists.edit": "Sửa danh sách", "lists.edit.submit": "Thay đổi tiêu đề", "lists.exclusive": "Ẩn những tút này khỏi bảng tin", - "lists.new.create": "Tạo danh sách mới", - "lists.new.title_placeholder": "Tên danh sách mới", + "lists.new.create": "Tạo mới", + "lists.new.title_placeholder": "Tên danh sách", "lists.replies_policy.followed": "Người theo dõi", "lists.replies_policy.list": "Người trong danh sách", "lists.replies_policy.none": "Không ai", @@ -437,23 +437,23 @@ "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Người mới tham gia:", - "notifications.column_settings.alert": "Thông báo trên máy tính", + "notifications.column_settings.alert": "Báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", "notifications.column_settings.filter_bar.advanced": "Toàn bộ", "notifications.column_settings.filter_bar.category": "Phân loại", "notifications.column_settings.filter_bar.show_bar": "Hiện bộ lọc", - "notifications.column_settings.follow": "Người theo dõi mới:", - "notifications.column_settings.follow_request": "Yêu cầu theo dõi mới:", + "notifications.column_settings.follow": "Người theo dõi:", + "notifications.column_settings.follow_request": "Yêu cầu theo dõi:", "notifications.column_settings.mention": "Lượt nhắc đến:", "notifications.column_settings.poll": "Kết quả bình chọn:", "notifications.column_settings.push": "Thông báo đẩy", - "notifications.column_settings.reblog": "Lượt đăng lại mới:", - "notifications.column_settings.show": "Hiện trên thanh bên", - "notifications.column_settings.sound": "Kèm âm thanh", + "notifications.column_settings.reblog": "Lượt đăng lại:", + "notifications.column_settings.show": "Báo trên thanh bên", + "notifications.column_settings.sound": "Kèm âm báo", "notifications.column_settings.status": "Tút mới:", "notifications.column_settings.unread_notifications.category": "Thông báo chưa đọc", "notifications.column_settings.unread_notifications.highlight": "Nổi bật thông báo chưa đọc", - "notifications.column_settings.update": "Lượt sửa:", + "notifications.column_settings.update": "Sửa tút:", "notifications.filter.all": "Toàn bộ", "notifications.filter.boosts": "Đăng lại", "notifications.filter.favourites": "Lượt thích", @@ -634,8 +634,8 @@ "status.filter": "Lọc tút này", "status.filtered": "Bộ lọc", "status.hide": "Ẩn tút", - "status.history.created": "{name} đăng {date} trước", - "status.history.edited": "{name} đã sửa {date} trước", + "status.history.created": "{name} đăng {date}", + "status.history.edited": "{name} đã sửa {date}", "status.load_more": "Tải thêm", "status.media.open": "Nhấn để mở", "status.media.show": "Nhấn để xem", @@ -687,7 +687,7 @@ "timeline_hint.resources.follows": "Đang theo dõi", "timeline_hint.resources.statuses": "Tút cũ hơn", "trends.counter_by_accounts": "{count, plural, other {{count} lượt}} dùng trong {days, plural, other {{days} ngày}} qua", - "trends.trending_now": "Thịnh hành", + "trends.trending_now": "Xu hướng", "ui.beforeunload": "Bản nháp của bạn sẽ bị mất nếu bạn thoát khỏi Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index b28eca7a7e..a6694b21df 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -8,7 +8,7 @@ "about.domain_blocks.silenced.title": "已受限", "about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法與此伺服器上的使用者互動或交流。", "about.domain_blocks.suspended.title": "已停權", - "about.not_available": "無法在本伺服器上使用此資訊。", + "about.not_available": "無法於本伺服器上使用此資訊。", "about.powered_by": "由 {mastodon} 提供的去中心化社群媒體", "about.rules": "伺服器規則", "account.account_note_header": "備註", @@ -464,9 +464,9 @@ "notifications.grant_permission": "授予權限", "notifications.group": "{count} 條通知", "notifications.mark_as_read": "將所有通知都標記為已讀", - "notifications.permission_denied": "由於之前已拒絕瀏覽器請求,因此桌面通知不可用", + "notifications.permission_denied": "由於之前已拒絕瀏覽器請求,因此無法使用桌面通知", "notifications.permission_denied_alert": "由於之前瀏覽器權限被拒絕,無法啟用桌面通知", - "notifications.permission_required": "由於尚未授予所需的權限,所以桌面通知不可用。", + "notifications.permission_required": "由於尚未授予所需的權限,因此無法使用桌面通知。", "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不要錯過任何東西!", @@ -590,7 +590,7 @@ "search.quick_action.open_url": "於 Mastodon 中開啟連結", "search.quick_action.status_search": "符合的嘟文 {x}", "search.search_or_paste": "搜尋或輸入網址", - "search_popout.full_text_search_disabled_message": "{domain} 上不可用。", + "search_popout.full_text_search_disabled_message": "{domain} 上無法使用。", "search_popout.language_code": "ISO 語言代碼 (ISO language code)", "search_popout.options": "搜尋選項", "search_popout.quick_actions": "快捷操作", diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 741ebc60ff..f8c74207de 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -797,6 +797,9 @@ ar: branding: preamble: العلامة التجارية لخادمك الخاص تميزه عن الخوادم الأخرى في الشبكة. يمكن عرض هذه المعلومات عبر مجموعة متنوعة من البيئات، مثل واجهة الويب لماستدون، في التطبيقات الأصلية، في معاينات الروابط على مواقع الويب الأخرى وضمن تطبيقات الرسائل، وما إلى ذلك. ولهذا السبب، من الأفضل إبقاء هذه المعلومات واضحة وقصيرة وموجزة. title: العلامة + captcha_enabled: + desc_html: ويعتمد هذا على نصوص برمجية خارجية من hCaptcha، والتي قد تكون مصدر قلق يتعلق بالأمان والخصوصية. بالإضافة إلى ذلك، قد يؤدي ذلك إلى جعل عملية التسجيل أقل سهولة بالنسبة لبعض الأشخاص (وخاصة المعاقين). لهذه الأسباب، يرجى النظر في تدابير بديلة مثل التسجيل على أساس الموافقة أو على أساس الدعوة. + title: مطالبة المستخدمين الجدد بحل اختبار CAPTCHA لتأكيد حساباتهم content_retention: preamble: التحكم في كيفية تخزين المحتوى الذي ينشئه المستخدم في ماستدون. title: الاحتفاظ بالمحتوى @@ -826,6 +829,7 @@ ar: open: يمكن للجميع إنشاء حساب security: authorized_fetch: يتطلّب المصادقة مِن الخوادم الفديرالية + authorized_fetch_hint: إن طلب المصادقة من الخوادم الموحدة يتيح تنفيذًا أكثر صرامة للكتل على مستوى المستخدم وعلى مستوى الخادم. ومع ذلك، يأتي هذا على حساب عقوبة الأداء، ويقلل من مدى وصول ردودك، وقد يؤدي إلى حدوث مشكلات في التوافق مع بعض الخدمات الموحدة. بالإضافة إلى ذلك، لن يمنع هذا الجهات الفاعلة المخصصة من جلب منشوراتك وحساباتك العامة. authorized_fetch_overridden_hint: لا يُمكِنُكَ تغيير هذا الإعداد لأنه مفروض عبر مُتغيّر في البيئة. federation_authentication: إنفاذ التوثيق الفديرالي title: إعدادات الخادم @@ -919,6 +923,7 @@ ar: message_html: إعدادات خادم الويب الخاص بكم ليست على ما يرام. خصوصية مستخدميكم في خطر. upload_check_privacy_error_object_storage: action: تحقق هنا للمزيد من المعلومات + message_html: "تم تكوين مخزن الكائنات الخاص بك بشكل خاطئ. خصوصية المستخدمين في خطر." tags: review: حالة المراجعة updated_msg: تم تحديث إعدادات الوسوم بنجاح @@ -936,6 +941,13 @@ ar: no_link_selected: لم يطرأ أي تغيير على أي رابط بما أنه لم يتم اختيار أي واحد publishers: no_publisher_selected: لم يطرأ أي تغيير على أي ناشر بما أنه لم يتم اختيار أي واحد + shared_by_over_week: + few: "%{count} أشخاص أعادوا نشره خلال الأسبوع الماضي" + many: "%{count} شخصًا أعادوا نشره خلال الأسبوع الماضي" + one: شخص واحد أعاد نشره خلال الأسبوع الماضي + other: "%{count} شخص أعادوا نشره خلال الأسبوع الماضي" + two: شخصان أعادا نشره خلال الأسبوع الماضي + zero: لا أحد أعاد نشره خلال الأسبوع الماضي title: الروابط المتداولة usage_comparison: تمت مشاركته %{today} مرات اليوم، مقارنة بـ %{yesterday} بالأمس not_allowed_to_trend: غير مسموح ظهوره في المتداولة @@ -1008,6 +1020,13 @@ ar: empty: ليس لديك أي نقاط نهاية ويب هوك تم تكوينها بعد. enable: تشغيل enabled: نشِط + enabled_events: + few: تم تفعيل %{count} أحداث + many: تم تفعيل %{count} حدثًا + one: تم تفعيل حدث واحد + other: تم تفعيل %{count} حدث + two: تم تفعيل حدثين + zero: لم يتم تفعيل أي حدث events: الأحداث new: رابط ويب جديد rotate_secret: تغيير الرمز @@ -1311,6 +1330,13 @@ ar: other: "%{count} منشور" two: "%{count} منشوران اثنان" zero: "%{count} منشورات" + statuses_long: + few: "%{count} منشورات فردية مخفية" + many: "%{count} منشورًا فرديا مخفيا" + one: منشور فردي مخفي واحد + other: "%{count} منشور فردي مخفي" + two: منشوران فرديان مخفيان + zero: لا منشورات فردية مخفية title: عوامل التصفية new: save: حفظ عامل التصفية الجديد @@ -1357,7 +1383,19 @@ ar: overwrite: إعادة الكتابة overwrite_long: استبدال التسجيلات الحالية بالجديدة overwrite_preambles: + blocking_html: أنت على وشك استبدال قائمة الحظر بما يصل إلى %{total_items} من الحسابات من %{filename}. + bookmarks_html: أنت على وشك استبدال إشاراتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}. + domain_blocking_html: أنت على وشك إرشاداتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}. + following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename} والتوقف عن متابعة أي شخص آخر. lists_html: إنّك بصدد استبدال قوائمك بمحتوى مِلَفّ %{filename}. ما يُقارِب %{total_items} حسابًا سوف تُضاف إلى قوائم جديدة. + muting_html: أنت على وشك استبدال قائمة الحسابات الصامتة بما يصل إلى %{total_items} من الحسابات من %{filename}. + preambles: + blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من الحسابات من %{filename}. + bookmarks_html: أنت على وشك إضافة ما يصل إلى %{total_items} من المشاركات من %{filename} إلى إشاراتك المرجعية. + domain_blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من النطاقات من %{filename}. + following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename}. + lists_html: أنت على وشك إضافة ما يصل إلى %{total_items} حسابات من %{filename} إلى قوائمك. سيتم إنشاء قوائم جديدة في حالة عدم وجود قائمة للإضافة إليها. + muting_html: أنت على وشك تجاهل ما يصل إلى %{total_items} من الحسابات من %{filename}. preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم. recent_imports: الاستيرادات الحديثة states: @@ -1431,6 +1469,7 @@ ar: unsubscribe: action: نعم، ألغِ الاشتراك complete: غير مشترك + confirmation_html: هل أنت متأكد أنك تريد إلغاء الاشتراك في تلقي %{type} لـ Mastodon على %{domain} إلى بريدك الإلكتروني على %{email}؟ يمكنك دائمًا إعادة الاشتراك من إعدادات إشعارات البريد الإلكتروني. emails: notification_emails: favourite: إشعارات رسائل البريد الخاصة بالمفضلة @@ -1438,6 +1477,7 @@ ar: follow_request: رسائل البريد الإلكترونية الخاصة بطلبات المتابعة mention: إشعارات رسائل البريد عندما يَذكُرك أحدهم reblog: رسائل البريد الخاصة بالمنشورات المعاد نشرها + resubscribe_html: إذا قمت بإلغاء الاشتراك عن طريق الخطأ، يمكنك إعادة الاشتراك من إعدادات الإشعارات في بريدك الإلكتروني. success_html: لن تتلقّ بعد الآن %{type} لماستدون مِن %{domain} على بريدك الإلكتروني %{email}. title: إلغاء الاشتراك media_attachments: @@ -1566,8 +1606,11 @@ ar: privacy: hint_html: "قم بتخصيص الطريقة التي تريد بها أن يُكتَشَف ملفك الشخصي ومنشوراتك. يمكن لمجموعة متنوعة من الميزات في Mastodon أن تساعدك في الوصول إلى جمهور أوسع عند تفعيلها. خذ بعض الوقت لمراجعة هذه الإعدادات للتأكد من أنها تناسب حالة الاستخدام الخاصة بك." privacy: الخصوصية + privacy_hint_html: تحكم في مقدار ما ترغب في الكشف عنه لصالح الآخرين. يكتشف الأشخاص الملفات الشخصية المثيرة والتطبيقات الرائعة من خلال تصفح متابعات الأشخاص الآخرين ورؤية التطبيقات التي ينشرونها، ولكن قد تفضل الاحتفاظ بها مخفية. reach: الوصول + reach_hint_html: تحكم في ما إذا كنت ترغب في أن يكتشفك ويتابعك أشخاص جدد. هل ترغب في أن تظهر منشوراتك على شاشة الاستكشاف؟ هل ترغب في أن يرى الأشخاص الآخرون اقتراحات المتابعة الخاصة بك؟ هل ترغب في قبول جميع المتابعين الجدد تلقائيًا، أم ترغب في التحكّم التفصيلي على كل واحد منهم؟ search: البحث + search_hint_html: تحكم في كيفية العثور عليك. هل ترغب في أن يجد الناس معلوماتك بناءً على ما نشرته علنيًا؟ هل ترغب في أن يمكن للأشخاص خارج منصة Mastodon العثور على ملفك الشخصي عند البحث على الويب؟ يرجى مراعاة أنه لا يمكن ضمان استبعاد تام من جميع محركات البحث للمعلومات العامة. title: الخصوصية والوصول إلى الجمهور privacy_policy: title: سياسة الخصوصية @@ -1802,6 +1845,7 @@ ar: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d %Y، %H:%M %Z" translation: errors: quota_exceeded: تم تجاوز حصة استخدام خدمة التَّرْجَمَةً على نطاق الخادم. @@ -1891,7 +1935,9 @@ ar: seamless_external_login: لقد قمت بتسجيل الدخول عبر خدمة خارجية، إنّ إعدادات الكلمة السرية و البريد الإلكتروني غير متوفرة. signed_in_as: 'تم تسجيل دخولك بصفة:' verification: + extra_instructions_html: نصيحة: يمكن أن يكون الرابط الموجود على موقع الويب الخاص بك غير مرئي. الجزء المهم هو rel="me" الذي يمنع انتحال الهوية على مواقع الويب ذات المحتوى الذي ينشئه المستخدم. يمكنك أيضًا استخدام علامة link في رأس الصفحة بدلاً من a، ولكن يجب أن يكون HTML قابلاً للوصول دون تنفيذ JavaScript. here_is_how: إليك كيف ذلك + hint_html: "التحقق من هويتك على Mastodon متاح للجميع. بناءً على معايير الويب المفتوحة، الآن ودائمًا مجانًا. كل ما تحتاجه هو موقع ويب شخصي يتعرف الناس مِن خلاله عليك. عندما تقوم بربط هذا الموقع بملفك الشخصي، سنتحقق من أن الموقع يشير إلى ملفك الشخصي ونعرض عليه علامة بصرية." instructions_html: قم بنسخ ولصق التعليمة البرمجية أدناه في شفرة HTML لموقعك الخاص على الويب. ثم أضف عنوان موقع الويب الخاص بك إلى أحد الحقول الإضافية في ملفك التعريفي عبر لسان "تعديل الملف التعريفي" ثم احفظ التغييرات. verification: التحقق verified_links: روابطك التي تم التحقق منها diff --git a/config/locales/de.yml b/config/locales/de.yml index ce53ec48aa..c41b5aa18a 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -77,14 +77,14 @@ de: invite_request_text: Begründung für das Beitreten invited_by: Eingeladen von ip: IP-Adresse - joined: Registriert + joined: Beigetreten location: all: Alle local: Lokal remote: Extern title: Herkunft login_status: Status - media_attachments: Medieninhalte + media_attachments: Medienanhänge memorialize: In Gedenkseite umwandeln memorialized: Gedenkseite memorialized_msg: "%{username} wurde erfolgreich in ein Gedenkseiten-Konto umgewandelt" @@ -167,7 +167,7 @@ de: view_domain: Übersicht für Domain anzeigen warn: Verwarnen web: Web - whitelisted: Auf der Whitelist + whitelisted: Für Föderation zugelassen action_logs: action_types: approve_appeal: Einspruch zulassen @@ -376,7 +376,7 @@ de: title: Einsprüche domain_allows: add_new: Föderation mit Domain erlauben - created_msg: Domain wurde erfolgreich zur Whitelist hinzugefügt + created_msg: Domain wurde erfolgreich für die Föderation zugelassen destroyed_msg: Domain wurde von der Föderation ausgeschlossen export: Exportieren import: Importieren @@ -404,7 +404,7 @@ de: create: Server einschränken hint: Die Einschränkung einer Domain wird nicht verhindern, dass Konteneinträge in der Datenbank erstellt werden. Es werden aber alle Moderationsmethoden rückwirkend und automatisch auf diese Konten angewendet. severity: - desc_html: "Stummschalten wird Beiträge von Konten unter dieser Domain für alle unsichtbar machen, die den Konten nicht folgen. Sperren wird alle Inhalte, Medien und Profildaten für die Konten dieser Domain von deinem Server entfernen. Verwende Kein, wenn du nur Medieninhalte ablehnen möchtest." + desc_html: "Stummschalten wird Beiträge von Konten unter dieser Domain für alle unsichtbar machen, die den Konten nicht folgen. Sperren wird alle Inhalte, Medien und Profildaten für die Konten dieser Domain von deinem Server entfernen. Verwende Kein, wenn du nur Mediendateien ablehnen möchtest." noop: Kein silence: Stummschaltung suspend: Sperren @@ -486,7 +486,7 @@ de: content_policies: comment: Interne Notiz description_html: Du kannst Inhaltsrichtlinien definieren, die auf alle Konten dieser Domain und einer ihrer Subdomains angewendet werden. - limited_federation_mode_description_html: Du kannst wählen, ob du eine Föderation mit dieser Domain gestattest. + limited_federation_mode_description_html: Du kannst auswählen, ob du eine Föderation mit dieser Domain erlaubst. policies: reject_media: Medien ablehnen reject_reports: Meldungen ablehnen @@ -532,7 +532,7 @@ de: total_followed_by_them: Gefolgt von denen total_followed_by_us: Gefolgt von uns total_reported: Beschwerden über sie - total_storage: Medieninhalte + total_storage: Medienanhänge totals_time_period_hint_html: Die unten angezeigten Summen enthalten Daten für alle Zeiten. invites: deactivate_all: Alle deaktivieren @@ -587,7 +587,7 @@ de: action_taken_by: Maßnahme ergriffen von actions: delete_description_html: Der gemeldete Beitrag wird gelöscht und die ergriffene Maßnahme wird aufgezeichnet, um dir bei zukünftigen Verstößen des gleichen Kontos zu helfen. - mark_as_sensitive_description_html: Die Medien in den gemeldeten Beiträgen werden mit einer Inhaltswarnung versehen und der Vorfall wird gesichert, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können. + mark_as_sensitive_description_html: Die Medien in den gemeldeten Beiträgen werden mit einer Inhaltswarnung versehen und der Vorfall wird vermerkt, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können. other_description_html: Weitere Optionen zur Steuerung des Kontoverhaltens und zur Anpassung der Kommunikation mit dem gemeldeten Konto. resolve_description_html: Es wird keine Maßnahme gegen das gemeldete Konto ergriffen und der Vorgang wird nicht aufgezeichnet – die Meldung wird hiermit geschlossen. silence_description_html: Das Konto wird nur für diejenigen sichtbar sein, die dem Konto bereits folgen oder es manuell suchen, was die Reichweite stark einschränkt. Kann jederzeit rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen. @@ -742,7 +742,7 @@ de: preamble: Das Branding deines Servers unterscheidet ihn von anderen Servern im Netzwerk. Diese Informationen können in einer Vielzahl von Umgebungen angezeigt werden, z. B. in der Weboberfläche von Mastodon, in nativen Anwendungen, in Linkvorschauen auf anderen Websites und in Messaging-Apps und so weiter. Aus diesem Grund ist es am besten, diese Informationen klar, kurz und prägnant zu halten. title: Branding captcha_enabled: - desc_html: Dies beruht auf externen Skripten von hCaptcha, die ein Sicherheits- und Datenschutzproblem darstellen könnten. Darüber hinaus kann das den Registrierungsprozess für manche Menschen (insbesondere für Menschen mit Behinderung) erheblich erschweren. Aus diesen Gründen solltest du alternative Maßnahmen wie Zulassungs- oder Einladungs-basierte Registrierungen in Erwägung ziehen. + desc_html: Dies beruht auf externen Skripten von hCaptcha, die ein Sicherheits- und Datenschutzproblem darstellen könnten. Darüber hinaus kann das den Registrierungsprozess für manche Menschen (insbesondere für Menschen mit Behinderung) erheblich erschweren. Aus diesen Gründen solltest du alternative Maßnahmen in Betracht ziehen, z. B. eine Registrierung basierend auf einer Einladung oder auf Genehmigungen. title: Neue Nutzer*innen müssen ein CAPTCHA lösen, um das Konto zu bestätigen content_retention: preamble: Lege fest, wie lange Inhalte von Nutzer*innen auf deinem Mastodon-Server gespeichert bleiben. @@ -980,7 +980,7 @@ de: subject: Kritische Mastodon-Updates sind für %{instance} verfügbar! new_pending_account: body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen. - subject: Neues Konto zur Überprüfung auf %{instance} verfügbar (%{username}) + subject: Neues Konto zum Überprüfen auf %{instance} verfügbar (%{username}) new_report: body: "%{reporter} hat %{target} gemeldet" body_remote: Jemand von %{domain} hat %{target} gemeldet @@ -1198,7 +1198,7 @@ de: content: Wir bitten um Verzeihung, aber etwas ist bei uns schiefgegangen. title: Diese Seite enthält einen Fehler '503': Die Seite konnte wegen eines temporären Serverfehlers nicht angezeigt werden. - noscript_html: Bitte aktiviere JavaScript, um das Webinterface von Mastodon zu verwenden. Alternativ kannst du auch eine der nativen Apps für Mastodon nutzen. + noscript_html: Bitte aktiviere JavaScript, um das Webinterface von Mastodon zu verwenden. Alternativ kannst du auch eine der nativen Apps für Mastodon verwenden. existing_username_validator: not_found: kann lokale Konten mit diesem Profilnamen nicht finden not_found_multiple: "%{usernames} konnten nicht gefunden werden" @@ -1399,9 +1399,9 @@ de: title: Abbestellen media_attachments: validations: - images_and_video: Es kann kein Video zu einem Beitrag hinzugefügt werden, der bereits Bilder enthält - not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht hinzugefügt werden. Versuche es gleich noch einmal! - too_many: Mehr als vier Medien können nicht hinzugefügt werden + images_and_video: Es kann kein Video an einen Beitrag angehängt werden, der bereits Bilder enthält + not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal! + too_many: Mehr als vier Dateien können nicht angehängt werden migrations: acct: umgezogen nach cancel: Weiterleitung beenden @@ -1487,9 +1487,9 @@ de: units: billion: Mrd. million: Mio. - quadrillion: Q + quadrillion: Brd. thousand: Tsd. - trillion: T + trillion: Bio. otp_authentication: code_hint: Gib den Code ein, den deine 2FA- bzw. TOTP-App generiert hat, um den Vorgang zu bestätigen description_html: Wenn du die Zwei-Faktor-Authentisierung (2FA) mit einer Authentifizierungs-App deines Smartphones aktivierst, benötigst du neben dem regulären Passwort zusätzlich auch den zeitbasierten Code der 2FA-App, um dich anmelden zu können. @@ -1699,7 +1699,7 @@ de: keep_direct: Private Nachrichten behalten keep_direct_hint: Löscht keinen deiner Beiträge, die nur für erwähnte Profile sichtbar sind keep_media: Beiträge mit Medien behalten - keep_media_hint: Löscht keinen deiner Beiträge mit Medieninhalten + keep_media_hint: Löscht keinen deiner Beiträge mit Medienanhängen keep_pinned: Angeheftete Beiträge behalten keep_pinned_hint: Löscht keinen deiner angehefteten Beiträge keep_polls: Umfragen behalten @@ -1751,7 +1751,7 @@ de: enabled: Zwei-Faktor-Authentisierung (2FA) ist aktiviert enabled_success: Zwei-Faktor-Authentisierung (2FA) erfolgreich aktiviert generate_recovery_codes: Wiederherstellungscodes erstellen - lost_recovery_codes: Wiederherstellungscodes erlauben es dir, wieder Zugang zu deinem Konto zu erlangen, falls du keinen Zugriff mehr auf die Zwei-Faktor-Authentisierung (2FA) oder den Sicherheitsschlüssel hast. Solltest du diese Wiederherstellungscodes verloren haben, kannst du sie hier neu generieren. Deine alten, bereits erstellten Wiederherstellungscodes werden dadurch ungültig. + lost_recovery_codes: Wiederherstellungscodes ermöglichen es dir, wieder Zugang zu deinem Konto zu erlangen, falls du keinen Zugriff mehr auf die Zwei-Faktor-Authentisierung (2FA) oder den Sicherheitsschlüssel hast. Solltest du diese Wiederherstellungscodes verloren haben, kannst du sie hier neu generieren. Deine alten, bereits erstellten Wiederherstellungscodes werden dadurch ungültig. methods: Methoden der Zwei-Faktor-Authentisierung (2FA) otp: Authentisierungs-App recovery_codes: Wiederherstellungscodes sichern @@ -1760,7 +1760,7 @@ de: webauthn: Sicherheitsschlüssel user_mailer: appeal_approved: - action: Gehe zu deinem Konto + action: Dein Konto aufrufen explanation: Der Einspruch gegen deinen Verstoß vom %{strike_date}, den du am %{appeal_date} eingereicht hast, wurde genehmigt. Dein Konto ist wieder in gutem Zustand. subject: Dein Einspruch vom %{date} wurde angenommen title: Einspruch angenommen @@ -1789,7 +1789,7 @@ de: delete_statuses: Einige deiner Beiträge haben gegen eine oder mehrere Serverregeln verstoßen und wurden daher von den Moderator*innen von %{instance} entfernt. disable: Du kannst dein Konto nicht mehr verwenden, aber dein Profil und deine anderen Daten bleiben erhalten. Du kannst eine Sicherung deiner Daten anfordern, die Kontoeinstellungen ändern oder dein Konto löschen. mark_statuses_as_sensitive: Ein oder mehrere deiner Beiträge wurden von den Moderator*innen von %{instance} mit einer Inhaltswarnung versehen. Das bedeutet, dass die Medien in den Beiträgen erst angeklickt werden müssen, bevor sie angezeigt werden. Beim Verfassen der nächsten Beiträge kannst du auch selbst eine Inhaltswarnung für hochgeladene Medien festlegen. - sensitive: Von nun an werden alle deine hochgeladenen Medieninhalte mit einer Inhaltswarnung versehen und hinter einer Warnung versteckt. + sensitive: Von nun an werden alle deine hochgeladenen Mediendateien mit einer Inhaltswarnung versehen und hinter einer Warnung versteckt. silence: Du kannst dein Konto weiterhin verwenden, aber nur Personen, die dir bereits folgen, sehen deine Beiträge auf diesem Server. Ebenso kannst du aus verschiedenen Suchfunktionen ausgeschlossen werden. Andere können dir jedoch weiterhin manuell folgen. suspend: Du kannst dein Konto nicht mehr verwenden und dein Profil und andere Daten sind nicht mehr verfügbar. Du kannst dich immer noch anmelden, um eine Sicherung deiner Daten anzufordern, bis die Daten innerhalb von 30 Tagen vollständig gelöscht wurden. Allerdings werden wir einige Daten speichern, um zu verhindern, dass du die Sperrung umgehst. reason: 'Begründung:' diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index 9391e74a2d..889c182a3f 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -177,7 +177,7 @@ ar: read:mutes: رؤية الحسابات التي كَتمتَها read:notifications: رؤية إشعاراتك الخاصة read:reports: رؤية إبلاغاتك - read:search: البحث مكانك + read:search: البحث نيابةً عنك read:statuses: رؤية كافة المنشورات write: تغيير كافة بيانات حسابك write:accounts: تعديل صفحتك التعريفية diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index 8bd4b16f49..cc7b88a282 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -132,7 +132,7 @@ de: follow: Folge ich, Stummschaltungen und Blockierungen follows: Folge ich lists: Listen - media: Medieninhalte + media: Medienanhänge mutes: Stummschaltungen notifications: Benachrichtigungen push: Push-Benachrichtigungen @@ -188,7 +188,7 @@ de: write:filters: Filter erstellen write:follows: Profilen folgen write:lists: Listen erstellen - write:media: Medieninhalte hochladen + write:media: Mediendateien hochladen write:mutes: Profile und Unterhaltungen stummschalten write:notifications: deine Benachrichtigungen löschen write:reports: andere Profile melden diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index 4d91b74af4..082d656bc5 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -184,7 +184,7 @@ es-MX: write:blocks: bloquear cuentas y dominios write:bookmarks: guardar estados como marcadores write:conversations: silenciar y eliminar conversaciones - write:favourites: marcar publicaciones como favoritas + write:favourites: publicaciones favoritas write:filters: crear filtros write:follows: seguir usuarios write:lists: crear listas diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index d6e62d82b1..8375795273 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -5,7 +5,7 @@ vi: doorkeeper/application: name: Tên ứng dụng redirect_uri: URL chuyển hướng - scopes: Quyền hạn + scopes: Quyền website: Trang web ứng dụng errors: models: @@ -41,7 +41,7 @@ vi: empty: Bạn không có ứng dụng nào. name: Tên new: Ứng dụng mới - scopes: Quyền hạn + scopes: Quyền show: Xem title: Ứng dụng của bạn new: @@ -50,7 +50,7 @@ vi: actions: Hành động application_id: Mã Client callback_urls: Gọi lại URLs - scopes: Quyền hạn + scopes: Quyền secret: Bí ẩn của Client title: 'Ứng dụng: %{name}' authorizations: @@ -147,7 +147,7 @@ vi: application: title: Đăng nhập bằng OAuth scopes: - admin:read: đọc tất cả dữ liệu trên máy chủ + admin:read: đọc mọi dữ liệu trên máy chủ admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả các khối email chuẩn admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép @@ -157,32 +157,32 @@ vi: admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo admin:write: sửa đổi tất cả dữ liệu trên máy chủ admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản - admin:write:canonical_email_blocks: thực hiện các hành động kiểm duyệt đối với chặn email - admin:write:domain_allows: thực hiện các hành động kiểm duyệt đối với các email cho phép - admin:write:domain_blocks: thực hiện các hành động kiểm duyệt đối với các tên miền chặn - admin:write:email_domain_blocks: thực hiện các hành động kiểm duyệt đối với các tên miền email chặn + admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email + admin:write:domain_allows: áp đặt kiểm duyệt đối với các email cho phép + admin:write:domain_blocks: áp đặt kiểm duyệt đối với các tên miền chặn + admin:write:email_domain_blocks: áp đặt kiểm duyệt đối với các tên miền email chặn admin:write:ip_blocks: áp đặt kiểm duyệt với các IP chặn admin:write:reports: áp đặt kiểm duyệt với các báo cáo crypto: dùng mã hóa đầu cuối follow: sửa đổi các mối quan hệ tài khoản - push: nhận thông báo đẩy của bạn - read: đọc tất cả dữ liệu tài khoản của bạn + push: nhận thông báo đẩy + read: đọc mọi dữ liệu tài khoản read:accounts: xem thông tin tài khoản - read:blocks: xem những người bạn chặn - read:bookmarks: xem những thứ bạn đã lưu + read:blocks: xem những người đã chặn + read:bookmarks: xem tút đã lưu read:favourites: xem lượt thích - read:filters: xem bộ lọc của bạn - read:follows: xem lượt theo dõi của bạn - read:lists: xem danh sách của bạn - read:mutes: xem những người bạn đã ẩn - read:notifications: xem thông báo của bạn + read:filters: xem bộ lọc + read:follows: xem những người theo dõi + read:lists: xem danh sách + read:mutes: xem những người đã ẩn + read:notifications: xem thông báo read:reports: xem báo cáo của bạn - read:search: thay mặt bạn tìm kiếm + read:search: tìm kiếm read:statuses: xem toàn bộ tút write: sửa đổi mọi dữ liệu tài khoản của bạn - write:accounts: sửa đổi trang hồ sơ của bạn + write:accounts: sửa đổi trang hồ sơ write:blocks: chặn người và máy chủ - write:bookmarks: sửa đổi những thứ bạn lưu + write:bookmarks: sửa đổi những tút lưu write:conversations: ẩn và xóa thảo luận write:favourites: thích tút write:filters: tạo bộ lọc @@ -190,6 +190,6 @@ vi: write:lists: tạo danh sách write:media: tải lên tập tin write:mutes: ẩn người và thảo luận - write:notifications: xóa thông báo của bạn + write:notifications: xóa thông báo write:reports: báo cáo người khác write:statuses: đăng tút diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 65749996e9..542478f716 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1521,13 +1521,13 @@ es-MX: posting_defaults: Configuración por defecto de publicaciones public_timelines: Líneas de tiempo públicas privacy: - hint_html: "Personaliza el descubrimiento de tu perfil y tus publicaciones. En Mastodon tienes distintas características que te ayudarán a alcanzar una mayor audiencia si las activas. Tómate un momento para revisar estas configuraciones y asegurarte de que cumplen tus necesidades." + hint_html: "Personaliza cómo te gustaría que tu perfil y tus publicaciones sean encontradas. En Mastodon tienes a tu disposición distintas características que pueden ayudarte a llegar a una audiencia más amplia cuando se encuentran activadas. Toma un momento para revisar estos ajustes para asegurarte si cumplen tus necesidades." privacy: Privacidad - privacy_hint_html: Controla cuánto deseas revelar a los demás. Las personas descubren perfiles y aplicaciones interesantes navegando por los seguidores de otras personas y viendo desde qué aplicaciones publican, pero puede que prefieras mantenerlo oculto. + privacy_hint_html: Controla cuánto quieres compartir para el beneficio de otros. Las personas descubren perfiles interesantes y aplicaciones geniales al navegar por los seguidores de otras personas y viendo desde cuáles aplicaciones publican, pero también puedes preferir mantenerlo oculto. reach: Alcance - reach_hint_html: Controla si quieres ser descubierto y seguido por nuevas personas. ¿Quieres que tus publicaciones aparezcan en la sección de Explorar? ¿Quieres que tu cuenta se recomiende a otras personas? ¿Quieres aceptar automáticamente a todos los nuevos seguidores o tener control sobre cada uno de ellos? + reach_hint_html: Controla si quieres ser descubierto y seguido por nuevas personas. ¿Quieres que tus publicaciones aparezcan en la pantalla de Explorar? ¿Quieres que otras personas te encuentren en sus recomendaciones de cuentas a seguir? ¿Quieres aceptar todos los nuevos seguidores automáticamente o controlar cada uno? search: Búsqueda - search_hint_html: Controla cómo quieres que te encuentren. ¿Quieres que otras personas te encuentren por lo que has publicado públicamente? ¿Quieres que las personas de fuera de Mastodon encuentren tu perfil al buscar en la web? Por favor, ten en cuenta que la exclusión total de todos los motores de búsqueda no puede ser garantizada para información pública. + search_hint_html: Controla cómo quieres ser encontrado. ¿Quieres que otras personas te encuentren por lo que has compartido públicamente? ¿Quieres que las personas afuera de Mastodon encuentren tu perfil al navegar por Internet? Por favor, toma en cuenta que la exclusión total de todos los motores de búsqueda no se puede garantizar para información pública. title: Privacidad y alcance privacy_policy: title: Política de Privacidad @@ -1741,8 +1741,8 @@ es-MX: with_time_zone: "%d de %b de %Y, %H:%M %Z" translation: errors: - quota_exceeded: Se ha sobrepasado la cuota de uso del servicio de traducción para todo el servidor. - too_many_requests: Ha habido demasiadas solicitudes al servicio de traducción recientemente. + quota_exceeded: Se ha excedido la cuota de uso del servicio de traducción en todo el servidor. + too_many_requests: Se han registrado muchas solicitudes al servicio de traducción recientemente. two_factor_authentication: add: Añadir disable: Deshabilitar diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 582036efc0..c732767314 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -769,7 +769,7 @@ ko: delete: 업로드한 파일 삭제 destroyed_msg: 사이트 업로드를 성공적으로 삭제했습니다! software_updates: - critical_update: 긴급 — 빨리 업데이트 해주세요 + critical_update: 긴급 — 빠른 업데이트 요망 description: 최신 수정 사항과 기능을 활용하기 위해 Mastodon 설치를 최신 상태로 유지하기를 권장합니다. 더욱이, 때로는 보안 문제를 피하기 위해 Mastodon을 적절한 시점에 긴급 업데이트해야 하는 경우도 있습니다. 따라서 Mastodon은 30분마다 업데이트를 확인하며, 이메일 알림 환경설정에 따라 사용자에게 알려드립니다. documentation_link: 더 알아보기 release_notes: 릴리스 노트 @@ -778,7 +778,7 @@ ko: types: major: 메이저 릴리스 minor: 마이너 릴리스 - patch: 패치 릴리스 — 버그픽스이며 변경을 적용하기 쉽습니다 + patch: 패치 릴리스 — 버그픽스 그리고 변경점의 빠른 적용 version: 버전 statuses: account: 작성자 @@ -1442,7 +1442,7 @@ ko: subject: "%{name} 님의 멘션" title: 새 답글 poll: - subject: "%{name}의 투표가 종료되었습니다" + subject: "%{name}의 설문이 종료됨" reblog: body: '당신의 게시물을 %{name} 님이 부스트 했습니다:' subject: "%{name} 님이 내 게시물을 부스트 했습니다" @@ -1482,15 +1482,15 @@ ko: truncate: "…" polls: errors: - already_voted: 이미 투표에 참여하셨습니다 - duplicate_options: 중복된 항목이 있습니다 - duration_too_long: 너무 먼 미래입니다 - duration_too_short: 너무 가깝습니다 - expired: 투표가 이미 끝났습니다 - invalid_choice: 선택한 투표 항목이 존재하지 않습니다 - over_character_limit: 각각 %{max} 글자를 넘을 수 없습니다 - self_vote: 내가 만든 투표엔 투표 할 수 없습니다 - too_few_options: 한가지 이상의 항목을 포함해야 합니다 + already_voted: 이미 참여한 설문 + duplicate_options: 중복된 항목 있음 + duration_too_long: 지나치게 먼 미래 + duration_too_short: 너무 짧음 + expired: 이미 종료된 설문 + invalid_choice: 선택한 투표 항목이 존재하지 않음 + over_character_limit: 각 문자가 %{max} 보다 짧아야 함 + self_vote: 자신이 만든 설문에는 투표할 수 없음 + too_few_options: 둘 이상의 항목이 있어야 함 too_many_options: 항목은 %{max}개를 넘을 수 없습니다 preferences: other: 기타 @@ -1500,11 +1500,11 @@ ko: hint_html: "내 프로필과 게시물이 어떻게 발견될지를 제어합니다. 활성화 하면 마스토돈의 다양한 기능들이 내가 더 많은 사람에게 도달할 수 있도록 도와줍니다. 이 설정이 내 용도에 맞는지 잠시 검토하세요." privacy: 개인정보 privacy_hint_html: 다른 이들을 위해 노출할 수 있는 정보의 양을 조절합니다. 누군가는 다른 이들의 팔로우를 둘러보고 어떤 앱에서 게시물을 올렸는지 살피면서 흥미로운 프로필과 멋진 앱을 발견할 수 있지만, 누군가는 이를 숨기고 싶을 수도 있겠죠. - reach: 거리감 + reach: 도달 reach_hint_html: 새로운 사람들이 나를 발견하고 팔로우하도록 허용할지 여부를 제어합니다. 탐색 화면에 게시물이 표시되기를 바라나요? 다른 사람들의 팔로우 추천에 표시되기를 바라나요? 모든 새 팔로워를 자동으로 수락하거나 각 팔로워를 세세하게 제어할까요? search: 검색 search_hint_html: 내가 어떻게 발견될지를 제어합니다. 내가 공개적으로 게시한 것들로 인해 사람들이 날 발견하길 원하나요? 마스토돈 바깥의 사람들이 웹에서 검색을 통해 내 프로필을 발견하길 원하나요? 공개적인 정보에 대해서 모든 검색엔진의 검색결과에서 제외하는 것은 보장할 수 없다는 점에 주의해주세요. - title: 개인정보와 거리감 + title: 개인정보와 도달 privacy_policy: title: 개인정보처리방침 reactions: @@ -1672,8 +1672,8 @@ ko: keep_media_hint: 미디어가 첨부된 게시물을 삭제하지 않습니다 keep_pinned: 고정된 게시물 유지 keep_pinned_hint: 고정 게시물을 삭제하지 않습니다 - keep_polls: 투표 유지 - keep_polls_hint: 투표를 삭제하지 않습니다 + keep_polls: 설문 유지 + keep_polls_hint: 설문을 삭제하지 않았음 keep_self_bookmark: 북마크한 게시물 유지 keep_self_bookmark_hint: 북마크한 본인의 게시물을 삭제하지 않습니다 keep_self_fav: 마음에 들어한 게시물 유지 diff --git a/config/locales/my.yml b/config/locales/my.yml index 83f655350b..8e01e82afe 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -306,6 +306,7 @@ my: unpublish: ပြန်ဖြုတ်ပါ unpublished_msg: ကြေညာချက်ကို ဖြုတ်ပြီးပါပြီ updated_msg: ကြေညာချက်ကို ပြင်ဆင်ပြီးပါပြီ။ + critical_update_pending: အရေးကြီးသောအပ်ဒိတ်ကို ဆိုင်းငံ့ထားသည် custom_emojis: assign_category: အမျိုးအစားသတ်မှတ်ရန် by_domain: ဒိုမိန်း @@ -756,10 +757,21 @@ my: approved: အကောင့်ဖွင့်ရန်အတွက် အတည်ပြုချက် လိုအပ်ပါသည် none: မည်သူမျှ အကောင့်ဖွင့်၍မရပါ open: မည်သူမဆို အကောင့်ဖွင့်နိုင်ပါသည် + security: + authorized_fetch: ဖက်ဒီဆာဗာများမှ စစ်မှန်ကြောင်းအထောက်အထားပြရန် လိုအပ်သည်။ title: ဆာဗာသတ်မှတ်ချက်များ site_uploads: delete: တင်ထားသောဖိုင်ဖျက်ရန် destroyed_msg: ဆိုက်အပ်လုဒ်ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။ + software_updates: + critical_update: အရေးကြီးသည် — ကျေးဇူးပြု၍ မြန်မြန်အပ်ဒိတ်လုပ်ပါ + documentation_link: ပိုမိုသိရှိရန် + release_notes: ထုတ်ဝေမှုမှတ်စုများ + title: ရရှိနိုင်သော အပ်ဒိတ်များ + type: အမျိုးအစား + types: + major: အဓိကထုတ်ဝေမှု + version: ဗားရှင်း statuses: account: ရေးသားသူ application: အက်ပလီကေးရှင်း @@ -814,6 +826,12 @@ my: message_html: သင်သည် မည်သည့်ဆာဗာစည်းမျဉ်းများကိုမျှ မသတ်မှတ်ထားပါ။ sidekiq_process_check: message_html: "%{value} တန်းစီ(s) အတွက် Sidekiq လုပ်ငန်းစဉ် မရှိပါ။ သင်၏ Sidekiq ဖွဲ့စည်းမှုကို ပြန်လည်သုံးသပ်ပါ။" + software_version_critical_check: + action: ရရှိနိုင်သော အပ်ဒိတ်များကြည့်ပါ + message_html: Mastodon အပ်ဒိတ်ရနိုင်သည်၊ ကျေးဇူးပြု၍ မြန်မြန် အပ်ဒိတ်လုပ်ပါ။ + software_version_patch_check: + action: ရရှိနိုင်သော အပ်ဒိတ်များကြည့်ပါ + message_html: ပြင်ဆင်ပြီးသော Mastodon အပ်ဒိတ် ရနိုင်ပါသည် upload_check_privacy_error: action: နောက်ထပ်အချက်အလက်များအတွက် ဤနေရာတွင် ကြည့်ပါ message_html: "သင်၏ဝဘ်ဆာဗာကို မှားယွင်းစွာပြုလုပ်ထားသည်။ သင့်အသုံးပြုသူများ၏ လျှို့ဝှက်ချက်များသည် အန္တရာယ်ရှိသည်။" @@ -923,6 +941,9 @@ my: body: "%{target} သည် %{type} ဖြစ်သည့် %{date} တွင် %{action_taken_by} ဖြင့် စိစစ်မှုတစ်ခုအား အယူခံဝင်နေပါသည်။ သူတို့ရေးသားခဲ့သည် -" next_steps: စိစစ်ဆုံးဖြတ်ချက်ပြန်ဖျက်ရန်အတွက် တင်ပြနိုင်သည် သို့မဟုတ် ၎င်းကို လျစ်လျူရှုနိုင်သည်။ subject: "%{username} က %{instance} တွင် စိစစ်ဆုံးဖြတ်ချက်ကို တင်ပြနေသည်" + new_critical_software_updates: + body: Mastodon ၏ ဗားရှင်းအသစ်များကို ထုတ်ဝေလိုက်ပါပြီ၊ အမြန်ဆုံး အပ်ဒိတ်လုပ်နိုင်ပါသည်။ + subject: Mastodon အပ်ဒိတ်များကို %{instance} အတွက် ရနိုင်ပါသည်။ new_pending_account: body: အကောင့်သစ်၏အသေးစိတ်ကို အောက်တွင်ဖော်ပြထားသည်။ ၎င်းကို အတည်ပြုနိုင်သည် သို့မဟုတ် ငြင်းပယ်နိုင်သည်။ subject: " (%{username}) %{instance} ပေါ်ရှိ ပြန်လည်သုံးသပ်ရမည့် အကောင့်သစ်" @@ -930,6 +951,9 @@ my: body: "%{reporter} က %{target} ကို တိုင်ကြားခဲ့သည်" body_remote: "%{domain} မှ တစ်စုံတစ်ယောက်က %{target} ကို တိုင်ကြားခဲ့သည်" subject: "%{instance} (#%{id}) အတွက် တိုင်ကြားစာအသစ်" + new_software_updates: + body: Mastodon ဗားရှင်းအသစ်များ ထွက်ရှိပြီးပါပြီ၊ သင် update လုပ်နိုင်ပါပြီ။ + subject: Mastodon ဗားရှင်းအသစ်များကို %{instance} အတွက် ရနိုင်ပါသည် new_trends: body: အောက်ပါအရာများကို အများကိုမပြမီ ပြန်လည်သုံးသပ်ရန် လိုအပ်သည် - new_trending_links: @@ -1663,6 +1687,11 @@ my: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" + translation: + errors: + quota_exceeded: ဘာသာပြန်ဝန်ဆောင်မှုအတွက် ဆာဗာတစ်ခုလုံးအသုံးပြုမှုခွဲတမ်းကို ကျော်လွန်သွားပါပြီ။ + too_many_requests: မကြာသေးမီက ဘာသာပြန်ဝန်ဆောင်မှုသို့ တောင်းဆိုမှု အများအပြားရှိခဲ့သည်။ two_factor_authentication: add: ထည့်ရန် disable: 2FA ကို ပိတ်ပါ diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 6f9b9a5d16..15e1d0de24 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -6,7 +6,7 @@ ca: discoverable: El teu perfil i els teus tuts públics poden aparèixer o ser recomanats en diverses àreas de Mastodon i el teu perfil pot ser suggerit a altres usuaris. display_name: El teu nom complet o el teu nom divertit. fields: La teva pàgina d'inici, pronoms, edat, el que vulguis. - indexable: Els teus tuts públics Mastodon poden aparèixer en els resultats de cerca de Mastodon. Les persones que han interaccionat amb el teus tuts seran sempre capaços de cercar-los. + indexable: Els teus tuts públics poden aparèixer en els resultats de cerca de Mastodon. Les persones que han interaccionat amb el teus tuts seran sempre capaços de cercar-los. note: 'Pots @mencionar altra gent o #etiquetes.' show_collections: La gent podrà navegar pels teus seguits i seguidors. Qui segueixis sí que veurà que els segueixes. unlocked: La gent serà capaç de seguir-te sense sol·licitar-ho. Desmarca si vols revisar les sol·licituds i triar si acceptes o no els nous seguidors. diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 649afab76e..fcf92e29f4 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -15,26 +15,26 @@ de: account_migration: acct: Gib profilname@domain des Kontos an, zu dem du umziehen möchtest account_warning_preset: - text: Du kannst Beitragssyntax verwenden, wie z. B. URLs, Hashtags und Erwähnungen - title: Optional. Für Empfänger*in nicht sichtbar + text: Du kannst die Syntax wie für Beiträge verwenden – z. B. URLs, Hashtags und Erwähnungen + title: "(Optional) Für Empfänger*in nicht sichtbar" admin_account_action: include_statuses: Die Person wird sehen, welche Inhalte dich zu dieser Maßnahme veranlasst haben send_email_notification: Benutzer*in wird eine Erklärung erhalten, was mit dem Konto geschehen ist - text_html: Optional. Du kannst Beitragssyntax verwenden. Du kannst Warnvorlagen hinzufügen, um Zeit zu sparen + text_html: (Optional) Du kannst die Syntax wie für Beiträge verwenden. Du kannst Warnvorlagen hinzufügen, um Zeit zu sparen type_html: Wähle aus, wie mit %{acct} vorgegangen werden soll types: disable: Benutzer*in daran hindern, das Konto verwenden zu können, aber die Inhalte nicht löschen oder ausblenden. none: Dem Konto eine Warnung zusenden, ohne dabei eine andere Aktion vorzunehmen. - sensitive: Erzwingen, dass alle Medieninhalte dieses Profils mit einer Inhaltswarnung versehen werden. + sensitive: Erzwingen, dass alle Medienanhänge dieses Profils mit einer Inhaltswarnung versehen werden. silence: Verhindert, dass dieses Profil öffentlich sichtbare Beiträge verfassen kann, und verbirgt alle Beiträge und Benachrichtigungen vor Personen, die diesem Profil nicht folgen. Alle Meldungen zu diesem Konto werden geschlossen. suspend: Verhindert jegliche Interaktion von oder zu diesem Konto und löscht dessen Inhalt. Dies kann innerhalb von 30 Tagen rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen. - warning_preset_id: Optional. Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen + warning_preset_id: "(Optional) Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen" announcement: all_day: Falls aktiviert, werden nur der Tag bzw. die Tage innerhalb des Zeitraums angezeigt - ends_at: Optional. Die Ankündigung wird zu diesem Zeitpunkt automatisch zurückgezogen + ends_at: "(Optional) Die Ankündigung wird zu diesem Zeitpunkt automatisch zurückgezogen" scheduled_at: Leer lassen, um die Ankündigung sofort zu veröffentlichen - starts_at: Optional. Nur für den Fall, dass deine Ankündigung an einen bestimmten Zeitraum gebunden ist - text: Du kannst die reguläre Syntax wie für Beiträge verwenden, also auch Profile erwähnen und Hashtags nutzen. Bitte beachte den Platz, den die Ankündigung auf dem Bildschirm der Benutzer*innen einnehmen wird + starts_at: "(Optional) Für den Fall, dass deine Ankündigung an einen bestimmten Zeitraum gebunden ist" + text: Du kannst die Syntax wie für Beiträge verwenden. Bitte berücksichtige den Platz, den die Ankündigung auf dem Bildschirm der Benutzer*innen einnehmen wird appeal: text: Du kannst nur einmal Einspruch gegen eine Maßnahme einlegen defaults: @@ -107,7 +107,7 @@ de: invite_request: text: Dies wird uns bei der Überprüfung deiner Anmeldung behilflich sein ip_block: - comment: Optional. Zur Erinnerung, weshalb du diese Regel eingeführt hast. + comment: "(Optional) Zur Erinnerung, weshalb du diese Regel eingeführt hast." expires_in: IP-Adressen sind eine begrenzte Ressource. Sie können außerdem auf viele Computer aufgeteilt sein und auch die Zuordnungen ändern sich. Deshalb werden unbestimmte IP-Sperren nicht empfohlen. ip: Gib eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht selbst aussperrst! severities: diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 75fe91eaec..0ed471a1f8 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -3,13 +3,13 @@ es-MX: simple_form: hints: account: - discoverable: Tu perfil y publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. + discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu nick. fields: Tu página de inicio, pronombres, edad, todo lo que quieras. - indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden ser capaces de buscarlas sin importar su visibilidad. + indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden buscarlas en cualquier momento. note: 'Puedes @mencionar a otra gente o #hashtags.' - show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo. - unlocked: Las personas podrán seguirte sin pedir aprobación. Desmarca si deseas revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores. + show_collections: Las personas pueden navegar a través de tus seguidos y seguidores. Las personas que te siguen pueden ver que las sigues. + unlocked: Las personas pueden seguirte sin solicitar la aprobación. No lo selecciones si quieres revisar las solicitudes de seguimiento y elegir si aceptas o rechazas a nuevos seguidores. account_alias: acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar account_migration: @@ -121,8 +121,8 @@ es-MX: otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:' webauthn: Si es una tecla USB, asegúrese de insertarla y, si es necesario, púlsela. settings: - indexable: Puede que tu página de perfil aparezca en los resultados de búsqueda en Google, Bing y otros. - show_application: Tú siempre podrás ver desde qué aplicación se ha publicado tu publicación. + indexable: Tu página de perfil puede aparecer en los resultados de búsqueda en Google, Bing, entre otros. + show_application: Siempre podrás ver desde cuál aplicación realizaste una publicación. tag: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: @@ -140,13 +140,13 @@ es-MX: url: Donde los eventos serán enviados labels: account: - discoverable: Destacar perfil y publicaciones en algoritmos de descubrimiento + discoverable: Destacar el perfil y las publicaciones en el algoritmo de descubrimiento fields: name: Etiqueta value: Contenido indexable: Incluir publicaciones públicas en los resultados de búsqueda - show_collections: Mostrar seguidos y seguidores en el perfil - unlocked: Aceptar automáticamente nuevos seguidores + show_collections: Mostrar los seguidos y seguidores en el perfil + unlocked: Aceptar automáticamente a nuevos seguidores account_alias: acct: Maneja la cuenta antigua account_migration: @@ -301,8 +301,8 @@ es-MX: rule: text: Norma settings: - indexable: Incluye la página de perfil en los buscadores - show_application: Mostrar desde qué aplicación enviaste una publicación + indexable: Incluir la página de perfil en los motores de búsqueda + show_application: Mostrar desde cuál aplicación enviaste una publicación tag: listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil name: Etiqueta diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml index 0bb283eca0..cf15616d24 100644 --- a/config/locales/simple_form.my.yml +++ b/config/locales/simple_form.my.yml @@ -291,6 +291,12 @@ my: pending_account: အကောင့်အသစ်ကို ပြန်လည်သုံးသပ်ရန် လိုအပ်သည် reblog: တစ်ယောက်က သင့်ပို့စ်ကို Boost လုပ်ခဲ့သည် report: အစီရင်ခံစာအသစ် တင်သွင်းထားသည် + software_updates: + all: အပ်ဒိတ်အားလုံးအတွက် အသိပေးရန် + critical: အရေးကြီးသော အပ်ဒိတ်များအတွက်သာ အသိပေးပါ + label: Mastodon ဗားရှင်းအသစ်ကို ရပါပြီ + none: "(မထောက်ခံထားသည့်) အပ်ဒိတ်များကို မည်သည့်အခါမျှ အသိပေးမည်မဟုတ်ပါ" + patch: ပြင်ဆင်ပြီးသောအပ်ဒိတ်များကို အသိပေးရန် trending_tag: လက်ရှိခေတ်စားနေသောပို့စ်များကို ပြန်လည်သုံးသပ်ရန် လိုသည် rule: text: စည်းမျဉ်း diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 17d53a672c..8943527b16 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -45,16 +45,16 @@ vi: current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) - email: Bạn sẽ được gửi một email xác nhận + email: Bạn sẽ được gửi một email xác minh header: PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy password: Dùng ít nhất 8 ký tự phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút - scopes: API nào ứng dụng sẽ được phép truy cập. Nếu bạn chọn quyền hạn cấp cao nhất, bạn không cần chọn từng phạm vi. + scopes: Ứng dụng sẽ được phép truy cập những API nào. Nếu bạn chọn quyền cấp cao nhất, không cần chọn quyền nhỏ. setting_aggregate_reblogs: Nếu một tút đã được đăng lại thì những lượt đăng lại sau sẽ không hiện trên bảng tin nữa - setting_always_send_emails: Bình thường thì email thông báo sẽ không gửi khi bạn đang dùng Mastodon + setting_always_send_emails: Bình thường thì sẽ không gửi khi bạn đang dùng Mastodon setting_default_sensitive: Bắt buộc nhấn vào mới có thể xem setting_display_media_default: Click để xem setting_display_media_hide_all: Luôn ẩn @@ -73,7 +73,7 @@ vi: filters: action: Chọn hành động sẽ thực hiện khi một tút khớp với bộ lọc actions: - hide: Ẩn hoàn toàn nội dung đã lọc, hoạt động như thể nó không tồn tại + hide: Ẩn hoàn toàn nội dung đã lọc, như thể nó không tồn tại warn: Ẩn nội dung đã lọc đằng sau một cảnh báo đề cập đến tiêu đề của bộ lọc form_admin_settings: activity_api_enabled: Số lượng tút được đăng trong máy chủ, người dùng đang hoạt động và đăng ký mới hàng tuần @@ -97,9 +97,9 @@ vi: theme: Chủ đề mà khách truy cập đăng xuất và người mới nhìn thấy. thumbnail: 'Một hình ảnh tỉ lệ 2: 1 được hiển thị cùng với thông tin máy chủ của bạn.' timeline_preview: Khách truy cập đã đăng xuất sẽ có thể xem các tút công khai gần đây nhất trên máy chủ. - trendable_by_default: Bỏ qua việc duyệt thủ công nội dung thịnh hành. Các mục riêng lẻ vẫn có thể bị xóa khỏi xu hướng sau này. + trendable_by_default: Bỏ qua việc duyệt thủ công nội dung xu hướng. Các mục riêng lẻ vẫn có thể bị xóa khỏi xu hướng sau này. trends: Hiển thị những tút, hashtag và tin tức đang được thảo luận nhiều trên máy chủ của bạn. - trends_as_landing_page: Hiển thị nội dung thịnh hành cho người dùng đã đăng xuất và khách truy cập thay vì mô tả về máy chủ này. Yêu cầu xu hướng được kích hoạt. + trends_as_landing_page: Hiển thị nội dung xu hướng cho người dùng chưa đăng nhập thay vì mô tả về máy chủ này. Yêu cầu xu hướng được kích hoạt. form_challenge: current_password: Biểu mẫu này an toàn imports: @@ -140,7 +140,7 @@ vi: url: Nơi những sự kiện được gửi đến labels: account: - discoverable: Cho phép hiện hồ sơ và tút trong thuật toán khám phá + discoverable: Cho phép khám phá hồ sơ fields: name: Nhãn value: Nội dung @@ -218,7 +218,7 @@ vi: setting_reduce_motion: Giảm chuyển động ảnh GIF setting_system_font_ui: Dùng phông chữ mặc định hệ thống setting_theme: Giao diện - setting_trends: Hiển thị thịnh hành hôm nay + setting_trends: Hiển thị xu hướng trong ngày setting_unfollow_modal: Hỏi trước khi bỏ theo dõi ai đó setting_use_blurhash: Phủ màu media nhạy cảm setting_use_pending_items: Không tự động cập nhật bảng tin @@ -262,9 +262,9 @@ vi: theme: Chủ đề mặc định thumbnail: Hình thu nhỏ của máy chủ timeline_preview: Cho phép truy cập vào dòng thời gian công khai - trendable_by_default: Cho phép thịnh hành mà không cần duyệt trước - trends: Bật thịnh hành - trends_as_landing_page: Dùng trang thịnh hành làm trang chào mừng + trendable_by_default: Cho phép lên xu hướng mà không cần duyệt trước + trends: Bật xu hướng + trends_as_landing_page: Dùng trang xu hướng làm trang chào mừng interactions: must_be_follower: Những người không theo dõi bạn must_be_following: Những người bạn không theo dõi @@ -306,7 +306,7 @@ vi: tag: listable: Cho phép xuất hiện trong tìm kiếm và đề xuất name: Hashtag - trendable: Cho phép hashtag này thịnh hành + trendable: Cho phép hashtag này lên xu hướng usable: Cho phép dùng trong tút user: role: Vai trò diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 0941159314..093b0bca9e 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -122,7 +122,7 @@ vi: removed_header_msg: Đã xóa bỏ ảnh bìa của %{username} resend_confirmation: already_confirmed: Người này đã được xác minh - send: Gửi lại email xác nhận + send: Gửi lại email xác minh success: Xác nhận đã được gửi đi thành công! reset: Đặt lại reset_password: Đặt lại mật khẩu @@ -208,7 +208,7 @@ vi: reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo - resend_user: Gửi lại email xác nhận + resend_user: Gửi lại email xác minh reset_password_user: Đặt lại mật khẩu resolve_report: Xử lý báo cáo sensitive_account: Áp đặt nhạy cảm @@ -267,7 +267,7 @@ vi: reject_user_html: "%{name} đã từ chối đăng ký từ %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" reopen_report_html: "%{name} mở lại báo cáo %{target}" - resend_user_html: "%{name} gửi lại email xác nhận cho %{target}" + resend_user_html: "%{name} gửi lại email xác minh cho %{target}" reset_password_user_html: "%{name} đã đặt lại mật khẩu của %{target}" resolve_report_html: "%{name} đã xử lý báo cáo %{target}" sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm" @@ -694,7 +694,7 @@ vi: manage_settings: Quản lý thiết lập manage_settings_description: Cho phép thay đổi thiết lập máy chủ manage_taxonomies: Quản lý phân loại - manage_taxonomies_description: Cho phép đánh giá nội dung thịnh hành và cập nhật cài đặt hashtag + manage_taxonomies_description: Cho phép đánh giá nội dung xu hướng và cập nhật cài đặt hashtag manage_user_access: Quản lý người truy cập manage_user_access_description: Cho phép vô hiệu hóa xác thực hai bước của người khác, thay đổi địa chỉ email và đặt lại mật khẩu của họ manage_users: Quản lý người @@ -744,7 +744,7 @@ vi: publish_discovered_servers: Công khai các máy chủ được phát hiện publish_statistics: Công khai số liệu thống kê title: Khám phá - trends: Thịnh hành + trends: Xu hướng domain_blocks: all: Tới mọi người disabled: Không ai @@ -800,7 +800,7 @@ vi: reblogs: Lượt đăng lại status_changed: Tút đã thay đổi title: Toàn bộ tút - trending: Thịnh hành + trending: Xu hướng visibility: Hiển thị with_media: Có media strikes: @@ -880,7 +880,7 @@ vi: pending_review: Đang chờ preview_card_providers: allowed: Tin tức từ nguồn này có thể lên xu hướng - description_html: Đây là những nguồn mà từ đó các liên kết thường được chia sẻ trên máy chủ của bạn. Các liên kết sẽ không thể thịnh hành trừ khi bạn cho phép nguồn. Sự cho phép (hoặc cấm) của bạn áp dụng luôn cho các tên miền phụ. + description_html: Đây là những nguồn mà từ đó các liên kết thường được chia sẻ trên máy chủ của bạn. Các liên kết sẽ không thể lên xu hướng trừ khi bạn cho phép nguồn. Sự cho phép (hoặc cấm) của bạn áp dụng luôn cho các tên miền phụ. rejected: Tin tức từ nguồn này không thể lên xu hướng title: Nguồn đăng rejected: Đã cấm @@ -890,11 +890,11 @@ vi: description_html: Đây là những tút đang được chia sẻ và yêu thích rất nhiều trên máy chủ của bạn. Nó có thể giúp người mới và người cũ tìm thấy nhiều người hơn để theo dõi. Không có tút nào được hiển thị công khai cho đến khi bạn cho phép người đăng và người cho phép đề xuất tài khoản của họ cho người khác. Bạn cũng có thể cho phép hoặc từ chối từng tút riêng. disallow: Cấm tút disallow_account: Cấm người đăng - no_status_selected: Không có tút thịnh hành nào thay đổi vì không có tút nào được chọn + no_status_selected: Không có tút xu hướng nào thay đổi vì không có tút nào được chọn not_discoverable: Tác giả đã chọn không tham gia mục khám phá shared_by: other: Được thích và đăng lại %{friendly_count} lần - title: Tút nổi bật + title: Tút xu hướng tags: current_score: Chỉ số gần đây %{score} dashboard: @@ -905,20 +905,20 @@ vi: tag_uses_measure: tổng lượt dùng description_html: Đây là những hashtag đang xuất hiện trong rất nhiều tút trên máy chủ của bạn. Nó có thể giúp mọi người tìm ra những gì đang được quan tâm nhiều nhất vào lúc này. Không có hashtag nào được hiển thị công khai cho đến khi bạn cho phép chúng. listable: Có thể đề xuất - no_tag_selected: Không có hashtag thịnh hành nào thay đổi vì không có hashtag nào được chọn + no_tag_selected: Không có hashtag xu hướng nào thay đổi vì không có hashtag nào được chọn not_listable: Không thể đề xuất - not_trendable: Không cho thịnh hành + not_trendable: Không cho lên xu hướng not_usable: Không được phép dùng peaked_on_and_decaying: Đỉnh điểm %{date}, giờ đang giảm title: Hashtag nổi bật - trendable: Cho phép thịnh hành + trendable: Cho phép lên xu hướng trending_rank: 'Nổi bật #%{rank}' usable: Có thể dùng usage_comparison: Dùng %{today} lần hôm nay, so với %{yesterday} hôm qua used_by_over_week: other: "%{count} người dùng tuần rồi" title: Xu hướng - trending: Thịnh hành + trending: Xu hướng warning_presets: add_new: Thêm mới delete: Xóa bỏ @@ -1029,7 +1029,7 @@ vi: prefix_invited_by_user: "@%{name} mời bạn tham gia máy chủ Mastodon này!" prefix_sign_up: Tham gia Mastodon ngay hôm nay! suffix: Với tài khoản, bạn sẽ có thể theo dõi mọi người, đăng tút và nhắn tin với người từ bất kỳ máy chủ Mastodon khác! - didnt_get_confirmation: Không nhận được email yêu cầu xác thực? + didnt_get_confirmation: Không nhận được email xác minh? dont_have_your_security_key: Bạn có khóa bảo mật chưa? forgot_password: Quên mật khẩu invalid_reset_password_token: Mã đặt lại mật khẩu không hợp lệ hoặc hết hạn. Vui lòng yêu cầu một cái mới. @@ -1052,7 +1052,7 @@ vi: saml: SAML register: Đăng ký registration_closed: "%{instance} tạm dừng đăng ký mới" - resend_confirmation: Gửi lại email xác nhận + resend_confirmation: Gửi lại email xác minh reset_password: Đặt lại mật khẩu rules: accept: Chấp nhận @@ -1068,14 +1068,14 @@ vi: email_below_hint_html: Kiểm tra hộp thư rác hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai. email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn. link_not_received: Không nhận được mã? - new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút! + new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác minh sau vài phút! title: Kiểm tra email của bạn sign_in: preamble_html: Đăng nhập bằng tài khoản %{domain}. Nếu đăng ký trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây. title: Đăng nhập %{domain} sign_up: manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}." - preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu. + preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào thuộc các máy chủ khác. title: Đang đăng ký trên %{domain}. status: account_status: Trạng thái tài khoản @@ -1125,7 +1125,7 @@ vi: data_removal: Bài viết của bạn và dữ liệu khác sẽ bị xóa vĩnh viễn email_change_html: Bạn có thể thay đổi địa chỉ email mà không cần phải xóa tài khoản email_contact_html: Nếu vẫn không nhận được, bạn có thể liên hệ %{email} để được giúp đỡ - email_reconfirmation_html: Nếu bạn không nhận được email xác nhận, hãy thử yêu cầu lại + email_reconfirmation_html: Nếu bạn không nhận được email xác minh, hãy thử yêu cầu lại irreversible: Bạn sẽ không thể khôi phục hoặc kích hoạt lại tài khoản của mình more_details_html: Đọc chính sách bảo mật để biết thêm chi tiết. username_available: Tên người dùng của bạn sẽ có thể đăng ký lại @@ -1209,7 +1209,7 @@ vi: account: Trang hồ sơ home: Trang chính và danh sách notifications: Thông báo - public: Tin công khai + public: Tút công khai thread: Thảo luận edit: add_keyword: Thêm từ khoá @@ -1292,7 +1292,7 @@ vi: following_html: Bạn sắp theo dõi tới %{total_items} người từ %{filename}. lists_html: Bạn sắp thêm %{total_items} tài khoản từ %{filename} vào danh sách của bạn. Những danh sách mới sẽ được tạo nếu bạn chưa có danh sách nào. muting_html: Bạn sắp ẩn lên tới %{total_items} người từ %{filename}. - preface: Bạn có thể nhập dữ liệu mà bạn đã xuất từ một máy chủ khác, chẳng hạn như danh sách những người bạn đang theo dõi hoặc chặn. + preface: Bạn có thể nhập dữ liệu mà bạn đã xuất từ một máy chủ khác, chẳng hạn danh sách những người đang theo dõi hoặc chặn. recent_imports: Đã nhập gần đây states: finished: Đã hoàn thành @@ -1466,7 +1466,7 @@ vi: trillion: T otp_authentication: code_hint: Nhập mã được tạo bởi ứng dụng xác minh của bạn để xác nhận - description_html: Nếu kích hoạt xác minh 2 bước thông qua ứng dụng, bạn sẽ đăng nhập bằng mã token được tạo bởi chính điện thoại của bạn. + description_html: Bạn sẽ đăng nhập bằng mã token được tạo ra bởi điện thoại của bạn. enable: Kích hoạt instructions_html: "Quét mã QR bằng Google Authenticator hoặc một ứng dụng TOTP tương tự trên điện thoại của bạn. Kể từ bây giờ, ứng dụng đó sẽ tạo những token để bạn đăng nhập." manual_instructions: 'Nếu bạn không thể quét mã QR, đây sẽ là dòng chữ gợi ý:' From 200312e8bed0d91c576cabcdf2ffe0173778cccd Mon Sep 17 00:00:00 2001 From: Rob Thomas Date: Tue, 19 Sep 2023 01:41:32 +1000 Subject: [PATCH 02/10] Fix crash when viewing a moderation appeal and the moderator account has been deleted (#25900) Co-authored-by: Claire --- app/views/admin/account_warnings/_account_warning.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/account_warnings/_account_warning.html.haml b/app/views/admin/account_warnings/_account_warning.html.haml index 0306351857..85bac789f7 100644 --- a/app/views/admin/account_warnings/_account_warning.html.haml +++ b/app/views/admin/account_warnings/_account_warning.html.haml @@ -5,7 +5,7 @@ = fa_icon 'warning' .log-entry__content .log-entry__title - = t(account_warning.action, scope: 'admin.strikes.actions', name: content_tag(:span, account_warning.account.username, class: 'username'), target: content_tag(:span, account_warning.target_account.pretty_acct, class: 'target')).html_safe + = t(account_warning.action, scope: 'admin.strikes.actions', name: content_tag(:span, account_warning.account ? account_warning.account.username : I18n.t('admin.action_logs.deleted_account'), class: 'username'), target: content_tag(:span, account_warning.target_account.pretty_acct, class: 'target')).html_safe .log-entry__timestamp %time.formatted{ datetime: account_warning.created_at.iso8601 } = l(account_warning.created_at) From 67eaaa4b907add5d2e7047a51d1bac10354c77c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 10:41:48 +0200 Subject: [PATCH 03/10] New Crowdin Translations (automated) (#26966) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 4 ++++ config/locales/be.yml | 23 +++++++++++++++++++++++ config/locales/fr-QC.yml | 2 +- config/locales/fr.yml | 2 +- config/locales/ko.yml | 2 +- config/locales/simple_form.be.yml | 6 ++++++ 6 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index d60fabd204..8d293670c0 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -310,6 +310,9 @@ "home.explore_prompt.body": "Ваша галоўная стужка змяшчае сумесь допісаў з хэштэгамі, за якімі вы вырашылі сачыць, допісаў ад людзей, за якімі вы вырашылі сачыць, і допісаў, якія яны пашыраюць. Зараз усё выглядае даволі ціха, так што як наконт:", "home.explore_prompt.title": "Гэта ваша апорная кропка ў Mastodon.", "home.hide_announcements": "Схаваць аб'явы", + "home.pending_critical_update.body": "Калі ласка, абнавіце свой сервер Mastodon як мага хутчэй!", + "home.pending_critical_update.link": "Прагледзець абнаўленні", + "home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!", "home.show_announcements": "Паказаць аб'явы", "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.", "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.", @@ -586,6 +589,7 @@ "search.quick_action.open_url": "Адкрыць спасылку ў Mastodon", "search.quick_action.status_search": "Супадзенне паведамленняў {x}", "search.search_or_paste": "Пошук", + "search_popout.full_text_search_disabled_message": "Недаступна на {domain}.", "search_popout.language_code": "ISO код мовы", "search_popout.options": "Параметры пошуку", "search_popout.quick_actions": "Хуткія дзеянні", diff --git a/config/locales/be.yml b/config/locales/be.yml index 4d7d233d87..0f9654691e 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -315,6 +315,7 @@ be: unpublish: Зняць з публікацыі unpublished_msg: Аб'ява паспяхова схована! updated_msg: Аб'ява паспяхова адноўлена! + critical_update_pending: Чакаецца крытычнае абнаўленне custom_emojis: assign_category: Прызначыць катэгорыю by_domain: Дамен @@ -798,11 +799,22 @@ be: approved: Для рэгістрацыі патрабуецца пацвярджэнне none: Нікому не магчыма зарэгістравацца open: Любому магчыма зарэгістравацца + security: + authorized_fetch: Патрабаваць аўтэнтыфікацыю ад федэратыўных сервераў + authorized_fetch_overridden_hint: Вы не можаце змяніць гэты параметр, паколькі ён перавызначаны зменнай асяроддзя. title: Налады сервера site_uploads: delete: Выдаліць запампаваны файл destroyed_msg: Загрузка сайту паспяхова выдалена! software_updates: + critical_update: Крытычна - зрабіце абнаўленне як мага хутчэй + documentation_link: Даведацца больш + release_notes: Журнал змен + title: Даступныя абнаўленні + type: Тып + types: + major: Буйны рэліз + minor: Малы рэліз version: Версія statuses: account: Аўтар @@ -868,6 +880,11 @@ be: message_html: Вы не вызначылі ніякіх правілаў сервера. sidekiq_process_check: message_html: Не працуе працэс Sidekiq для %{value} чаргі. Калі ласка праверце вашу канфігурацыю Sidekiq + software_version_critical_check: + action: Прагледзець даступныя абнаўленні + message_html: Даступна крытычнае абнаўленне Mastodon, калі ласка, зрабіце абнаўленне як мага хутчэй. + software_version_patch_check: + action: Прагледзець даступныя абнаўленні upload_check_privacy_error: action: Для падрабязнасцей націсніце тут message_html: "Ваш сервер не наладжаны. Прыватнасць карыстальнікаў пад пагрозай." @@ -989,6 +1006,8 @@ be: body: "%{target} абскарджвае рашэнне мадэратара %{action_taken_by} ад %{date}, якая была %{type}. Яны напісалі:" next_steps: Вы можаце ўхваліць апеляцыю каб адмяніць рашэнне мадэратараў ці ігнараваць яе. subject: "%{username} абскарджвае рашэнне мадэратараў на %{instance}" + new_critical_software_updates: + subject: Даступны крытычныя абнаўленні Mastodon для %{instance}! new_pending_account: body: Падрабязнасці новага ўліковага запісу прыведзены ніжэй. Вы можаце зацвердзіць або адхіліць гэтую заяўку. subject: Новы ўліковы запіс для разгляду ў %{instance} (%{username}) @@ -996,6 +1015,9 @@ be: body: "%{reporter} паскардзіўся на %{target}" body_remote: Нехта з %{domain} паскардзіўся на %{target} subject: Новая скарга на %{instance} (#%{id}) + new_software_updates: + body: Выйшлі новыя версіі Mastodon, магчыма, вам варта абнавіцца! + subject: Новыя версіі Mastodon даступныя для %{instance}! new_trends: body: 'Гэтыя элементы трэба праверыць, перш чым публікаваць:' new_trending_links: @@ -1774,6 +1796,7 @@ be: default: "%d.%m.%Y %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" translation: errors: quota_exceeded: Сервер перавысіў квоту на выкарыстанне службы перакладу. diff --git a/config/locales/fr-QC.yml b/config/locales/fr-QC.yml index 3e35c1a745..b9605f3a6a 100644 --- a/config/locales/fr-QC.yml +++ b/config/locales/fr-QC.yml @@ -1528,7 +1528,7 @@ fr-QC: reach_hint_html: Contrôlez si vous souhaitez être découvert et suivi par de nouvelles personnes. Voulez-vous que vos publications apparaissent sur l’écran Explorer ? Voulez-vous que d’autres personnes vous voient dans leurs recommandations de suivi ? Souhaitez-vous approuver automatiquement tous les nouveaux abonnés ou avoir un contrôle granulaire sur chacun d’entre eux ? search: Recherche search_hint_html: Contrôlez la façon dont vous voulez être retrouvé. Voulez-vous que les gens vous trouvent selon ce que vous avez publié publiquement ? Voulez-vous que des personnes extérieures à Mastodon trouvent votre profil en faisant des recherches sur le web ? N’oubliez pas que l’exclusion totale de tous les moteurs de recherche ne peut être garantie pour les informations publiques. - title: Confidentialité et portée + title: Vie privée et visibilité privacy_policy: title: Politique de confidentialité reactions: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 4807cb2f2b..821ef39dbe 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1528,7 +1528,7 @@ fr: reach_hint_html: Contrôlez si vous souhaitez être découvert et suivi par de nouvelles personnes. Voulez-vous que vos publications apparaissent sur l’écran Explorer ? Voulez-vous que d’autres personnes vous voient dans leurs recommandations de suivi ? Souhaitez-vous approuver automatiquement tous les nouveaux abonnés ou avoir un contrôle granulaire sur chacun d’entre eux ? search: Recherche search_hint_html: Contrôlez la façon dont vous voulez être retrouvé. Voulez-vous que les gens vous trouvent selon ce que vous avez publié publiquement ? Voulez-vous que des personnes extérieures à Mastodon trouvent votre profil en faisant des recherches sur le web ? N’oubliez pas que l’exclusion totale de tous les moteurs de recherche ne peut être garantie pour les informations publiques. - title: Confidentialité et portée + title: Vie privée et visibilité privacy_policy: title: Politique de confidentialité reactions: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c732767314..70b5645012 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1501,7 +1501,7 @@ ko: privacy: 개인정보 privacy_hint_html: 다른 이들을 위해 노출할 수 있는 정보의 양을 조절합니다. 누군가는 다른 이들의 팔로우를 둘러보고 어떤 앱에서 게시물을 올렸는지 살피면서 흥미로운 프로필과 멋진 앱을 발견할 수 있지만, 누군가는 이를 숨기고 싶을 수도 있겠죠. reach: 도달 - reach_hint_html: 새로운 사람들이 나를 발견하고 팔로우하도록 허용할지 여부를 제어합니다. 탐색 화면에 게시물이 표시되기를 바라나요? 다른 사람들의 팔로우 추천에 표시되기를 바라나요? 모든 새 팔로워를 자동으로 수락하거나 각 팔로워를 세세하게 제어할까요? + reach_hint_html: 새로운 사람들이 나를 발견하고 팔로우하도록 허용할지 여부를 제어합니다. 발견하기 화면에 게시물이 표시되기를 바라나요? 다른 사람들의 팔로우 추천에 표시되기를 바라나요? 모든 새 팔로워를 자동으로 수락하거나 각 팔로워를 세세하게 제어할까요? search: 검색 search_hint_html: 내가 어떻게 발견될지를 제어합니다. 내가 공개적으로 게시한 것들로 인해 사람들이 날 발견하길 원하나요? 마스토돈 바깥의 사람들이 웹에서 검색을 통해 내 프로필을 발견하길 원하나요? 공개적인 정보에 대해서 모든 검색엔진의 검색결과에서 제외하는 것은 보장할 수 없다는 점에 주의해주세요. title: 개인정보와 도달 diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index 7c116d15c4..85f22ad239 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -291,6 +291,11 @@ be: pending_account: Новы акаўнт патрабуе разгляду reblog: Нехта пашырыў ваш допіс report: Новая скарга даслана + software_updates: + all: Апавяшчаць аб усіх абнаўленнях + critical: Апавяшчаць толькі аб крытычных абнаўленнях + label: Даступная новая версія Mastodon + none: Не апавяшчаць аб абнаўленнях (не рэкамендуецца) trending_tag: Новы трэнд патрабуе разгляду rule: text: Правіла @@ -317,6 +322,7 @@ be: url: URL-адрас канцавога пункту 'no': Не not_recommended: Не рэкамендавана + overridden: Перавызначана recommended: Рэкамендуем required: mark: "*" From 6f9f9011537266a48aa4220f052120a2edbf82d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 11:03:42 +0200 Subject: [PATCH 04/10] Update dependency postcss to v8.4.30 (#26964) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6e72dd4667..aa6478895c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9676,9 +9676,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25: - version "8.4.29" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== + version "8.4.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" + integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" From c6a535a1974a1707d6621a5603b4cb028c4a3510 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 11:16:45 +0200 Subject: [PATCH 05/10] Update dependency node to 20.7 (#26963) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 541b047dd0..b1b396bcfa 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.6 +20.7 From 6eb6209d02514c5271238a23601be643c7b9f52d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:24:26 +0200 Subject: [PATCH 06/10] Update DefinitelyTyped types (non-major) (#26953) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 165 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 105 insertions(+), 60 deletions(-) diff --git a/yarn.lock b/yarn.lock index aa6478895c..ec4f39d5b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1555,13 +1555,20 @@ "@types/node" "*" jest-mock "^29.6.2" -"@jest/expect-utils@^29.6.2", "@jest/expect-utils@^29.6.4": +"@jest/expect-utils@^29.6.2": version "29.6.4" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.4.tgz#17c7dfe6cec106441f218b0aff4b295f98346679" integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg== dependencies: jest-get-type "^29.6.3" +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + "@jest/expect@^29.6.2": version "29.6.2" resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28" @@ -2054,7 +2061,7 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -"@types/babel__core@*", "@types/babel__core@^7.1.7": +"@types/babel__core@*", "@types/babel__core@^7.1.12", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7", "@types/babel__core@^7.20.1": version "7.20.2" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== @@ -2065,17 +2072,6 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" -"@types/babel__core@^7.1.12", "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - "@types/babel__generator@*": version "7.6.5" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" @@ -2237,17 +2233,17 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.2": - version "29.5.4" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.4.tgz#9d0a16edaa009a71e6a71a999acd582514dab566" - integrity sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A== + version "29.5.5" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.5.tgz#727204e06228fe24373df9bae76b90f3e8236a2a" + integrity sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg== dependencies: expect "^29.0.0" pretty-format "^29.0.0" "@types/js-yaml@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" - integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.6.tgz#4b3afd5158b8749095b1f096967b6d0f838d862f" + integrity sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw== "@types/jsdom@^20.0.0": version "20.0.1" @@ -2299,9 +2295,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "20.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" - integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== + version "20.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" + integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== "@types/node@14 || 16 || 17": version "17.0.45" @@ -2343,9 +2339,9 @@ integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g== "@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + version "15.7.6" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.6.tgz#bbf819813d6be21011b8f5801058498bec555572" + integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg== "@types/punycode@^2.1.0": version "2.1.0" @@ -2353,28 +2349,21 @@ integrity sha512-PG5aLpW6PJOeV2fHRslP4IOMWn+G+Uq8CfnyJ+PDS8ndCbU+soO+fB3NKCKo0p/Jh2Y4aPaiQZsrOXFdzpcA6g== "@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + version "1.5.6" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.6.tgz#a6edffe8283910e46dc7a573621f928e6b47fa56" + integrity sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ== "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@^18.0.0": - version "18.2.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.5.tgz#5c5f13548bda23cd98f50ca4a59107238bfe18f3" - integrity sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ== - dependencies: - "@types/react" "*" - -"@types/react-dom@^18.2.4": +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4": version "18.2.7" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== @@ -2449,9 +2438,9 @@ "@types/react" "*" "@types/react-test-renderer@^18.0.0": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.1.tgz#d3f308912fcc4491e4fbc134b906bb65bdee73f6" - integrity sha512-LjEF+jTUCjzd+Qq4eWqsmZvEWPA/l4L0my+YWN5US8Fo3wZOMiyrpBshHDFbkO8usjdO1B430mEWNU/i1MF7Qg== + version "18.0.2" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.2.tgz#44243977eec18ab8cda88d8977437f47a0d3fdbe" + integrity sha512-tJzMn+9GHDrdrLe0O4rwJELDfTrmdJbCn/UdYyzjlnPiXYXDl5FBNzdw4PVk2R3hJvSHKFjZcRgvZc12lV0p5Q== dependencies: "@types/react" "*" @@ -2477,9 +2466,9 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7": - version "18.2.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" - integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== + version "18.2.22" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.22.tgz#abe778a1c95a07fa70df40a52d7300a40b949ccb" + integrity sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2569,9 +2558,9 @@ integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== "@types/uuid@^9.0.0": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.3.tgz#6cdd939b4316b4f81625de9f06028d848c4a1533" - integrity sha512-taHQQH/3ZyI3zP8M/puluDEIEvtQHVYcC6y3N8ijFtAd28+Ey/G4sg1u2gB01S8MwybLOKAp9/yCMu/uR5l3Ug== + version "9.0.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.4.tgz#e884a59338da907bda8d2ed03e01c5c49d036f1c" + integrity sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA== "@types/warning@^3.0.0": version "3.0.0" @@ -5728,15 +5717,15 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: homedir-polyfill "^1.0.1" expect@^29.0.0: - version "29.6.4" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.4.tgz#a6e6f66d4613717859b2fe3da98a739437b6f4b8" - integrity sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA== + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/expect-utils" "^29.6.4" + "@jest/expect-utils" "^29.7.0" jest-get-type "^29.6.3" - jest-matcher-utils "^29.6.4" - jest-message-util "^29.6.3" - jest-util "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" expect@^29.6.2: version "29.6.2" @@ -7450,7 +7439,7 @@ jest-config@^29.6.2: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.6.2, jest-diff@^29.6.4: +jest-diff@^29.6.2: version "29.6.4" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.4.tgz#85aaa6c92a79ae8cd9a54ebae8d5b6d9a513314a" integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw== @@ -7460,6 +7449,16 @@ jest-diff@^29.6.2, jest-diff@^29.6.4: jest-get-type "^29.6.3" pretty-format "^29.6.3" +jest-diff@^29.6.4, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + jest-docblock@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" @@ -7536,7 +7535,7 @@ jest-leak-detector@^29.6.2: jest-get-type "^29.4.3" pretty-format "^29.6.2" -jest-matcher-utils@^29.6.2, jest-matcher-utils@^29.6.4: +jest-matcher-utils@^29.6.2: version "29.6.4" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz#327db7ababea49455df3b23e5d6109fe0c709d24" integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ== @@ -7546,7 +7545,17 @@ jest-matcher-utils@^29.6.2, jest-matcher-utils@^29.6.4: jest-get-type "^29.6.3" pretty-format "^29.6.3" -jest-message-util@^29.6.2, jest-message-util@^29.6.3: +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.6.2: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf" integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA== @@ -7561,6 +7570,21 @@ jest-message-util@^29.6.2, jest-message-util@^29.6.3: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" @@ -7684,7 +7708,7 @@ jest-snapshot@^29.6.2: pretty-format "^29.6.2" semver "^7.5.3" -jest-util@^29.6.2, jest-util@^29.6.3: +jest-util@^29.6.2: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63" integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA== @@ -7696,6 +7720,18 @@ jest-util@^29.6.2, jest-util@^29.6.3: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" @@ -9764,7 +9800,16 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.6.2, pretty-format@^29.6.3: +pretty-format@^29.0.0, pretty-format@^29.6.3, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.6.2: version "29.6.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7" integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw== From fbfceb9c77b7163806ae82d588c7b2c1077b15c6 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 19 Sep 2023 12:25:30 +0200 Subject: [PATCH 07/10] Add additional metrics for streaming (#26945) --- streaming/index.js | 76 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index c9fac063df..8015c6815a 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -152,6 +152,28 @@ const redisConfigFromEnv = (env) => { }; }; +const PUBLIC_CHANNELS = [ + 'public', + 'public:media', + 'public:local', + 'public:local:media', + 'public:remote', + 'public:remote:media', + 'hashtag', + 'hashtag:local', +]; + +// Used for priming the counters/gauges for the various metrics that are +// per-channel +const CHANNEL_NAMES = [ + 'system', + 'user', + 'user:notification', + 'list', + 'direct', + ...PUBLIC_CHANNELS +]; + const startServer = async () => { const app = express(); @@ -203,9 +225,6 @@ const startServer = async () => { labelNames: ['type'], }); - connectedClients.set({ type: 'websocket' }, 0); - connectedClients.set({ type: 'eventsource' }, 0); - const connectedChannels = new metrics.Gauge({ name: 'connected_channels', help: 'The number of channels the streaming server is streaming to', @@ -217,6 +236,35 @@ const startServer = async () => { help: 'The number of Redis channels the streaming server is subscribed to', }); + const redisMessagesReceived = new metrics.Counter({ + name: 'redis_messages_received_total', + help: 'The total number of messages the streaming server has received from redis subscriptions' + }); + + const messagesSent = new metrics.Counter({ + name: 'messages_sent_total', + help: 'The total number of messages the streaming server sent to clients per connection type', + labelNames: [ 'type' ] + }); + + // Prime the gauges so we don't loose metrics between restarts: + redisSubscriptions.set(0); + connectedClients.set({ type: 'websocket' }, 0); + connectedClients.set({ type: 'eventsource' }, 0); + + // For each channel, initialize the gauges at zero; There's only a finite set of channels available + CHANNEL_NAMES.forEach(( channel ) => { + connectedChannels.set({ type: 'websocket', channel }, 0); + connectedChannels.set({ type: 'eventsource', channel }, 0); + }) + + // Prime the counters so that we don't loose metrics between restarts. + // Unfortunately counters don't support the set() API, so instead I'm using + // inc(0) to achieve the same result. + redisMessagesReceived.inc(0); + messagesSent.inc({ type: 'websocket' }, 0); + messagesSent.inc({ type: 'eventsource' }, 0); + // When checking metrics in the browser, the favicon is requested this // prevents the request from falling through to the API Router, which would // error for this endpoint: @@ -262,6 +310,8 @@ const startServer = async () => { * @param {string} message */ const onRedisMessage = (channel, message) => { + redisMessagesReceived.inc(); + const callbacks = subs[channel]; log.silly(`New message on channel ${redisPrefix}${channel}`); @@ -490,17 +540,6 @@ const startServer = async () => { } }; - const PUBLIC_CHANNELS = [ - 'public', - 'public:media', - 'public:local', - 'public:local:media', - 'public:remote', - 'public:remote:media', - 'hashtag', - 'hashtag:local', - ]; - /** * @param {any} req * @param {string|undefined} channelName @@ -705,10 +744,11 @@ const startServer = async () => { * @param {any} req * @param {function(string, string): void} output * @param {undefined | function(string[], SubscriptionListener): void} attachCloseHandler + * @param {'websocket' | 'eventsource'} destinationType * @param {boolean=} needsFiltering * @returns {SubscriptionListener} */ - const streamFrom = (ids, req, output, attachCloseHandler, needsFiltering = false) => { + const streamFrom = (ids, req, output, attachCloseHandler, destinationType, needsFiltering = false) => { const accountId = req.accountId || req.remoteAddress; log.verbose(req.requestId, `Starting stream from ${ids.join(', ')} for ${accountId}`); @@ -717,6 +757,8 @@ const startServer = async () => { // TODO: Replace "string"-based delete payloads with object payloads: const encodedPayload = typeof payload === 'object' ? JSON.stringify(payload) : payload; + messagesSent.labels({ type: destinationType }).inc(1); + log.silly(req.requestId, `Transmitting for ${accountId}: ${event} ${encodedPayload}`); output(event, encodedPayload); }; @@ -1031,7 +1073,7 @@ const startServer = async () => { const onSend = streamToHttp(req, res); const onEnd = streamHttpEnd(req, subscriptionHeartbeat(channelIds)); - streamFrom(channelIds, req, onSend, onEnd, options.needsFiltering); + streamFrom(channelIds, req, onSend, onEnd, 'eventsource', options.needsFiltering); }).catch(err => { log.verbose(req.requestId, 'Subscription error:', err.toString()); httpNotFound(res); @@ -1241,7 +1283,7 @@ const startServer = async () => { const onSend = streamToWs(request, socket, streamNameFromChannelName(channelName, params)); const stopHeartbeat = subscriptionHeartbeat(channelIds); - const listener = streamFrom(channelIds, request, onSend, undefined, options.needsFiltering); + const listener = streamFrom(channelIds, request, onSend, undefined, 'websocket', options.needsFiltering); connectedChannels.labels({ type: 'websocket', channel: channelName }).inc(); From 70cae19b6b8626a62072ad87309749d6813d9aca Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 19 Sep 2023 12:25:39 +0200 Subject: [PATCH 08/10] Fix hashtag bar being sometimes incorrectly hidden (#26960) --- app/javascript/mastodon/components/status.jsx | 2 +- .../mastodon/features/status/components/detailed_status.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index e1728910ee..4a5ad54a1c 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -546,7 +546,7 @@ class Status extends ImmutablePureComponent { const visibilityIcon = visibilityIconInfo[status.get('visibility')]; const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); - const expanded = !status.get('hidden') + const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0; return ( diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index e41a042c7c..3927aba2f5 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -293,7 +293,7 @@ class DetailedStatus extends ImmutablePureComponent { } const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); - const expanded = !status.get('hidden') + const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0; return (
From 0f3f9b611f509fc5405bb1bcbeb71dfcdff7095b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 19 Sep 2023 12:25:58 +0200 Subject: [PATCH 09/10] Change video bitrate to always fit within size limit (#26970) --- lib/paperclip/transcoder.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index b88cf662c2..ed5425a3b8 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -41,11 +41,14 @@ module Paperclip @output_options['vframes'] = 1 when 'mp4' unless eligible_to_passthrough?(metadata) - bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL) / 1_000 + size_limit_in_bits = MediaAttachment::VIDEO_LIMIT * 8 + desired_bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL).floor + maximum_bitrate = (size_limit_in_bits / metadata.duration).floor - 192_000 # Leave some space for the audio stream + bitrate = [desired_bitrate, maximum_bitrate].min - @output_options['b:v'] = "#{bitrate}k" - @output_options['maxrate'] = "#{bitrate + 192}k" - @output_options['bufsize'] = "#{bitrate * 5}k" + @output_options['b:v'] = bitrate + @output_options['maxrate'] = bitrate + 192_000 + @output_options['bufsize'] = bitrate * 5 if high_vfr?(metadata) @output_options['vsync'] = 'vfr' From a83615edc9fc1ce3363ddcf1fc676806421a5f65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:51:13 +0200 Subject: [PATCH 10/10] Update eslint (non-major) (#26954) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 122 +++++++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 56 deletions(-) diff --git a/yarn.lock b/yarn.lock index ec4f39d5b9..e745b6af6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1298,7 +1298,12 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.5.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== + +"@eslint-community/regexpp@^4.6.1": version "4.8.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== @@ -2254,11 +2259,16 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@^7.0.12": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + "@types/json-stable-stringify@^1.0.32": version "1.0.34" resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz#c0fb25e4d957e0ee2e497c1f553d7f8bb668fd75" @@ -2500,9 +2510,9 @@ integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" + integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== "@types/send@*": version "0.17.1" @@ -2601,15 +2611,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.0.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz#19ba09aa34fd504696445100262e5a9e1b1d7024" - integrity sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA== + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz#f18cc75c9cceac8080a9dc2e7d166008c5207b9f" + integrity sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.6.0" - "@typescript-eslint/type-utils" "6.6.0" - "@typescript-eslint/utils" "6.6.0" - "@typescript-eslint/visitor-keys" "6.6.0" + "@typescript-eslint/scope-manager" "6.7.2" + "@typescript-eslint/type-utils" "6.7.2" + "@typescript-eslint/utils" "6.7.2" + "@typescript-eslint/visitor-keys" "6.7.2" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2618,31 +2628,31 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.6.0.tgz#fe323a7b4eafb6d5ea82b96216561810394a739e" - integrity sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w== + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.2.tgz#e0ae93771441b9518e67d0660c79e3a105497af4" + integrity sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw== dependencies: - "@typescript-eslint/scope-manager" "6.6.0" - "@typescript-eslint/types" "6.6.0" - "@typescript-eslint/typescript-estree" "6.6.0" - "@typescript-eslint/visitor-keys" "6.6.0" + "@typescript-eslint/scope-manager" "6.7.2" + "@typescript-eslint/types" "6.7.2" + "@typescript-eslint/typescript-estree" "6.7.2" + "@typescript-eslint/visitor-keys" "6.7.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz#57105d4419d6de971f7d2c30a2ff4ac40003f61a" - integrity sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw== +"@typescript-eslint/scope-manager@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz#cf59a2095d2f894770c94be489648ad1c78dc689" + integrity sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw== dependencies: - "@typescript-eslint/types" "6.6.0" - "@typescript-eslint/visitor-keys" "6.6.0" + "@typescript-eslint/types" "6.7.2" + "@typescript-eslint/visitor-keys" "6.7.2" -"@typescript-eslint/type-utils@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz#14f651d13b884915c4fca0d27adeb652a4499e86" - integrity sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg== +"@typescript-eslint/type-utils@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz#ed921c9db87d72fa2939fee242d700561454f367" + integrity sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ== dependencies: - "@typescript-eslint/typescript-estree" "6.6.0" - "@typescript-eslint/utils" "6.6.0" + "@typescript-eslint/typescript-estree" "6.7.2" + "@typescript-eslint/utils" "6.7.2" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2651,10 +2661,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.6.0.tgz#95e7ea650a2b28bc5af5ea8907114a48f54618c2" - integrity sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg== +"@typescript-eslint/types@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.2.tgz#75a615a6dbeca09cafd102fe7f465da1d8a3c066" + integrity sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2669,30 +2679,30 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz#373c420d2e12c28220f4a83352280a04823a91b7" - integrity sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA== +"@typescript-eslint/typescript-estree@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz#ce5883c23b581a5caf878af641e49dd0349238c7" + integrity sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ== dependencies: - "@typescript-eslint/types" "6.6.0" - "@typescript-eslint/visitor-keys" "6.6.0" + "@typescript-eslint/types" "6.7.2" + "@typescript-eslint/visitor-keys" "6.7.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.6.0.tgz#2d686c0f0786da6362d909e27a9de1c13ba2e7dc" - integrity sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw== +"@typescript-eslint/utils@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.2.tgz#b9ef0da6f04932167a9222cb4ac59cb187165ebf" + integrity sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.6.0" - "@typescript-eslint/types" "6.6.0" - "@typescript-eslint/typescript-estree" "6.6.0" + "@typescript-eslint/scope-manager" "6.7.2" + "@typescript-eslint/types" "6.7.2" + "@typescript-eslint/typescript-estree" "6.7.2" semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": @@ -2703,12 +2713,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz#1109088b4346c8b2446f3845db526374d9a3bafc" - integrity sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ== +"@typescript-eslint/visitor-keys@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz#4cb2bd786f1f459731b0ad1584c9f73e1c7a4d5c" + integrity sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ== dependencies: - "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/types" "6.7.2" eslint-visitor-keys "^3.4.1" "@webassemblyjs/ast@1.9.0": @@ -5412,9 +5422,9 @@ eslint-plugin-import@~2.28.0: tsconfig-paths "^3.14.2" eslint-plugin-jsdoc@^46.1.0: - version "46.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.6.0.tgz#513e41911a3081a15fe6a94490002e8d8f7b71d9" - integrity sha512-T/1gzsvnX45qABzyPEonEhFDttkTn7Igm/X89TXIkTLBOsNl2GYtyBqQPZGXZZ8J5VBzEhiCMvI2P2kXX4dnFw== + version "46.8.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.1.tgz#cfc649c15d460903fe8e86eda582023bb97f283a" + integrity sha512-uTce7IBluPKXIQMWJkIwFsI1gv7sZRmLjctca2K5DIxPi8fSBj9f4iru42XmGwuiMyH2f3nfc60sFmnSGv4Z/A== dependencies: "@es-joy/jsdoccomment" "~0.40.1" are-docs-informative "^0.0.2"