[PATCH] Translate the "Templates" folder



I wonder whether you like the attached patch, which was in bugzilla [1]
for some time now but didn't receive any feedback. It ensures that
~/Templates is translated in the GUI. I remember an excessive discussion
on ddl which discussed various ways of internationalizing folders. Some
seemed to favor the apple way of doing things. They added a special
files in the folders containing translations. However, since our
translations are way more iterative and we release snapshots, this IMHO
won't work properly.

[1] http://bugzilla.gnome.org/show_bug.cgi?id=136836

-- 
Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-file-utilities.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file-utilities.c,v
retrieving revision 1.127
diff -u -p -r1.127 nautilus-file-utilities.c
--- libnautilus-private/nautilus-file-utilities.c	13 Jul 2005 09:25:30 -0000	1.127
+++ libnautilus-private/nautilus-file-utilities.c	24 Aug 2005 14:13:30 -0000
@@ -501,36 +501,49 @@ nautilus_get_uri_shortname_for_display (
 	char *utf8_name, *name, *tmp;
 	char *text_uri, *local_file;
 	gboolean validated;
+	gboolean is_file_uri;
 	const char *method;
+	static char *templates_dir = NULL;
+
+	if (templates_dir == NULL) {
+		templates_dir = nautilus_get_templates_directory ();
+	}
 
-	
 	validated = FALSE;
-	name = gnome_vfs_uri_extract_short_name (uri);
-	if (name == NULL) {
-		name = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
-	} else if (g_ascii_strcasecmp (uri->method_string, "file") == 0) {
-		text_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
-		local_file = gnome_vfs_get_local_path_from_uri (text_uri);
-		g_free (name);
-		name = g_filename_display_basename (local_file);
-		g_free (local_file);
-		g_free (text_uri);
+	is_file_uri = (g_ascii_strcasecmp (uri->method_string, "file") == 0);
+
+	if (is_file_uri
+	    && (strcmp (uri->text, templates_dir) == 0)) {
+		name = g_strdup (_("Templates"));
 		validated = TRUE;
-	} else if (!gnome_vfs_uri_has_parent (uri)) {
-		/* Special-case the display name for roots that are not local files */
-		method = nautilus_get_vfs_method_display_name (uri->method_string);
-		if (method == NULL) {
-			method = uri->method_string;
-		}
-		
-		if (name == NULL ||
-		    strcmp (name, GNOME_VFS_URI_PATH_STR) == 0) {
+	} else {
+		name = gnome_vfs_uri_extract_short_name (uri);
+		if (name == NULL) {
+			name = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
+		} else if (is_file_uri) {
+			text_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_PASSWORD);
+			local_file = gnome_vfs_get_local_path_from_uri (text_uri);
 			g_free (name);
-			name = g_strdup (method);
-		} else {
-			tmp = name;
-			name = g_strdup_printf ("%s: %s", method, name);
-			g_free (tmp);
+			name = g_filename_display_basename (local_file);
+			g_free (local_file);
+			g_free (text_uri);
+			validated = TRUE;
+		} else if (!gnome_vfs_uri_has_parent (uri)) {
+			/* Special-case the display name for roots that are not local files */
+			method = nautilus_get_vfs_method_display_name (uri->method_string);
+			if (method == NULL) {
+				method = uri->method_string;
+			}
+			
+			if (name == NULL ||
+			    strcmp (name, GNOME_VFS_URI_PATH_STR) == 0) {
+				g_free (name);
+				name = g_strdup (method);
+			} else {
+				tmp = name;
+				name = g_strdup_printf ("%s: %s", method, name);
+				g_free (tmp);
+			}
 		}
 	}
 
Index: libnautilus-private/nautilus-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.c,v
retrieving revision 1.370
diff -u -p -r1.370 nautilus-file.c
--- libnautilus-private/nautilus-file.c	22 Aug 2005 21:17:58 -0000	1.370
+++ libnautilus-private/nautilus-file.c	24 Aug 2005 14:13:32 -0000
@@ -810,7 +810,32 @@ nautilus_file_can_execute (NautilusFile 
 }
 
 /**
- * nautilus_file_is_desktop_directory:
+ * nautilus_file_is_template_directory:
+ * 
+ * Check whether this file is the template directory.
+ * 
+ * @file: The file to check.
+ * 
+ * Return value: TRUE if this is the physical desktop directory.
+ */
+gboolean
+nautilus_file_is_template_directory (NautilusFile *file)
+{
+	GnomeVFSURI *dir_vfs_uri;
+
+	dir_vfs_uri = file->details->directory->details->vfs_uri;
+
+	if (dir_vfs_uri == NULL ||
+	    strcmp (dir_vfs_uri->method_string, "file") != 0) {
+		return FALSE;
+	}
+
+	return ((strcmp (dir_vfs_uri->text, g_get_home_dir ()) == 0)
+		&& (strcmp (file->details->relative_uri, "Templates") == 0));
+}
+
+/**
+ * nautilus_file_is_desktop_directory:
  * 
  * Check whether this file is the desktop directory.
  * 
@@ -2677,6 +2702,8 @@ nautilus_file_get_display_name_nocopy (N
 	
  	if (file->details->got_link_info && file->details->display_name != NULL) {
  		name = g_strdup (file->details->display_name);
+	} else if (nautilus_file_is_template_directory (file)) {
+		name = g_strdup (_("Templates"));
 	} else {
 		name = nautilus_file_get_name (file);
 		if (name == NULL) {
Index: libnautilus-private/nautilus-file.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.h,v
retrieving revision 1.106
diff -u -p -r1.106 nautilus-file.h
--- libnautilus-private/nautilus-file.h	22 Aug 2005 21:17:58 -0000	1.106
+++ libnautilus-private/nautilus-file.h	24 Aug 2005 14:13:32 -0000
@@ -155,6 +155,7 @@ gboolean                nautilus_file_is
 gboolean                nautilus_file_is_in_desktop                     (NautilusFile                   *file);
 gboolean		nautilus_file_is_home				(NautilusFile                   *file);
 gboolean                nautilus_file_is_desktop_directory              (NautilusFile                   *file);
+gboolean                nautilus_file_is_template_directory             (NautilusFile                   *file);
 GnomeVFSResult          nautilus_file_get_file_info_result              (NautilusFile                   *file);
 gboolean                nautilus_file_get_directory_item_count          (NautilusFile                   *file,
 									 guint                          *count,
Index: src/nautilus-pathbar.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/nautilus-pathbar.c,v
retrieving revision 1.3
diff -u -p -r1.3 nautilus-pathbar.c
--- src/nautilus-pathbar.c	25 Jul 2005 23:43:25 -0000	1.3
+++ src/nautilus-pathbar.c	24 Aug 2005 14:13:39 -0000
@@ -50,6 +50,7 @@ typedef enum {
         ROOT_BUTTON,
         HOME_BUTTON,
         DESKTOP_BUTTON,
+	TEMPLATES_BUTTON,
 	VOLUME_BUTTON
 } ButtonType;
 
@@ -203,6 +204,8 @@ desktop_location_changed_callback (gpoin
 static void
 nautilus_path_bar_init (NautilusPathBar *path_bar)
 {
+	char *templates_path;
+
         GTK_WIDGET_SET_FLAGS (path_bar, GTK_NO_WINDOW);
         gtk_widget_set_redraw_on_allocate (GTK_WIDGET (path_bar), FALSE);
 
@@ -215,6 +218,9 @@ nautilus_path_bar_init (NautilusPathBar 
 	path_bar->home_path = gnome_vfs_get_uri_from_local_path (g_get_home_dir ());
 	path_bar->root_path = g_strdup ("file:///");
 	desktop_is_home = (strcmp (path_bar->home_path, path_bar->desktop_path) == 0);
+	templates_path = g_build_filename (g_get_home_dir (), "Templates", NULL);
+	path_bar->templates_path = gnome_vfs_get_uri_from_local_path (templates_path);
+	g_free (templates_path);
 
 	eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR,
 						  desktop_location_changed_callback,
@@ -292,6 +298,10 @@ nautilus_path_bar_finalize (GObject *obj
 		g_free (path_bar->desktop_path);
 		path_bar->desktop_path = NULL;
 	}
+	if (path_bar->templates_path) {
+		g_free (path_bar->templates_path);
+		path_bar->templates_path = NULL;
+	}
 
 	if (path_bar->root_icon) {
 		g_object_unref (path_bar->root_icon);
@@ -1102,6 +1112,7 @@ get_button_image (NautilusPathBar *path_
 			g_free (icon_name);
       			return path_bar->desktop_icon;
 
+		case TEMPLATES_BUTTON:
 	    	default:
                        return NULL;
         }
@@ -1129,12 +1140,12 @@ get_dir_name (ButtonData *button_data)
 		} else {
 			return _("Desktop");
 		}
+	} else if (button_data->type == DESKTOP_BUTTON) {
+		return _("Desktop");
+	} else if (button_data->type == TEMPLATES_BUTTON) {
+		return _("Templates");
 	} else {
-        	if (button_data->type == DESKTOP_BUTTON) {
-                	return _("Desktop");
-		} else {
-	                return button_data->dir_name;
-		}
+		return button_data->dir_name;
 	}
 }
 
@@ -1284,6 +1295,9 @@ find_button_type (NautilusPathBar  *path
         if (path_bar->home_path != NULL && is_file_path_equal (path, path_bar->home_path)) {
 	       	return HOME_BUTTON;
 	}
+        if (path_bar->templates_path != NULL && is_file_path_equal (path, path_bar->templates_path)) {
+	       	return TEMPLATES_BUTTON;
+	}
         if (path_bar->desktop_path != NULL && is_file_path_equal (path, path_bar->desktop_path)) {
 		if (!desktop_is_home) {
                 	return DESKTOP_BUTTON;
@@ -1353,6 +1367,7 @@ make_directory_button (NautilusPathBar  
                         break;
                 case HOME_BUTTON:
                 case DESKTOP_BUTTON:
+		case TEMPLATES_BUTTON:
 		case VOLUME_BUTTON:
                         button_data->image = gtk_image_new ();
                         button_data->label = gtk_label_new (NULL);
Index: src/nautilus-pathbar.h
===================================================================
RCS file: /cvs/gnome/nautilus/src/nautilus-pathbar.h,v
retrieving revision 1.1
diff -u -p -r1.1 nautilus-pathbar.h
--- src/nautilus-pathbar.h	8 Jul 2005 11:25:51 -0000	1.1
+++ src/nautilus-pathbar.h	24 Aug 2005 14:13:39 -0000
@@ -41,6 +41,7 @@ struct _NautilusPathBar
 	char *root_path;
 	char *home_path;
 	char *desktop_path;
+	char *templates_path;
 
 	GdkPixbuf *root_icon;
 	GdkPixbuf *home_icon;
Index: src/nautilus-spatial-window.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/nautilus-spatial-window.c,v
retrieving revision 1.450
diff -u -p -r1.450 nautilus-spatial-window.c
--- src/nautilus-spatial-window.c	23 Jul 2005 17:41:04 -0000	1.450
+++ src/nautilus-spatial-window.c	24 Aug 2005 14:13:39 -0000
@@ -530,15 +530,21 @@ location_button_clicked_callback (GtkWid
 		NautilusFile *file;
 		char *uri_string;
 
-		name = nautilus_get_uri_shortname_for_display (uri);
+		uri_string = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
+
+		file = nautilus_file_get (uri_string);
+		if (nautilus_file_is_template_directory (file)) {
+			name = g_strdup (_("Templates"));
+		} else {
+			name = nautilus_get_uri_shortname_for_display (uri);
+		}
+
 		menu_item = gtk_image_menu_item_new_with_label (name);
 		g_free (name);
 		if (first_item == NULL) {
 			first_item = menu_item;
 		}
 		
-		uri_string = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
-		file = nautilus_file_get (uri_string);
 		g_object_ref (menu_item);
 		nautilus_file_call_when_ready (file,
 					       NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY,

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]