2010-10-24 28 views
6

Je vais avoir un problème bizarre, en espérant que quelqu'un sait ce que la question est ...Rails distance_of_time_in_words Returns « en, about_x_hours »

En utilisant distance_of_time_in_words (et par conséquent time_ago_in_words) ne retournera pas la distance du temps réel. Au lieu de cela, il retourne des choses comme "en, about_x_hours" ou "en, x_minutes".

Le modèle est correct, comme dans:

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

Mais pourquoi diable est-il affiche « x » au lieu du nombre réel, « _ » au lieu des espaces, et « en » au début de tout ça ?!

+0

étrange ... je l'ai essayé sur les deux rails 3.0.1 et 2.2.2, et ils ont tous deux donné "environ 1 heure". –

+0

certainement étrange ... je cours 2.3.8 btw ... si cela fait une différence. ma conjecture sans instruction serait qu'elle a quelque chose à voir avec l'internationalisation? Je suppose que "en" indique qu'il devrait être en anglais? ne sais pas ... sauvage devinez. –

Répondre

2

Donc, je l'ai enfin eu au travail !! J'espère que cela aidera tous ceux qui pourraient avoir le même problème ...

Fondamentalement, la moitié de ce que dit Lichtamberg était correcte. Le en.yml devait être comme suit:

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

Notez que x_minutes n'est pas sous datetime et qu'il a one et other. De plus, il n'y a pas besoin de I18n.l car I18n est déjà implémenté dans la méthode distance_of_time_in_words.

Donc, avec ce qui précède (ainsi que tous les autres about_x_hours, x_days, etc modèles que vous pouvez trouver sur le fichier Lichtamberg inclus), il suffit de faire:

time_ago_in_words(3.minutes.ago) 

Et ... le tour est joué!

+1

depuis la console rails, utilisez 'helper.time_ago_in_words (3.minutes.ago)' – Magne

8

qui redonne une chaîne à traduire par l'I18n-gem .... Essayez suivante:

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

Et ajouter (si doesnt existe) suivante dans

# 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" 
     .... 

et assurez-vous inclure les données suivantes (peut-être personnalisé) dans votre en.yml:

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

Se il vous plaît dites-moi si cela fonctionne ..

+0

Ce qui précède me donne l'erreur suivante: L'objet doit être un objet Date, DateTime ou Time. "environ x minutes" donné. –

+0

Mis à jour mon commentaire .. J'espère que ça marche maintenant .. – Lichtamberg

+0

hmmmmm J'ai essayé le code mis à jour mais je reçois toujours: L'objet doit être un objet Date, DateHeure ou Heure. "" donnée. :( –

0

Shamelessly arraché time_ago_in_words => "in {{count}} days."?

Rails utilisait une syntaxe dépréciée dans l'aide qui a ensuite chuté dans la se est dernière version Ruby. Si vous utilisez quelque chose comme Heroku, essayez de dire à votre instance de production d'utiliser Rails 2.3.9. Sinon, vous pouvez également essayer de déclasser Ruby.

Voir le changelog: 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}.