Bonjour,
Lors de l’utilisation de la localisation du contenu avec les traductions Discourse AI et Cloudflare R2 comme stockage compatible S3, le contenu des posts traduits stocke l’URL brute du point d’accès (endpoint) du bucket R2 au lieu de l’s3_cdn_url configuré (domaine personnalisé). Les images sont affichées en erreur pour tous les utilisateurs consultant les traductions.
Environnement
- Discourse : dernière version
- Cloudflare R2 configuré via un stockage compatible S3
s3_cdn_url:https://files.mydomain.coms3_use_cdn_url_for_all_uploads: activé- Localisation du contenu + traduction Discourse AI : activés
Étapes pour reproduire
- Configurer Cloudflare R2 avec un domaine personnalisé (
s3_cdn_url) - Activer la localisation du contenu et la traduction IA
- Créer un post contenant une image
- Attendre que la traduction IA génère la version localisée
- Changer de langue — les images dans la version traduite sont cassées
Comportement observé
Le contenu traduit contient des URL comme :
//files.myendpoint.r2.cloudflarestorage.com/original/1X/ au lieu de https://files.mydomain.com/original/1X/
Bogue lié : Chat thumbnails bypass s3_cdn_url & use raw S3 bucket URLs
Un correctif temporaire consiste à effectuer un remappage ou à utiliser ce 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());
});



