From 396dd3c0399c79b0e998ed17a5ab7051e911648c Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 21 May 2020 12:30:05 +0100 Subject: [PATCH] libmalcontent-ui: Update content rating formatting code This incorporates commit 7d00c4d84b2a47dd815dc88da1a82dc54800d4b6 from gnome-software, which allows the ESRB strings to be localised. Signed-off-by: Philip Withnall --- libmalcontent-ui/gs-content-rating.c | 154 +++++++++++++++------------ libmalcontent-ui/gs-content-rating.h | 2 +- libmalcontent-ui/user-controls.c | 7 +- 3 files changed, 89 insertions(+), 74 deletions(-) diff --git a/libmalcontent-ui/gs-content-rating.c b/libmalcontent-ui/gs-content-rating.c index edb99ff..cbbc71f 100644 --- a/libmalcontent-ui/gs-content-rating.c +++ b/libmalcontent-ui/gs-content-rating.c @@ -373,171 +373,183 @@ gs_content_rating_key_value_to_str (const gchar *id, MctAppFilterOarsValue value } /* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */ -const gchar * +static char * +get_esrb_string (gchar *source, gchar *translate) +{ + if (g_strcmp0 (source, translate) == 0) + return g_strdup (source); + /* TRANSLATORS: This is the formatting of English and localized name + of the rating e.g. "Adults Only (solo adultos)" */ + return g_strdup_printf (_("%s (%s)"), source, translate); +} + +/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */ +gchar * gs_utils_content_rating_age_to_str (GsContentRatingSystem system, guint age) { if (system == GS_CONTENT_RATING_SYSTEM_INCAA) { if (age >= 18) - return "+18"; + return g_strdup ("+18"); if (age >= 13) - return "+13"; - return "ATP"; + return g_strdup ("+13"); + return g_strdup ("ATP"); } if (system == GS_CONTENT_RATING_SYSTEM_ACB) { if (age >= 18) - return "R18+"; + return g_strdup ("R18+"); if (age >= 15) - return "MA15+"; - return "PG"; + return g_strdup ("MA15+"); + return g_strdup ("PG"); } if (system == GS_CONTENT_RATING_SYSTEM_DJCTQ) { if (age >= 18) - return "18"; + return g_strdup ("18"); if (age >= 16) - return "16"; + return g_strdup ("16"); if (age >= 14) - return "14"; + return g_strdup ("14"); if (age >= 12) - return "12"; + return g_strdup ("12"); if (age >= 10) - return "10"; - return "L"; + return g_strdup ("10"); + return g_strdup ("L"); } if (system == GS_CONTENT_RATING_SYSTEM_GSRR) { if (age >= 18) - return "限制"; + return g_strdup ("限制"); if (age >= 15) - return "輔15"; + return g_strdup ("輔15"); if (age >= 12) - return "輔12"; + return g_strdup ("輔12"); if (age >= 6) - return "保護"; - return "普通"; + return g_strdup ("保護"); + return g_strdup ("普通"); } if (system == GS_CONTENT_RATING_SYSTEM_PEGI) { if (age >= 18) - return "18"; + return g_strdup ("18"); if (age >= 16) - return "16"; + return g_strdup ("16"); if (age >= 12) - return "12"; + return g_strdup ("12"); if (age >= 7) - return "7"; + return g_strdup ("7"); if (age >= 3) - return "3"; + return g_strdup ("3"); return NULL; } if (system == GS_CONTENT_RATING_SYSTEM_KAVI) { if (age >= 18) - return "18+"; + return g_strdup ("18+"); if (age >= 16) - return "16+"; + return g_strdup ("16+"); if (age >= 12) - return "12+"; + return g_strdup ("12+"); if (age >= 7) - return "7+"; + return g_strdup ("7+"); if (age >= 3) - return "3+"; + return g_strdup ("3+"); return NULL; } if (system == GS_CONTENT_RATING_SYSTEM_USK) { if (age >= 18) - return "18"; + return g_strdup ("18"); if (age >= 16) - return "16"; + return g_strdup ("16"); if (age >= 12) - return "12"; + return g_strdup ("12"); if (age >= 6) - return "6"; - return "0"; + return g_strdup ("6"); + return g_strdup ("0"); } /* Reference: http://www.esra.org.ir/ */ if (system == GS_CONTENT_RATING_SYSTEM_ESRA) { if (age >= 18) - return "+18"; + return g_strdup ("+18"); if (age >= 15) - return "+15"; + return g_strdup ("+15"); if (age >= 12) - return "+12"; + return g_strdup ("+12"); if (age >= 7) - return "+7"; + return g_strdup ("+7"); if (age >= 3) - return "+3"; + return g_strdup ("+3"); return NULL; } if (system == GS_CONTENT_RATING_SYSTEM_CERO) { if (age >= 18) - return "Z"; + return g_strdup ("Z"); if (age >= 17) - return "D"; + return g_strdup ("D"); if (age >= 15) - return "C"; + return g_strdup ("C"); if (age >= 12) - return "B"; - return "A"; + return g_strdup ("B"); + return g_strdup ("A"); } if (system == GS_CONTENT_RATING_SYSTEM_OFLCNZ) { if (age >= 18) - return "R18"; + return g_strdup ("R18"); if (age >= 16) - return "R16"; + return g_strdup ("R16"); if (age >= 15) - return "R15"; + return g_strdup ("R15"); if (age >= 13) - return "R13"; - return "G"; + return g_strdup ("R13"); + return g_strdup ("G"); } if (system == GS_CONTENT_RATING_SYSTEM_RUSSIA) { if (age >= 18) - return "18+"; + return g_strdup ("18+"); if (age >= 16) - return "16+"; + return g_strdup ("16+"); if (age >= 12) - return "12+"; + return g_strdup ("12+"); if (age >= 6) - return "6+"; - return "0+"; + return g_strdup ("6+"); + return g_strdup ("0+"); } if (system == GS_CONTENT_RATING_SYSTEM_MDA) { if (age >= 18) - return "M18"; + return g_strdup ("M18"); if (age >= 16) - return "ADV"; - return "General"; + return g_strdup ("ADV"); + return get_esrb_string ("General", _("General")); } if (system == GS_CONTENT_RATING_SYSTEM_GRAC) { if (age >= 18) - return "18"; + return g_strdup ("18"); if (age >= 15) - return "15"; + return g_strdup ("15"); if (age >= 12) - return "12"; - return "ALL"; + return g_strdup ("12"); + return get_esrb_string ("ALL", _("ALL")); } if (system == GS_CONTENT_RATING_SYSTEM_ESRB) { if (age >= 18) - return "Adults Only"; + return get_esrb_string ("Adults Only", _("Adults Only")); if (age >= 17) - return "Mature"; + return get_esrb_string ("Mature", _("Mature")); if (age >= 13) - return "Teen"; + return get_esrb_string ("Teen", _("Teen")); if (age >= 10) - return "Everyone 10+"; + return get_esrb_string ("Everyone 10+", _("Everyone 10+")); if (age >= 6) - return "Everyone"; - return "Early Childhood"; + return get_esrb_string ("Everyone", _("Everyone")); + + return get_esrb_string ("Early Childhood", _("Early Childhood")); } /* IARC = everything else */ if (age >= 18) - return "18+"; + return g_strdup ("18+"); if (age >= 16) - return "16+"; + return g_strdup ("16+"); if (age >= 12) - return "12+"; + return g_strdup ("12+"); if (age >= 7) - return "7+"; + return g_strdup ("7+"); if (age >= 3) - return "3+"; + return g_strdup ("3+"); return NULL; } diff --git a/libmalcontent-ui/gs-content-rating.h b/libmalcontent-ui/gs-content-rating.h index 6a111ae..a9092b4 100644 --- a/libmalcontent-ui/gs-content-rating.h +++ b/libmalcontent-ui/gs-content-rating.h @@ -47,7 +47,7 @@ typedef enum { GS_CONTENT_RATING_SYSTEM_LAST } GsContentRatingSystem; -const gchar *gs_utils_content_rating_age_to_str (GsContentRatingSystem system, +gchar *gs_utils_content_rating_age_to_str (GsContentRatingSystem system, guint age); GsContentRatingSystem gs_utils_content_rating_system_from_locale (const gchar *locale); const gchar *gs_content_rating_key_value_to_str (const gchar *id, diff --git a/libmalcontent-ui/user-controls.c b/libmalcontent-ui/user-controls.c index 5b58ca5..ae0cf8a 100644 --- a/libmalcontent-ui/user-controls.c +++ b/libmalcontent-ui/user-controls.c @@ -374,7 +374,7 @@ static void update_oars_level (MctUserControls *self) { GsContentRatingSystem rating_system; - const gchar *rating_age_category; + g_autofree gchar *rating_age_category = NULL; guint maximum_age; gsize i; gboolean all_categories_unset; @@ -407,7 +407,10 @@ update_oars_level (MctUserControls *self) /* Unrestricted? */ if (rating_age_category == NULL || all_categories_unset) - rating_age_category = _("All Ages"); + { + g_clear_pointer (&rating_age_category, g_free); + rating_age_category = g_strdup (_("All Ages")); + } gtk_label_set_label (self->oars_button_label, rating_age_category); }