프랑스어 온보딩 팁에서 특수 문자 인코딩 문제

버튼을 확인해 주세요:

모든 툴팁에 이 문제가 존재한다면 놀랍지 않을 것 같습니다.

6개의 좋아요

저도 같은 문제를 겪었습니다.

Discourse를 간단히 살펴보니 escape가 버튼의 label, title, content에 사용되고 있네요.

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

텍스트 컨텍스트에서는 이 모든 문자가 유효한 것으로 보입니다.

여기서 이것이 필요한지 궁금합니다.
htmlSafe로 표시되지 않은 html은 템플릿에 의해 이스케이프 처리되지 않을까요? :thinking:

2개의 좋아요

수정 방법은 프로그래밍용 아포스트로프를 실제 프랑스어 아포스트로프로 대체하는 것입니다.

사용: ’
사용 금지: '

이 기호는 미국 QWERTY 키보드에는 존재하지 않으며, 구형 AZERTY 키보드에도 존재하지 않습니다. 그러나 새로운 AFNOR(Association française de normalisation) 표준 프랑스어 키보드에는 모두 존재하며, 새로운 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') {
            // 문자열을 HTML 태그와 태그가 아닌 부분으로 분할
            return obj.split(/(<[^>]+>)/g).map(segment => {
                // 해당 세그먼트가 HTML 태그인 경우 아무것도 대체하지 않음
                if (segment.startsWith('<') && segment.endsWith('>')) {
                    return segment;
                } else {
                    // HTML이 아닌 부분에서만 단일 인용호를 대체
                    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 - Pull Request #34118 - discourse/discourse - GitHub

리포트 감사합니다!

4개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 새 답변은 더 이상 허용되지 않습니다.