مشكلة تشفير الأحرف الخاصة في نصائح الانضمام

انظر إلى الزر:

لن أتفاجأ إذا كانت المشكلة موجودة في جميع تلميحات الأدوات.

6 إعجابات

لقد واجهت نفس المشكلة.
نظرة سريعة على Discourse تظهر أن escape يُستخدم على تسمية الزر والعنوان والمحتوى.

ماذا يعني escape:

في سياق نصي، تبدو هذه كلها أحرف صالحة للاستخدام.

أتساءل، هل هذا مطلوب هنا؟
أعتقد أن HTML غير المميز بـ htmlSafe سيتم الهروب منه بواسطة القالب؟ :thinking:

إعجابَين (2)

قد يكون الإصلاح هو استبدال علامة الاقتباس البرمجية بعلامة الاقتباس الفرنسية الفعلية.

استخدم:
لا تستخدم: '

هذا الرمز غير موجود في لوحات مفاتيح QWERTY الأمريكية ولا يوجد أيضًا في لوحات AZERTY القديمة ولكنه موجود في كلتا لوحتي المفاتيح الفرنسيتين الجديدتين AFNOR (الجمعية الفرنسية للتوحيد القياسي)، سواء كانت AZERTY الجديدة أو BÉPO.

لن يؤدي ذلك إلى إصلاح المشكلة الأعمق المتمثلة في عدم الهروب من علامة الاقتباس البرمجية بشكل صحيح، ولكن علامة الاقتباس الفرنسية الحقيقية هي الصحيحة للاستخدام ويجب أن تكون هي التي يستخدمها معظم المتحدثين بالفرنسية في الكتابة بمجرد أن يكون غالبية منهم على لوحات المفاتيح القياسية.

لم يتم توحيد لوحة مفاتيح AZERTY القديمة فعليًا من قبل أي هيئة رسمية.

إعجاب واحد (1)

واجهت نفس المشكلة في Discourse 3.4.1…
لا يمكنني استبدال كل علامات الاقتباس المفردة (') على الموقع. هل لديك أي اقتراحات؟

لقد قمت للتو بإصلاح هذه المشكلة ببعض التعليمات البرمجية المخصصة، واستبدل ' بـ في I18n.translations

withPluginApi("0.8.18", (api) => {
    const locale = I18n.currentLocale();

    function replaceSingleQuotes(obj) {
        if (typeof obj === 'string') {
            // Split the string into HTML tags and non-tag parts
            return obj.split(/(<[^>]+>)/g).map(segment => {
                // If the segment is an HTML tag, do not replace anything
                if (segment.startsWith('<') && segment.endsWith('>')) {
                    return segment;
                } else {
                    // Replace single quotes only in non-HTML parts
                    return segment.replace(/'/g, '’');
                }
            }).join('');
        } else if (typeof obj === 'object' && obj !== null) {
            // Recursively process object properties
            for (const key in obj) {
                obj[key] = replaceSingleQuotes(obj[key]);
            }
        }
        return obj;
    }

    if (I18n.translations[locale].js) {
        I18n.translations[locale].js = replaceSingleQuotes(I18n.translations[locale].js);
    }
});

إعجاب واحد (1)

تم إصلاح هذا الآن باتباع هذا الالتزام: FIX: user tips in languages with apostrophes by pmusaraj · Pull Request #34118 · discourse/discourse · GitHub

شكرا على التقرير!

4 إعجابات

تم إغلاق هذا الموضوع تلقائيًا بعد 3 أيام. لم يعد يُسمح بالردود الجديدة.