Olá,
Ao usar a Localização de Conteúdo com as traduções do Discourse AI e o Cloudflare R2 como armazenamento compatível com S3, o conteúdo das posts traduzidas armazena a URL bruta do endpoint do bucket R2 em vez da s3_cdn_url configurada (domínio personalizado). As imagens aparecem quebradas para todos os usuários que visualizam as traduções.
Ambiente
- Discourse: versão mais recente
- Cloudflare R2 configurado via armazenamento compatível com S3
s3_cdn_url:https://files.mydomain.coms3_use_cdn_url_for_all_uploads: habilitado- Localização de Conteúdo + tradução do Discourse AI: habilitado
Etapas para reproduzir
- Configure o Cloudflare R2 com um domínio personalizado (
s3_cdn_url) - Habilite a Localização de Conteúdo e a tradução por IA
- Crie uma post com uma imagem
- Aguarde a geração da versão localizada pela tradução da IA
- Alterne o idioma — as imagens na versão traduzida estão quebradas
Comportamento observado
O conteúdo traduzido contém URLs como:
//files.myendpoint.r2.cloudflarestorage.com/original/1X/ em vez de https://files.mydomain.com/original/1X/
Bug relacionado: Chat thumbnails bypass s3_cdn_url & use raw S3 bucket URLs
Uma correção temporária é fazer um remapeamento ou usar este tc:
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());
});



