shutdown: impossible to properly localize some strings

Bug #102565 reported by Gabor Kelemen
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
upstart
Fix Released
Medium
Scott James Remnant (Canonical)

Bug Description

In compat/sysv/shutdown.c, the following code exists:

static char *
warning_message (const char *message)
{
 char *banner, *msg;

 nih_assert (message != NULL);

 if (delay > 1) {
  banner = nih_sprintf (NULL, _("The system is going down for "
           "%s in %d minutes!"),
          what, delay);
 } else if (delay) {
  banner = nih_sprintf (NULL, _("The system is going down for "
           "%s IN ONE MINUTE!"),
          what);
 } else {
  banner = nih_sprintf (NULL, _("The system is going down for "
           "%s NOW!"),
          what);
 }

Besides that the possible values of the what variable (maintenance, reboot, halt, power off) are not marked for translation in the file, this is a clear case of what translators call 'string surgery' and what should be generally avoided. For more details please see: http://developer.gnome.org/doc/tutorials/gnome-i18n/developer.html#split-sentences

Furthermore, using plurals this way is also incorrect, there are several languages that use less or more than two plural forms, for these it's pointless to differentiate between 1 and >1 minutes (NOW can be ok). For more details, please see the next paragraph in the above linked howto.

My proposal to solve all these problems would look something like this:
if (what=="reboot") {
  if (delay) {
     banner = nih_sprintf (NULL, ngettext ("The system is going down for reboot in %d minute!",
                                                             "The system is going down for reboot in %d minutes!", delay)
                                               delay);
   else
      banner = nih_sprintf (NULL, _("The system is going down for reboot NOW!"));
   }
   else if (what=="halt") {...}

and so on, assuming that the above strings must not look like as they currently look, for, say historical reasons.

Changed in upstart:
importance: Undecided → Medium
status: Unconfirmed → Confirmed
Revision history for this message
Scott James Remnant (Canonical) (canonical-scott) wrote :

It's not so much as "must look", but "do look".

This file has a major revamp coming up, so I'll be sure to fix the string handling when I do that (the "what" goes away completely)

Changed in upstart:
status: Confirmed → Triaged
Changed in upstart:
milestone: 0.5 → none
Changed in upstart:
milestone: none → 0.5-later
Changed in upstart:
milestone: 0.5-later → none
summary: - It's impossible to properly localize some strings
+ shutdown: impossible to properly localize some strings
Changed in upstart:
status: Triaged → Fix Committed
Changed in upstart:
milestone: none → 0.6.0
Revision history for this message
Scott James Remnant (Canonical) (canonical-scott) wrote :
Download full text (6.7 KiB)

This has been fixed in Upstart 0.6.0.

0.6.0 2009-07-09 "How appropriate, you fight like a cow"

 * The licence for Upstart has been changed back to version 2 of the
   GNU GPL.

 * D-Bus 1.2.15 is now required, this is the current GIT HEAD
   pending a 1.2.16 release.

 * Configuration paths have changed. Global configuration now
   resides in "/etc/init.conf" while jobs are now configured in
   "/etc/init"

 * Job configuration filenames must now end in ".conf"

 * Default configuration files are now supplied in the "conf"
   sub-directory of the source, and installed into "/etc/init".

   These match the Debian/Ubuntu sysvinit configuration so may
   require some tweaking for other distributions, but provide an
   excellent base.

   The old example-jobs tarballs are deprecated.

 * The D-Bus interface remains unstable, to reflect this the current
   interface name has changed to "com.ubuntu.Upstart0_6" and the
   name of the job and instance interfaces have changed to match.

 * The "EmitEvent" D-Bus method gains a wait argument, when given
   as TRUE (the recommended setting) the method call will be blocked
   until all effects of the event have finished. When FALSE the
   method call will return once the event has been queued.

 * The "Start", "Stop" and "Restart" D-Bus methods of jobs and
   instances gain a similar wait argument.

 * The Upstart D-Bus object now has "version" and "log_priority"
   properties. The former is to obtain the version of the init daemon,
   the latter allows you to obtain and change the logging priority.

 * Job D-Bus objects now have "name", "description", "author" and
   "version" properties to obtain the job name and the contents of
   the equivalent job file fields for the others.

 * Instance D-Bus objects now have "name", "goal", "state" and
   "processes" properties to obtain the instance name, goal, state
   and list of running processes and their pids respectively.

 * The default D-Bus security policy now permits use of the "Get"
   methods by all users, including obtaining values of properties.

 * initctl has been rewritten with functionality more along the
   lines of Upstart 0.3.x than before; since many distributions are
   still shipping 0.3.x the summary of changes for the tool reflects
   both changes from 0.3.x and 0.5.x

 * The global "-p"/"--pid" argument has been dropped, since
   communication is over D-Bus. New "--system" and "--dest" arguments
   have been added to force communication over the system bus, and
   specify the destination, instead of using the private socket (this
   is the default when run as non-root to permit "list" and "status"
   to work for ordinary users).

 * The "-i"/"--id" and "--show-ids" options to commands have been
   dropped since jobs no longer have ids.

 * Since instances may now have names, these will be displayed in
   brackets after the job name when one is present. The output of
   the goal and state are now expressed as "start/running" instead
   of "(start) running" to disambiguate.

 * initctl "start" and "stop" now only output the final state of
   the job, not inte...

Read more...

Changed in upstart:
assignee: nobody → Scott James Remnant (scott)
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.