- stringstream s;
- if (!finished ()) {
- s << pc << N_("%");
- if (p >= 0 && t > 10 && r > 0) {
- /// TRANSLATORS: remaining here follows an amount of time that is remaining
- /// on an operation.
- s << "; " << seconds_to_approximate_hms (r) << " " << _("remaining");
+ char buffer[64];
+ snprintf (buffer, sizeof(buffer), "%d%%", pc);
+ s += buffer;
+
+ if (t > 10 && r > 0) {
+ boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
+ boost::posix_time::ptime finish = now + boost::posix_time::seconds(r);
+ char finish_string[16];
+ snprintf (finish_string, sizeof(finish_string), "%02d:%02d", int(finish.time_of_day().hours()), int(finish.time_of_day().minutes()));
+ string day;
+ if (now.date() != finish.date()) {
+ /// TRANSLATORS: the %1 in this string will be filled in with a day of the week
+ /// to say what day a job will finish.
+ day = String::compose (_(" on %1"), finish.date().day_of_week().as_long_string());
+ }
+ /// TRANSLATORS: "remaining; finishing at" here follows an amount of time that is remaining
+ /// on an operation; after it is an estimated wall-clock completion time.
+ s += String::compose(
+ _("; %1 remaining; finishing at %2%3"),
+ seconds_to_approximate_hms(r), finish_string, day
+ );