Re: [Rhythmbox-devel] burner fixes



On Wed, 2004-11-17 at 23:01 +0100, Christophe Fergeau wrote:
> > > I recall that this came up before and someone indicated that it might be 
> > > more difficult for translators that way. 
> > 
> > Hmm.  Because it would mess up how gettext extracts strings into .po
> > files or something?  I'll have a look after you commit.
> 
> Yep, I started to change some %lld to G_GUINT64_FORMAT a while ago until
> I noticed that strings like
> "Time remaining: %lld minutes" (dummy example)
> were replaced with
> "Time remaining: "
> " minutes"
> in the .po file, which is a big annoyance for translators: in the latter
> case, there are many languages where the string won't be properly
> translateable.

Ok, I had a crack at fixing this.  I can't test/apply because I don't
have an existing jhbuild at the moment, and freedesktop.org being down
makes jhbuild not work.

Can someone try this patch and commit it to 0.9 if it works?

* looking for rhythmbox-devel gnome org--2004/rhythmbox--main--0.9--patch-149 to compare with
* comparing to rhythmbox-devel gnome org--2004/rhythmbox--main--0.9--patch-149
M  sources/rb-playlist-source-recorder.c

* modified files

--- orig/sources/rb-playlist-source-recorder.c
+++ mod/sources/rb-playlist-source-recorder.c
@@ -1094,6 +1094,28 @@
         return TRUE;
 }
 
+char *
+evilly_substitute_translation (const char *translation,
+                               const char *key,
+                               const char *value,
+                               const char *replacement)
+{
+        const char *keypos;
+        
+        keypos = strstr (fmt, key);
+        if (keypos) {
+                char *real_fmt;
+                char *fmt_start;
+                fmt_start = g_strndup (fmt, keypos - translation);
+                real_fmt = g_strdup_printf ("%s%s%s",
+                                            fmt_start, replacement,
+                                            keypos+2);
+                g_free (fmt_start);
+                return real_fmt;
+        } else 
+                return NULL;
+}
+
 void
 rb_playlist_source_recorder_start (RBPlaylistSourceRecorder *source,
                                    GError                  **error)
@@ -1118,16 +1140,29 @@
                 media_duration = rb_recorder_get_media_length (source->priv->recorder, NULL);
 
                 if ((media_duration < 0) && (duration > 4440)) {
-                        message = g_strdup_printf (_("This playlist is %lld minutes long.  "
-                                                     "This exceeds the length of a standard audio CD.  "
-                                                     "If the destination media is larger than a standard audio CD "
-                                                     "please insert it in the drive and try again."),
-                                                   duration / 60);
+                        char *fmt;
+                        fmt = evilly_substitute_translation (_("This playlist is %lld minutes long.  "
+                                                               "This exceeds the length of a standard audio CD.  "
+                                                               "If the destination media is larger than a standard audio CD "
+                                                               "please insert it in the drive and try again."),
+                                                             "%lld",
+                                                             G_GINT64_FORMAT);
+                        
+                        if (fmt)
+                                message = g_strdup_printf (fmt, duration / 60);
+                        g_free (fmt);
                 } else if ((media_duration > 0) && (media_duration <= duration)) {
-                        message = g_strdup_printf (_("This playlist is %" G_GINT64_FORMAT " minutes long.  "
-                                                     "This exceeds the %" G_GINT64_FORMAT " minute length of the media in the drive."),
-                                                   duration / 60,
-                                                   media_duration / 60);
+                        char *fmt;
+
+                        fmt = evilly_substitute_translation (_("This playlist is %lld minutes long.  "
+                                                               "This exceeds the %lld minute length of the media in the drive."),
+                                                             "%lld",
+                                                             G_GINT64_FORMAT);
+                        if (fmt)
+                                message = g_strdup_printf (fmt,
+                                                           duration / 60,
+                                                           media_duration / 60);
+                        g_free (fmt);
                 }
 
                 if (message) {
@@ -1140,12 +1175,25 @@
                 }
 
                 if (!check_tmp_dir (source, error)) {
-                        guint64 mib_needed = rb_playlist_source_recorder_estimate_total_size (source) / 1048576;
-
-                        error_dialog (source,
-                                      _("Could not find temporary space!"),
-                                      _("Could not find enough temporary space to convert audio tracks.  %" G_GUINT64_FORMAT " MiB required."),
-                                      mib_needed);
+                        guint64 mib_needed;
+                        const char *fmt;
+                        const char *percent_d;
+
+                        fmt = evilly_substitute_translation _("Could not find enough temporary space to convert audio tracks; %llu MiB required.",
+                                                              "%llu",
+                                                              G_GUINT64_FORMAT);
+                        mib_needed = rb_playlist_source_recorder_estimate_total_size (source) / 1048576;
+                                
+                        if (fmt)
+                                error_dialog (source,
+                                              _("Could not find temporary space!"),
+                                              fmt,
+                                              mib_needed);
+                        else
+                                error_dialog (source,
+                                              _("Could not find temporary space!"),
+                                              ""); 
+                        g_free (fmt);
 
                         return;
                 }



Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]