Tengo algunos problemas con la pareja Rieles 3.0.1, Ruby 1.9.2 y mi localización de un sitio web.

El problema es bastante simple, tengo algo como que en una vista :

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

y es.yml de archivo :

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

No hay problemas con el baño.yml archivo ASCII puro), pero cuando el sitio web está configurado con i18n.locale == 'es' me sale este error :

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

He estado buscando alrededor por un tiempo, pero no encontró la manera de utilizar mi UTF-8 archivos de traducción.

¿ Alguna sabe cómo hacer que funciona ?

Gracias por tu ayuda.

  • Esta es una especie de fuera de tema, pero Ryan Bates acaba de publicar un railscast (railscasts.com/episodes/256-i18n-backends) en la i18n de hoy. Si alguien ve este comentario la semana de 3/6/2011, a continuación, en una forma en que este comentario es una especie de importancia para usted.
  • James tiene un buen tutorial en su blog, cubiertas casi todos los aspectos de la cadena de codificación en Ruby 1.9. Para entender lo «externo» e «interno» de la codificación decir, leer en: blog.grayproductions.net/articles/…
  • Aquí una impresionante explicación de la codificación de Rieles: yehudakatz.com/2010/05/05/…

5 Comentarios

  1. 47

    Ok, así que problema resuelto después de algunas horas de búsqueda en google…

    De hecho, había dos errores en mi código. El primero era un archivo de error en la codificación y el segundo fue el problema con la base de Datos de MySQL de configuración.

    Primero, para resolver el error causado por MySQL he utilizado estos dos artículos :

    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/

    Segundo, para resolver el archivo de codificación problema he añadido estas 2 líneas en mi config/environment.rb

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

    Esperemos que esto ayude a alguien 🙂

    • Muchísimas gracias!! Tenía el mismo problema, y yo lo tenía todo muy bien excepto que yo estaba usando el mysql joya en lugar de mysql2.
    • Lo mismo me pasó a mí, pero solo me di cuenta cuando un archivo con el código fuente había un divertido personaje en ella. Yo tenía tanto mysql y mysql2 gemas en mi gemfile, tuve que quitar el viejo mysql joya. (y modificar mi base de datos.fichero yaml)
    • Amigo, usted salvó mi día o tal vez una semana! Gracias!
    • Estoy consiguiendo el mismo error, pero cuando se utiliza rieles de caché. Aquí está mi pregunta stackoverflow.com/questions/11114872/…
    • AHHHH! Gracias! También tiene que actualizar a mysql2 gema y actualización de la base de datos.yml en consecuencia. Trabajó también para mí.
    • Estoy recibiendo este error en Ruby 2.0.0p576 (pero no 2.0.0 p481) a la hora de poner una cadena a una Protocol Buffers de mensajes.

  2. 23

    He resuelto la mayoría de los problemas mediante la combinación de varias soluciones:

    • Asegúrese de application.rb tiene esta línea: config.encoding = "utf-8".
    • Asegúrese de que está utilizando ‘mysql2’ joya
    • Poner # encoding: utf-8 en la parte superior de cualquier archivo que contiene caracteres utf-8.
    • Agregar las siguientes dos líneas por encima de la <App Name>::Application.initialize! línea en 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

    • Esta respuesta: stackoverflow.com/a/4804802/72176 tiene una buena manera de agregar el sugerido # encoding: UTF-8 a todos los archivos ruby.
    • He añadido # encoding: utf-8 en la primera de mi controlador y cualquier cosa es buena. He Rieles 3.2.7 en Ruby 1.9.3
    • Una palabra de consejo: mysql2 joya sólo es adecuado para la resonancia magnética Ruby, no usarlo con jruby.
    • esto me ayudó, especialmente la Codificación.default_external parte
  3. 0

    El uso de este desempaquetar función me ayudó a solucionar esto por último, intente esto si usted consigue el no se puede convertir el mensaje de error:

    myString.unpack('U*').pack('U*')
    • Suena un poco CPU caro y doloroso si usted tiene que hacerlo en todas las cadenas…
    • Ojalá pudiera tienen otras opciones para detener este error, pero no funciona para mí. No he notado ningún aumento de la cpu,
    • saben a lo que me voy a probar la respuesta de la solución de nuevo lateron sólo porque e informe
    • Es tu problema viene de caracteres en la base de datos o en la vista de archivos?
    • hey no he encontrado tiempo :/ me he topado con este problema, mientras que el raspado realmente y sólo entonces ~ así que antes de que llegue a cualquier base de datos.
    • Que puede ser de ayuda, asegúrese de tener la meta en su encabezado html (haml en mi caso): %meta{‘http-equiv’ => ‘content-type’, ‘contenido’ => ‘text/html; charset=utf-8’} de Esa manera, el navegador sabe que este es utf-8.

  4. 0

    Asegúrese de que usted tiene config.encoding = "utf-8" en su config/application.rb. También, el ejemplo de la traducción de archivo no coincide con la clave que estás buscando (com_name y first_name) pero supongo que podría tratarse de un error tipográfico.

    • Oups sry sobre el ejemplo. Me llevó un mal que no UTF-8 char :p Lo que sea… tengo config.encoding = «utf-8» en mi aplicación.rb y de la Codificación.default_external = Codificación::UTF_8 en mi entorno.rb. Gracias 🙂
    • Puede ser muy difícil determinar dónde se encuentran los datos incompatibles viene.. me gustaría probar dividiendo sus plantillas en términos de origen de datos.. Así que trate de una plantilla con sólo I18n cosas, otro con sólo los datos de la base de datos, lo mismo para su caché si usted tiene uno, etc. Si usted está usando MySQL, a continuación, intente cambiar a la mysql2 conductor y asegúrese de que el archivo config/database.yml especifica la codificación: utf-8
    • Gracias 🙂 Ok, así que, he comprobado y se puede obtener y mostrar i18n de cadenas a partir de la base de datos MySQL. Pero no puedo conseguir las cadenas de la i18n de archivo y de momento, yo no uso de la caché.

Dejar respuesta

Please enter your comment!
Please enter your name here