Informazioni su URL friendly e caratteri non latini

Ho provato codificato ma in realtà l’URL può essere visto bene nell’indirizzo del browser Internet. Tuttavia, quando lo copio o lo invio, l’URL reale è una stringa di escape e non è più amichevole.

Ho controllato lib/slug.rb e suggerisco di modificare la funzione encoded_generator in questo modo:

  def self.encoded_generator(string, downcase: true)
    # Questo generatore sanificherà quasi tutti i caratteri speciali,
    # inclusi i caratteri riservati da RFC3986.
    # Vedi anche 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

Ho provato con la localizzazione Vietnamita e ho ottenuto i risultati desiderati. Spero che funzioni anche con altre lingue.

Suppongo che questa sia una considerazione di compatibilità. Alcune APP supportano solo collegamenti di testo in latino e taglieranno direttamente i collegamenti in testo non latino.

Non sono uno sviluppatore di codice Ruby, ma ho letto il documento e ho trovato questo:

Impostazione di un Hash in <locale>.yml:

i18n:
  transliterate:
    rule:
      ü: "ue"
      ö: "oe"

Quindi questo è il modo per personalizzare la traslitterazione nelle impostazioni, alla fine della funzione, otteniamo solo testo latino (URL amichevole). Ho provato con la mia lingua madre e non è stato necessario definire impostazioni personalizzate dell’hash.

C’è un modo per mantenere la modifica del codice? Perché se facessi:

./launcher destroy app && ./launcher start app

Il file ./lib/slug.rb torna al codice originale. Mi scuso perché sono nuovo nell’ambiente ruby on rails.

Mi dispiace molto per il mio fastidio!

Ho deciso di cambiare l’ASCII invece della funzione codificata. Non so perché, ma ho ottenuto risultati diversi quando ho usato la codifica.

Cosa ho sbagliato qui? Grazie mille!

  def self.ascii_generator(string)
    #I18n.with_locale(SiteSetting.default_locale) { string.tr(\"'\", \"\").parameterize }
    string = I18n.transliterate(string, :locale => SiteSetting.default_locale)
    string = string.strip.gsub(/\\s+/, \"-\").gsub(CHAR_FILTER_REGEXP, \"\")
    string
  end

Dopo aver sperimentato, ho scoperto che:

  • Non cambiare mai ascii_generator. Fa sì che Discourse compili erroneamente template/tema/css.
  • Usa solo encoded_generator e magari codifica nella tua locale, mantieni l’impostazione predefinita della locale di sistema (inglese).
  • Aggiungi il codice modificato di slug.rb in .yml per mantenere slug.rb personalizzato ogni volta che ricostruisci l’app.

Buona giornata!