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
- Bei
:post_createdstellt discourse-aiJobs::DetectTranslatePostin 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. PostJobsEnqueuerstellt:post_alertzum selben Zeitpunkt in die Warteschlange.PostAlerter.push_notificationstelltJobs::DeliverPushNotificationsofort in die Warteschlange. Sie wird nur verzögert, wenn der Empfänger innerhalb vonpush_notification_time_window_mins(Standard: 1) gesehen wurde, und dann nur um den Rest dieses Zeitfensters.DeliverPushNotification#localize_content!sucht nachTopicLocalizationundPostLocalizationfüruser.effective_localeeinmalig, 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.- Benachrichtigungs-E-Mails durchlaufen
NotificationEmailermit einer Verzögerung vonemail_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
- 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,
DeliverPushNotificationeinmalig 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. - Den Inhalt mit der gemeinsamen Regel auswählen. Der Push-Job führt seine eigene Suche nach
effective_localedurch. Die E-Mail-Änderung in #44240 läuft überContentLocalization.show_translated_post?und vergleichtpost_version. Die Verwendung desselben Pfads für Push würdeautomatically_translateundunderstood_languagesrespektieren, veraltete Übersetzungen überspringen und mit E-Mails und der Themenansicht konsistent bleiben. - Dasselbe auf Live-Benachrichtigungen anwenden. Die an
/notification-alert/:user_idinPostAlerter.create_notification_alertveröffentlichte Nutzlast enthält den ursprünglichen Titel und die Auszüge. Der Modifikatorpost_alerter_live_notification_payloadexistiert, aber der Kern lokalisiert die Nutzlast nicht.