مرحباً،
عند استخدام ترجمة المحتوى (Content Localization) مع ترجمات Discourse AI وتخزين Cloudflare R2 كتخزين متوافق مع S3، يتم تخزين محتوى المنشورات المترجمة باستخدام عنوان URL الخام لنوع R2 بدلاً من s3_cdn_url المُهيأ (النطاق المخصص). يؤدي هذا إلى ظهور الصور مكسورة لجميع المستخدمين الذين يعرضون الترجمات.
البيئة
- Discourse: الإصدار الأحدث
- تم تهيئة Cloudflare R2 عبر تخزين متوافق مع S3
s3_cdn_url:https://files.mydomain.coms3_use_cdn_url_for_all_uploads: مفعّل- ترجمة المحتوى + ترجمة Discourse AI: مفعّل
خطوات إعادة إنتاج المشكلة
- قم بتهيئة Cloudflare R2 بنطاق مخصص (
s3_cdn_url) - فعّل ترجمة المحتوى والترجمة بالذكاء الاصطناعي
- أنشئ منشوراً يحتوي على صورة
- انتظر حتى تولد الترجمة بالذكاء الاصطناعي النسخة المحلية
- بدّل اللغة — ستجد أن الصور في النسخة المترجمة مكسورة
السلوك المرصود
تحتوي المحتوى المترجم على عناوين URL مثل:
//files.myendpoint.r2.cloudflarestorage.com/original/1X/ بدلاً من https://files.mydomain.com/original/1X/
خطأ مرتبط: Chat thumbnails bypass s3_cdn_url & use raw S3 bucket URLs
إصلاح مؤقت يتمثل في إجراء إعادة تعيين أو استخدام هذا الملف (theme 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());
});



