Ruby On Rails: Date Helper-Funktion time_ago_in_words in deutsch

05. August 2009 von Nico Puhlmann

2054205239_334a519d0eDie tolle Ruby-Funktion time_ago_in_words bzw. distance_of_time_in_words und distance_of_time_in_words_to_now aus dem Rails-Framework zeigt die vergangene Zeit seit einem bestimmten Zeitpunkt in Worten an. Wer das Ganze für Rails-Versionen kleiner 2.2 in deutsch haben möchte, kann folgende ins Deutsche übersetzte Funktion einfach in den ApplicationHelper unter app/helpers/application_helper.rb einfügen:

  def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)

    from_time = from_time.to_time if from_time.respond_to?(:to_time)
    to_time = to_time.to_time if to_time.respond_to?(:to_time)
    distance_in_minutes = (((to_time - from_time).abs)/60).round
    distance_in_seconds = ((to_time - from_time).abs).round

    case distance_in_minutes
      when 0..1
        return (distance_in_minutes == 0) ? 'weniger als einer Minute' : 'einer Minute' unless include_seconds
        case distance_in_seconds
          when 0..4   then 'weniger als 5 Sekunden'
          when 5..9   then 'weniger als 10 Sekunden'
          when 10..19 then 'weniger als 20 Sekunden'
          when 20..39 then 'einer halben Minute'
          when 40..59 then 'weniger als einer Minute'
          else             '1 Minute'
        end

      when 2..44           then "#{distance_in_minutes} Minuten"
      when 45..89          then 'ca. 1 Stunde'
      when 90..1439        then "ca. #{(distance_in_minutes.to_f / 60.0).round} Stunden"
      when 1440..2879      then '1 Tag'
      when 2880..43199     then "#{(distance_in_minutes / 1440).round} Tagen"
      when 43200..86399    then 'ca. 1 Monat'
      when 86400..525599   then "#{(distance_in_minutes / 43200).round} Monaten"
      when 525600..1051199 then 'ca. 1 Jahr'
      else                      "#{(distance_in_minutes / 525600).round} Jahren"
    end
  end

Nicht über den Funktions-Namen wundern, time_ago_in_words ist ein Alias für distance_of_time_in_words.

Update:

Viel einfacher wäre es natürlich, die I18n-Funktionen, die ab der Rails-Version 2.2 oder besser 2.3 enthalten sind zu nutzen. Hierfür muß man einfach in der Datei config/environment.rb den String

config.i18n.default_locale = :de

(nach Rails::Initializer.run do |config| und vor end) einfügen und eine Datei unter config/locales/de.yml mit folgendem Inhalt anlegen:

# German translations for Ruby on Rails 
# by Clemens Kofler (clemens@railway.at)
de:
  datetime:
    distance_in_words:
      half_a_minute: 'eine halbe Minute'
      less_than_x_seconds:
        zero: 'weniger als 1 Sekunde'
        one: 'weniger als 1 Sekunde'
        other: 'weniger als {{count}} Sekunden'
      x_seconds:
        one: '1 Sekunde'
        other: '{{count}} Sekunden'
      less_than_x_minutes:
        zero: 'weniger als 1 Minute'
        one: 'weniger als eine Minute'
        other: 'weniger als {{count}} Minuten'
      x_minutes:
        one: '1 Minute'
        other: '{{count}} Minuten'
      about_x_hours:
        one: 'etwa 1 Stunde'
        other: 'etwa {{count}} Stunden'
      x_days:
        one: '1 Tag'
        other: '{{count}} Tage'
      about_x_months:
        one: 'etwa 1 Monat'
        other: 'etwa {{count}} Monate'
      x_months:
        one: '1 Monat'
        other: '{{count}} Monate'
      about_x_years:
        one: 'etwa 1 Jahr'
        other: 'etwa {{count}} Jahre'
      over_x_years:
        one: 'mehr als 1 Jahr'
        other: 'mehr als {{count}} Jahre'
    prompts:
      second: "Sekunden"
      minute: "Minuten"
      hour: "Stunden"
      day: "Tag"
      month: "Monat"
      year: "Jahr"

Quelle: Original-Datei mit noch mehr Übersetzungen (auch für Active-Record-Messages und in anderen Sprachen) gibt es hier.

Bild von Darren Hester auf flickr.

Dir gefällt dieser Beitrag?
Erhalte Updates. Kostenlos.

2 Kommentare

  • Danke, hat mir viel Arbeit gespart ...
  • Danke für den Helper, habe ich gerade gesucht und er hat mir geholfen ;-)

Was denkst du?