Merge pull request #3817 from peddn/ingame_reports-translation_fix

ingame_reports i18n and possible fix
This commit is contained in:
Griatch 2025-10-22 12:59:20 +02:00 committed by GitHub
commit 588b6f4d35
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 733 additions and 96 deletions

View file

@ -3,6 +3,7 @@ The report-management menu module.
""" """
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext as _
from evennia.comms.models import Msg from evennia.comms.models import Msg
from evennia.utils import logger from evennia.utils import logger
@ -11,7 +12,11 @@ from evennia.utils.utils import crop, datetime_format, is_iter, iter_to_str
# the number of reports displayed on each page # the number of reports displayed on each page
_REPORTS_PER_PAGE = 10 _REPORTS_PER_PAGE = 10
_REPORT_STATUS_TAGS = ("closed", "in progress") # the fallback standard tags
_REPORT_STATUS_TAGS = ("in progress", "rejected")
# the tag, used to mark a report as 'closed'
_REPORT_STATUS_CLOSED_TAG = _("closed")
if hasattr(settings, "INGAME_REPORT_STATUS_TAGS"): if hasattr(settings, "INGAME_REPORT_STATUS_TAGS"):
if is_iter(settings.INGAME_REPORT_STATUS_TAGS): if is_iter(settings.INGAME_REPORT_STATUS_TAGS):
_REPORT_STATUS_TAGS = settings.INGAME_REPORT_STATUS_TAGS _REPORT_STATUS_TAGS = settings.INGAME_REPORT_STATUS_TAGS
@ -19,35 +24,44 @@ if hasattr(settings, "INGAME_REPORT_STATUS_TAGS"):
logger.log_warn( logger.log_warn(
"The 'INGAME_REPORT_STATUS_TAGS' setting must be an iterable of strings; falling back to defaults." "The 'INGAME_REPORT_STATUS_TAGS' setting must be an iterable of strings; falling back to defaults."
) )
# add the 'closed' tag to the tupel of tags
if _REPORT_STATUS_CLOSED_TAG not in _REPORT_STATUS_TAGS:
_REPORT_STATUS_TAGS = _REPORT_STATUS_TAGS + (_REPORT_STATUS_CLOSED_TAG,)
def menunode_list_reports(caller, raw_string, **kwargs): def menunode_list_reports(caller, raw_string, **kwargs):
"""Paginates and lists out reports for the provided hub""" """Paginates and lists out reports for the provided hub"""
hub = caller.ndb._evmenu.hub hub = caller.ndb._evmenu.hub
hub_name = " ".join(hub.key.split("_")).title() hub_name = hub.key.split("_")[0].title() + " "
text = f"Managing {hub_name}" hub_name += _("Reports")
text = _("Managing {hub_name}").format(hub_name=hub_name)
if not (report_list := getattr(caller.ndb._evmenu, "report_list", None)): if not (report_list := getattr(caller.ndb._evmenu, "report_list", None)):
report_list = Msg.objects.search_message(receiver=hub).order_by("db_date_created") report_list = Msg.objects.search_message(receiver=hub).order_by("db_date_created")
caller.ndb._evmenu.report_list = report_list caller.ndb._evmenu.report_list = report_list
# allow the menu to filter print-outs by status # allow the menu to filter print-outs by status
if kwargs.get("status"): status = kwargs.get("status")
if status:
new_report_list = report_list.filter(db_tags__db_key=kwargs["status"]) new_report_list = report_list.filter(db_tags__db_key=kwargs["status"])
# we don't filter reports if there are no reports under that filter # we don't filter reports if there are no reports under that filter
if not new_report_list: if not new_report_list:
text = f"(No {kwargs['status']} reports)\n{text}" text = _(
"(No {status} reports)\n"
"{text}"
).format(status=status, text=text)
else: else:
report_list = new_report_list report_list = new_report_list
text = f"Managing {kwargs['status']} {hub_name}" text = _("Managing {status} {hub_name}").format(status=status, hub_name=hub_name)
else: else:
report_list = report_list.exclude(db_tags__db_key="closed") # use the 'closed' tag lowered, to be sure, the translation included no upper case chars
report_list = report_list.exclude(db_tags__db_key=_REPORT_STATUS_CLOSED_TAG.lower())
# filter by lock access # filter by lock access
report_list = [msg for msg in report_list if msg.access(caller, "read")] report_list = [msg for msg in report_list if msg.access(caller, "read")]
# this will catch both no reports filed and no permissions # this will catch both no reports filed and no permissions
if not report_list: if not report_list:
return "There is nothing there for you to manage.", {} return _("No open {hub_name} at the moment.").format(hub_name=hub_name), {}
page = kwargs.get("page", 0) page = kwargs.get("page", 0)
start = page * _REPORTS_PER_PAGE start = page * _REPORTS_PER_PAGE
@ -63,14 +77,19 @@ def menunode_list_reports(caller, raw_string, **kwargs):
] ]
options.append( options.append(
{ {
"key": ("|uF|nilter by status", "filter", "status", "f"), "key": (_("|uF|nilter by status"), "filter", "status", "f"),
"goto": "menunode_choose_filter", "goto": "menunode_choose_filter",
} }
) )
if start > 0: if start > 0:
options.append( options.append(
{ {
"key": (f"|uP|nrevious {_REPORTS_PER_PAGE}", "previous", "prev", "p"), "key": (
_("|uP|nrevious {_REPORTS_PER_PAGE}").format(_REPORTS_PER_PAGE, _REPORTS_PER_PAGE),
_("previous"),
_("prev"),
_("p")
),
"goto": ( "goto": (
"menunode_list_reports", "menunode_list_reports",
{"page": max(start - _REPORTS_PER_PAGE, 0) // _REPORTS_PER_PAGE}, {"page": max(start - _REPORTS_PER_PAGE, 0) // _REPORTS_PER_PAGE},
@ -80,7 +99,11 @@ def menunode_list_reports(caller, raw_string, **kwargs):
if end < len(report_list): if end < len(report_list):
options.append( options.append(
{ {
"key": (f"|uN|next {_REPORTS_PER_PAGE}", "next", "n"), "key": (
_("|uN|next {_REPORTS_PER_PAGE}").format(_REPORTS_PER_PAGE=_REPORTS_PER_PAGE),
_("next"),
_("n")
),
"goto": ( "goto": (
"menunode_list_reports", "menunode_list_reports",
{"page": (start + _REPORTS_PER_PAGE) // _REPORTS_PER_PAGE}, {"page": (start + _REPORTS_PER_PAGE) // _REPORTS_PER_PAGE},
@ -92,14 +115,14 @@ def menunode_list_reports(caller, raw_string, **kwargs):
def menunode_choose_filter(caller, raw_string, **kwargs): def menunode_choose_filter(caller, raw_string, **kwargs):
"""apply or clear a status filter to the main report view""" """apply or clear a status filter to the main report view"""
text = "View which reports?" text = _("View which reports?")
# options for all the possible statuses # options for all the possible statuses
options = [ options = [
{"desc": status, "goto": ("menunode_list_reports", {"status": status})} {"desc": status, "goto": ("menunode_list_reports", {"status": status})}
for status in _REPORT_STATUS_TAGS for status in _REPORT_STATUS_TAGS
] ]
# no filter # no filter
options.append({"desc": "All open reports", "goto": "menunode_list_reports"}) options.append({"desc": _("All open reports"), "goto": "menunode_list_reports"})
return text, options return text, options
@ -117,18 +140,40 @@ def menunode_manage_report(caller, raw_string, report, **kwargs):
Read out the full report text and targets, and allow for changing the report's status. Read out the full report text and targets, and allow for changing the report's status.
""" """
receivers = [r for r in report.receivers if r != caller.ndb._evmenu.hub] receivers = [r for r in report.receivers if r != caller.ndb._evmenu.hub]
text = f"""\
{report.message} message = report.message
{datetime_format(report.date_created)} by {iter_to_str(report.senders)}{' about '+iter_to_str(r.get_display_name(caller) for r in receivers) if receivers else ''} timestamp = datetime_format(report.date_created)
{iter_to_str(report.tags.all())}""" senders_str = iter_to_str(report.senders)
tags_str = iter_to_str(report.tags.all())
if receivers:
receivers_str = iter_to_str(r.get_display_name(caller) for r in receivers)
about_clause = _(" about {receivers}").format(receivers=receivers_str)
else:
about_clause = ""
text = _(
"{message}\n"
"{timestamp} by {senders}{about_clause}\n"
"{tags}"
).format(
message=message,
timestamp=timestamp,
senders=senders_str,
about_clause=about_clause,
tags=tags_str
)
options = [] options = []
for tag in _REPORT_STATUS_TAGS: for tag in _REPORT_STATUS_TAGS:
if tag in report.tags.all():
desc = _("Unmark as {tag}").format(tag=tag)
else:
desc = _("Mark as {tag}").format(tag=tag)
options.append( options.append(
{ {
"desc": f"{'Unmark' if tag in report.tags.all() else 'Mark' } as {tag}", "desc": desc,
"goto": (_report_toggle_tag, {"report": report, "tag": tag}), "goto": (_report_toggle_tag, {"report": report, "tag": tag}),
} }
) )
options.append({"desc": f"Manage another report", "goto": "menunode_list_reports"}) options.append({"desc": _("Manage another report"), "goto": "menunode_list_reports"})
return text, options return text, options

File diff suppressed because it is too large Load diff