Forum: Rails France Caractères accentués avec Rails

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
88121bbaff086ad61f10eaad843385b2?d=identicon&s=25 Lily ^_^ (lilyweb)
on 2009-01-29 00:16
Bonjour à tous,

Je sais que le problème des caractères accentués est souvent abordés,
mais même en cherchant sur les forums et google, je n'ai pas trouvé de
réponse à mon problème, et j'avoue même que je ne suis pas certaine de
le comprendre encore...

J'ai un site perso développé sous Ruby (1.8.6) on Rails (2.0.2) qui
fonctionne grosso modo comme un blog. Jusque là tout allait bien. Je
n'ai pour l'instant jamais eu à me plaindre pour les textes, tout
s'affiche correctement, en particulier les accents.

En ce moment, j'essaie de faire une méthode pour convertir les titres de
mes articles en chaine de caractères sans accents (typiquement pour
mettre en place l'url rewriting). C'est là que ça se gâte.

Lorsque, dans mon application helper, j'essaie de faire une méthode qui
remplace les éèê par des e, par exemple, j'obtiens une page d'erreur, ou
tous les caractères accentués sont remplacés par des "?".
Après verif, mon fichier était encodé en ANSI, j'ai donc converti le
tout en UTF-8.

Je me retrouve avec le message :
undefined local variable or method `' for main:Object

Je n'ai rien changé au fichier (d'ailleurs même si je supprime toutes
les méthodes qu'il contient, ça plante toujours), c'est vraiment changer
l'encodage qui lève l'erreur.

Pourriez-vous m'aider ?
Je ne suis pas experte en Ruby et là je désespère.
B935c7953e0d4c30b82fdee575163e6a?d=identicon&s=25 Pierre Valade (Guest)
on 2009-01-29 00:30
(Received via mailing list)
Dans les dernières versions de Rails, la fonction parameterize est
tiiptop !
http://api.rubyonrails.org/classes/ActiveSupport/C...

2009/1/29 Lily Bang <list-incoming@andreas-s.net>
64cefc5969da4ae702d86c9f26cb8733?d=identicon&s=25 philippe lachaise (Guest)
on 2009-01-29 08:56
(Received via mailing list)
Voici un bout de code que j'utilise avec succès pour convertir les
caratères
diacritiques (sans introduire de dépendance gem ou plugin) ; peut-être
te
sera-t-il utile

N.B. ce code convertit les espaces, apostrophes et traits d'union en "_"
;
si ce n'est pas souhaité il suffit de virer ce qui copncerne RGX_HYPHEN,
RGX_APOS et RGX_SPACES et ça devrait convenir

    RGX_A  = /[áàãåäÁÀÂÃÅÄ]/
    RGX_C  = /[çÇ]/
    RGX_D  = /[ðÐ]/
    RGX_E  = /[éêèëÉÊÈË]/
    RGX_I  = /[íìîïÍÌÎÏ]/
    RGX_N  = /[ñÑ]/
    RGX_O  = /[óòôõöøÓÒÔÕÖØ]/
    RGX_S  = /[Å¡Å ]/
    RGX_SS = /[ß]/
    RGX_U  = /[úùûüÚÙÛÜ]/
    RGX_Y  = /[ýÿÝ]/
    RGX_AE = /[Ææ]/
    RGX_OE = /[Å“Å’]/

    RGX_HYPHEN  = /\s*\-\s*/
    RGX_SPACES  = /\s+/
    RGX_APOS    = /\s*(\'|\`)\s*/
    RGX_ALPHA   = /[a-zA-Z]/
    RGX_DEFAULT =
Regexp.new("#{RGX_HYPHEN}|#{RGX_APOS}|#{RGX_SPACES}|.")
    # \s*\-\s*|\s*\\'\s*|\s+

    def canonicalize_default( text, country, lang )
      canon = text.strip.gsub( RGX_DEFAULT ) do |match|
        case match
        when RGX_A  then 'A'
        when RGX_C  then 'C'
        when RGX_D  then 'D'
        when RGX_E  then 'E'
        when RGX_I  then 'I'
        when RGX_N  then 'N'
        when RGX_O  then 'O'
        when RGX_S  then 'S'
        when RGX_SS then 'SS'
        when RGX_U  then 'U'
        when RGX_Y  then 'Y'
        when RGX_AE then 'AE'
        when RGX_OE then 'OE'
        when RGX_HYPHEN   then '_'
        when RGX_SPACES   then '_'
        when RGX_APOS     then '_' # TODO : look closer ???
        when RGX_ALPHA    then match
        end
      end

      canon.gsub!( /^_+/ , '' )  # Virer aussi
      canon.gsub!( /_+$/ , '' )   # si
      canon.upcase!                  # pas souhaité
      return canon
    end
00e465ac55490fb5e1344b29cd35341a?d=identicon&s=25 Emilien Taque (Guest)
on 2009-01-29 09:05
(Received via mailing list)
J'utilise ce bout de code trouvé sur le web, placé dans un fichier
config/initializers/string_extensions.rb :

require 'iconv'
class String
  # Iconv use borrowed from
http://svn.robertrevans.com/plugins/Permalize/
  # Thanks!
  def to_permalink
      (Iconv.new('US-ASCII//TRANSLIT', 'utf-8').iconv
self).gsub(/[^\w\s\-\â€"]/,'').gsub(/[^\w]|[\_]/,'
').split.join('-').downcase
  end
end

L'utilisation est très simple : @article.title_to_permalink

2009/1/29 philippe lachaise <philippe.lachaise@gmail.com>
00e465ac55490fb5e1344b29cd35341a?d=identicon&s=25 Emilien Taque (Guest)
on 2009-01-29 09:06
(Received via mailing list)
correction : @article.title.to_permalink
Fc37191f4c6e09e30527df4913738aea?d=identicon&s=25 Nicolas Cavigneaux (Guest)
on 2009-01-29 09:58
(Received via mailing list)
Le 29 janv. 09 à 00:16, Lily Bang a écrit :
>
> En ce moment, j'essaie de faire une méthode pour convertir les
> titres de
> mes articles en chaine de caractères sans accents (typiquement pour
> mettre en place l'url rewriting). C'est là que ça se gâte.

Tu peux voir du côté de acts_as_nice_url
(http://bitbucket.org/Bounga/acts_as_nice_url/
) , par contre prend bien la version 1.0.0 du gem.

> Je me retrouve avec le message :
> undefined local variable or method `' for main:Object
>
> Je n'ai rien changé au fichier (d'ailleurs même si je supprime toutes
> les méthodes qu'il contient, ça plante toujours), c'est vraiment
> changer
> l'encodage qui lève l'erreur.

En ce qui concerne le passage de ton fichier de ISO à UTF8, ça peu te
poser le genre de problème que tu évoques. Ton fichier est long ? Si
non, tu peux toujours essayer de le ré-écrire au cas où un problème se
serait produit à la conversion de jeu de caractères.

--
Nicolas Cavigneaux
http://www.bounga.org
http://www.cavigneaux.net
88121bbaff086ad61f10eaad843385b2?d=identicon&s=25 Lily ^_^ (lilyweb)
on 2009-01-29 17:07
Merci pour toutes vos réponses.

En fait à priori l'éditeur que j'utilise (Notepad++) a quelques soucis
avec l'utf8, même quand on lui demande expressément d'encoder comme ça.

Un ami m'a proposé de tester sous Scite et comme de par hasard, ça
fonctionne...

Merci Philippe pour ton code, je pensais faire quelque chose comme ça
mais vu que le tien est bien complet, je pense que je vais largement
m'en inspirer.

Une question : mon ami me dit que les regex ne sont pas en unicode dans
Rails, et qu'il faut donc ajouter un u à la fin de la regex (type :
/éèëê/u).

