Ich habe es mit Kodierung versucht, aber die URL kann im Adressfeld des Webbrowsers gut angezeigt werden. Wenn sie jedoch kopiert oder gesendet wird, ist die tatsächliche URL ein Escape-String und nicht mehr benutzerfreundlich.
Ich habe die Datei lib/slug.rb überprüft und schlage vor, die Funktion encoded_generator wie folgt zu ändern:
def self.encoded_generator(string, downcase: true)
# Dieser Generator bereinigt fast alle Sonderzeichen,
# einschließlich reservierter Zeichen aus RFC3986.
# Siehe auch URI::REGEXP::PATTERN.
string = I18n.transliterate(string, :locale => SiteSetting.default_locale)
string = string.strip.gsub(/\s+/, "-").gsub(CHAR_FILTER_REGEXP, "")
string = string.downcase if downcase
string
#CGI.escape(string)
end
Ich habe es mit der vietnamesischen Locale ausprobiert und die gewünschten Ergebnisse erzielt. Ich hoffe, es funktioniert auch mit anderen Sprachen.
Ich vermute, das ist eine Kompatibilitätsüberlegung. Einige APPs unterstützen nur Links in lateinischer Schrift und schneiden Links in nicht-lateinischer Schrift direkt ab.
Ich bin kein Ruby-Code-Schreiber, aber ich habe das Dokument gelesen und Folgendes gefunden:
Einen Hash in <locale>.yml festlegen:
i18n:
transliterate:
rule:
ü: "ue"
ö: "oe"
Das ist also der Weg, um die Transliteration in den Einstellungen anzupassen. Am Ende der Funktion erhalten wir nur lateinischen Text (freundliche URL). Ich habe es mit meiner Muttersprache versucht, und es war nicht nötig, eine benutzerdefinierte Hash-Einstellung zu definieren.
Ich habe beschlossen, die ASCII- statt der kodierten Funktion zu verwenden. Ich weiß nicht warum, aber ich erhalte unterschiedliche Ergebnisse, wenn ich kodiert verwende.
Nachdem ich herumgespielt habe, habe ich Folgendes festgestellt:
Ändern Sie niemals ascii_generator. Es führt dazu, dass Discourse Vorlagen/Themen/CSS falsch kompiliert.
Verwenden Sie nur encoded_generator und kodieren Sie ihn möglicherweise für Ihre Locale, behalten Sie die Standard-Locale-Einstellung des Systems (Englisch) bei.
Fügen Sie den geänderten Code von slug.rb in .yml hinzu, um slug.rb bei jeder Neuerstellung der App anzupassen.