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.coms3_use_cdn_url_for_all_uploads: abilitato- Localizzazione dei contenuti + traduzione Discourse AI: abilitata
Passaggi per riprodurre il problema
- Configura Cloudflare R2 con un dominio personalizzato (
s3_cdn_url) - Abilita la localizzazione dei contenuti e la traduzione AI
- Crea un post con un’immagine
- Attendi che la traduzione AI generi la versione localizzata
- 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());
});



