2010-10-24 8 views
6

Estoy teniendo un problema extraño, esperando que alguien sabe cuál es el problema ...rieles distance_of_time_in_words devuelve "en about_x_hours"

Usando distance_of_time_in_words (y en consecuencia time_ago_in_words) no devuelve la distancia en tiempo real. En su lugar, devuelve cosas como "en, about_x_hours" o "en, x_minutes".

El patrón es correcta, como en:

time_ago_in_words(50.minutes.ago) => "en, about_x_hours" 
time_ago_in_words(3.minutes.ago) => "en, x_minutes" 

Pero ¿por qué en la tierra Porque me saca "x" en lugar del número real, "_" en lugar de espacios, y "en," al principio de todo eso ?!

+0

extraño ... he intentado en ambos carriles 3.0.1 y 2.2.2 y ambos dieron "aproximadamente 1 hora". –

+0

definitivamente extraño ... estoy ejecutando 2.3.8 por cierto ... si hace la diferencia. mi conjetura inculpada sería que tiene algo que ver con la internacionalización? Supongo que "en" indica que debería estar en inglés. no sé ... conjetura salvaje. –

Respuesta

2

¡¡¡Así que finalmente lo tengo que trabajar !! Espero que esto ayude a cualquiera que pueda tener el mismo problema ...

Básicamente, la mitad de lo que Lichtamberg dijo por primera vez era correcto. El en.yml tenía que ser de la siguiente manera:

en: 
    x_minutes: 
    one: "1 minute" 
    other: "%{count} minutes" 

Tenga en cuenta que no está bajo x_minutesdatetime y que tiene one y other. Además, no hay necesidad de I18n.l ya que I18n ya está implementado en el método distance_of_time_in_words.

Así que con la anterior (además de todos los otros about_x_hours, x_days, etc patrones que se pueden encontrar en el archivo Lichtamberg incluido), acaba de hacer:

time_ago_in_words(3.minutes.ago) 

Y ... listo!

+1

desde la consola de rieles, use 'helper.time_ago_in_words (3.minutes.ago)' – Magne

8

que devuelve una cadena de traducir a través de la i18n-joya .... Trate siguiente:

# I18n.localize(string) 
I18n.l time_ago_in_words(3.minutes.ago) 

y añadir (si existe duerma) siguiente en

# config/locales/en.yml 
en: 
    datetime: 
    distance_in_words: 
     ... 
     less_than_x_minutes: 
     one: "less than a minute" 
     other: "less than %{count} minutes" 
     x_minutes: 
     one: "1 minute" 
     other: "%{count} minutes" 
     about_x_hours: 
     one: "about 1 hour" 
     other: "about %{count} hours" 
     .... 

y asegúrese de incluir la siguiente (tal vez personalizado) de datos en su en.yml:

http://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml

Por favor dígame si funciona ...

+0

Lo anterior me da el siguiente error: Object debe ser un objeto Date, DateTime u Time. "aproximadamente x minutos" dado. –

+0

Actualizado mi comentario .. Espero que funcione ahora .. – Lichtamberg

+0

hmmmmm intenté con el código actualizado, pero aún así obtengo: Object debe ser un objeto Date, DateTime u Time. " en, x_minutes" dado. :( –

0

Desvergonzadamente arrancó time_ago_in_words => "in {{count}} days."?

Carriles estaba utilizando una sintaxis en desuso en el ayudante que luego nos dejó en la última versión de Ruby. Si está utilizando algo como Heroku, intente indicarle a su instancia de producción que utilice Rails 2.3.9. De lo contrario, también puedes probar la degradación de Ruby.

Ver la lista de cambios: http://weblog.rubyonrails.org/2010/9/4/ruby-on-rails-2-3-9-released

Changes i18n named-interpolation syntax from the deprecated Hello {{name}} to the 1.9-native Hello %{name}.