mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 19:06:09 +00:00
i18n: Add i18n to 'REDACTED' message in push notifications.
When a user has disabled message content in mobile push notifications, we send a fixed string (currently "REDACTED") as the content of the notification. Previously, this string was not tagged for translation; we fix that here. Additionally, because mobile push notifications are generated in a queue worker, they do not have the user's language set by the Django middleware. Our email notifications solve that problem using `override_language`; we do the same here. We choose to do override_language in get_message_payload_apns and get_message_payload_gcm, rather than the caller, in order to be consistent with tests. Tested end-to-end by tabbott by setting a translation for "REDACTED" manually in German. Fixes #18713.
This commit is contained in:
@@ -14,6 +14,7 @@ from django.db import IntegrityError, transaction
|
|||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
from django.utils.translation import override as override_language
|
||||||
|
|
||||||
from zerver.decorator import statsd_increment
|
from zerver.decorator import statsd_increment
|
||||||
from zerver.lib.avatar import absolute_avatar_url
|
from zerver.lib.avatar import absolute_avatar_url
|
||||||
@@ -629,7 +630,7 @@ def get_mobile_push_content(rendered_content: str) -> str:
|
|||||||
return plain_text
|
return plain_text
|
||||||
|
|
||||||
if settings.PUSH_NOTIFICATION_REDACT_CONTENT:
|
if settings.PUSH_NOTIFICATION_REDACT_CONTENT:
|
||||||
return "***REDACTED***"
|
return "***" + _("REDACTED") + "***"
|
||||||
|
|
||||||
elem = lxml.html.fromstring(rendered_content)
|
elem = lxml.html.fromstring(rendered_content)
|
||||||
plain_text = process(elem)
|
plain_text = process(elem)
|
||||||
@@ -744,17 +745,18 @@ def get_message_payload_apns(user_profile: UserProfile, message: Message) -> Dic
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert message.rendered_content is not None
|
assert message.rendered_content is not None
|
||||||
content, _ = truncate_content(get_mobile_push_content(message.rendered_content))
|
with override_language(user_profile.default_language):
|
||||||
apns_data = {
|
content, _ = truncate_content(get_mobile_push_content(message.rendered_content))
|
||||||
"alert": {
|
apns_data = {
|
||||||
"title": get_apns_alert_title(message),
|
"alert": {
|
||||||
"subtitle": get_apns_alert_subtitle(message),
|
"title": get_apns_alert_title(message),
|
||||||
"body": content,
|
"subtitle": get_apns_alert_subtitle(message),
|
||||||
},
|
"body": content,
|
||||||
"sound": "default",
|
},
|
||||||
"badge": get_apns_badge_count(user_profile),
|
"sound": "default",
|
||||||
"custom": {"zulip": zulip_data},
|
"badge": get_apns_badge_count(user_profile),
|
||||||
}
|
"custom": {"zulip": zulip_data},
|
||||||
|
}
|
||||||
return apns_data
|
return apns_data
|
||||||
|
|
||||||
|
|
||||||
@@ -765,17 +767,18 @@ def get_message_payload_gcm(
|
|||||||
"""A `message` payload + options, for Android via GCM/FCM."""
|
"""A `message` payload + options, for Android via GCM/FCM."""
|
||||||
data = get_message_payload(user_profile, message)
|
data = get_message_payload(user_profile, message)
|
||||||
assert message.rendered_content is not None
|
assert message.rendered_content is not None
|
||||||
content, truncated = truncate_content(get_mobile_push_content(message.rendered_content))
|
with override_language(user_profile.default_language):
|
||||||
data.update(
|
content, truncated = truncate_content(get_mobile_push_content(message.rendered_content))
|
||||||
event="message",
|
data.update(
|
||||||
alert=get_gcm_alert(message),
|
event="message",
|
||||||
zulip_message_id=message.id, # message_id is reserved for CCS
|
alert=get_gcm_alert(message),
|
||||||
time=datetime_to_timestamp(message.date_sent),
|
zulip_message_id=message.id, # message_id is reserved for CCS
|
||||||
content=content,
|
time=datetime_to_timestamp(message.date_sent),
|
||||||
content_truncated=truncated,
|
content=content,
|
||||||
sender_full_name=message.sender.full_name,
|
content_truncated=truncated,
|
||||||
sender_avatar_url=absolute_avatar_url(message.sender),
|
sender_full_name=message.sender.full_name,
|
||||||
)
|
sender_avatar_url=absolute_avatar_url(message.sender),
|
||||||
|
)
|
||||||
gcm_options = {"priority": "high"}
|
gcm_options = {"priority": "high"}
|
||||||
return data, gcm_options
|
return data, gcm_options
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user