From 62f9d53a4300c8ef14bd65435b50ff91db5a73c4 Mon Sep 17 00:00:00 2001 From: Robert Clabough Date: Wed, 5 Aug 2026 10:18:11 -0700 Subject: [PATCH] Add ages to age ratings --- server/i18n/locales/de.json | 6 + server/i18n/locales/en_pirate.json | 6 + server/i18n/locales/en_us.json | 6 + server/i18n/locales/fr.json | 6 + server/i18n/locales/pl.json | 6 + server/pages/admin/users/groups/[id].vue | 238 ++++++++++++++----- server/server/internal/metadata/giantbomb.ts | 26 +- server/server/internal/metadata/igdb.ts | 74 +++--- server/server/internal/metadata/steam.ts | 4 +- server/utils/ageRatings.ts | 142 ++++++++--- 10 files changed, 363 insertions(+), 151 deletions(-) diff --git a/server/i18n/locales/de.json b/server/i18n/locales/de.json index 9d9a6abf..07f46712 100644 --- a/server/i18n/locales/de.json +++ b/server/i18n/locales/de.json @@ -717,6 +717,12 @@ "removeBannedRating": "Entfernen", "removeMember": "Entfernen", "title": "Benutzergruppen", + "maximumContentAge": "Altersbeschränkung", + "maximumContentAgeDescription": "Legen Sie das maximale Inhaltsalter für Mitglieder dieser Gruppe fest. Bewertungen über diesem Alter werden gesperrt.", + "applyAgeRestriction": "Altersbeschränkung anwenden", + "advancedOverrides": "Erweitert: Manuelle Überschreibungen", + "manualOverrideNote": "Die aktuellen gesperrten Bewertungen entsprechen keiner Standard-Altersschwelle. Sie wurden möglicherweise manuell konfiguriert.", + "sliderOverrideWarning": "Das manuelle Hinzufügen oder Entfernen von Bewertungen überschreibt den Schieberegler. Verwenden Sie den obigen Schieberegler, um auf eine Standard-Altersschwelle zurückzusetzen.", "unratedNote": "Spiele ohne Alterseinstufung werden für Benutzer in dieser Gruppe ebenfalls ausgeblendet." }, "normalUserLabel": "Normaler Benutzer", diff --git a/server/i18n/locales/en_pirate.json b/server/i18n/locales/en_pirate.json index 2201b510..c9cf7d5f 100644 --- a/server/i18n/locales/en_pirate.json +++ b/server/i18n/locales/en_pirate.json @@ -516,6 +516,12 @@ "removeBannedRating": "Remove", "removeMember": "Cast overboard", "title": "Crew Groups", + "maximumContentAge": "Age Restriction", + "maximumContentAgeDescription": "Set the maximum content age fer members of this crew. Ratings above this age be banned, arr!", + "applyAgeRestriction": "Apply age restriction", + "advancedOverrides": "Advanced: Manual Overrides", + "manualOverrideNote": "The current banned ratings don't match a standard age threshold. They may've been manually set by the captain.", + "sliderOverrideWarning": "Manually addin' or removin' ratings here will override the slider. Use the slider above to reset to a standard age threshold.", "unratedNote": "Unrated plunder will also be hidden from scallywags in this crew." }, "normalUserLabel": "Common crewman", diff --git a/server/i18n/locales/en_us.json b/server/i18n/locales/en_us.json index 3352f2a0..e04a778e 100644 --- a/server/i18n/locales/en_us.json +++ b/server/i18n/locales/en_us.json @@ -835,6 +835,12 @@ "removeBannedRating": "Remove", "removeMember": "Remove", "title": "User Groups", + "maximumContentAge": "Age Restriction", + "maximumContentAgeDescription": "Set the maximum content age allowed for members of this group. Ratings above this age will be banned.", + "applyAgeRestriction": "Apply age restriction", + "advancedOverrides": "Advanced: Manual Overrides", + "manualOverrideNote": "The current banned ratings do not match a standard age threshold. They may have been manually configured.", + "sliderOverrideWarning": "Manually adding or removing ratings here will override the slider. Use the slider above to reset to a standard age threshold.", "unratedNote": "Games without age ratings will also be hidden from users in this group." }, "normalUserLabel": "Normal user", diff --git a/server/i18n/locales/fr.json b/server/i18n/locales/fr.json index 4fc8f23c..b70c6b0e 100644 --- a/server/i18n/locales/fr.json +++ b/server/i18n/locales/fr.json @@ -717,6 +717,12 @@ "removeBannedRating": "Retirer", "removeMember": "Retirer", "title": "Groupes d'utilisateurs", + "maximumContentAge": "Restriction d'âge", + "maximumContentAgeDescription": "Définissez l'âge maximum du contenu autorisé pour les membres de ce groupe. Les classifications au-dessus de cet âge seront interdites.", + "applyAgeRestriction": "Appliquer la restriction d'âge", + "advancedOverrides": "Avancé : Remplacements manuels", + "manualOverrideNote": "Les classifications interdites actuelles ne correspondent pas à un seuil d'âge standard. Elles ont peut-être été configurées manuellement.", + "sliderOverrideWarning": "L'ajout ou la suppression manuelle de classifications remplacera le curseur. Utilisez le curseur ci-dessus pour revenir à un seuil d'âge standard.", "unratedNote": "Les jeux sans classification d'âge seront également masqués pour les utilisateurs de ce groupe." }, "normalUserLabel": "Utilisateur normal", diff --git a/server/i18n/locales/pl.json b/server/i18n/locales/pl.json index 2b5c11ff..8c9ae7b8 100644 --- a/server/i18n/locales/pl.json +++ b/server/i18n/locales/pl.json @@ -693,6 +693,12 @@ "removeBannedRating": "Usuń", "removeMember": "Usuń", "title": "Grupy użytkowników", + "maximumContentAge": "Ograniczenie wiekowe", + "maximumContentAgeDescription": "Ustaw maksymalny wiek treści dozwolony dla członków tej grupy. Oceny powyżej tego wieku zostaną zablokowane.", + "applyAgeRestriction": "Zastosuj ograniczenie wiekowe", + "advancedOverrides": "Zaawansowane: Ręczne zastępowanie", + "manualOverrideNote": "Obecne zablokowane oceny nie odpowiadają standardowemu progowi wiekowemu. Mogły zostać skonfigurowane ręcznie.", + "sliderOverrideWarning": "Ręczne dodawanie lub usuwanie ocen zastąpi suwak. Użyj suwaka powyżej, aby powrócić do standardowego progu wiekowego.", "unratedNote": "Gry bez kategorii wiekowej będą również ukryte przed użytkownikami w tej grupie." }, "normalUserLabel": "Normalny użytkownik", diff --git a/server/pages/admin/users/groups/[id].vue b/server/pages/admin/users/groups/[id].vue index b9878af5..09e4b350 100644 --- a/server/pages/admin/users/groups/[id].vue +++ b/server/pages/admin/users/groups/[id].vue @@ -111,93 +111,181 @@ - +

- {{ $t("users.admin.groups.bannedRatings") }} + {{ $t("users.admin.groups.maximumContentAge") }}

+

+ {{ $t("users.admin.groups.maximumContentAgeDescription") }} +

{{ $t("users.admin.groups.unratedNote") }}

- {{ $t("users.admin.groups.noBannedRatings") }} +

+ {{ $t("users.admin.groups.manualOverrideNote") }} +

-
-
+
+
- - {{ br.organization }}: {{ br.rating }} + + {{ sliderAge }}+ -
+ +
+

+ {{ $t("users.admin.groups.bannedRatings") }} +

+
+ - {{ $t("users.admin.groups.removeBannedRating") }} - + + {{ bp.organization }}: {{ bp.rating }} +
- -
- - - - +
+

+ {{ $t("users.admin.groups.noBannedRatings") }} +

+
+ + +
+
+ + {{ $t("users.admin.groups.advancedOverrides") }} + +
+

+ {{ $t("users.admin.groups.sliderOverrideWarning") }} +

+ +
+ {{ $t("users.admin.groups.noBannedRatings") }} +
+ +
+
+ + + {{ br.organization }}: {{ br.rating }} + + +
+
+ +
+ + + + +
+ +
+
+