A Localização de Conteúdo usa a URL bruta do bucket R2 em vez da URL do CDN S3 nas publicações traduzidas

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.com
  • s3_use_cdn_url_for_all_uploads: habilitado
  • Localização de Conteúdo + tradução do Discourse AI: habilitado

Etapas para reproduzir

  1. Configure o Cloudflare R2 com um domínio personalizado (s3_cdn_url)
  2. Habilite a Localização de Conteúdo e a tradução por IA
  3. Crie uma post com uma imagem
  4. Aguarde a geração da versão localizada pela tradução da IA
  5. 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());
});

não tenho tanta certeza disso. eu uso buckets do Cloudflare R2 para armazenamento de objetos e backups no nosso site e temos múltiplos idiomas com tradução por IA - as imagens estão carregando normalmente em todos eles.

por exemplo:

Inglês

Alemão

Russo

Português

Sim, nos meus testes estou enviando de 3 a 5 imagens. Mas apenas 1 ou 2 funcionam como esperado.