🇫🇷 Проблема кодировки специальных символов в подсказках онбординга

Посмотрите на кнопку:

Меня бы не удивило, если бы эта проблема присутствовала во всех всплывающих подсказках.

6 лайков

Я столкнулся с той же проблемой.

Краткий обзор кода Discourse показывает, что escape используется для метки кнопки, заголовка и содержимого.

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/components/user-tip.gjs#L38-L39

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/components/user-tip.gjs#L54-L58

Что делает escape:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/escape.js

В текстовом контексте это, кажется, все допустимые символы.

Интересно, обязательно ли это здесь?
Я полагаю, что HTML, не помеченный как htmlSafe, будет экранирован шаблоном? :thinking:

2 лайка

Исправлением может стать замена программной апострофной кавычки на настоящую французскую апострофную кавычку.

Используйте:
Не используйте: '

Этот символ отсутствует на американских клавиатурах QWERTY, а также на старых клавиатурах AZERTY, но присутствует на новых французских клавиатурах, соответствующих стандарту AFNOR (Association française de normalisation), — как на новых AZERTY new AZERTY, так и на BÉPO 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') {
            // Разбиваем строку на HTML-теги и нетеговые части
            return obj.split(/(<[^>]+>)/g).map(segment => {
                // Если сегмент является HTML-тегом, ничего не заменяем
                if (segment.startsWith('<') && segment.endsWith('>')) {
                    return segment;
                } else {
                    // Заменяем одинарные кавычки только в нетеговых частях
                    return segment.replace(/'/g, '’');
                }
            }).join('');
        } else if (typeof obj === 'object' && obj !== null) {
            // Рекурсивно обрабатываем свойства объекта
            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 дня. Новые ответы больше не принимаются.