Ruby on Rails 3, codifiche di caratteri incompatibili: UTF-8 e ASCII-8BIT con i18n

Ho alcuni problemi con la coppia Rails 3.0.1, Ruby 1.9.2 e la localizzazione del mio sito web.

Il problema è abbastanza semplice, ho qualcosa di simile in una vista:

f.input :zip_code, :label => I18n.t('labels.zip_code') 

e un file es.yml:

 es: labels: zip_code: "Este código postal no es valido." 

Non ci sono problemi con il file en.yml (è puro ASCII) ma quando il sito web è impostato con i18n.locale == 'es' ottengo questo errore:

 incompatible character encodings: UTF-8 and ASCII-8BIT 

Ho cercato un po ‘di tempo in giro, ma non ho trovato il modo di usare i miei file di traduzione UTF-8.

Qualcuno sa come farlo funzionare?

Grazie per l’aiuto.

Ok, quindi il problema è risolto dopo alcune ore di googlatura …

In realtà c’erano due bug nel mio codice. Il primo era un errore di codifica dei file e il secondo era il problema con la configurazione della base dati MySQL.

Innanzitutto, per risolvere l’errore causato da MySQL ho usato questi due articoli:

http://www.dotkam.com/2008/09/14/configure-rails-and-mysql-to-support-utf-8/

http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

In secondo luogo, per risolvere il problema della codifica dei file ho aggiunto queste 2 righe nel mio config / environment.rb

 Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 

Spero che questo possa aiutare qualcuno 🙂

Ho risolto la maggior parte dei problemi combinando molte soluzioni:

  • Assicurati che application.rb abbia questa riga: config.encoding = "utf-8" .
  • Assicurati di utilizzare la gem ‘mysql2’
  • Mettere # encoding: utf-8 nella parte superiore di qualsiasi file contenente utf-8 caratteri.
  • Aggiungi le seguenti due righe sopra il ::Application.initialize! riga in environment.rb :

     Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html

Sei sicuro che il tuo file es.yml stato salvato come UTF-8?

Se sei su Windows, usa http://notepad-plus-plus.org/ per essere sicuro.

L’uso di questa funzione di decompressione mi ha aiutato a risolverlo definitivamente, prova questo se ottieni il messaggio di errore “Imansible convertire”:

 myString.unpack('U*').pack('U*') 

Assicurati di avere config.encoding = "utf-8" nel tuo config/application.rb . Inoltre, il tuo file di traduzione di esempio non corrisponde alla chiave che stai cercando ( com_name e first_name ) ma suppongo che potrebbe essere solo un refuso.