diff --git a/APPLICATION_DESCRIPTION.md b/APPLICATION_DESCRIPTION.md index 02b2e1dc..dde67712 100644 --- a/APPLICATION_DESCRIPTION.md +++ b/APPLICATION_DESCRIPTION.md @@ -2,10 +2,12 @@ SpellBot helps you find _Magic: The Gathering_ games on [Convoke][convoke], [Girudo][girudo], [Playgroup Live][playgroup], [EDHLAB][edhlab], and [Table Stream][tablestream]. Just looking to play a game of Commander? Run the command `/lfg` and SpellBot will help you out! +Visit **[queues.spellbot.io][queues]**, where you can log in with Discord to browse the games currently queuing across every server, filter them down to just the communities you play in, set up notifications so you're pinged when a game you care about is forming, and look back through your own game history and records. + ## **🔭 Where to Play?** [These communities][where-to-play] are using SpellBot to play Magic! Maybe one of them is right for -you? +you? You can also **[see live games][queues]** waiting for you to join! ## **🎤 Feedback** @@ -31,5 +33,6 @@ The continued operation of SpellBot is supported by @@ -183,7 +183,6 @@ Any usage of SpellBot implies that you accept the following policies. [queues]: https://queues.spellbot.io [ruff-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json [ruff]: https://github.com/astral-sh/ruff -[slash]: https://discord.com/blog/slash-commands-are-here [status-badge]: https://img.shields.io/badge/bot-status-green [status]: https://status.spellbot.io [tablestream]: https://table-stream.com/ diff --git a/docs/index.html b/docs/index.html index f874fecd..554fdf77 100644 --- a/docs/index.html +++ b/docs/index.html @@ -70,6 +70,13 @@ width="600" alt="/lfg" /> +

+ Visit queues.spellbot.io, where you + can log in with Discord to browse the games currently queuing across every + server, filter them down to just the communities you play in, set up + notifications so you're pinged when a game you care about is forming, and + look back through your own game history and records. +

@@ -78,7 +85,7 @@

🔭 Where to Play?

SpellBot helps Discord servers to build communities around playing Magic online. Please check out the following servers to find games and connect with other players. You can also - see live games now waiting for you + see live games waiting for you to join!

