Lokalisierung: Push-Benachrichtigungen für neue Beiträge werden vor der Speicherung der Übersetzung gesendet

Zusammenfassung

Wenn Content-Lokalisierung und KI-Übersetzung aktiviert sind, enthält die Push-Benachrichtigung für einen neuen Beitrag fast immer den Originaltext des Autors, selbst wenn der Empfänger eine andere Sprache liest und eine Übersetzung wenige Sekunden später gespeichert wird. Die Push-Benachrichtigung wird beim Erstellen des Beitrags in die Warteschlange gestellt und sucht einmalig nach einer Übersetzung, bevor der Übersetzungsvorgang abgeschlossen ist.

Übersetzte E-Mails wurden heute in dieser Antwort (#44240) angekündigt. E-Mails sind dieser zeitlichen Verzögerung nicht ausgesetzt, Push-Benachrichtigungen hingegen schon. Sobald diese Änderung implementiert ist, erreichen E-Mail und Push-Benachrichtigung für denselben Beitrag dasselbe Mitglied in unterschiedlichen Sprachen.

Was ein Mitglied sieht

Ein Mitglied, dessen Interface-Sprache Englisch ist, erhält eine Push-Benachrichtigung (im Browser und mobil) für ein neues Thema, das auf Französisch geschrieben wurde. Der Text der Benachrichtigung ist auf Französisch. Öffnet man die Benachrichtigung, wird der Beitrag auf Englisch angezeigt.

Messung

Website mit release/2026.7 (2026.7.3) und dem mitgelieferten discourse-ai-Plugin, unterstützte Lokale en, fr, de und it, Übersetzung über gemini-3.8-flash und Spracherkennung über gemini-3.5-flash-lite.

Bei 11 übersetzten Beiträgen wurde die erste Übersetzung 2 bis 3 Sekunden nach der Erstellung des Beitrags gespeichert, die letzte der drei 4 bis 7 Sekunden später. Im beobachteten Fall wurde die Übersetzung in die Sprache des Empfängers 2 Sekunden nach dem Beitrag gespeichert, und die Push-Benachrichtigung war bereits mit dem Originaltext versendet worden.

Die Verzögerung kann auf jeder Website mit folgendem Befehl abgelesen werden:

SELECT p.id,
       p.locale AS post_locale,
       pl.locale AS translation_locale,
       ROUND(EXTRACT(EPOCH FROM (pl.created_at - p.created_at))) AS seconds_after_post
FROM posts p
JOIN post_localizations pl ON pl.post_id = p.id
WHERE p.created_at > NOW() - INTERVAL '2 days'
ORDER BY p.id, pl.created_at

Ursache

  1. Bei :post_created stellt discourse-ai Jobs::DetectTranslatePost in die Warteschlange (plugins/discourse-ai/lib/translation/entry_point.rb). Der Job erkennt die Sprache mit einem Modellaufruf und übersetzt dann nacheinander in jedes andere unterstützte Lokale.
  2. PostJobsEnqueuer stellt :post_alert zum selben Zeitpunkt in die Warteschlange. PostAlerter.push_notification stellt Jobs::DeliverPushNotification sofort in die Warteschlange. Sie wird nur verzögert, wenn der Empfänger innerhalb von push_notification_time_window_mins (Standard: 1) gesehen wurde, und dann nur um den Rest dieses Zeitfensters.
  3. DeliverPushNotification#localize_content! sucht nach TopicLocalization und PostLocalization für user.effective_locale einmalig, wenn der Job ausgeführt wird. Wenn keine gefunden werden, werden der ursprüngliche Titel und die Auszüge gesendet. Es wird nicht gewartet oder erneut versucht.
  4. Benachrichtigungs-E-Mails durchlaufen NotificationEmailer mit einer Verzögerung von email_time_window_mins (Standard: 10), sodass die Übersetzung zum Zeitpunkt des Erstellens der E-Mail bereits vorhanden ist.

app/jobs/regular/deliver_push_notification.rb ist bei v2026.7.3 und auf main bei b5548f76 (2026-10-05) identisch.

Anfrage

  1. Die Push-Benachrichtigung für einen neuen Beitrag zurückhalten, bis seine Übersetzung gespeichert ist. Eine Option: Wenn die Content-Lokalisierung aktiviert ist und der Beitrag noch kein erkanntes Lokale hat oder keine Lokalisierung für das Lokale des Empfängers vorliegt, während eine erwartet wird, DeliverPushNotification einmalig nach einer kurzen Verzögerung erneut in die Warteschlange stellen und dann alles verfügbare senden. Wenige Sekunden würden die oben gemessenen Fälle abdecken.
  2. Den Inhalt mit der gemeinsamen Regel auswählen. Der Push-Job führt seine eigene Suche nach effective_locale durch. Die E-Mail-Änderung in #44240 läuft über ContentLocalization.show_translated_post? und vergleicht post_version. Die Verwendung desselben Pfads für Push würde automatically_translate und understood_languages respektieren, veraltete Übersetzungen überspringen und mit E-Mails und der Themenansicht konsistent bleiben.
  3. Dasselbe auf Live-Benachrichtigungen anwenden. Die an /notification-alert/:user_id in PostAlerter.create_notification_alert veröffentlichte Nutzlast enthält den ursprünglichen Titel und die Auszüge. Der Modifikator post_alerter_live_notification_payload existiert, aber der Kern lokalisiert die Nutzlast nicht.

Verwandt

2 „Gefällt mir“