オンボーディングヒントの特殊文字エンコーディング問題

ボタンをご覧ください。

ツールチップすべてに問題があるとしても、驚きません。

「いいね!」 6

私も同じ問題に遭遇しました。

Discourse を少し見ると、escape がボタンのラベル、タイトル、コンテンツに使用されていることがわかります。

escape とは何でしょうか?

テキストのコンテキストでは、これらはすべて有効な文字のように思えます。

ここで必要なのでしょうか?
htmlSafe でマークされていない html は、テンプレートによってエスケープされると思いますか? :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') {
            // 文字列を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 by pmusaraj · Pull Request #34118 · discourse/discourse · GitHub

ご報告ありがとうございます!

「いいね!」 4

このトピックは3日後に自動的に閉じられました。返信はもう許可されていません。