Qu'en pensez-vous ?
64cefc5969da4ae702d86c9f26cb8733?d=identicon&s=25 philippe lachaise (Guest)
on 2009-01-29 17:19
(Received via mailing list)
>> les regex ne sont pas en unicode dans Rails ... ajouter un u à la fin de
la regex

Euh, à priori ça marche comme ça, mais peut-être ai-je eu de la chance
jusqu'ici ?!

A vérifier ...
Fc37191f4c6e09e30527df4913738aea?d=identicon&s=25 Nicolas Cavigneaux (Guest)
on 2009-01-29 18:03
(Received via mailing list)
Le 29 janv. 09 à 17:07, Lily Bang a écrit :

> Une question : mon ami me dit que les regex ne sont pas en unicode
> dans
> Rails, et qu'il faut donc ajouter un u à la fin de la regex (type :
> /éèëê/u).
>
> Qu'en pensez-vous ?

Dans Rails $KCODE est à 'u' donc à priori ça suffit.
--
Nicolas Cavigneaux
http://www.bounga.org
http://www.cavigneaux.net
88121bbaff086ad61f10eaad843385b2?d=identicon&s=25 Lily ^_^ (lilyweb)
on 2009-01-29 18:08
Ok merci beaucoup !
5ecdd928985308a3e01270e936538b3b?d=identicon&s=25 vincent (Guest)
on 2009-01-30 09:56
(Received via mailing list)
En fait c'est transliterate qui est appelé par parameterize
http://api.rubyonrails.org/classes/ActiveSupport/I...
Vincent
This topic is locked and can not be replied to.