La localizzazione dei contenuti usa l'URL grezzo del bucket R2 invece dell'URL CDN S3 nei post tradotti

Ciao,

Quando si utilizza la localizzazione dei contenuti con le traduzioni di Discourse AI e Cloudflare R2 come storage compatibile S3, il contenuto dei post tradotti memorizza l’URL grezzo dell’endpoint del bucket R2 invece dell’s3_cdn_url configurato (dominio personalizzato). Le immagini risultano rotte per tutti gli utenti che visualizzano le traduzioni.

Ambiente

  • Discourse: ultima versione
  • Cloudflare R2 configurato tramite storage compatibile S3
  • s3_cdn_url: https://files.mydomain.com
  • s3_use_cdn_url_for_all_uploads: abilitato
  • Localizzazione dei contenuti + traduzione Discourse AI: abilitata

Passaggi per riprodurre il problema

  1. Configura Cloudflare R2 con un dominio personalizzato (s3_cdn_url)
  2. Abilita la localizzazione dei contenuti e la traduzione AI
  3. Crea un post con un’immagine
  4. Attendi che la traduzione AI generi la versione localizzata
  5. Cambia lingua — le immagini nella versione tradotta sono rotte

Comportamento osservato

Il contenuto tradotto contiene URL come:

//files.myendpoint.r2.cloudflarestorage.com/original/1X/ invece di https://files.mydomain.com/original/1X/

Bug correlato: Chat thumbnails bypass s3_cdn_url & use raw S3 bucket URLs

una soluzione temporanea è effettuare un remapping o utilizzare questo tema component:

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("1.8.0", (api) => {
  const badDomain = "files.myendpoint.r2.cloudflarestorage.com";
  const goodDomain = "files.mydomain.com";

  function fixImages() {
    document.querySelectorAll(`img[src*="${badDomain}"]`).forEach(img => {
      img.src = img.src.replace(badDomain, goodDomain);
    });
    document.querySelectorAll(`img[data-src*="${badDomain}"]`).forEach(img => {
      img.dataset.src = img.dataset.src.replace(badDomain, goodDomain);
    });
    document.querySelectorAll(`img[data-large-src*="${badDomain}"]`).forEach(img => {
      img.dataset.largeSrc = img.dataset.largeSrc.replace(badDomain, goodDomain);
    });
  }

  api.decorateCooked(() => fixImages(), { id: "fix-r2-translated-images" });
  api.onPageChange(() => fixImages());
});

non ne sono così sicuro. ho bucket Cloudflare R2 per lo storage degli oggetti e i backup sul nostro sito e abbiamo più lingue con traduzione AI - le immagini vengono caricate senza problemi in tutte.

ad esempio:

Inglese

Tedesco

Russo

Portoghese

Sì, nei miei test sto caricando da 3 a 5 immagini. Ma solo 1 o 2 funzionano come previsto.