Unverified Commit ad6c55f3 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

backend: make duration formatting code localization-aware

parent 40ebedd4
Loading
Loading
Loading
Loading
+58 −0
Changes for lib/Travelynx.pm: 58 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -465,6 +465,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' );
+13 −79
Changes for lib/Travelynx/Model/Journeys.pm: 13 added lines, 79 removed lines.
Original line number Diff line number Diff line
@@ -50,56 +50,6 @@ sub epoch_to_dt {
	);
}

# TODO turn into a travelynx helper called from templates so that
# loc_handle is available for localization
sub min_to_human {
	my ( $self, $minutes ) = @_;

	my @ret;

	if ( $minutes >= 14 * 24 * 60 ) {
		push( @ret, int( $minutes / ( 7 * 24 * 60 ) ) . ' Wochen' );
	}
	elsif ( $minutes >= 7 * 24 * 60 ) {
		push( @ret, '1 Woche' );
	}
	$minutes %= 7 * 24 * 60;

	if ( $minutes >= 2 * 24 * 60 ) {
		push( @ret, int( $minutes / ( 24 * 60 ) ) . ' Tage' );
	}
	elsif ( $minutes >= 24 * 60 ) {
		push( @ret, '1 Tag' );
	}
	$minutes %= 24 * 60;

	if ( $minutes >= 2 * 60 ) {
		push( @ret, int( $minutes / 60 ) . ' Stunden' );
	}
	elsif ( $minutes >= 60 ) {
		push( @ret, '1 Stunde' );
	}
	$minutes %= 60;

	if ( $minutes >= 2 ) {
		push( @ret, "$minutes Minuten" );
	}
	elsif ($minutes) {
		push( @ret, '1 Minute' );
	}

	if ( @ret == 0 ) {
		return '0 Minuten';
	}

	if ( @ret == 1 ) {
		return $ret[0];
	}

	my $last = pop(@ret);
	return join( ', ', @ret ) . " und $last";
}

