Problema de codificação de caracteres especiais nas dicas de onboarding

Veja o botão:

Não me surpreenderia se o problema estivesse presente em todas as dicas.

6 curtidas

Encontrei o mesmo problema.

Uma rápida olhada no Discourse mostra que escape é usado no rótulo do botão, título e conteúdo.

O que é escape:

Em um contexto de texto, estes parecem ser todos caracteres válidos para usar.

Eu me pergunto, é necessário aqui?
Acredito que o HTML não marcado com htmlSafe será escapado pelo template? :thinking:

2 curtidas

Uma correção pode ser substituir o apóstrofo de programação pelo apóstrofo francês real.

Use:
Não: '

Este símbolo não existe em teclados QWERTY dos EUA e também não existe em teclados AZERTY mais antigos, mas existe em ambos os novos teclados franceses padrão AFNOR (Association française de normalisation), seja AZERTY novo ou BÉPO.

Isso não corrigiria o problema mais profundo de que o apóstrofo programático não está sendo escapado corretamente, mas o apóstrofo francês real é o correto a ser usado e deve ser o que a maioria dos falantes de francês usará ao digitar assim que a maioria deles estiver em teclados padrão.

O antigo AZERTY nunca foi realmente padronizado por nenhum órgão oficial.

1 curtida

Tive o mesmo problema no Discourse 3.4.1…
Não posso substituir todos os ' no site. Você tem alguma sugestão?

Acabei de corrigir este problema com algum código personalizado, substitua ' por em I18n.translations

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

    function replaceSingleQuotes(obj) {
        if (typeof obj === 'string') {
            // Divide a string em tags HTML e partes não-tag
            return obj.split(/(<[^>]+>)/g).map(segment => {
                // Se o segmento for uma tag HTML, não substitua nada
                if (segment.startsWith('<') && segment.endsWith('>')) {
                    return segment;
                } else {
                    // Substitua as aspas simples apenas em partes não-HTML
                    return segment.replace(/'/g, '’');
                }
            }).join('');
        } else if (typeof obj === 'object' && obj !== null) {
            // Processa recursivamente as propriedades do objeto
            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 curtida

Isso deve ser corrigido agora, seguindo este commit: FIX: user tips in languages with apostrophes by pmusaraj · Pull Request #34118 · discourse/discourse · GitHub

Obrigado pelo relatório!

4 curtidas

Este tópico foi fechado automaticamente após 3 dias. Novas respostas não são mais permitidas.