From 4438994c153678cae65fe55aed1c6c03c6d52713 Mon Sep 17 00:00:00 2001 From: WANG Xuerui Date: Sun, 21 Jul 2024 15:13:46 +0800 Subject: [PATCH] fix(ruyipkg): migrate to new locale fallback logic Fixes: #173 --- ruyi/ruyipkg/msg.py | 10 +++++----- ruyi/ruyipkg/news.py | 9 +++------ 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/ruyi/ruyipkg/msg.py b/ruyi/ruyipkg/msg.py index 715370e3..16c20cba 100644 --- a/ruyi/ruyipkg/msg.py +++ b/ruyi/ruyipkg/msg.py @@ -2,6 +2,9 @@ from jinja2 import BaseLoader, Environment, TemplateNotFound +from ..utils.l10n import match_lang_code + + RepoMessagesV1Type = TypedDict( "RepoMessagesV1Type", { @@ -50,11 +53,8 @@ def from_object(cls, obj: object) -> "RepoMessageStore": return cls(obj) def get_message_template(self, msgid: str, lang_code: str) -> str | None: - if lang_code not in self._msgs_by_lang_code: - # TODO: fallback - return None - - return self._msgs_by_lang_code[lang_code].get(msgid) + resolved_lang_code = match_lang_code(lang_code, self._msgs_by_lang_code.keys()) + return self._msgs_by_lang_code[resolved_lang_code].get(msgid) def get_jinja(self, lang_code: str) -> Environment: if lang_code in self._cached_envs_by_lang_code: diff --git a/ruyi/ruyipkg/news.py b/ruyi/ruyipkg/news.py index aeb1abd5..d2d0d53f 100644 --- a/ruyi/ruyipkg/news.py +++ b/ruyi/ruyipkg/news.py @@ -6,6 +6,7 @@ from ..config.news import NewsReadStatusStore from ..utils.porcelain import PorcelainEntity, PorcelainEntityType +from ..utils.l10n import match_lang_code NEWS_FILENAME_RE = re.compile(r"^(\d+-\d{2}-\d{2}-.*?)(\.[0-9A-Za-z_-]+)?\.md$") @@ -127,12 +128,8 @@ def __delitem__(self, lang: str) -> None: del self._content_by_lang[lang] def get_content_for_lang(self, lang: str) -> "NewsItemContent": - if lang in self: - return self[lang] - - # fallback to the first (or indeed, only) language that's present - # this should be enough for our use - return list(self._content_by_lang.values())[0] + resolved_lang_code = match_lang_code(lang, self._content_by_lang.keys()) + return self[resolved_lang_code] def to_porcelain(self) -> "PorcelainNewsItemV1": return {