sub new {
	my ( $class, %opt ) = @_;

@@ -1674,7 +1624,7 @@ sub compute_review {
	$review{traveling_percentage_year}
	  = sprintf( "%.1f%%", $min_total * 100 / 525948.77 );
	$review{traveling_percentage_year} =~ tr{.}{,};
	$review{traveling_time_year} = $self->min_to_human($min_total);
	$review{traveling_time_year} = $min_total;

	if (@linetypes) {
		$review{typical_type_1} = $linetypes[0][0];
@@ -1689,24 +1639,18 @@ sub compute_review {
	elsif ( @stops == 2 ) {
		$review{typical_stops_2} = [ $stops[0][0], $stops[1][0] ];
	}
	$review{typical_time}
	  = $self->min_to_human( $stats->{min_travel_real} / $stats->{num_trains} );
	$review{typical_time} = $stats->{min_travel_real} / $stats->{num_trains};
	$review{typical_km}
	  = sprintf( '%.0f', $stats->{km_route} / $stats->{num_trains} );
	$review{typical_kmh} = sprintf( '%.0f',
		$stats->{km_route} / ( $stats->{min_travel_real} / 60 ) );
	$review{typical_delay_dep}
	  = sprintf( '%.0f', $stats->{delay_dep} / $stats->{num_trains} );
	$review{typical_delay_dep_h}
	  = $self->min_to_human( $review{typical_delay_dep} );
	$review{typical_delay_arr}
	  = sprintf( '%.0f', $stats->{delay_arr} / $stats->{num_trains} );
	$review{typical_delay_arr_h}
	  = $self->min_to_human( $review{typical_delay_arr} );

	if ($longest_t) {
		$review{longest_t_time}
		  = $self->min_to_human( $longest_t->{rt_duration} / 60 );
		$review{longest_t_min}    = $longest_t->{rt_duration} / 60;
		$review{longest_t_type}   = $longest_t->{type};
		$review{longest_t_lineno} = $longest_t->{line} // $longest_t->{no};
		$review{longest_t_from}   = $longest_t->{from_name};
@@ -1724,8 +1668,7 @@ sub compute_review {
	}

	if ($shortest_t) {
		$review{shortest_t_time}
		  = $self->min_to_human( $shortest_t->{rt_duration} / 60 );
		$review{shortest_t_min}    = $shortest_t->{rt_duration} / 60;
		$review{shortest_t_type}   = $shortest_t->{type};
		$review{shortest_t_lineno} = $shortest_t->{line} // $shortest_t->{no};
		$review{shortest_t_from}   = $shortest_t->{from_name};
@@ -1746,10 +1689,8 @@ sub compute_review {

	if ($most_delayed) {
		$review{most_delayed_type}      = $most_delayed->{type};
		$review{most_delayed_delay_dep}
		  = $self->min_to_human( $most_delayed->{delay_dep} );
		$review{most_delayed_delay_arr}
		  = $self->min_to_human( $most_delayed->{delay_arr} );
		$review{most_delayed_delay_dep} = $most_delayed->{delay_dep};
		$review{most_delayed_delay_arr} = $most_delayed->{delay_arr};
		$review{most_delayed_lineno}    = $most_delayed->{line}
		  // $most_delayed->{no};
		$review{most_delayed_from} = $most_delayed->{from_name};
@@ -1761,14 +1702,10 @@ sub compute_review {
		$review{most_delay_type}       = $most_delay->{type};
		$review{most_delay_delay_dep}  = $most_delay->{delay_dep};
		$review{most_delay_delay_arr}  = $most_delay->{delay_arr};
		$review{most_delay_sched_time}
		  = $self->min_to_human( $most_delay->{sched_duration} / 60 );
		$review{most_delay_real_time}
		  = $self->min_to_human( $most_delay->{rt_duration} / 60 );
		$review{most_delay_sched_time} = $most_delay->{sched_duration} / 60;
		$review{most_delay_real_time}  = $most_delay->{rt_duration} / 60;
		$review{most_delay_delta}
		  = $self->min_to_human(
			( $most_delay->{rt_duration} - $most_delay->{sched_duration} )
			/ 60 );
		  = ( $most_delay->{rt_duration} - $most_delay->{sched_duration} ) / 60;
		$review{most_delay_lineno} = $most_delay->{line} // $most_delay->{no};
		$review{most_delay_from}   = $most_delay->{from_name};
		$review{most_delay_to}     = $most_delay->{to_name};
@@ -1779,14 +1716,11 @@ sub compute_review {
		$review{most_undelay_type}       = $most_undelay->{type};
		$review{most_undelay_delay_dep}  = $most_undelay->{delay_dep};
		$review{most_undelay_delay_arr}  = $most_undelay->{delay_arr};
		$review{most_undelay_sched_time}
		  = $self->min_to_human( $most_undelay->{sched_duration} / 60 );
		$review{most_undelay_real_time}
		  = $self->min_to_human( $most_undelay->{rt_duration} / 60 );
		$review{most_undelay_sched_time} = $most_undelay->{sched_duration} / 60;
		$review{most_undelay_real_time}  = $most_undelay->{rt_duration} / 60;
		$review{most_undelay_delta}
		  = $self->min_to_human(
			( $most_undelay->{sched_duration} - $most_undelay->{rt_duration} )
			/ 60 );
		  = ( $most_undelay->{sched_duration} - $most_undelay->{rt_duration} )
		  / 60;
		$review{most_undelay_lineno} = $most_undelay->{line}
		  // $most_undelay->{no};
		$review{most_undelay_from} = $most_undelay->{from_name};
+37 −0
Changes for share/locales/de_DE.po: 37 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,43 @@ msgstr "automatisch"
msgid "header.error"
msgstr "Fehler"

#
# LT (localized duration)
#

msgid "LT.weeks"
msgstr "Wochen"

msgid "LT.week"
msgstr "Woche"

msgid "LT.days"
msgstr "Tage"

msgid "LT.day"
msgstr "Tag"

msgid "LT.hours"
msgstr "Stunden"

msgid "LT.hour"
msgstr "Stunde"

msgid "LT.minutes"
msgstr "Minuten"

msgid "LT.minute"
msgstr "Minute"

msgid "LT.zero-minutes"
msgstr "0 Minuten"

msgid "LT.final-and"
msgstr " und"

msgid "LT.and"
msgstr " und"

#
# Templates
#
+37 −0
Changes for share/locales/en_GB.po: 37 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,43 @@ msgstr "auto"
msgid "header.error"
msgstr "Error"

#
# LT (localized duration)
#

msgid "LT.weeks"
msgstr "weeks"

msgid "LT.week"
msgstr "week"

msgid "LT.days"
msgstr "days"

msgid "LT.day"
msgstr "day"

msgid "LT.hours"
msgstr "hours"

msgid "LT.hour"
msgstr "hour"

msgid "LT.minutes"
msgstr "minutes"

msgid "LT.minute"
msgstr "minute"

msgid "LT.zero-minutes"
msgstr "0 minutes"

msgid "LT.final-and"
msgstr ", and"

msgid "LT.and"
msgstr " and"

#
# Templates
#
+3 −3
Changes for templates/_checked_in.html.ep: 3 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -19,20 +19,20 @@
					data-dest="<%= $journey->{arr_name} %>"
					>
					% if ($journey->{boarding_countdown} > 60) {
						<%= L('status.boarding-in.pre') %> <%= journeys->min_to_human(int($journey->{boarding_countdown} / 60)) %> <%= L('status.boarding-in.post') %><br/>
						<%= L('status.boarding-in.pre') %> <%= LT(int($journey->{boarding_countdown} / 60)) %> <%= L('status.boarding-in.post') %><br/>
					% }
					% elsif ($journey->{boarding_countdown} > 0) {
						<%= L('status.boarding-soon') %><br/>
					% }
					% if ($journey->{departure_countdown} > 60) {
						<%= L('status.departure-in.pre') %> <%= journeys->min_to_human(int($journey->{departure_countdown} / 60)) %> <%= L('status.departure-in.post') %>
						<%= L('status.departure-in.pre') %> <%= LT(int($journey->{departure_countdown} / 60)) %> <%= L('status.departure-in.post') %>
					% }
					% elsif ($journey->{departure_countdown} > 0) {
						%= L('status.departure-soon')
					% }
					% elsif (defined $journey->{arrival_countdown}) {
						% if ($journey->{arrival_countdown} > 60) {
							<%= L('status.arrival-in.pre') %> <%= journeys->min_to_human(int($journey->{arrival_countdown} / 60)) %> <%= L('status.arrival-in.post') %> 
							<%= L('status.arrival-in.pre') %> <%= LT(int($journey->{arrival_countdown} / 60)) %> <%= L('status.arrival-in.post') %> 
						% }
						% elsif ($journey->{arrival_countdown} > 0) {
							%= L('status.arrival-soon')
Loading