diff --git a/src/spellbot/translations/da.yaml b/src/spellbot/translations/da.yaml index afdb59ab..72dd6cd7 100644 --- a/src/spellbot/translations/da.yaml +++ b/src/spellbot/translations/da.yaml @@ -25,7 +25,7 @@ da: players_hidden_one: "**%{count} spillernavn er skjult**" players_hidden_many: "**%{count} spillernavne er skjulte**" format: "Format" - bracket: "Turneringstræ" + bracket: "Niveau" started_at: "Startede kl." updated_at: "Opdateret kl." voice_channel: "🔊 Foreslået stemmekanal" @@ -84,53 +84,14 @@ da: button: join: "Slut dig til denne kamp!" leave: "Forlad" - toggle_links: "Slå mellem offentlige links til/fra" - toggle_voice: "Slå Opret stemmekanaler til/fra" - toggle_bitrate: "Slå Brug maks. bithastighed til/fra" - refresh: "Genindlæs" # Admin action messages admin: no_game_found: "Der er ikke nogen kamp med det ID." - invalid_id: "Ugyldigt ID." done: "Færdig." - invalid_page: "Ugyldig side." channels_title: "Konfiguration for kanaler i %{guild}" - channels_default: "**Alle kanaler på denne server har en standardkonfiguration.**\n\nMan kan bruge kanalspecifikke kommandoer `/set` i en kanal til at ændre den pågældende kanals konfiguration." - awards_title: "SpellBot-spillerpriser for %{guild}" - awards_empty: "**Der er ikke konfigureret nogen priser på denne server.**\n\nFor at tilføje priser skal du bruge kommandoen `/award add`." setup_title: "SpellBot-opsætning for %{guild}" setup_description: "SpellBot hjælper dit fællesskab med at finde og spille Magic: De samlende spil sammen. For at konfigurere din server, kanaler og spiller priser, besøg SpellBot dashboard.\n\n[Konfigurer SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Ingen" - field_public_links: "Offentlige links" - field_voice_create: "Opret stemmekanaler" - field_max_bitrate: "Brug maks. bitrate" - "on": "✅ Til" - "off": "❌ Fra" page: "side %{current} af %{total}" - award_add_conflict: "Din pris kan ikke være både bekræftet og ikke-bekræftet." - award_message_too_long: "Din besked kan ikke være længere end %{max_length} tegn." - award_zero_games: "Man kan ikke oprette en pris for ingen spillede kampe." - award_added: "Pris tilføjet!" - award_added_view: "Du kan få vist alle priser med kommandoen `/awards`." - award_deleted: "Pris slettet!" - voice_create_on: "Oprettelse af stemmekanaler er aktiveret for denne server. Det er ikke nødvendigt at foreslå eksisterende stemmekanaler. Nye kanaler vil blive oprettet automatisk." - suggest_vc_set: 'Foreslået præfiks for stemmekanalernes kategori sat til "%{category}".' - suggest_vc_off: "Foreslåede stemmekanaler slået fra." - motd_updated: "Dagens budskab er opdateret." - default_seats_set: "Standardpladser sat til %{seats} for denne kanal." - default_format_set: "Standardformatet sat til %{format} for denne kanal." - default_bracket_set: "Standardturneringstræ sat til %{bracket} for denne kanal." - default_service_set: "Standardservice sat til %{service} for denne kanal." - auto_verify_set: "Automatisk bekræftelse sat til %{setting} for denne kanal." - verified_only_set: "Bekræftet kun sat til %{setting} for denne kanal." - unverified_only_set: "Ikke-bekræftet kun sat til %{setting} for denne kanal." - channel_motd_set: "Dagens besked for denne kanal er sat til: %{setting}" - channel_extra_set: "Ekstra besked for denne kanal er sat til: %{setting}" - voice_category_set: "Stemmekategoriens præfiks for denne kanal er blevet sat til: %{setting}" - delete_expired_set: "Slet udløbne indstillinger for denne kanal er sat til: %{setting}" - blind_games_set: "Skjulte spillernavne for denne kanal er indstillet til: %{setting}" - voice_invite_set: "Indstillingen for stemmeinvitation for denne kanal er sat til: %{setting}" user_move_error: "Fejl: %{error}" user_moved: "Bruger %{from_user} er blevet flyttet til %{to_user}" expire_dequeued: "├── %{count} spillere fjernet fra køen" @@ -171,10 +132,6 @@ da: mythic_track_off: "❌ Mythic Track er blevet slået **fra** for denne server. Kør denne kommando igen for at slå det til igen. Bemærk, at deaktivering af denne funktion _ikke_ fjerner eksisterende Mythic Track-data." # Award display award: - line_every: "• **ID %{id}** — _hver %{count} kamp_— %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _efter %{count} kamp_— %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "giv" - action_take: "tag" verified_only: "kun bekræftede" unverified_only: "kun ikke-bekræftede" # Block action messages @@ -182,9 +139,6 @@ da: self_block: "Du kan ikke blokere dig selv." blocked: "<@%{user_id}> er blevet blokeret." unblocked: "<@%{user_id}> er ikke længere blokeret." - list_title: "Blokerede brugere" - list_empty: "Du har ingen blokerede brugere." - list_page: "Side %{current} af %{total}" manage_message: "Du kan se og administrere dine blokerede brugere fra din profilside.\n\n[Åbn din profil på spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ da: server_details: "Serverdetaljer" notification_preferences: "Notifikationsindstillinger" back_to: "← Tilbage til %{name}" + log_in: "Log ind" + log_out: "Log ud" + logged_in_as: "Logget ind som %{name}" + site_nav_aria: "Webstedsnavigation" + server_nav_aria: "Servernavigation" common: powered_by: "Drevet af %{link}." generated_by: "Genereret af %{link}" @@ -303,9 +262,6 @@ da: all_brackets: "Alle niveauer" all_languages: "Alle sprog" only_played: "Kun servere, du har spillet på" - logged_in_as: "Logget ind som %{name}" - log_out: "Log ud" - login_to_filter: "Log ind med Discord for at filtrere efter dine servere" no_match: "Ingen køer matcher de valgte filtre." your_servers: "Dine servere" setup_notifications: "Konfigurer notifikationer" diff --git a/src/spellbot/translations/de.yaml b/src/spellbot/translations/de.yaml index 825b42b6..772b3861 100644 --- a/src/spellbot/translations/de.yaml +++ b/src/spellbot/translations/de.yaml @@ -25,7 +25,7 @@ de: players_hidden_one: "**%{count} Spielername ist ausgeblendet**" players_hidden_many: "**%{count} Spielername sind ausgeblendet**" format: "Format" - bracket: "Turnierbaum" + bracket: "Stufe" started_at: "Gestartet am" updated_at: "Aktualisiert am" voice_channel: "🔊 Empfohlener Sprachkanal" @@ -84,53 +84,14 @@ de: button: join: "Diesem Spiel beitreten!" leave: "Verlassen" - toggle_links: "Öffentliche Links umschalten" - toggle_voice: "Erstellen von Sprachkanälen umschalten" - toggle_bitrate: "Verwendung max. Bitrate umschalten" - refresh: "Aktualisieren" # Admin action messages admin: no_game_found: "Es gibt kein Spiel mit dieser ID." - invalid_id: "Ungültige ID." done: "Fertig." - invalid_page: "Ungültige Seite." channels_title: "Konfiguration für Kanäle in %{guild}" - channels_default: "**Alle Kanäle auf diesem Server haben eine Standardeinstellung.**\n\nDu kannst Kanalspezifische `/set`-Befehle innerhalb eines Kanals verwenden, um die Konfiguration dieses Kanals zu ändern." - awards_title: "SpellBot-Spieler-Auszeichnungen für %{guild}" - awards_empty: "**Auf diesem Server sind keine Auszeichnungen konfiguriert.**\n\nUm Auszeichnungen hinzuzufügen, verwenden Sie den Befehl `/award add`." setup_title: "SpellBot-Einrichtung für %{guild}" setup_description: "SpellBot hilft deiner Community zusammen Magic: The Gathering Spiele zu finden und zu spielen. Um deinen Server, Kanäle und Spieler-Auszeichnungen zu konfigurieren, besuche das SpellBot-Dashboard.\n\n[SpellBot konfigurieren → ](%{link})" - field_motd: "MOTD" - field_none: "Keine" - field_public_links: "Öffentliche Links" - field_voice_create: "Sprachkanäle erstellen" - field_max_bitrate: "Max. Bitrate verwenden" - "on": "✅ An" - "off": "❌ Aus" page: "Seite %{current} von %{total}" - award_add_conflict: "Ihre Auszeichnung kann nicht gleichzeitig verifiziert und nicht verifiziert sein." - award_message_too_long: "Ihre Nachricht darf nicht länger als %{max_length} Zeichen sein." - award_zero_games: "Sie können keine Auszeichnung für Null gespielte Spiele erstellen." - award_added: "Auszeichnung hinzugefügt!" - award_added_view: "Mit dem Befehl `/awards` können Sie alle Auszeichnungen anzeigen lassen." - award_deleted: "Auszeichnung gelöscht!" - voice_create_on: "Das Erstellen von Sprachkanälen ist für diesen Server aktiviert. Es besteht keine Notwendigkeit, bestehende Sprachkanäle vorzuschlagen. Neue Kanäle werden automatisch erstellt." - suggest_vc_set: 'Kategorie-Präfix für vorgeschlagene Sprachkanäle auf „%{category}“ gesetzt.' - suggest_vc_off: "Empfohlene Sprachkanäle ausgeschaltet." - motd_updated: "Nachricht des Tages aktualisiert." - default_seats_set: "Standardsitze für diesen Kanal auf %{seats} gesetzt." - default_format_set: "Standardformat für diesen Kanal auf %{format} gesetzt." - default_bracket_set: "Standardturnierbaum für diesen Kanal auf %{bracket} gesetzt." - default_service_set: "Standardservice für diesen Kanal auf %{service} gesetzt." - auto_verify_set: "Auto-Verifizierung für diesen Kanal auf %{setting} gesetzt." - verified_only_set: "Nur-verifiziert für diesen Kanal auf %{setting} gesetzt." - unverified_only_set: "Nur-nicht-verifiziert für diesen Kanal auf %{setting} gesetzt." - channel_motd_set: "Nachricht des Tages wurde für diesen Kanal festgelegt: %{setting}" - channel_extra_set: "Extra-Nachricht wurde für diesen Kanal festgelegt: %{setting}" - voice_category_set: "Präfix für Sprachkategorie für diesen Kanal wurde festgelegt: %{setting}" - delete_expired_set: "Abgelaufen-löschen-Einstellung wurde für diesen Kanal festgelegt: %{setting}" - blind_games_set: "Ausgeblendete Spielernamen wurden für diesen Kanal festgelegt: %{setting}" - voice_invite_set: "Spracheinladungseinstellungen wurde für diesen Kanal festgelegt: %{setting}" user_move_error: "Fehler: %{error}" user_moved: "Benutzer %{from_user} wurde nach %{to_user} verschoben" expire_dequeued: "├── %{count} Spieler aus Warteschlange entfernt" @@ -171,10 +132,6 @@ de: mythic_track_off: "❌ Mythic Track wurde für diesen Server **deaktiviert**. Führen Sie diesen Befehl erneut aus, um die Funktion wieder zu aktivieren. Beachten Sie, dass durch die Deaktivierung dieser Funktion vorhandene Mythic-Track-Daten _nicht_ gelöscht werden." # Award display award: - line_every: "• **ID %{id}** – _alle %{count} Spiele_ – %{action} `@%{role}`%{verify_status} – %{message}" - line_after: "• **ID %{id}** – _nach %{count} Spielen_ – %{action} `@%{role}`%{verify_status} – %{message}" - action_give: "geben" - action_take: "nehmen" verified_only: "nur verifiziert" unverified_only: "nur nicht verifiziert" # Block action messages @@ -182,9 +139,6 @@ de: self_block: "Sie können sich nicht selbst blockieren." blocked: "<@%{user_id}> wurde blockiert." unblocked: "<@%{user_id}> wird nicht mehr blockiert." - list_title: "Blockierte Benutzer" - list_empty: "Sie haben keine blockierten Benutzer." - list_page: "Seite %{current} von %{total}" manage_message: "Du kannst deine gesperrten Benutzer von deiner Profilseite sehen und verwalten.\n\n[Öffne dein Profil auf spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ de: server_details: "Serverdetails" notification_preferences: "Benachrichtigungseinstellungen" back_to: "← Zurück zu %{name}" + log_in: "Anmelden" + log_out: "Abmelden" + logged_in_as: "Angemeldet als %{name}" + site_nav_aria: "Website-Navigation" + server_nav_aria: "Server-Navigation" common: powered_by: "Bereitgestellt von %{link}." generated_by: "Erstellt von %{link}" @@ -303,9 +262,6 @@ de: all_brackets: "Alle Stufen" all_languages: "Alle Sprachen" only_played: "Nur Server, auf denen du gespielt hast" - logged_in_as: "Angemeldet als %{name}" - log_out: "Abmelden" - login_to_filter: "Mit Discord anmelden, um nach deinen Servern zu filtern" no_match: "Keine Warteschlangen entsprechen den ausgewählten Filtern." your_servers: "Deine Server" setup_notifications: "Benachrichtigungen einrichten" diff --git a/src/spellbot/translations/el.yaml b/src/spellbot/translations/el.yaml index 20848f3a..f06d8a6b 100644 --- a/src/spellbot/translations/el.yaml +++ b/src/spellbot/translations/el.yaml @@ -24,8 +24,8 @@ el: players: "Παίκτες" players_hidden_one: "**%{count} όνομα παίκτη είναι κρυμμένο**" players_hidden_many: "**%{count} ονόματα παίκτη είναι κρυμμένα**" - format: "Μορφή" - bracket: "Σύστημα" + format: "Φόρματ" + bracket: "Επίπεδο" started_at: "Ξεκίνησε στις" updated_at: "Ενημερώθηκε στις" voice_channel: "🔊 Προτεινόμενο φωνητικό κανάλι" @@ -84,53 +84,14 @@ el: button: join: "Συμμετοχή σε αυτό το παιχνίδι!" leave: "Αποχώρηση" - toggle_links: "Ενεργοποίηση/απενεργοποίηση δημόσιων συνδέσμων" - toggle_voice: "Ενεργοποίηση/απενεργοποίηση δημιουργίας φωνητικών καναλιών" - toggle_bitrate: "Ενεργοποίηση/Απενεργοποίηση χρήσης μέγιστου ρυθμού Bit" - refresh: "Ανανέωση" # Admin action messages admin: no_game_found: "Δεν υπάρχει παιχνίδι με αυτό το ID." - invalid_id: "Μη έγκυρο ID." done: "Τελείωσε." - invalid_page: "Μη έγκυρη σελίδα." channels_title: "Διαμόρφωση καναλιών στο %{guild}" - channels_default: "Ζολά τα κανάλια σε αυτόν τον διακομιστή έχουν προεπιλεγμένη ρύθμιση.**\n\nΜπορείτε να χρησιμοποιήσετε συγκεκριμένες εντολές `/set` σε ένα κανάλι για να αλλάξετε τις ρυθμίσεις του καναλιού." - awards_title: "Βραβεία Παίκτη SpellBot για το %{guild}" - awards_empty: "**Δεν έχουν ρυθμιστεί βραβεία σε αυτόν τον διακομιστή.**\n\nΓια να προσθέσετε βραβεία χρησιμοποιήστε την εντολή `/award add`." setup_title: "Ρύθμιση SpellBot για το %{guild}" setup_description: "Το SpellBot βοηθά την κοινότητά σας να βρει και να παίξει παιχνίδια Magic: The Gathering μαζί. Για να διαμορφώσετε τον διακομιστή, τα κανάλια και τα βραβεία παικτών σας, επισκεφθείτε τον πίνακα ελέγχου του SpellBot.\n\n[Διαμόρφωση SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Κανένα" - field_public_links: "Δημόσιοι σύνδεσμοι" - field_voice_create: "Δημιουργία φωνητικών καναλιών" - field_max_bitrate: "Χρήση μέγιστου ρυθμού Bit" - "on": "✅ Ενεργ." - "off": "❌ Απενεργ." page: "σελίδα %{current} από %{total}" - award_add_conflict: "Το βραβείο σας δεν μπορεί να είναι μόνο για επαληθευμένους και μη επαληθευμένους χρήστες." - award_message_too_long: "Το μήνυμά σας δεν μπορεί να είναι μεγαλύτερο από %{max_length} χαρακτήρες." - award_zero_games: "Δεν μπορείτε να δημιουργήσετε βραβείο για μηδενικό αριθμό παιχνιδιών." - award_added: "Προστέθηκε βραβείο!" - award_added_view: "Μπορείτε να δείτε όλα τα βραβεία με την εντολή `/awards`." - award_deleted: "Το βραβείο διαγράφηκε!" - voice_create_on: "Η δημιουργία φωνητικού καναλιού είναι ενεργοποιημένη για αυτόν τον διακομιστή. Δεν χρειάζεται να προτείνετε υπάρχοντα φωνητικά κανάλια. Τα νέα κανάλια θα δημιουργηθούν αυτόματα." - suggest_vc_set: 'Το πρόθεμα κατηγορίας προτεινόμενων φωνητικών καναλιών ορίστηκε σε «%{category}».' - suggest_vc_off: "Τα προτεινόμενα φωνητικά κανάλια είναι απενεργοποιημένα." - motd_updated: "Το μήνυμα της ημέρας ενημερώθηκε." - default_seats_set: "Οι προεπιλεγμένες θέσεις έχουν οριστεί σε %{seats} για αυτό το κανάλι." - default_format_set: "Η προεπιλεγμένη μορφή έχει οριστεί σε %{format} για αυτό το κανάλι." - default_bracket_set: "Το προεπιλεγμένο σύστημα τουνουά έχει οριστεί σε %{bracket} για αυτό το κανάλι." - default_service_set: "Η προεπιλεγμένη υπηρεσία έχει οριστεί σε %{service} για αυτό το κανάλι." - auto_verify_set: "Η αυτόματη επαλήθευση έχει οριστεί σε %{setting} για αυτό το κανάλι." - verified_only_set: "Η επιλογή «Μόνο επαληθευμένοι» έχει οριστεί σε %{setting} για αυτό το κανάλι." - unverified_only_set: "Η επιλογή «Μόνο μη επαληθευμένοι» έχει οριστεί σε %{setting} για αυτό το κανάλι." - channel_motd_set: "Το μήνυμα της ημέρας για αυτό το κανάλι έχει οριστεί σε: %{setting}" - channel_extra_set: "Το επιπλέον μήνυμα για αυτό το κανάλι έχει οριστεί σε: %{setting}" - voice_category_set: "Το πρόθεμα κατηγορίας φωνής για αυτό το κανάλι έχει οριστεί σε: %{setting}" - delete_expired_set: "Η ρύθμιση διαγραφής ληγμένων για αυτό το κανάλι έχει οριστεί σε: %{setting}" - blind_games_set: "Τα κρυμμένα ονόματα παικτών για αυτό το κανάλι έχουν οριστεί σε: %{setting}" - voice_invite_set: "Η ρύθμιση φωνητικής πρόσκλησης για αυτό το κανάλι έχει οριστεί σε: %{setting}" user_move_error: "Σφάλμα: %{error}" user_moved: "Ο χρήστης %{from_user} μεταφέρθηκε στο %{to_user}" expire_dequeued: "├── %{count} παίκτες αφαιρέθηκαν από την ουρά" @@ -171,10 +132,6 @@ el: mythic_track_off: "❌ Το Mythic Track έχει **απενεργοποιηθεί** για αυτόν τον διακομιστή. Εκτελέστε ξανά αυτήν την εντολή για να το ενεργοποιήσετε. Σημειώστε ότι η απενεργοποίηση αυτής της λειτουργίας _δεν_ καταργεί τυχόν υπάρχοντα δεδομένα Mythic Track." # Award display award: - line_every: "• **ID %{id}** — _κάθε %{count} παιχνίδια_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _μετά από %{count} παιχνίδια_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "αποστολή" - action_take: "λήψη" verified_only: "μόνο επαληθευμένα" unverified_only: "μόνο μη επαληθευμένα" # Block action messages @@ -182,9 +139,6 @@ el: self_block: "Δεν μπορείτε να αποκλείσετε τον εαυτό σας." blocked: "Ο χρήστης <@%{user_id}> έχει αποκλειστεί." unblocked: "Ο αποκλεισμός του χρήστη <@%{user_id}> έχει καταργηθεί." - list_title: "Αποκλεισμένοι χρήστες" - list_empty: "Δεν έχετε αποκλεισμένους χρήστες." - list_page: "Σελίδα %{current} από %{total}" manage_message: "Μπορείτε να προβάλετε και να διαχειριστείτε τους αποκλεισμένους χρήστες σας από τη σελίδα του προφίλ σας.\n\n[Ανοίξτε το προφίλ σας στο spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ el: server_details: "Λεπτομέρειες διακομιστή" notification_preferences: "Προτιμήσεις ειδοποιήσεων" back_to: "← Επιστροφή σε %{name}" + log_in: "Σύνδεση" + log_out: "Αποσύνδεση" + logged_in_as: "Συνδεδεμένος ως %{name}" + site_nav_aria: "Πλοήγηση ιστότοπου" + server_nav_aria: "Πλοήγηση διακομιστή" common: powered_by: "Με την υποστήριξη του %{link}." generated_by: "Δημιουργήθηκε από το %{link}" @@ -303,9 +262,6 @@ el: all_brackets: "Όλα τα επίπεδα" all_languages: "Όλες οι γλώσσες" only_played: "Μόνο διακομιστές όπου έχετε παίξει" - logged_in_as: "Συνδεδεμένος ως %{name}" - log_out: "Αποσύνδεση" - login_to_filter: "Συνδεθείτε με Discord για φιλτράρισμα κατά τους διακομιστές σας" no_match: "Καμία ουρά δεν ταιριάζει με τα επιλεγμένα φίλτρα." your_servers: "Οι διακομιστές σας" setup_notifications: "Ρύθμιση ειδοποιήσεων" diff --git a/src/spellbot/translations/en.yaml b/src/spellbot/translations/en.yaml index 5b90807f..88d12853 100644 --- a/src/spellbot/translations/en.yaml +++ b/src/spellbot/translations/en.yaml @@ -84,53 +84,14 @@ en: button: join: "Join this game!" leave: "Leave" - toggle_links: "Toggle Public Links" - toggle_voice: "Toggle Create Voice Channels" - toggle_bitrate: "Toggle Use Max Bitrate" - refresh: "Refresh" # Admin action messages admin: no_game_found: "There is no game with that ID." - invalid_id: "Invalid ID." done: "Done." - invalid_page: "Invalid page." channels_title: "Configuration for channels in %{guild}" - channels_default: "**All channels on this server have a default configuration.**\n\nYou may use channel specific `/set` commands within a channel to change that channel's configuration." - awards_title: "SpellBot Player Awards for %{guild}" - awards_empty: "**There are no awards configured on this server.**\n\nTo add awards use the `/award add` command." setup_title: "SpellBot Setup for %{guild}" setup_description: "SpellBot helps your community find and play Magic: The Gathering games together. To configure your server, channels, and player awards, visit the SpellBot dashboard.\n\n[Configure SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "None" - field_public_links: "Public Links" - field_voice_create: "Create Voice Channels" - field_max_bitrate: "Use Max Bitrate" - "on": "✅ On" - "off": "❌ Off" page: "page %{current} of %{total}" - award_add_conflict: "Your award can't be both verified and unverified only." - award_message_too_long: "Your message can't be longer than %{max_length} characters." - award_zero_games: "You can't create an award for zero games played." - award_added: "Award added!" - award_added_view: "You can view all awards with the `/awards` command." - award_deleted: "Award deleted!" - voice_create_on: "Voice channel creation is enabled for this server. There's no need to suggest existing voice channels. New channels will be created automatically." - suggest_vc_set: 'Suggested voice channels category prefix set to "%{category}".' - suggest_vc_off: "Suggested voice channels turned off." - motd_updated: "Message of the day updated." - default_seats_set: "Default seats set to %{seats} for this channel." - default_format_set: "Default format set to %{format} for this channel." - default_bracket_set: "Default bracket set to %{bracket} for this channel." - default_service_set: "Default service set to %{service} for this channel." - auto_verify_set: "Auto verification set to %{setting} for this channel." - verified_only_set: "Verified only set to %{setting} for this channel." - unverified_only_set: "Unverified only set to %{setting} for this channel." - channel_motd_set: "Message of the day for this channel has been set to: %{setting}" - channel_extra_set: "Extra message for this channel has been set to: %{setting}" - voice_category_set: "Voice category prefix for this channel has been set to: %{setting}" - delete_expired_set: "Delete expired setting for this channel has been set to: %{setting}" - blind_games_set: "Hidden player names for this channel has been set to: %{setting}" - voice_invite_set: "Voice invite setting for this channel has been set to: %{setting}" user_move_error: "Error: %{error}" user_moved: "User %{from_user} has been moved to %{to_user}" expire_dequeued: "├── Dequeued %{count} players" @@ -171,10 +132,6 @@ en: mythic_track_off: "❌ Mythic Track has been turned **off** for this server. Rerun this command to toggle it back on. Note that turning this feature off does _not_ remove any existing Mythic Track data." # Award display award: - line_every: "• **ID %{id}** — _every %{count} games_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _after %{count} games_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "give" - action_take: "take" verified_only: "verified only" unverified_only: "unverified only" # Block action messages @@ -182,9 +139,6 @@ en: self_block: "You can not block yourself." blocked: "<@%{user_id}> has been blocked." unblocked: "<@%{user_id}> has been unblocked." - list_title: "Blocked Users" - list_empty: "You have no blocked users." - list_page: "Page %{current} of %{total}" manage_message: "You can view and manage your blocked users from your profile page.\n\n[Open your profile on spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ en: server_details: "Server Details" notification_preferences: "Notification preferences" back_to: "← Back to %{name}" + log_in: "Log in" + log_out: "Log out" + logged_in_as: "Logged in as %{name}" + site_nav_aria: "Site navigation" + server_nav_aria: "Server navigation" common: powered_by: "Powered by %{link}." generated_by: "Generated by %{link}" @@ -303,9 +262,6 @@ en: all_brackets: "All brackets" all_languages: "All languages" only_played: "Only servers you've played in" - logged_in_as: "Logged in as %{name}" - log_out: "Log out" - login_to_filter: "Log in with Discord to filter to your servers" no_match: "No queues match the selected filters." your_servers: "Your Servers" setup_notifications: "Setup notifications" diff --git a/src/spellbot/translations/es.yaml b/src/spellbot/translations/es.yaml index 47bd07a4..2cf535f7 100644 --- a/src/spellbot/translations/es.yaml +++ b/src/spellbot/translations/es.yaml @@ -25,7 +25,7 @@ es: players_hidden_one: "**Hay %{count} nombre de jugador oculto**" players_hidden_many: "**Hay %{count} nombres de jugadores ocultos**" format: "Formato" - bracket: "Cuadro" + bracket: "Nivel" started_at: "Empezó a las" updated_at: "Se actualizó a las" voice_channel: "🔊 Canal de voz sugerido" @@ -84,53 +84,14 @@ es: button: join: "¡Únase a esta partida!" leave: "Abandonar" - toggle_links: "Activar/desactivar enlaces públicos" - toggle_voice: "Activar/desactivar Crear canales de voz" - toggle_bitrate: "Activar/desactivar Usar tasa de bits máxima" - refresh: "Actualizar" # Admin action messages admin: no_game_found: "No hay ninguna partida con ese ID." - invalid_id: "ID no válido." done: "Listo." - invalid_page: "Página no válida." channels_title: "Configuración de los canales en %{guild}" - channels_default: "**Todos los canales de este servidor tienen una configuración predeterminada.**\n\nPuedes usar comandos específicos de canal `/set` dentro de un canal para cambiar la configuración de ese canal." - awards_title: "Premios de SpellBot a los jugadores de %{guild}" - awards_empty: "**No hay premios configurados en este servidor.**\n\nPara añadir premios, utilice el comando `/award add`." setup_title: "Configuración de SpellBot de %{guild}" setup_description: "SpellBot ayuda a tu comunidad a encontrar y jugar Magic: Los juegos de Gathering juntos. Para configurar su servidor, canales y premios de jugador, visite el panel de control de SpellBot.\n\n[Configurar SpellBot → ](%{link})" - field_motd: "MOTD" - field_none: "Ninguno" - field_public_links: "Enlaces públicos" - field_voice_create: "Crear canales de voz" - field_max_bitrate: "Usar tasa de bits máxima" - "on": "✅ Activado" - "off": "❌ Desactivado" page: "página %{current} de %{total}" - award_add_conflict: "Su premio no puede ser a la vez verificado y solo no verificado." - award_message_too_long: "El mensaje no puede tener más de %{max_length} caracteres." - award_zero_games: "No puede crear un premio por cero partidas jugadas." - award_added: "¡Premio añadido!" - award_added_view: "Puede ver todos los premios con el comando `/awards`." - award_deleted: "¡Premio eliminado!" - voice_create_on: "La creación de canales de voz está habilitada para este servidor. No hay necesidad de sugerir canales de voz existentes. Los nuevos canales se crearán automáticamente." - suggest_vc_set: 'Se ha establecido el prefijo de categoría de canales de voz sugeridos para «%{category}».' - suggest_vc_off: "Canales de voz sugeridos desactivados." - motd_updated: "El mensaje del día se ha actualizado." - default_seats_set: "Las plazas predeterminadas se han establecido en %{seats} para este canal." - default_format_set: "El formato predeterminado se ha establecido en %{format} para este canal." - default_bracket_set: "El cuadro predeterminado se ha establecido en %{bracket} para este canal." - default_service_set: "El servicio predeterminado se ha establecido en %{service} para este canal." - auto_verify_set: "La verificación automática se ha establecido en %{setting} para este canal." - verified_only_set: "Solo verificado se ha establecido en %{setting} para este canal." - unverified_only_set: "Solo no verificado se ha establecido en %{setting} para este canal." - channel_motd_set: "El mensaje del día para este canal se ha establecido en %{setting}" - channel_extra_set: "El mensaje adicional para este canal se ha establecido en %{setting}" - voice_category_set: "El prefijo de categoría de voz para este canal se ha establecido en %{setting}" - delete_expired_set: "La opción Eliminar caducados para este canal se ha establecido en %{setting}" - blind_games_set: "Nombres de jugadores ocultos se ha establecido para este canal en %{setting}" - voice_invite_set: "La opción Invitación al canal de voz se ha establecido para este canal en %{setting}" user_move_error: "Error: %{error}" user_moved: "El usuario %{from_user} se ha movido a %{to_user}" expire_dequeued: "├── Se han eliminado %{count} jugadores de la cola" @@ -171,10 +132,6 @@ es: mythic_track_off: "❌ Mythic Track se ha **desactivado** en este servidor. Vuelva a ejecutar este comando para activarlo. Tenga en cuenta que, al desactivar esta opción, _no_ se eliminan datos de Mythic Track." # Award display award: - line_every: "• **ID %{id}** — _cada %{count} partidas_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _después de %{count} partidas_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "dar" - action_take: "tomar" verified_only: "solo verificado" unverified_only: "solo no verificado" # Block action messages @@ -182,9 +139,6 @@ es: self_block: "No puede bloquearse a sí mismo/a." blocked: "<@%{user_id}> se ha bloqueado." unblocked: "<@%{user_id}> se ha desbloqueado." - list_title: "Usuarios bloqueados" - list_empty: "No tiene usuarios bloqueados." - list_page: "Página %{current} de %{total}" manage_message: "Puedes ver y administrar tus usuarios bloqueados desde tu página de perfil.\n\n[Abre tu perfil en spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ es: server_details: "Detalles del servidor" notification_preferences: "Preferencias de notificación" back_to: "← Volver a %{name}" + log_in: "Iniciar sesión" + log_out: "Cerrar sesión" + logged_in_as: "Sesión iniciada como %{name}" + site_nav_aria: "Navegación del sitio" + server_nav_aria: "Navegación del servidor" common: powered_by: "Desarrollado por %{link}." generated_by: "Generado por %{link}" @@ -303,9 +262,6 @@ es: all_brackets: "Todos los niveles" all_languages: "Todos los idiomas" only_played: "Solo servidores en los que has jugado" - logged_in_as: "Conectado como %{name}" - log_out: "Cerrar sesión" - login_to_filter: "Inicia sesión con Discord para filtrar por tus servidores" no_match: "Ninguna cola coincide con los filtros seleccionados." your_servers: "Tus servidores" setup_notifications: "Configurar notificaciones" diff --git a/src/spellbot/translations/fi.yaml b/src/spellbot/translations/fi.yaml index 9b7796cd..c61ce104 100644 --- a/src/spellbot/translations/fi.yaml +++ b/src/spellbot/translations/fi.yaml @@ -24,8 +24,8 @@ fi: players: "Pelaajat" players_hidden_one: "**%{count} pelaajan nimi on piilotettu**" players_hidden_many: "**%{count} pelaajan nimet on piilotettu**" - format: "Muoto" - bracket: "Ottelujärjestys" + format: "Formaatti" + bracket: "Taso" started_at: "Alkoi klo" updated_at: "Päivitetty klo" voice_channel: "🔊 Ehdotettu äänikanava" @@ -84,53 +84,14 @@ fi: button: join: "Liity tähän peliin!" leave: "Poistu" - toggle_links: "Aseta julkiset linkit päälle / pois päältä" - toggle_voice: "Aseta äänikanavien luonti päälle / pois päältä" - toggle_bitrate: "Aseta suurimman bittinopeuden käyttö päälle / pois päältä" - refresh: "Päivitä" # Admin action messages admin: no_game_found: "Ei pelejä tällä tunnuksella." - invalid_id: "Virheellinen tunnus." done: "Valmis." - invalid_page: "Virheellinen sivu." channels_title: "%{guild} -kanavien määritys" - channels_default: "**Kaikilla tämän palvelimen kanavilla on oletusasetukset.**\n\nVoit käyttää kanavakohtaisia `/set`-komentoja kanavan sisällä muuttaaksesi kanavan asetuksia." - awards_title: "SpellBot-pelaajapalkinnot – %{guild}" - awards_empty: "**Ei määritettyjä palkintoja tällä palvelimella.**\n\nVoit lisätä palkintoja `/award add` -komennolla." setup_title: "SpellBot-asetukset – %{guild}" setup_description: "SpellBot auttaa yhteisöäsi löytämään ja pelaamaan Magic: The Gathering -pelejä yhdessä. Voit määrittää palvelimesi, kanavasi ja pelaajapalkinnot SpellBotin hallintapaneelissa.\n\n[Määritä SpellBotia →](%{link})" - field_motd: "MOTD" - field_none: "Ei mitään" - field_public_links: "Julkiset linkit" - field_voice_create: "Luo äänikanavia" - field_max_bitrate: "Käytä suurinta bittinopeutta" - "on": "✅ Päällä" - "off": "❌ Pois päältä" page: "sivu %{current} / %{total}" - award_add_conflict: "Palkinto ei voi olla tarkoitettu vain vahvistetuille ja vain vahvistamattomille käyttäjille." - award_message_too_long: "Viesti ei voi olla %{max_length} merkkiä pidempi." - award_zero_games: "Et voi luoda palkintoa nollalle pelatulle pelille." - award_added: "Palkinto lisätty!" - award_added_view: "Voit näyttää kaikki palkinnot `/awards` -komennolla." - award_deleted: "Palkinto poistettu!" - voice_create_on: "Äänikanavan luonti on käytössä tällä palvelimella. Olemassa olevia äänikanavia ei tarvitse ehdottaa. Uudet kanavat luodaan automaattisesti." - suggest_vc_set: 'Ehdotettu äänikanavaluokan etuliite asetettu kohteeseen ”%{category}”.' - suggest_vc_off: "Ehdotetut äänikanavat asetettu pois päältä." - motd_updated: "Päivän viesti päivitetty." - default_seats_set: "Tämän kanavan oletusarvoisiksi paikoiksi asetettu %{seats}." - default_format_set: "Tämän kanavan oletusarvoiseksi muodoksi asetettu %{format}." - default_bracket_set: "Tämän kanavan oletusarvoiseksi ottelujärjestykseksi asetettu %{bracket}." - default_service_set: "Tämän kanavan oletusarvoiseksi palveluksi asetettu %{service}." - auto_verify_set: "Tämän kanavan automaattinen vahvistus asetettu tilaan %{setting}." - verified_only_set: "Tämän kanavan Vain vahvistetut -asetus asetettu tilaan %{setting}." - unverified_only_set: "Tämän kanavan Vain vahvistamattomat -asetus asetettu tilaan %{setting}." - channel_motd_set: "Tämän kanavan päivän viesti on asetettu tilaan: %{setting}" - channel_extra_set: "Tämän kanavan ylimääräinen viesti on asetettu tilaan: %{setting}" - voice_category_set: "Tämän kanavan ääniluokan etuliite on asetettu tilaan: %{setting}" - delete_expired_set: "Tämän kanavan vanhentuneen asetuksen poisto on asetettu tilaan: %{setting}" - blind_games_set: "Tämän kanavan piilotetut pelaajanimet on asetettu tilaan: %{setting}" - voice_invite_set: "Tämän kanavan äänikutsuasetus on asetettu tilaan: %{setting}" user_move_error: "Virhe: %{error}" user_moved: "Käyttäjä %{from_user} on siirretty kohteeseen %{to_user}" expire_dequeued: "├── %{count} pelaajaa poistettu jonosta" @@ -171,10 +132,6 @@ fi: mythic_track_off: "❌ Mythic Track on asetettu **pois päältä** tässä palvelimessa. Jos haluat asettaa sen taas päälle, suorita komento uudelleen. Huomaa, että ominaisuuden asettaminen pois päältä _ei_ poista jo olemassa olevia Mythic Track -tietoja." # Award display award: - line_every: "• **Tunnus %{id}** — _joka %{count} peli_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **Tunnus %{id}** — _%{count} pelin jälkeen_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "anna" - action_take: "ota" verified_only: "vain vahvistetut" unverified_only: "vain vahvistamattomat" # Block action messages @@ -182,9 +139,6 @@ fi: self_block: "Et voi estää itseäsi." blocked: "<@%{user_id}> on estetty." unblocked: "Käyttäjän <@%{user_id}> esto on poistettu." - list_title: "Estetyt käyttäjät" - list_empty: "Estettyjä käyttäjiä ei ole." - list_page: "Sivu %{current} / %{total}" manage_message: "Voit tarkastella ja hallita estettyjä käyttäjiä profiilisivultasi.\n\n[Avaa profiilisi osoitteessa spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ fi: server_details: "Palvelimen tiedot" notification_preferences: "Ilmoitusasetukset" back_to: "← Takaisin kohteeseen %{name}" + log_in: "Kirjaudu sisään" + log_out: "Kirjaudu ulos" + logged_in_as: "Kirjautunut sisään käyttäjänä %{name}" + site_nav_aria: "Sivuston navigointi" + server_nav_aria: "Palvelimen navigointi" common: powered_by: "Palvelun tarjoaa %{link}." generated_by: "Luonut %{link}" @@ -303,9 +262,6 @@ fi: all_brackets: "Kaikki tasot" all_languages: "Kaikki kielet" only_played: "Vain palvelimet, joilla olet pelannut" - logged_in_as: "Kirjautunut nimellä %{name}" - log_out: "Kirjaudu ulos" - login_to_filter: "Kirjaudu Discordilla suodattaaksesi palvelintesi mukaan" no_match: "Mikään jono ei vastaa valittuja suodattimia." your_servers: "Sinun palvelimesi" setup_notifications: "Määritä ilmoitukset" diff --git a/src/spellbot/translations/fr.yaml b/src/spellbot/translations/fr.yaml index 26c6cc2b..86d76b13 100644 --- a/src/spellbot/translations/fr.yaml +++ b/src/spellbot/translations/fr.yaml @@ -25,7 +25,7 @@ fr: players_hidden_one: "**%{count} nom de joueur est masqué**" players_hidden_many: "**%{count} noms de joueurs sont masqués**" format: "Format" - bracket: "Bracket" + bracket: "Palier" started_at: "Commencé à" updated_at: "Mis à jour à" voice_channel: "🔊 Canal vocal suggéré" @@ -84,53 +84,14 @@ fr: button: join: "Rejoignez cette partie !" leave: "Quitter" - toggle_links: "Activer/désactiver les liens publics" - toggle_voice: "Activer/désactiver Créer des canaux vocaux" - toggle_bitrate: "Activer/désaxctiver Utiliser le débit binaire max" - refresh: "Actualiser" # Admin action messages admin: no_game_found: "Aucune partie n'utilise cet ID." - invalid_id: "ID non valide." done: "Terminé." - invalid_page: "Page non valide." channels_title: "Configuration des canaux de %{guild}" - channels_default: "**Tous les salons sur ce serveur ont une configuration par défaut.**\n\nVous pouvez utiliser des commandes spécifiques au canal `/set` dans un canal pour modifier la configuration de ce canal." - awards_title: "Récompenses de joueur SpellBot pour %{guild}" - awards_empty: "**Aucunes récompenses n'ont été configurées pour ce serveur.**\n\nPour ajouter des récompenses, utilisez la commande `/award add`." setup_title: "Configuration de SpellBot pour %{guild}" setup_description: "SpellBot aide votre communauté à trouver et à jouer à la magie : les jeux de Collecte ensemble. Pour configurer votre serveur, les canaux et les récompenses des joueurs, visitez le tableau de bord du SpellBot.\n\n[Configurer le SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Aucun" - field_public_links: "Liens publics" - field_voice_create: "Créer des canaux vocaux" - field_max_bitrate: "Utiliser le débit binaire max" - "on": "✅ Activé" - "off": "❌ Désactivé" page: "page %{current} sur %{total}" - award_add_conflict: "Votre récompense ne peut pas être en même temps pour les vérifiés et les non vérifiés." - award_message_too_long: "Votre message ne peut contenir plus de %{max_length} caractères." - award_zero_games: "Vous ne pouvez pas créer de récompense pour zéro partie jouée." - award_added: "Récompense ajoutée !" - award_added_view: "Vous pouvez utiliser la commande `/awards` pour consulter toutes les récompenses." - award_deleted: "Récompense supprimée !" - voice_create_on: "La création de canaux vocaux est activée sur ce serveur. Il n'est pas nécessaire de proposer des canaux vocaux existants. Les nouveaux canaux seront créés automatiquement." - suggest_vc_set: 'Préfixe de catégorie de canaux vocaux suggérés réglé sur « %{category} ».' - suggest_vc_off: "Canaux vocaux suggérés désactivés." - motd_updated: "Message du jour mis à jour." - default_seats_set: "Places par défaut réglées sur %{seats} pour ce canal." - default_format_set: "Format par défaut réglé sur %{format} pour ce canal." - default_bracket_set: "Bracket par défaut réglé sur %{bracket} pour ce canal." - default_service_set: "Service par défaut réglé sur %{service} pour ce canal." - auto_verify_set: "Vérification automatique réglée sur %{setting} pour ce canal." - verified_only_set: "Vérifié uniquement réglé sur %{setting} pour ce canal." - unverified_only_set: "Non vérifié uniquement réglé sur %{setting} pour ce canal." - channel_motd_set: "Le message du jour de ce canal a été configuré : %{setting}" - channel_extra_set: "Le message extra de ce canal a été configuré : %{setting}" - voice_category_set: "Le préfixe de catégorie vocale de ce canal a été configuré : %{setting}" - delete_expired_set: "Le paramètre de suppression des expirations de ce canal a été configuré : %{setting}" - blind_games_set: "Les noms des joueurs masqués de ce canal a été configuré : %{setting}" - voice_invite_set: "Le paramètre d'invitation en vocal de ce canal a été configuré : %{setting}" user_move_error: "Erreur : %{error}" user_moved: "L'utilisateur %{from_user} a été déplacé dans %{to_user}" expire_dequeued: "├── %{count} joueurs sortis de file d'attente" @@ -171,10 +132,6 @@ fr: mythic_track_off: "❌ Mythic Track activé** sur ce serveur. Exécutez à nouveau cette commande pour réactiver la fonctionnalité. Veuillez noter que désactiver cette fonctionnalité ne supprime pas les données Mythic Track existantes." # Award display award: - line_every: "• **ID %{id}** — _toutes les %{count} parties_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _après %{count} parties_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "donner à" - action_take: "prendre de" verified_only: "vérifié uniquement" unverified_only: "non vérifié uniquement" # Block action messages @@ -182,9 +139,6 @@ fr: self_block: "Vous ne pouvez pas vous bloquer vous-même." blocked: "<@%{user_id}> a été bloqué." unblocked: "<@%{user_id}> n'est plus bloqué." - list_title: "Utilisateurs bloqués" - list_empty: "Vous n'avez pas d'utilisateurs bloqués." - list_page: "Page %{current} sur %{total}" manage_message: "Vous pouvez voir et gérer vos utilisateurs bloqués depuis votre page de profil.\n\n[Ouvrir votre profil sur spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ fr: server_details: "Détails du serveur" notification_preferences: "Préférences de notification" back_to: "← Retour à %{name}" + log_in: "Se connecter" + log_out: "Se déconnecter" + logged_in_as: "Connecté en tant que %{name}" + site_nav_aria: "Navigation du site" + server_nav_aria: "Navigation du serveur" common: powered_by: "Propulsé par %{link}." generated_by: "Généré par %{link}" @@ -303,9 +262,6 @@ fr: all_brackets: "Tous les paliers" all_languages: "Toutes les langues" only_played: "Uniquement les serveurs où vous avez joué" - logged_in_as: "Connecté en tant que %{name}" - log_out: "Se déconnecter" - login_to_filter: "Connectez-vous avec Discord pour filtrer selon vos serveurs" no_match: "Aucune file d'attente ne correspond aux filtres sélectionnés." your_servers: "Vos serveurs" setup_notifications: "Configurer les notifications" diff --git a/src/spellbot/translations/it.yaml b/src/spellbot/translations/it.yaml index 72040795..3b381f30 100644 --- a/src/spellbot/translations/it.yaml +++ b/src/spellbot/translations/it.yaml @@ -25,7 +25,7 @@ it: players_hidden_one: "**Il nome di %{count} giocatore è nascosto**" players_hidden_many: "**I nomi di %{count} giocatori sono nascosti**" format: "Formato" - bracket: "Tabellone" + bracket: "Livello" started_at: "Iniziata alle" updated_at: "Aggiornata alle" voice_channel: "🔊 Canale vocale consigliato" @@ -84,53 +84,14 @@ it: button: join: "Entra in questa partita!" leave: "Abbandona" - toggle_links: "Attiva/Disattiva link pubblici" - toggle_voice: "Attiva/Disattiva creazione canali vocali" - toggle_bitrate: "Attiva/Disattiva bitrate massimo" - refresh: "Aggiorna" # Admin action messages admin: no_game_found: "Non esiste nessuna partita con questo ID." - invalid_id: "ID non valido." done: "Fatto." - invalid_page: "Pagina non valida." channels_title: "Configurazione dei canali per %{guild}" - channels_default: "**Tutti i canali su questo server hanno una configurazione predefinita.**\n\nÈ possibile utilizzare specifici comandi `/set` del canale all'interno di un canale per modificare la configurazione di quel canale." - awards_title: "Riconoscimenti giocatori di SpellBot per %{guild}" - awards_empty: "**Non ci sono riconoscimenti configurati su questo server.**\n\nPer aggiungere dei riconoscimenti, usa il comando `/award add`." setup_title: "Configurazione di SpellBot per %{guild}" setup_description: "SpellBot aiuta la tua comunità a trovare e giocare a Magic: i giochi di Raccolta insieme. Per configurare server, canali e premi giocatori, visita il cruscotto SpellBot.\n\n[Configura SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Nessuno" - field_public_links: "Link pubblici" - field_voice_create: "Crea canali vocali" - field_max_bitrate: "Usa bitrate massimo" - "on": "✅ On" - "off": "❌ Off" page: "pagina %{current} di %{total}" - award_add_conflict: "Il tuo riconoscimento non può essere impostato sia come \"solo verificato\" che come \"solo non verificato\"." - award_message_too_long: "Il tuo messaggio non può essere più lungo di %{max_length} caratteri." - award_zero_games: "Impossibile creare un riconoscimento per zero partite giocate." - award_added: "Riconoscimento aggiunto!" - award_added_view: "Puoi visualizzare tutti i riconoscimenti usando il comando `/awards`." - award_deleted: "Riconoscimento eliminato!" - voice_create_on: "La creazione dei canali vocali è abilitata per questo server. Non è necessario consigliare canali vocali esistenti: i nuovi canali saranno creati automaticamente." - suggest_vc_set: 'Il prefisso della categoria per i canali vocali consigliati è stato impostato su "%{category}".' - suggest_vc_off: "Canali vocali consigliati disattivati." - motd_updated: "Messaggio del giorno aggiornato." - default_seats_set: "Il numero di posti predefinito per questo canale è stato impostato su %{seats}." - default_format_set: "Il formato predefinito per questo canale è stato impostato su %{format}." - default_bracket_set: "Il tabellone predefinito per questo canale è stato impostato su %{bracket}." - default_service_set: "Il servizio predefinito per questo canale è stato impostato su %{service}." - auto_verify_set: "La verifica automatica per questo canale è stata impostata su %{setting}." - verified_only_set: "L'opzione \"Solo verificati\" per questo canale è stata impostata su %{setting}." - unverified_only_set: "L'opzione \"Solo non verificati\" per questo canale è stata impostata su %{setting}." - channel_motd_set: "Il messaggio del giorno per questo canale è stato impostato su: %{setting}" - channel_extra_set: "Il messaggio extra per questo canale è stato impostato su: %{setting}" - voice_category_set: "Il prefisso della categoria vocale per questo canale è stato impostato su: %{setting}" - delete_expired_set: "L'eliminazione degli elementi scaduti per questo canale è stata impostata su: %{setting}" - blind_games_set: "L'anonimato dei nomi dei giocatori per questo canale è stato impostato su: %{setting}" - voice_invite_set: "L'impostazione degli inviti vocali per questo canale è stata impostata su: %{setting}" user_move_error: "Errore: %{error}" user_moved: "L'utente %{from_user} è stato spostato su %{to_user}" expire_dequeued: "├── %{count} giocatori rimossi dalla coda" @@ -171,10 +132,6 @@ it: mythic_track_off: "❌ Il tracciamento Mitiche è stato **disattivato** per questo server. Esegui nuovamente questo comando per riattivarlo. Ricorda che la disattivazione di questa funzione _non_ rimuove i dati esistenti del tracciamento Mitiche." # Award display award: - line_every: "• **ID %{id}** — _ogni %{count} partite_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _dopo %{count} partite_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "dai" - action_take: "ricevi" verified_only: "solo verificato" unverified_only: "solo non verificato" # Block action messages @@ -182,9 +139,6 @@ it: self_block: "Non puoi bloccare te stesso." blocked: "<@%{user_id}> è stato bloccato." unblocked: "<@%{user_id}> è stato sbloccato." - list_title: "Utenti bloccati" - list_empty: "Non hai utenti bloccati." - list_page: "Pagina %{current} di %{total}" manage_message: "Puoi visualizzare e gestire i tuoi utenti bloccati dalla pagina del tuo profilo.\n\n[Apri il tuo profilo su spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ it: server_details: "Dettagli del server" notification_preferences: "Preferenze di notifica" back_to: "← Torna a %{name}" + log_in: "Accedi" + log_out: "Esci" + logged_in_as: "Connesso come %{name}" + site_nav_aria: "Navigazione del sito" + server_nav_aria: "Navigazione del server" common: powered_by: "Offerto da %{link}." generated_by: "Generato da %{link}" @@ -303,9 +262,6 @@ it: all_brackets: "Tutti i livelli" all_languages: "Tutte le lingue" only_played: "Solo i server in cui hai giocato" - logged_in_as: "Connesso come %{name}" - log_out: "Esci" - login_to_filter: "Accedi con Discord per filtrare in base ai tuoi server" no_match: "Nessuna coda corrisponde ai filtri selezionati." your_servers: "I tuoi server" setup_notifications: "Configura le notifiche" diff --git a/src/spellbot/translations/ja.yaml b/src/spellbot/translations/ja.yaml index 4736b853..b72f566a 100644 --- a/src/spellbot/translations/ja.yaml +++ b/src/spellbot/translations/ja.yaml @@ -84,53 +84,14 @@ ja: button: join: "このゲームに参加!" leave: "退出" - toggle_links: "公開リンクを切り替え" - toggle_voice: "ボイスチャンネル作成を切り替え" - toggle_bitrate: "最大ビットレート使用を切り替え" - refresh: "更新" # Admin action messages admin: no_game_found: "その ID のゲームはありません。" - invalid_id: "無効な ID です。" done: "完了しました。" - invalid_page: "無効なページです。" channels_title: "%{guild} のチャンネル設定" - channels_default: "**このサーバー上のすべてのチャンネルにはデフォルトの設定があります。**\n\nチャンネルの設定を変更するには、チャンネル内のチャンネル固有の `/set` コマンドを使用できます。" - awards_title: "%{guild} の SpellBot プレイヤーアワード" - awards_empty: "**このサーバーには設定済みのアワードがありません。**\n\nアワードを追加するには `/award add` コマンドを使用してください。" setup_title: "%{guild} の SpellBot セットアップ" setup_description: "スペルボットは、あなたのコミュニティがマジック:ザ・ギャザリングのゲームを一緒に見つけてプレイするのを支援します。 サーバー、チャンネル、プレイヤーの賞を設定するには、SpellBotダッシュボードを参照してください。\n\n[SpellBot の設定 →](%{link})" - field_motd: "MOTD" - field_none: "なし" - field_public_links: "公開リンク" - field_voice_create: "ボイスチャンネル作成" - field_max_bitrate: "最大ビットレートを使用" - "on": "✅ オン" - "off": "❌ オフ" page: "ページ %{current} / %{total}" - award_add_conflict: "アワードを認証済み限定と未認証限定の両方にすることはできません。" - award_message_too_long: "メッセージは %{max_length} 文字以内にしてください。" - award_zero_games: "プレイ済みゲーム数が0のアワードは作成できません。" - award_added: "アワードを追加しました!" - award_added_view: "`/awards` コマンドですべてのアワードを確認できます。" - award_deleted: "アワードを削除しました!" - voice_create_on: "このサーバーではボイスチャンネルの作成が有効です。既存のボイスチャンネルを推奨する必要はありません。新しいボイスチャンネルが自動で作成されます。" - suggest_vc_set: '推奨ボイスチャンネルのカテゴリ接頭辞を「%{category}」に設定しました。' - suggest_vc_off: "推奨ボイスチャンネルをオフにしました。" - motd_updated: "MOTD を更新しました。" - default_seats_set: "このチャンネルのデフォルトの席数を %{seats} に設定しました。" - default_format_set: "このチャンネルのデフォルトのフォーマットを %{format} に設定しました。" - default_bracket_set: "このチャンネルのデフォルトのブラケットを %{bracket} に設定しました。" - default_service_set: "このチャンネルのデフォルトサービスを %{service} に設定しました。" - auto_verify_set: "このチャンネルの自動認証を %{setting} に設定しました。" - verified_only_set: "このチャンネルの認証済み限定を %{setting} に設定しました。" - unverified_only_set: "このチャンネルの未認証限定を %{setting} に設定しました。" - channel_motd_set: "このチャンネルの MOTD を %{setting} に設定しました" - channel_extra_set: "このチャンネルの追加メッセージを %{setting} に設定しました" - voice_category_set: "このチャンネルのボイスチャンネルカテゴリの接頭辞を %{setting} に設定しました" - delete_expired_set: "このチャンネルの期限切れ削除設定を %{setting} に設定しました。" - blind_games_set: "このチャンネルのプレイヤー名の非表示設定を %{setting} に設定しました。" - voice_invite_set: "このチャンネルのボイス招待設定を %{setting} に設定しました。" user_move_error: "エラー:%{error}" user_moved: "ユーザー %{from_user} を %{to_user} に移動しました。" expire_dequeued: "├── %{count}人のプレイヤーをキューから外しました" @@ -171,10 +132,6 @@ ja: mythic_track_off: "❌ このサーバーで Mythic Track を **無効** にしました。このコマンドをもう一度実行すると、再度有効にできます。なお、この機能を無効にしても、既存の Mythic Track データが _削除されることはありません_。" # Award display award: - line_every: "• **ID %{id}** — _%{count}ゲームごと_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _%{count}ゲーム後_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "付与" - action_take: "剥奪" verified_only: "認証済みのみ" unverified_only: "未認証のみ" # Block action messages @@ -182,9 +139,6 @@ ja: self_block: "自分をブロックすることはできません。" blocked: "<@%{user_id}> をブロックしました。" unblocked: "<@%{user_id}> のブロックを解除しました。" - list_title: "ブロックしたユーザー" - list_empty: "ブロックしたユーザーはいません。" - list_page: "ページ %{current} / %{total}" manage_message: "ブロックされたユーザーは、プロフィールページから閲覧・管理できます。\n\n[spellbot.ioでプロフィールを開く] (%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ ja: server_details: "サーバーの詳細" notification_preferences: "通知設定" back_to: "← %{name} に戻る" + log_in: "ログイン" + log_out: "ログアウト" + logged_in_as: "%{name} としてログイン中" + site_nav_aria: "サイトナビゲーション" + server_nav_aria: "サーバーナビゲーション" common: powered_by: "提供: %{link}。" generated_by: "生成元: %{link}" @@ -303,9 +262,6 @@ ja: all_brackets: "すべてのブラケット" all_languages: "すべての言語" only_played: "プレイしたことのあるサーバーのみ" - logged_in_as: "%{name} としてログイン中" - log_out: "ログアウト" - login_to_filter: "Discord でログインして自分のサーバーで絞り込む" no_match: "選択したフィルターに一致するキューはありません。" your_servers: "あなたのサーバー" setup_notifications: "通知を設定" diff --git a/src/spellbot/translations/pl.yaml b/src/spellbot/translations/pl.yaml index 20a0cba6..88b1c08b 100644 --- a/src/spellbot/translations/pl.yaml +++ b/src/spellbot/translations/pl.yaml @@ -25,7 +25,7 @@ pl: players_hidden_one: "**Nazwa %{count} gracza jest ukryta**" players_hidden_many: "**Nazwy %{count} graczy są ukryte**" format: "Format" - bracket: "Poziom mocy" + bracket: "Poziom" started_at: "Rozpoczęto o" updated_at: "Zaktualizowano o" voice_channel: "🔊 Sugerowany kanał głosowy" @@ -84,53 +84,14 @@ pl: button: join: "Dołącz do tego meczu!" leave: "Opuść" - toggle_links: "Przełącz linki publiczne" - toggle_voice: "Przełącz tworzenie kanałów głosowych" - toggle_bitrate: "Przełącz użycie maksymalnej przepływności" - refresh: "Odśwież" # Admin action messages admin: no_game_found: "Nie ma meczu o tym identyfikatorze." - invalid_id: "Nieprawidłowy identyfikator." done: "Gotowe." - invalid_page: "Nieprawidłowa strona." channels_title: "Konfiguracja kanałów w gildii %{guild}" - channels_default: "**Wszystkie kanały na tym serwerze mają domyślną konfigurację.**\n\nMożesz użyć specyficznych komend `/set` kanału na kanale, aby zmienić konfigurację tego kanału." - awards_title: "Nagrody SpellBot dla graczy w gildii %{guild}" - awards_empty: "**Na tym serwerze nie skonfigurowano żadnych nagród.**\n\nAby dodać nagrody, użyj komendy `/award add`." setup_title: "Konfiguracja SpellBota dla gildii %{guild}" setup_description: "SpellBot pomaga Twojej społeczności znaleźć i grać w Magiczne: Gry Zbierające razem. Aby skonfigurować swój serwer, kanały i nagrody gracza, odwiedź panel SpellBot\n\n[Konfiguruj SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Brak" - field_public_links: "Linki publiczne" - field_voice_create: "Utwórz kanały głosowe" - field_max_bitrate: "Użyj maksymalnej przepływności" - "on": "✅ Wł." - "off": "❌ Wył." page: "strona %{current} z %{total}" - award_add_conflict: "Twoja nagroda nie może być jednocześnie tylko dla zweryfikowanych i tylko dla niezweryfikowanych." - award_message_too_long: "Twoja wiadomość nie może być dłuższa niż %{max_length} znaków." - award_zero_games: "Nie można utworzyć nagrody za zero rozegranych meczów." - award_added: "Dodano nagrodę!" - award_added_view: "Możesz wyświetlić wszystkie nagrody za pomocą komendy `/awards`." - award_deleted: "Nagrodę usunięto!" - voice_create_on: "Tworzenie kanału głosowego jest włączone dla tego serwera. Nie trzeba proponować istniejących kanałów głosowych. Nowe kanały zostaną utworzone automatycznie." - suggest_vc_set: 'Prefiks kategorii sugerowanych kanałów głosowych został ustawiony na „%{category}”.' - suggest_vc_off: "Sugerowane kanały głosowe wyłączone." - motd_updated: "Zaktualizowano wiadomość dnia." - default_seats_set: "Domyślna liczba miejsc dla tego kanału została ustawiona na %{seats}." - default_format_set: "Dla tego kanału ustawiono domyślny format %{format}." - default_bracket_set: "Dla tego kanału ustawiono domyślny poziom mocy %{bracket}." - default_service_set: "Dla tego kanału ustawiono usługę domyślną %{service}." - auto_verify_set: "Na tym kanale automatyczną weryfikację ustawiono na %{setting}." - verified_only_set: "Dla tego kanału opcję „Tylko zweryfikowani” ustawiono na %{setting}." - unverified_only_set: "Dla tego kanału opcję „Tylko niezweryfikowani” ustawiono na %{setting}." - channel_motd_set: "Wiadomość dnia dla tego kanału została ustawiona na: %{setting}" - channel_extra_set: "Dodatkowa wiadomość dla tego kanału została ustawiona na: %{setting}" - voice_category_set: "Prefiks kategorii głosowej dla tego kanału został ustawiony na: %{setting}" - delete_expired_set: "Usuwanie wygasłych ustawień dla tego kanału zostało ustawione na: %{setting}" - blind_games_set: "Ukryte nazwy graczy dla tego kanału zostały ustawione na: %{setting}" - voice_invite_set: "Ustawienie zaproszeń głosowych dla tego kanału zostało ustawione na: %{setting}" user_move_error: "Błąd: %{error}" user_moved: "Użytkownik %{from_user} został przeniesiony do %{to_user}" expire_dequeued: "├── %{count} graczy usunięto z kolejki" @@ -171,10 +132,6 @@ pl: mythic_track_off: "❌ Funkcja Mythic Track została **wyłączona** dla tego serwera. Uruchom ponownie tę komendę, aby ponownie ją włączyć. Pamiętaj, że wyłączenie tej funkcji _nie_ usuwa żadnych istniejących danych Mythic Track." # Award display award: - line_every: "• **Identyfikator %{id}** — _co %{count} mecze(-y)_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **Identyfikator %{id}** — _po %{count} meczach_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "daj" - action_take: "weź" verified_only: "tylko zweryfikowani" unverified_only: "tylko niezweryfikowani" # Block action messages @@ -182,9 +139,6 @@ pl: self_block: "Nie możesz zablokować siebie." blocked: "Użytkownik <@%{user_id}> został zablokowany." unblocked: "Użytkownik <@%{user_id}> został odblokowany." - list_title: "Zablokowani użytkownicy" - list_empty: "Nie masz zablokowanych użytkowników." - list_page: "Strona %{current} z %{total}" manage_message: "Możesz przeglądać i zarządzać zablokowanymi użytkownikami na stronie profilowej.\n\n[Otwórz swój profil na spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ pl: server_details: "Szczegóły serwera" notification_preferences: "Preferencje powiadomień" back_to: "← Powrót do %{name}" + log_in: "Zaloguj się" + log_out: "Wyloguj się" + logged_in_as: "Zalogowano jako %{name}" + site_nav_aria: "Nawigacja witryny" + server_nav_aria: "Nawigacja serwera" common: powered_by: "Obsługiwane przez %{link}." generated_by: "Wygenerowane przez %{link}" @@ -303,9 +262,6 @@ pl: all_brackets: "Wszystkie poziomy" all_languages: "Wszystkie języki" only_played: "Tylko serwery, na których grałeś" - logged_in_as: "Zalogowano jako %{name}" - log_out: "Wyloguj się" - login_to_filter: "Zaloguj się przez Discord, aby filtrować według swoich serwerów" no_match: "Żadna kolejka nie pasuje do wybranych filtrów." your_servers: "Twoje serwery" setup_notifications: "Skonfiguruj powiadomienia" diff --git a/src/spellbot/translations/pt.yaml b/src/spellbot/translations/pt.yaml index 1c025520..997dd63c 100644 --- a/src/spellbot/translations/pt.yaml +++ b/src/spellbot/translations/pt.yaml @@ -25,7 +25,7 @@ pt: players_hidden_one: "**%{count} nome de jogador está oculto**" players_hidden_many: "**%{count} nomes de jogadores estão ocultos**" format: "Formato" - bracket: "Eliminação" + bracket: "Nível" started_at: "Iniciado a" updated_at: "Atualizado a" voice_channel: "🔊 Canal de voz sugerido" @@ -84,53 +84,14 @@ pt: button: join: "Entrar neste jogo!" leave: "Sair" - toggle_links: "Ativar/desativar links públicos" - toggle_voice: "Ativar/desativar a criação de canais de voz" - toggle_bitrate: "Ativar/desativar a utilização da taxa de bits máxima" - refresh: "Recarregar" # Admin action messages admin: no_game_found: "Não existe nenhum jogo com esse ID." - invalid_id: "ID inválido." done: "Concluído." - invalid_page: "Página inválida." channels_title: "Configuração para canais em %{guild}" - channels_default: "**Todos os canais neste servidor têm uma configuração padrão.**\n\nVocê pode usar comandos específicos do canal `/set` dentro de um canal para mudar a configuração desse canal." - awards_title: "Prémios de jogadores SpellBot para %{guild}" - awards_empty: "**Não existem prémios configurados neste servidor.**\n\nPara adicionar prémios, utilize o comando `/award add`." setup_title: "Configuração SpellBot para %{guild}" setup_description: "SpellBot ajuda sua comunidade a encontrar e jogar o Magico: The Gathering games juntos. Para configurar o seu servidor, canais e recompensas de jogador, visite o painel do SpellBot.\n\n[Configure SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Nenhum" - field_public_links: "Links públicos" - field_voice_create: "Criar canais de voz" - field_max_bitrate: "Utilizar taxa de bits máxima" - "on": "✅ Ligado" - "off": "❌ Desligado" page: "página %{current} de %{total}" - award_add_conflict: "O seu prémio não pode estar simultaneamente verificado e não verificado." - award_message_too_long: "A sua mensagem não pode ter mais de %{max_length} caracteres." - award_zero_games: "Não pode criar um prémio para zero jogos jogados." - award_added: "Prémio adicionado!" - award_added_view: "Pode ver todos os prémios com o comando `/awards`." - award_deleted: "Prémio eliminado!" - voice_create_on: "A criação de canais de voz está ativada neste servidor. Não é necessário sugerir canais de voz existentes. Os novos canais serão criados automaticamente." - suggest_vc_set: 'Prefixo sugerido para a categoria de canais de voz definido como "%{category}".' - suggest_vc_off: "Os canais de voz sugeridos estão desativados." - motd_updated: "A mensagem do dia foi atualizada." - default_seats_set: "Os lugares padrão definidos para este canal são %{seats}." - default_format_set: "O formato predefinido definido para este canal é %{format}." - default_bracket_set: "A eliminaçã padrão definida para este canal é %{bracket}." - default_service_set: "O serviço padrão definido para este canal é %{service}." - auto_verify_set: "Verificação automática definida como %{setting} neste canal." - verified_only_set: "Apenas verificado definido como %{setting} neste canal." - unverified_only_set: "Apenas não verificado definido como %{setting} neste canal." - channel_motd_set: "A mensagem do dia deste canal foi definida como: %{setting}" - channel_extra_set: "A mensagem adicional para este canal foi definida como: %{setting}" - voice_category_set: "O prefixo da categoria de voz deste canal foi definido como: %{setting}" - delete_expired_set: "A opção de eliminar definições expiradas deste canal foi definida como: %{setting}" - blind_games_set: "Os nomes dos jogadores ocultos deste canal foram definidos como: %{setting}" - voice_invite_set: "A configuração de convites de voz deste canal foi definida como: %{setting}" user_move_error: "Erro: %{error}" user_moved: "O utilizador %{from_user} foi transferido para %{to_user}" expire_dequeued: "├── %{count} jogadores retirados da fila" @@ -171,10 +132,6 @@ pt: mythic_track_off: "❌ Mythic Track foi **desativado** neste servidor. Execute novamente este comando para reativar a funcionalidade. Note que desativar esta funcionalidade _não_ elimina dados existentes do Mythic Track." # Award display award: - line_every: "• **ID %{id}** — cada %{count} jogos_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _após %{count} jogos_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "dar" - action_take: "tirar" verified_only: "apenas verificado" unverified_only: "apenas não verificado" # Block action messages @@ -182,9 +139,6 @@ pt: self_block: "Não se pode bloquear a si próprio." blocked: "<@%{user_id}> foi bloqueado." unblocked: "<@%{user_id}> foi desbloqueado." - list_title: "Utilizadores bloqueados" - list_empty: "Não tem utilizadores bloqueados." - list_page: "Página %{current} de %{total}" manage_message: "Você pode ver e gerenciar seus usuários bloqueados em sua página de perfil.\n\n[Abra seu perfil em spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ pt: server_details: "Detalhes do servidor" notification_preferences: "Preferências de notificação" back_to: "← Voltar para %{name}" + log_in: "Entrar" + log_out: "Sair" + logged_in_as: "Conectado como %{name}" + site_nav_aria: "Navegação do site" + server_nav_aria: "Navegação do servidor" common: powered_by: "Desenvolvido por %{link}." generated_by: "Gerado por %{link}" @@ -303,9 +262,6 @@ pt: all_brackets: "Todos os níveis" all_languages: "Todos os idiomas" only_played: "Apenas servidores em que você jogou" - logged_in_as: "Conectado como %{name}" - log_out: "Sair" - login_to_filter: "Entre com o Discord para filtrar pelos seus servidores" no_match: "Nenhuma fila corresponde aos filtros selecionados." your_servers: "Seus servidores" setup_notifications: "Configurar notificações" diff --git a/src/spellbot/translations/sv.yaml b/src/spellbot/translations/sv.yaml index c907166c..60ab0f7a 100644 --- a/src/spellbot/translations/sv.yaml +++ b/src/spellbot/translations/sv.yaml @@ -25,7 +25,7 @@ sv: players_hidden_one: "**%{count} spelarnamn är dolt**" players_hidden_many: "**%{count} spelarnamn är dolda**" format: "Format" - bracket: "Turneringstabell" + bracket: "Nivå" started_at: "Startade kl." updated_at: "Uppdaterad kl." voice_channel: "🔊 Föreslagen röstkanal" @@ -84,53 +84,14 @@ sv: button: join: "Gå med i detta spel!" leave: "Lämna" - toggle_links: "Växla mellan offentliga länkar" - toggle_voice: "Växla mellan att skapa röstkanaler" - toggle_bitrate: "Växla mellan att använda max bithastighet" - refresh: "Uppdatera" # Admin action messages admin: no_game_found: "Det finns inget spel med detta ID." - invalid_id: "Ogiltigt ID." done: "Klar." - invalid_page: "Ogiltig sida." channels_title: "Konfiguration för kanaler i %{guild}" - channels_default: "**Alla kanaler på den här servern har en standardkonfiguration.**\n\nDu kan använda kanalspecifika `/set`-kommandon i en kanal för att ändra kanalens konfiguration." - awards_title: "SpellBot Player Awards för %{guild}" - awards_empty: "**Det finns inga utmärkelser konfigurerade på denna server.**\n\nFör att lägga till utmärkelser, använd kommandot `/award add`." setup_title: "SpellBot-inställningar för %{guild}" setup_description: "SpellBot hjälper din gemenskap att hitta och spela Magic: The Gathering spel tillsammans. För att konfigurera din server, kanal och spelare utmärkelser, besök Stavbots instrumentbräda.\n\n[Konfigurera Stavbot ≥ ](%{link})" - field_motd: "MOTD" - field_none: "Ingen" - field_public_links: "Offentliga länkar" - field_voice_create: "Skapa röstkanaler" - field_max_bitrate: "Använd max bithastighet" - "on": "✅ På" - "off": "❌ Av" page: "sida %{current} av %{total}" - award_add_conflict: "Din utmärkelse kan inte vara verifierad och icke-verifierad samtidigt." - award_message_too_long: "Ditt meddelande får inte vara längre än %{max_length} tecken." - award_zero_games: "Du kan inte skapa en utmärkelse för noll spelade spel." - award_added: "Utmärkelse tillagd!" - award_added_view: "Du kan visa alla utmärkelser med kommandot `/awards`." - award_deleted: "Utmärkelse raderad!" - voice_create_on: "Skapande av röstkanaler är aktiverat för denna server. Du behöver inte föreslå befintliga röstkanaler. Nya kanaler skapas automatiskt." - suggest_vc_set: 'Förslag på prefix för röstkanalkategorier är inställt på ”%{category}”.' - suggest_vc_off: "Förslag på röstkanaler är avstängt." - motd_updated: "Dagens meddelande har uppdaterats." - default_seats_set: "Standardantalet platser är inställt på %{seats} för denna kanal." - default_format_set: "Standardformatet är inställt på %{format} för denna kanal." - default_bracket_set: "Standardturnering är inställd på %{bracket} för denna kanal." - default_service_set: "Standardtjänst är inställd på %{service} för denna kanal." - auto_verify_set: "Automatisk verifiering är inställd på %{setting} för denna kanal." - verified_only_set: "Verifierad endast inställd på %{setting} för denna kanal." - unverified_only_set: "Overifierad endast inställd på %{setting} för denna kanal." - channel_motd_set: "Dagens meddelande för denna kanal har ställts in till: %{setting}" - channel_extra_set: "Extra meddelande för denna kanal har ställts in till: %{setting}" - voice_category_set: "Röstkategoriprefix för denna kanal har ställts in på: %{setting}" - delete_expired_set: "Radera utgångna inställningar för denna kanal har ställts in på: %{setting}" - blind_games_set: "Dolda spelarnamn för denna kanal har ställts in på: %{setting}" - voice_invite_set: "Inställningen för röstinbjudningar för denna kanal har ställts in på: %{setting}" user_move_error: "Fel: %{error}" user_moved: "Användaren %{from_user} har flyttats till %{to_user}" expire_dequeued: "├── %{count} spelare togs bort från kön" @@ -171,10 +132,6 @@ sv: mythic_track_off: "❌ Mythic Track har **inaktiverats** för denna server. Kör kommandot igen för att aktivera det igen. Observera att denna funktion _inte_ raderar befintliga Mythic Track-data när den inaktiveras." # Award display award: - line_every: "• **ID %{id}** — _var %{count} spel_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _efter %{count} spel_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "ge" - action_take: "ta" verified_only: "endast verifierad" unverified_only: "endast overifierad" # Block action messages @@ -182,9 +139,6 @@ sv: self_block: "Du kan inte blockera dig själv." blocked: "<@%{user_id}> har blockerats." unblocked: "<@%{user_id}> har avblockerats." - list_title: "Blockerade användare" - list_empty: "Du har inga blockerade användare." - list_page: "Sida %{current} av %{total}" manage_message: "Du kan visa och hantera dina blockerade användare från din profilsida.\n\n[Öppna din profil på spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ sv: server_details: "Serverinformation" notification_preferences: "Aviseringsinställningar" back_to: "← Tillbaka till %{name}" + log_in: "Logga in" + log_out: "Logga ut" + logged_in_as: "Inloggad som %{name}" + site_nav_aria: "Webbplatsnavigering" + server_nav_aria: "Servernavigering" common: powered_by: "Drivs av %{link}." generated_by: "Genererad av %{link}" @@ -303,9 +262,6 @@ sv: all_brackets: "Alla nivåer" all_languages: "Alla språk" only_played: "Endast servrar du har spelat på" - logged_in_as: "Inloggad som %{name}" - log_out: "Logga ut" - login_to_filter: "Logga in med Discord för att filtrera efter dina servrar" no_match: "Inga köer matchar de valda filtren." your_servers: "Dina servrar" setup_notifications: "Konfigurera aviseringar" diff --git a/src/spellbot/translations/tl.yaml b/src/spellbot/translations/tl.yaml index 217ed989..77ddd90b 100644 --- a/src/spellbot/translations/tl.yaml +++ b/src/spellbot/translations/tl.yaml @@ -21,10 +21,10 @@ tl: jump_to_post: "Puwede ka ring [pumunta sa orihinal na game post](%{link}) sa <#%{channel_id}>." field: rules: "⚠️ Mga Karagdagang Panuntunan:" - players: "Mga Player" + players: "Mga Manlalaro" players_hidden_one: "**%{count} pangalan ng player ang nakatago**" players_hidden_many: "**%{count} (na) pangalan ng player ang nakatago**" - format: "Format" + format: "Ayos" bracket: "Bracket" started_at: "Nagsimula noong" updated_at: "Na-update noong" @@ -84,53 +84,14 @@ tl: button: join: "Sumali sa game na ito!" leave: "Umalis" - toggle_links: "I-toggle ang Mga Pampublikong Link" - toggle_voice: "I-toggle ang Gumawa ng Mga Voice Channel" - toggle_bitrate: "I-toggle ang Gamitin ang Max Bitrate" - refresh: "I-refresh" # Admin action messages admin: no_game_found: "Walang game na may ganoong ID." - invalid_id: "Invalid na ID." done: "Tapos na." - invalid_page: "Invalid na page." channels_title: "Configuration para sa mga channel sa %{guild}" - channels_default: "**May default na configuration ang lahat ng channel sa server na ito.**\n\nPuwedeng gumamit ang mga user ng mga partikular na `/set` command sa isang channel para baguhin ang configuration ng channel na iyon." - awards_title: "Mga Award sa Player ng SpellBot para sa %{guild}" - awards_empty: "**Walang award na na-configure sa server na ito.**\n\nPara magdagdag ng mga award, gamitin ang `/award add` command." setup_title: "Setup ng SpellBot para sa %{guild}" setup_description: "Tinutulungan ng SpellBot ang iyong komunidad na makahanap at makapaglaro ng mga laro ng Magic: The Gathering nang magkakasama. Upang i-configure ang iyong server, mga channel, at mga gantimpala para sa mga manlalaro, bisitahin ang dashboard ng SpellBot.\n\n[I-configure ang SpellBot →](%{link})" - field_motd: "MOTD" - field_none: "Wala" - field_public_links: "Mga Pampublikong Link" - field_voice_create: "Gumawa ng Mga Voice Channel" - field_max_bitrate: "Gamitin ang Max Bitrate" - "on": "✅ Naka-on" - "off": "❌ Naka-off" page: "page %{current} sa %{total}" - award_add_conflict: "Hindi puwedeng parehong na-verify at hindi na-verify ang award mo." - award_message_too_long: "Hindi puwedeng lumampas sa %{max_length} (na) character ang mensahe mo." - award_zero_games: "Hindi ka puwedeng gumawa ng award para sa walang nilarong game." - award_added: "Naidagdag na ang award!" - award_added_view: "Puwede mong tingnan ang lahat ng award gamit ang `/awards` command." - award_deleted: "Na-delete na ang award!" - voice_create_on: "Naka-enable ang paggawa ng voice channel para sa server na ito. Hindi mo kailangang magmungkahi ng mga kasalukuyang voice channel. Awtomatikong gagawa ng mga bagong channel." - suggest_vc_set: 'Itinakda sa "%{category}" ang iminumungkahing prefix ng kategorya ng mga voice channel.' - suggest_vc_off: "Na-off ang mga iminumungkahing voice channel." - motd_updated: "Na-update ang mensahe ngayong araw." - default_seats_set: "Itinakda sa %{seats} ang mga default na seat para sa channel na ito." - default_format_set: "Itinakda sa %{format} ang default na format para sa channel na ito." - default_bracket_set: "Itinakda ang default na bracket sa %{bracket} para sa channel na ito." - default_service_set: "Itinakda ang default na serbisyo sa %{service} para sa channel na ito." - auto_verify_set: "Itinakda ang awtomatikong pag-verify sa %{setting} para sa channel na ito." - verified_only_set: "Itinakda ang na-verify lang sa %{setting} para sa channel na ito." - unverified_only_set: "Itinakda ang hindi na-verify lang sa %{setting} para sa channel na ito." - channel_motd_set: "Ang mensahe ngayong araw para sa channel na ito ay itinakda sa: %{setting}" - channel_extra_set: "Ang karagdagang mensahe para sa channel na ito ay itinakda sa: %{setting}" - voice_category_set: "Ang prefix ng voice category para sa channel na ito ay itinakda sa: %{setting}" - delete_expired_set: "Ang setting para sa pag-delete ng expired para sa channel na ito ay itinakda sa: %{setting}" - blind_games_set: "Ang mga nakatagong pangalan ng player para sa channel na ito ay itinakda sa: %{setting}" - voice_invite_set: "Ang setting ng voice invite para sa channel na ito ay itinakda sa: %{setting}" user_move_error: "Error: %{error}" user_moved: "Inilipat sa %{to_user} ang user na %{from_user}" expire_dequeued: "├── Inalis sa pagkakapili ang %{count} (na) player" @@ -171,10 +132,6 @@ tl: mythic_track_off: "❌ **Na-off** ang Mythic Track para sa server na ito. I-run ulit ang command na ito para mai-on ulit. Tandaan na kahit i-off ang feature na ito, hindi maaalis ang anumang kasalukuyang data ng Mythic Track." # Award display award: - line_every: "• **ID %{id}** — _kada %{count} (na) game_ — %{action} `@%{role}`%{verify_status}— %{message}" - line_after: "• **ID %{id}** — _pagkatapos ng %{count} (na) game_ — %{action} `@%{role}`%{verify_status}— %{message}" - action_give: "magbigay" - action_take: "kumuha" verified_only: "na-verify lang" unverified_only: "hindi na-verify lang" # Block action messages @@ -182,9 +139,6 @@ tl: self_block: "Hindi mo puwedeng i-block ang sarili mo." blocked: "Na-block si <@%{user_id}>." unblocked: "Na-unlock si <@%{user_id}>." - list_title: "Mga Na-block na User" - list_empty: "Wala kang na-block na user." - list_page: "Page %{current} sa %{total}" manage_message: "Maaari mong tingnan at pamahalaan ang iyong mga naka-block na user mula sa iyong profile page.\n\n[Buksan ang iyong profile sa spellbot.io](%{link})" # Leave action messages leave: @@ -244,6 +198,11 @@ tl: server_details: "Mga Detalye ng Server" notification_preferences: "Mga Kagustuhan sa Notification" back_to: "← Bumalik sa %{name}" + log_in: "Mag-log in" + log_out: "Mag-log out" + logged_in_as: "Naka-log in bilang %{name}" + site_nav_aria: "Nabigasyon ng site" + server_nav_aria: "Nabigasyon ng server" common: powered_by: "Pinapagana ng %{link}." generated_by: "Binuo ng %{link}" @@ -303,9 +262,6 @@ tl: all_brackets: "Lahat ng bracket" all_languages: "Lahat ng wika" only_played: "Mga server lang na nilaruan mo" - logged_in_as: "Naka-log in bilang %{name}" - log_out: "Mag-log out" - login_to_filter: "Mag-log in gamit ang Discord para i-filter sa iyong mga server" no_match: "Walang queue na tumutugma sa mga napiling filter." your_servers: "Iyong mga Server" setup_notifications: "I-setup ang mga notification" diff --git a/src/spellbot/web/api/queues.py b/src/spellbot/web/api/queues.py index 9087f1cf..8b027f31 100644 --- a/src/spellbot/web/api/queues.py +++ b/src/spellbot/web/api/queues.py @@ -15,8 +15,7 @@ from spellbot.i18n import normalize_locale from spellbot.metrics import add_span_request_id, generate_request_id from spellbot.settings import settings -from spellbot.web.api.admin_auth import get_admin_user_xid -from spellbot.web.api.viewer_auth import get_viewer, has_viewer_session +from spellbot.web.api.viewer_auth import get_viewer if TYPE_CHECKING: from collections.abc import Iterable @@ -139,17 +138,15 @@ async def queues_endpoint(request: web.Request) -> web.Response: languages = sorted({r["language"] for r in rows} | {g["language"] for g in games}) stats = {"active_games": len(raw_rows) + len(raw_games)} login_enabled = bool(settings.BOT_APPLICATION_ID and settings.BOT_CLIENT_SECRET) - # When the viewer identity is borrowed from an admin session, the `/queues` - # logout (which clears only the viewer keys) would be a no-op, so the - # template hides it; the admin manages that session from the admin pages. - via_admin = viewer_xid is not None and not await has_viewer_session(request) + # Login/logout identity is rendered by the shared site header from the global + # `nav` context (see web/builder.py); this page-level `viewer` only carries what + # the queues filters need beyond that. viewer = { "xid": viewer_xid, "name": viewer_name, "logged_in": viewer_xid is not None, "login_enabled": login_enabled, "my_filter_on": my_filter_on, - "via_admin": via_admin, } context = { "rows": rows, @@ -161,9 +158,6 @@ async def queues_endpoint(request: web.Request) -> web.Response: "languages": languages, "stats": stats, "viewer": viewer, - # An admin session (set only after the OAuth callback verified the user - # is an admin/owner) gates the link to the admin dashboard. - "is_admin": await get_admin_user_xid(request) is not None, } return aiohttp_jinja2.render_template("queues.html.j2", request, context) diff --git a/src/spellbot/web/api/record.py b/src/spellbot/web/api/record.py index 60a8e381..4501b52d 100644 --- a/src/spellbot/web/api/record.py +++ b/src/spellbot/web/api/record.py @@ -411,10 +411,12 @@ async def viewer_access(request: web.Request, guild_xid: int) -> tuple[bool, boo def login_url(request: web.Request) -> str: """Build a viewer login URL that returns to the current page after authenticating.""" - # `next` is validated again where it is consumed (see `viewer_auth`), but sanitize the - # current path here too so a hostile request target can never seed an open redirect. - next_path = safe_relative_path(request.path_qs) or "/" - return f"/queues/login?next={quote(next_path, safe='')}" + # Routes through the single, page-agnostic `/login` entry point (one OAuth redirect + # URI for the whole site). `next` is validated again where it is consumed (see + # `viewer_auth`), but sanitize the current path here too so a hostile request target + # can never seed an open redirect. Path only — no query — to match the shared header. + next_path = safe_relative_path(request.path) or "/" + return f"/login?next={quote(next_path, safe='')}" async def impl(request: web.Request, kind: RecordKind) -> web.Response: diff --git a/src/spellbot/web/api/viewer_auth.py b/src/spellbot/web/api/viewer_auth.py index b755417f..ba9296c9 100644 --- a/src/spellbot/web/api/viewer_auth.py +++ b/src/spellbot/web/api/viewer_auth.py @@ -103,6 +103,10 @@ async def has_viewer_session(request: web.Request) -> bool: return isinstance(session.get(VIEWER_XID_KEY), int) +# Both the page-agnostic `/login` and the legacy `/queues/login` entry points share +# a single Discord OAuth redirect URI, so adding a login control to a new page never +# requires registering another redirect URL — the `next` param carries the return path. +@routes.get("/login") @routes.get("/queues/login") async def viewer_login(request: web.Request) -> web.StreamResponse: """Redirect the user to Discord's OAuth2 authorize page (public viewer flow).""" @@ -176,11 +180,21 @@ async def viewer_oauth_callback(request: web.Request) -> web.StreamResponse: return web.HTTPFound(next_path or VIEWER_REDIRECT_AFTER_LOGIN) +@routes.post("/logout") @routes.post("/queues/logout") async def viewer_logout(request: web.Request) -> web.StreamResponse: - """Clear the viewer session without disturbing any concurrent admin session.""" + """ + Log the user fully out, from any public page. + + Because a single session cookie holds both the viewer keys and — for admins/owner + who logged in through the public flow — the admin keys, clearing only the viewer + keys would leave `get_viewer`'s admin fallback still authenticated (the identity + would silently persist and the logout control would vanish). Invalidating the whole + session is the one behavior that matches "log out": one identity, one logout. + + Returns the user to a safe `next` path when given, else the queues page. + """ session = await get_session(request) - session.pop(VIEWER_XID_KEY, None) - session.pop(VIEWER_NAME_KEY, None) - session.pop(VIEWER_STATE_KEY, None) - return web.HTTPFound(VIEWER_REDIRECT_AFTER_LOGOUT) + session.invalidate() + next_path = safe_relative_path(request.query.get("next")) + return web.HTTPFound(next_path or VIEWER_REDIRECT_AFTER_LOGOUT) diff --git a/src/spellbot/web/builder.py b/src/spellbot/web/builder.py index 8e6ead59..7cb079ce 100644 --- a/src/spellbot/web/builder.py +++ b/src/spellbot/web/builder.py @@ -30,6 +30,7 @@ status, viewer_auth, ) +from spellbot.web.api.oauth import safe_relative_path from spellbot.web.tools import rate_limited if TYPE_CHECKING: @@ -73,7 +74,31 @@ async def i18n_context_processor(request: web.Request) -> dict[str, object]: def translate(key: str, **kwargs: object) -> str: return t(key, locale=locale, **kwargs) - return {"lang": locale, "t": translate} + return {"lang": locale, "t": translate, "nav": await nav_context(request)} + + +async def nav_context(request: web.Request) -> dict[str, object]: + """ + Build the shared site-header identity for the login/logout control. + + Exposing this globally (rather than threading it through each handler) is what + lets the one shared header render a correct login/logout state on every public + page. The `here` value carries the current path so both flows return the user to + the page they were on, all through a single OAuth redirect URI. + """ + viewer_xid, viewer_name = await viewer_auth.get_viewer(request) + is_admin = await admin_auth.get_admin_user_xid(request) is not None + # Return-to path only (no query string): enough to send the viewer back to the + # page they logged in from, without reflecting arbitrary query params into the page. + here = safe_relative_path(request.path) + return { + "logged_in": viewer_xid is not None, + "xid": viewer_xid, + "name": viewer_name, + "is_admin": is_admin, + "login_enabled": bool(settings.BOT_APPLICATION_ID and settings.BOT_CLIENT_SECRET), + "here": here or "/queues", + } @web.middleware diff --git a/src/spellbot/web/templates/_site_nav.html.j2 b/src/spellbot/web/templates/_site_nav.html.j2 new file mode 100644 index 00000000..92bb4dd5 --- /dev/null +++ b/src/spellbot/web/templates/_site_nav.html.j2 @@ -0,0 +1,22 @@ +{# Shared site navigation cluster rendered in every public page header. + Reads the global `nav` context injected by web/builder.py:nav_context, so the + login/logout state stays correct and consistent on every page. Login and logout + both route through a single OAuth redirect URI and carry `nav.here` as `next`, + so the user returns to the page they were on. #} + diff --git a/src/spellbot/web/templates/base.css b/src/spellbot/web/templates/base.css index 099a6503..ab657315 100644 --- a/src/spellbot/web/templates/base.css +++ b/src/spellbot/web/templates/base.css @@ -62,3 +62,119 @@ a:hover { max-width: 1200px; margin: 0 auto; } + +/* Shared site header + navigation, used by every public page (queues, record + pages, guild notify) so they read as one cohesive site. Page-specific extras + (e.g. the queues active-games badge) layer on top via their own stylesheet. */ +.site-header { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 2rem; + padding-bottom: 1rem; + border-bottom: 1px solid var(--border-strong); +} +.site-header__home { + display: inline-flex; + flex: 0 0 auto; +} +.site-header__logo { + width: 64px; + height: 64px; + border-radius: 50%; + display: block; +} +.site-header__titles { + flex: 1 1 auto; + min-width: 0; +} +.site-header__title { + font-size: 1.75rem; + font-weight: 600; + word-break: break-word; + line-height: 1.2; +} +.site-header__subtitle { + font-size: 0.85rem; + color: var(--page-muted); + margin-top: 0.25rem; +} + +.site-nav { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 0.5rem; + flex: 0 0 auto; +} +.site-nav__link, +.site-nav__link:link, +.site-nav__link:visited, +.site-nav__btn { + display: inline-flex; + align-items: center; + font-size: 0.8rem; + font-weight: 600; + line-height: 1; + padding: 0.45rem 0.75rem; + border-radius: 8px; + border: 1px solid var(--border-strong); + background: var(--card-bg); + color: var(--page-text); + white-space: nowrap; +} +.site-nav__link:hover, +.site-nav__btn:hover { + background: var(--card-bg-hover); + border-color: var(--accent); + color: var(--accent); +} +.site-nav__btn { + cursor: pointer; + font-family: inherit; +} +.site-nav__btn--login, +.site-nav__btn--login:link, +.site-nav__btn--login:visited { + background: var(--brand-purple); + border-color: var(--brand-purple-dark); + color: #fff; +} +.site-nav__btn--login:hover { + background: var(--brand-purple-dark); + border-color: var(--brand-purple-dark); + color: #fff; +} +.site-nav__btn--logout { + background: var(--danger-bg); + border-color: var(--danger-border); + color: var(--danger-text); +} +.site-nav__btn--logout:hover { + background: var(--danger-bg-hover); + border-color: var(--danger-border); + color: var(--danger-text); +} +.site-nav__identity { + font-size: 0.8rem; + color: var(--muted); + max-width: 12rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.site-nav__logout-form { + margin: 0; + display: inline-flex; +} + +@media (max-width: 640px) { + .site-header { + flex-wrap: wrap; + } + .site-nav { + flex-basis: 100%; + justify-content: flex-start; + } +} diff --git a/src/spellbot/web/templates/guild_notify.css b/src/spellbot/web/templates/guild_notify.css index 2f7aca5f..c350060e 100644 --- a/src/spellbot/web/templates/guild_notify.css +++ b/src/spellbot/web/templates/guild_notify.css @@ -1,16 +1,3 @@ -.page-header__links { - margin-left: auto; - display: flex; - flex-wrap: wrap; - gap: 0.5rem; -} -/* On narrow screens the header stacks (see queues.css), so the nav drops below - the title and should align to the left edge rather than the right. */ -@media (max-width: 720px) { - .page-header__links { - margin-left: 0; - } -} .notify { background: var(--card-bg); border: 1px solid var(--border); diff --git a/src/spellbot/web/templates/guild_notify.html.j2 b/src/spellbot/web/templates/guild_notify.html.j2 index b5d9840f..a0d368e5 100644 --- a/src/spellbot/web/templates/guild_notify.html.j2 +++ b/src/spellbot/web/templates/guild_notify.html.j2 @@ -15,16 +15,17 @@
-