xffm translation: date specification

Bernhard Walle Bernhard.Walle at gmx.de
Fri Jun 20 20:30:16 CEST 2003


Hello,

On Fri, 20 Jun 2003 at 14:00 (-0500), edscott wilson garcia wrote:
> El vie, 20-06-2003 a las 03:06, Bernhard Walle escribió:
> > On Thu, 19 Jun 2003 at 11:27 (-0500), edscott wilson garcia wrote:
> > > El jue, 19-06-2003 a las 10:14, Benedikt Meurer escribió:
> > > > On Thu, 19, Jun 2003, edscott wilson garcia wrote:
> > > > > 
> > > > > There's the rub. We're in translation freeze. There should be a way not
> > > > > to require the translations.
> > > > 
> > > > Please, do not replace with a stupid work-around. Do it right, or leave
> > > > it like it is now and we change it after 4.0.
> > > 
> > > Agreed.
> > 
> > Did you read my other mail? The two strings are *already* in the
> > translation files. So you have only to fill them with live. (The month
> > translation is done by the time functions automatically if locale is
> > correctly set.)
> 
> Please try to compile in your code and test it. If it works send us a
> patch so we can commit it (easy patch way: duplicate-file,
> modify-file-and-test, xfdiff4-the-files-to-create patch).

Ok, here's the patch. Maybe you'll put the new function in a own file with
a header file.

I did *not* use the glib time functions because the g_date_strftime
function works only with dates and not with times. So the only function
I can use would be the one to calculate the difference, but this forces
me to call a converting function which converts from time_t to GDate.
Since difftime() normally does only a substraction it's much faster. It
conforms to ANSI C99 so it *should* be available on all systems. Maybe
you'll have to add this in the configure script -- I don't know this.

I did not make any changes in the translation file and it works correctly.
So it should not affect the translation freeze. I hope I made all
correct.


Regards,
Bernhard

-- 
_________ http://www.bwalle.de _________________________________________________
Ich glaube nur an Statistiken, die ich selbst gefälscht habe.
	-- Winston Churchill
-------------- next part --------------
Index: add_file.c
===================================================================
RCS file: /cvsroot/xfce/xfce-devel/xffm/src/add_file.c,v
retrieving revision 1.21
diff -u -r1.21 add_file.c
--- add_file.c	10 Jun 2003 18:09:52 -0000	1.21
+++ add_file.c	20 Jun 2003 18:29:45 -0000
@@ -57,6 +57,9 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
 
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
@@ -77,6 +80,52 @@
 extern int stop;
 
 
+/*
+ * This function converts a time value specified in seconds since 1970-01-01
+ * to a string representation. It shows the date and the time if the point
+ * if less then six month in the past and only the date otherwise.
+ * The exact format must be provided by a translation string. 
+ *
+ * The function should be thread-save since there are not used static
+ * (or even global) variables if the system provided a localtime_r() function.
+ *
+ * Arguments:     when:    time in seconds since 1970-01-01
+ *                string:  the result char-array in which the string is placed
+ *                length:  the length of the string-array
+ *                
+ * Return value:  string on success, NULL on failure
+ */
+const char *time_to_string (time_t when, char* string, size_t length) {
+      time_t          now             = time(NULL);
+#ifdef HAVE_LOCALTIME_R
+      struct tm       timestruct;
+#endif
+      struct tm*      timestruct_ptr;
+      char*           formatstring;
+
+      memset (string, 0, length);
+
+      formatstring = difftime(now, when) > 24*60*60*30*6
+            /* strftime format for non-recent files (older than 6 months)  */
+          ? _("%b %e  %Y")
+            /* strftime format for recent files */
+          : _("%b %e %H:%M");
+
+#ifdef HAVE_LOCALTIME_R
+      timestruct_ptr = ×truct;
+      localtime_r(&when, timestruct_ptr);
+#else
+      timestruct_ptr = localtime(&when);
+#endif
+
+      if (strftime(string, length, formatstring, localtime(&when)) == 0) {
+          return NULL;
+      }
+
+      return string;
+}
+
+
 char *sizetag(long long tama, int count)
 {
     char *tag = "B";
@@ -168,6 +217,7 @@
     struct group *g;
     struct passwd *p;
     char *group, *owner, *tag;
+    char date[64];
 
     if(IS_DIR(en->type))
 	tag = sizetag(-1, en->count);
@@ -190,7 +240,7 @@
 	owner = "?";
     gtk_tree_store_set((GtkTreeStore *) treemodel, target, 
 	MODE_COLUMN, mode_string(en->st->st_mode), 
-	DATE_COLUMN, my_utf_string(time_string(en->st->st_mtime)), 
+	DATE_COLUMN, my_utf_string(time_to_string(en->st->st_mtime, date, 64)), 
 	GROUP_COLUMN, group, 
 	OWNER_COLUMN, owner, 
 	SIZE_COLUMN, tag, 
@@ -250,6 +300,9 @@
 	g_error_free(error);
     return;
 }
+
+
+
 
 GtkTreeIter add_it(GtkTreeView * treeview, GtkTreeIter * target, tree_entry_t * en, char *name, gboolean insert)
 {


More information about the Xfce4-dev mailing list