From f543e7be633cf13ba39a002dd32c167933d67991 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 14 Jul 2024 13:36:52 -0400 Subject: [PATCH] improve season title display --- catalog/common/models.py | 2 +- catalog/templates/item_base.html | 26 +++++++------- catalog/tv/models.py | 36 ++++++++++--------- common/models/lang.py | 21 +++++++++++ common/static/scss/_item.scss | 1 + common/templates/common_libs.html | 2 +- locale/zh_Hans/LC_MESSAGES/django.po | 2 +- locale/zh_Hant/LC_MESSAGES/django.po | 2 +- ...en_append_to_response_external_ids_credits | 1 + ...pt_append_to_response_external_ids_credits | 1 + ...CN_append_to_response_external_ids_credits | 1 + ...HK_append_to_response_external_ids_credits | 1 + ...TW_append_to_response_external_ids_credits | 1 + ...en_append_to_response_external_ids_credits | 1 + ...pt_append_to_response_external_ids_credits | 1 + ...CN_append_to_response_external_ids_credits | 1 + ...HK_append_to_response_external_ids_credits | 1 + ...TW_append_to_response_external_ids_credits | 1 + ...US_append_to_response_external_ids_credits | 1 + 19 files changed, 70 insertions(+), 33 deletions(-) create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_api_key_8964_language_en_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_api_key_8964_language_pt_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_api_key_8964_language_zh_CN_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_api_key_8964_language_zh_HK_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_api_key_8964_language_zh_TW_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_api_key_8964_language_en_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_api_key_8964_language_pt_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_api_key_8964_language_zh_CN_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_api_key_8964_language_zh_HK_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_api_key_8964_language_zh_TW_append_to_response_external_ids_credits create mode 100644 test_data/https___api_themoviedb_org_3_tv_1668_season_2_episode_1_api_key_8964_language_en_US_append_to_response_external_ids_credits diff --git a/catalog/common/models.py b/catalog/common/models.py index 9ed833da..d6baea2e 100644 --- a/catalog/common/models.py +++ b/catalog/common/models.py @@ -592,7 +592,7 @@ class Item(PolymorphicModel): def get_localized_title(self) -> str | None: if self.localized_title: - locales = get_current_locales() + locales = get_current_locales() + PREFERRED_LOCALES for loc in locales: v = next( filter(lambda t: t["lang"] == loc, self.localized_title), {} diff --git a/catalog/templates/item_base.html b/catalog/templates/item_base.html index a1e0ae04..d32d0e89 100644 --- a/catalog/templates/item_base.html +++ b/catalog/templates/item_base.html @@ -198,20 +198,20 @@
- {% if item.display_subtitle %}

{{ item.display_subtitle }}

{% endif %} - {% if item.orig_title %} -

- {{ item.orig_title }} - - {% if item.season_number %}Season {{ item.season_number }}{% endif %} - -

- {% endif %} - {% if item.parent_item %} -

+

+ {% if item.display_subtitle %}{{ item.display_subtitle }}{% endif %} + {% if item.orig_title and item.orig_title != item.display_title %} +

+ {{ item.orig_title }} + + {% if item.season_number %}Season {{ item.season_number }}{% endif %} + +

+ {% endif %} + {% if item.parent_item %} {% trans 'part of' %} {{ item.parent_item.type.label }}: {{ item.parent_item.display_title }} -

- {% endif %} + {% endif %} +

{% if item.author or item.translator %}

diff --git a/catalog/tv/models.py b/catalog/tv/models.py index a792966d..27633a9a 100644 --- a/catalog/tv/models.py +++ b/catalog/tv/models.py @@ -48,6 +48,7 @@ from catalog.common import ( jsondata, ) from catalog.common.models import LANGUAGE_CHOICES_JSONFORM, LanguageListField +from common.models.lang import RE_LOCALIZED_SEASON_NUMBERS, localize_number class TVShowInSchema(ItemInSchema): @@ -248,6 +249,9 @@ class TVShow(Item): def child_items(self): return self.all_seasons + def get_season_count(self): + return self.season_count or self.seasons.all().count() + class TVSeason(Item): if TYPE_CHECKING: @@ -398,26 +402,26 @@ class TVSeason(Item): ] return [(i.value, i.label) for i in id_types] - @property + @cached_property def display_title(self): - if self.season_number and self.parent_item: - if self.parent_item and ( - self.parent_item.season_count == 1 or not self.parent_item.season_count - ): + """ + returns season title for display: + - "Season Title" if it's not a bare "Season X" + - "Show Title" if it's the only season + - "Show Title Season X" with some localization + """ + s = super().display_title + if RE_LOCALIZED_SEASON_NUMBERS.sub("", s) == "" and self.parent_item: + if self.parent_item.get_season_count() == 1: return self.parent_item.display_title - else: - return _("{show_title} S{season_number}").format( + elif self.season_number: + return _("{show_title} Season {season_number}").format( show_title=self.parent_item.display_title, - season_number=self.season_number, + season_number=localize_number(self.season_number), ) - else: - return super().display_title - - @property - def display_subtitle(self): - return ( - super().display_title if self.season_number and self.parent_item else None - ) + else: + return f"{self.parent_item.display_title} {s}" + return s def update_linked_items_from_external_resource(self, resource): for w in resource.required_resources: diff --git a/common/models/lang.py b/common/models/lang.py index 9ba2f60d..9bc50379 100644 --- a/common/models/lang.py +++ b/common/models/lang.py @@ -240,6 +240,10 @@ ZH_LANGUAGE_SUBTAGS = { "wuu": _("Wu Chinese"), "hak": _("Hakka Chinese"), } +RE_LOCALIZED_SEASON_NUMBERS = re.compile( + r"〇|一|二|三|四|五|六|七|八|九|零|十|\d|\s|\.|S|Season|#|第|季", + flags=re.IGNORECASE, +) def get_preferred_locales(): @@ -257,6 +261,23 @@ def get_preferred_locales(): PREFERRED_LOCALES = get_preferred_locales() +def localize_number(i: int) -> str: + lang = get_language().lower() + if lang == "zh" or lang.startswith("zh-"): + # TODO this works but can be much better + if i < 0 or i > 99: + return str(i) + s = "零一二三四五六七八九" + match i // 10: + case 0: + return s[i % 10] + case 1: + return "十" + s[i % 10] + case _: + return s[i // 10] + "十" + s[i % 10] + return str(i) + + def get_base_lang_list(): langs = {} for k in PREFERRED_LANGUAGES + TOP_USED_LANG: diff --git a/common/static/scss/_item.scss b/common/static/scss/_item.scss index 0d07bb98..bd8c950d 100644 --- a/common/static/scss/_item.scss +++ b/common/static/scss/_item.scss @@ -76,6 +76,7 @@ #item-title-more { margin-top: 0; + margin-bottom: 1em; } #item-title h1 { diff --git a/common/templates/common_libs.html b/common/templates/common_libs.html index eef2561e..c01313c6 100644 --- a/common/templates/common_libs.html +++ b/common/templates/common_libs.html @@ -21,7 +21,7 @@ -