diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2026-01-03 09:25:33 +0100 |
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2026-01-03 09:25:33 +0100 |
| commit | ad6c55f37401d9d0523ee3921715e22bf192c289 (patch) | |
| tree | c06fad76944d858c319fcb420220e8d95e19de77 /lib/Travelynx.pm | |
| parent | 40ebedd4ca37292e6c2beb9f2dcc9166d3005d1d (diff) | |
backend: make duration formatting code localization-aware2.18.9
Diffstat (limited to 'lib/Travelynx.pm')
| -rwxr-xr-x | lib/Travelynx.pm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 7b5cf99..a83af39 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -466,6 +466,64 @@ sub startup { ); $self->helper( + 'LT' => sub { + my ( $self, $minutes ) = @_; + + my @ret; + + if ( $minutes >= 14 * 24 * 60 ) { + push( @ret, + int( $minutes / ( 7 * 24 * 60 ) ) . q{ } + . $self->L('LT.weeks') ); + } + elsif ( $minutes >= 7 * 24 * 60 ) { + push( @ret, '1 ' . $self->L('LT.week') ); + } + $minutes %= 7 * 24 * 60; + + if ( $minutes >= 2 * 24 * 60 ) { + push( @ret, + int( $minutes / ( 24 * 60 ) ) . q{ } + . $self->L('LT.days') ); + } + elsif ( $minutes >= 24 * 60 ) { + push( @ret, '1 ' . $self->L('LT.day') ); + } + $minutes %= 24 * 60; + + if ( $minutes >= 2 * 60 ) { + push( @ret, + int( $minutes / 60 ) . q{ } . $self->L('LT.hours') ); + } + elsif ( $minutes >= 60 ) { + push( @ret, '1 ' . $self->L('LT.hour') ); + } + $minutes %= 60; + + if ( $minutes >= 2 ) { + push( @ret, "$minutes " . $self->L('LT.minutes') ); + } + elsif ($minutes) { + push( @ret, '1 ' . $self->L('LT.minute') ); + } + + if ( @ret == 0 ) { + return $self->L('LT.zero-minutes'); + } + + if ( @ret == 1 ) { + return $ret[0]; + } + + my $last = pop(@ret); + return + join( ', ', @ret ) + . $self->L( @ret > 1 ? 'LT.final-and' : 'LT.and' ) + . " $last"; + } + ); + + $self->helper( 'now' => sub { return DateTime->now( time_zone => 'Europe/Berlin' ); } |
