Méthode Ruby pour supprimer les accents des caractères internationaux UTF-8

J’essaie de créer une copie ‘normalisée’ d’une chaîne pour réduire les noms en double dans une firebase database. Les noms contiennent de nombreux caractères internationaux (c.-à-d. Des lettres accentuées) et je veux créer une copie avec les accents supprimés.

J’ai rencontré la méthode ci-dessous, mais je ne peux pas la faire fonctionner. Je n’arrive pas à trouver ce qu’est le plugin Unicode Hacks.

# Utility method that retursn an ASCIIfied, downcased, and sanitized ssortingng. # It relies on the Unicode Hacks plugin by means of Ssortingng#chars. We assume # $KCODE is 'u' in environment.rb. By now we support a wide range of latin # accented letters, based on the Unicode Character Palette bundled inMacs. def self.normalize(str) n = str.chars.downcase.ssortingp.to_s n.gsub!(/[à áâãäåÄÄ?]/u, 'a') n.gsub!(/æ/u, 'ae') n.gsub!(/[ÄÄ?]/u, 'd') n.gsub!(/[çÄ?ÄÄ?Ä?]/u, 'c') n.gsub!(/[èéêëÄ?Ä?Ä?Ä?Ä?]/u, 'e') n.gsub!(/Æ?/u, 'f') n.gsub!(/[ÄÄ?Ä¡Ä£]/u, 'g') n.gsub!(/[ĥħ]/, 'h') n.gsub!(/[ììÃîïīĩÄ]/u, 'i') n.gsub!(/[įıijĵ]/u, 'j') n.gsub!(/[ķĸ]/u, 'k') n.gsub!(/[Å?ľĺļÅ?]/u, 'l') n.gsub!(/[ñÅ?Å?Å?Å?Å?]/u, 'n') n.gsub!(/[òóôõöøÅÅ?ÅÅ]/u, 'o') n.gsub!(/Å?/u, 'oe') n.gsub!(/Ä?/u, 'q') n.gsub!(/[Å?Å?Å?]/u, 'r') n.gsub!(/[Å?Å¡Å?ÅÈ?]/u, 's') n.gsub!(/[ťţŧÈ?]/u, 't') n.gsub!(/[ùúûüūůűÅũų]/u,'u') n.gsub!(/ŵ/u, 'w') n.gsub!(/[ýÿŷ]/u, 'y') n.gsub!(/[žżź]/u, 'z') n.gsub!(/\s+/, ' ') n.gsub!(/[^\sa-z0-9_-]/, '') n end 

Dois-je “exiger” une bibliothèque / un bijou particulier? Ou peut-être que quelqu’un pourrait recommander une autre façon de procéder à ce sujet.

Je n’utilise pas Rails, et je n’ai pas l’intention de le faire.

J’utilise généralement I18n pour gérer cela:

 1.9.3p392 :001 > require "i18n" => true 1.9.3p392 :002 > I18n.transliterate("Hé les mecs!") => "He les mecs!" 

Jusqu’à présent, ce qui suit est la seule façon dont j’ai pu accomplir ce dont j’ai besoin:

 str.tr( "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž", "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz") 

Mais utiliser ceci me semble très “hackish” et j’aimerais trouver un meilleur moyen.

La méthode de paramétrage pourrait être une solution simple et efficace pour supprimer des caractères spéciaux afin d’utiliser la chaîne comme identifiant lisible par l’homme:

 > "Françoise Isaïe".parameterize => "francoise-isaie"