[PATCH] improving on i18n

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

 



As you probably already know there are lots of problems with current i18n
tools. Every genuine inscription can have only one equivalent in particular
language when using gettext. In the case of GIMP this is really serious
problem because of huge .po files (and thus many collisions).
The authors of Freeciv worked out an easy method of the partial solving this
problem. My patch is based on code from Freeciv.
Every string marked for translation can be preceded with a prefix in the
form "!prefix!". Thanks to this prefix, two appearances of the same
string can have different meanings. The prefix can be omited in
translated string, but leaving it will not influence displayed text because
it will be always stripped (it is helpful for translators who don't know
this solution). You should just use Q_() macro instead of _() in your code
to use this feature.

Please take a look at the first attached patch and tell me if you like it.
The only problem I can see is setting "--force" option when calling
gettextize from autogen.sh. I added po/Makefile.in.in file to my patch
(version provided by gettextize doesn't contain "--keyword=Q_" option for
xgettext) and calling "gettextize --copy --force" would overwrite
my po/Makefile.in.in. I removed "--force" from autogen.sh, but someone put
there a comment saying "(...) otherwise things don't get added reliably".
Is really something wrong with calling gettextize without "--force" option?
If yes, what would you suggest instead?

If you accept this patch, I'm going to commit another one, using newly
defined Q_() macro (second attachment). Ofcourse there will be more patches
like this one in the future as we (translators) detect more collisions.


Zbigniew

-- 
 "GNOME is an open, free, and productive desktop environment that sparks
  innovation and excitement among users and developers worldwide.
  Microsoft Windows is not."
                             -- Sun Microsystems
diff -ruN /home/aliens/cyba/gcvs/current/gimp/ChangeLog gimp/ChangeLog
--- /home/aliens/cyba/gcvs/current/gimp/ChangeLog	Mon Dec  4 16:55:30 2000
+++ gimp/ChangeLog	Tue Dec  5 14:00:14 2000
@@ -1,3 +1,27 @@
+2000-12-05  Zbigniew Chyla  <cyba@xxxxxxxx>
+
+	I18n improvement - added support for Q_() macro (replacement for _()
+	allowing to add a prefix of the form "!some_prefix!" to the
+	string and thus making it possible to translate it differently in
+	different contexts).
+
+	* libgimp/gimputils.c: added gimp_i18n_skip_qualifier_prefix()
+	function.
+
+	* libgimp/gimputils.h: included <glib.h>, added
+	gimp_i18n_skip_qualifier_prefix function declaration.
+
+	* libgimp/gimpintl.h, libgimp/libgimp-intl.h : included
+	"gimputils.h", added Q_() macro.
+
+	* po-libgimp/Makefile.in.in, po-plug-ins/Makefile.in.in: using
+	"--keyword=Q_" option when executing xgettext.
+
+	* po/Makefile.in.in: new file, using "--keyword=Q_" option when
+	executing xgettext.
+
+	* autogen.sh: executing gettextize without "--force" option.
+
 2000-12-03  Sven Neumann  <sven@xxxxxxxx>
 
 	* app/gimpimage.c: when merging layers, do not set the layer mode 
diff -ruN /home/aliens/cyba/gcvs/current/gimp/autogen.sh gimp/autogen.sh
--- /home/aliens/cyba/gcvs/current/gimp/autogen.sh	Sun Nov 12 03:51:51 2000
+++ gimp/autogen.sh	Tue Dec  5 13:41:06 2000
@@ -100,10 +100,7 @@
 fi
 
 echo "Running gettextize...  Ignore non-fatal messages."
-# Hmm, we specify --force here, since otherwise things dont'
-# get added reliably, but we don't want to overwrite intl
-# while making dist.
-echo "no" | gettextize --copy --force
+echo "no" | gettextize --copy
 
 autogen_dirs="."
 #if test -z "$NO_GCG"; then
diff -ruN /home/aliens/cyba/gcvs/current/gimp/libgimp/gimpintl.h gimp/libgimp/gimpintl.h
--- /home/aliens/cyba/gcvs/current/gimp/libgimp/gimpintl.h	Tue Oct 31 18:10:59 2000
+++ gimp/libgimp/gimpintl.h	Tue Dec  5 13:41:06 2000
@@ -25,6 +25,8 @@
 #include <glib.h>
 #include <locale.h>
 
+#include "gimputils.h"
+
 /* Copied from gnome-i18n.h by Tom Tromey <tromey@xxxxxxxxxxxxxxxxx>
  * Heavily modified by Daniel Egger <Daniel.Egger@xxxxxxxxxxx>
  * So be sure to hit me instead of him if something is wrong here
@@ -40,6 +42,7 @@
 #ifdef ENABLE_NLS
 #    include <libintl.h>
 #    define _(String) gettext (String)
+#    define Q_(String) gimp_i18n_skip_qualifier_prefix (gettext (String))
 #    ifdef gettext_noop
 #        define N_(String) gettext_noop (String)
 #    else
@@ -53,6 +56,7 @@
 #    define dcgettext(Domain,Message,Type) (Message)
 #    define bindtextdomain(Domain,Directory) (Domain)
 #    define _(String) (String)
+#    define Q_(String) gimp_i18n_skip_qualifier_prefix (String)
 #    define N_(String) (String)
 #endif
 
diff -ruN /home/aliens/cyba/gcvs/current/gimp/libgimp/gimputils.c gimp/libgimp/gimputils.c
--- /home/aliens/cyba/gcvs/current/gimp/libgimp/gimputils.c	Tue Oct 31 18:11:01 2000
+++ gimp/libgimp/gimputils.c	Tue Dec  5 13:41:06 2000
@@ -197,3 +197,24 @@
   return dest;
 }
 #endif  /* GLIB <= 1.3 */
+
+/**
+ * gimp_i18n_skip_qualifier_prefix:
+ * @string: A string to remove optional prefix from.
+ */
+gchar *
+gimp_i18n_skip_qualifier_prefix (const gchar *string)
+{
+	gchar *p;
+
+	g_assert (string != NULL);
+
+	if (*string != '!') {
+		return (gchar *) string;
+	} else if ((p = strchr (string + 1, '!')) != NULL) {
+		return p + 1;
+	} else {
+		g_warning ("Incorrect Q_ string: \"%s\"", string);
+		return (gchar *) string;
+	}
+}
diff -ruN /home/aliens/cyba/gcvs/current/gimp/libgimp/gimputils.h gimp/libgimp/gimputils.h
--- /home/aliens/cyba/gcvs/current/gimp/libgimp/gimputils.h	Tue Oct 31 18:11:01 2000
+++ gimp/libgimp/gimputils.h	Tue Dec  5 13:41:06 2000
@@ -24,6 +24,8 @@
 #ifndef __GIMPUTILS_H__
 #define __GIMPUTILS_H__
 
+#include <glib.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
@@ -45,7 +47,7 @@
 			  const gchar *exceptions);
 gchar * gimp_strcompress (const gchar *source);
 #endif  /* GLIB <= 1.3 */
-
+gchar *gimp_i18n_skip_qualifier_prefix (const gchar *string);
 
 #ifdef __cplusplus
 }
diff -ruN /home/aliens/cyba/gcvs/current/gimp/libgimp/libgimp-intl.h gimp/libgimp/libgimp-intl.h
--- /home/aliens/cyba/gcvs/current/gimp/libgimp/libgimp-intl.h	Tue Oct 31 18:11:01 2000
+++ gimp/libgimp/libgimp-intl.h	Tue Dec  5 13:41:06 2000
@@ -22,10 +22,12 @@
 #ifndef __LIBGIMP_INTL_H__
 #define __LIBGIMP_INTL_H__
 
+#include "gimputils.h"
 
 #ifdef ENABLE_NLS
 #    include <libintl.h>
 #    define _(String) dgettext ("gimp-libgimp", String)
+#    define Q_(String) gimp_i18n_skip_qualifier_prefix (dgettext ("gimp-libgimp", String))
 #    undef gettext
 #    define gettext(String) dgettext ("gimp-libgimp", String)
 #    ifdef gettext_noop
@@ -37,6 +39,7 @@
 /* Stubs that do something close enough.  */
 #    define gettext(String) (String)
 #    define _(String) (String)
+#    define Q_(String) gimp_i18n_skip_qualifier_prefix (String)
 #    define N_(String) (String)
 #endif
 
diff -ruN /home/aliens/cyba/gcvs/current/gimp/po/Makefile.in.in gimp/po/Makefile.in.in
--- /home/aliens/cyba/gcvs/current/gimp/po/Makefile.in.in	Thu Jan  1 01:00:00 1970
+++ gimp/po/Makefile.in.in	Tue Dec  5 13:41:06 2000
@@ -0,0 +1,250 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@xxxxxxxxxxxxxx>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+DESTDIR =
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+	$(COMPILE) $<
+
+.po.pox:
+	$(MAKE) $(PACKAGE).pot
+	$(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+	$(MSGFMT) -o $@ $<
+
+.po.gmo:
+	file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+	  && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+	sed -f ../intl/po2msg.sed < $< > $*.msg \
+	  && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: cat-id-tbl.c $(CATALOGS)
+all-no:
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES)
+	$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+	  --add-comments --keyword=_ --keyword=N_ --keyword=Q_ \
+	  --files-from=$(srcdir)/POTFILES.in \
+	&& test ! -f $(PACKAGE).po \
+	   || ( rm -f $(srcdir)/$(PACKAGE).pot \
+		&& mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+
+$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
+$(srcdir)/stamp-cat-id: $(PACKAGE).pot
+	rm -f cat-id-tbl.tmp
+	sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+		| sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+	if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+	  rm cat-id-tbl.tmp; \
+	else \
+	  echo cat-id-tbl.c changed; \
+	  rm -f $(srcdir)/cat-id-tbl.c; \
+	  mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+	fi
+	cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+	if test -r "$(MKINSTALLDIRS)"; then \
+	  $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
+	else \
+	  $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
+	fi
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  case "$$cat" in \
+	    *.gmo) destdir=$(DESTDIR)$(gnulocaledir);; \
+	    *)     destdir=$(DESTDIR)$(localedir);; \
+	  esac; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  dir=$$destdir/$$lang/LC_MESSAGES; \
+	  if test -r "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $$dir; \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+	  fi; \
+	  if test -r $$cat; then \
+	    $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+	  else \
+	    $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $(srcdir)/$$cat as" \
+		 "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+	  fi; \
+	  if test -r $$cat.m; then \
+	    $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+	    echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+	  else \
+	    if test -r $(srcdir)/$$cat.m ; then \
+	      $(INSTALL_DATA) $(srcdir)/$$cat.m \
+		$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+	      echo "installing $(srcdir)/$$cat as" \
+		   "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+	    else \
+	      true; \
+	    fi; \
+	  fi; \
+	done
+	if test "$(PACKAGE)" = "gettext"; then \
+	  if test -r "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
+	  fi; \
+	  $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+			  $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+	else \
+	  : ; \
+	fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+	done
+	rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+cat-id-tbl.o: ../intl/libgettext.h
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+	rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f $(GMOFILES)
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	for file in $$dists; do \
+	  ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+	    || cp -p $(srcdir)/$$file $(distdir); \
+	done
+
+update-po: Makefile
+	$(MAKE) $(PACKAGE).pot
+	PATH=`pwd`/../src:$$PATH; \
+	cd $(srcdir); \
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  mv $$lang.po $$lang.old.po; \
+	  echo "$$lang:"; \
+	  if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+	    rm -f $$lang.old.po; \
+	  else \
+	    echo "msgmerge for $$cat failed!"; \
+	    rm -f $$lang.po; \
+	    mv $$lang.old.po $$lang.po; \
+	  fi; \
+	done
+
+POTFILES: POTFILES.in
+	( if test 'x$(srcdir)' != 'x.'; then \
+	    posrcprefix='$(top_srcdir)/'; \
+	  else \
+	    posrcprefix="../"; \
+	  fi; \
+	  rm -f $@-t $@ \
+	    && (sed -e '/^#/d' -e '/^[ 	]*$$/d' \
+		    -e "s@.*@	$$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+		| sed -e '$$s/\\$$//') > $@-t \
+	    && chmod a-w $@-t \
+	    && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+	cd .. \
+	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+	       $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff -ruN /home/aliens/cyba/gcvs/current/gimp/po-libgimp/Makefile.in.in gimp/po-libgimp/Makefile.in.in
--- /home/aliens/cyba/gcvs/current/gimp/po-libgimp/Makefile.in.in	Tue Oct 31 18:11:34 2000
+++ gimp/po-libgimp/Makefile.in.in	Tue Dec  5 13:41:06 2000
@@ -84,7 +84,7 @@
 
 $(srcdir)/$(PACKAGE).pot: $(POTFILES)
 	$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
-	  --add-comments --keyword=_ --keyword=N_ \
+	  --add-comments --keyword=_ --keyword=N_ --keyword=Q_ \
 	  --files-from=$(srcdir)/POTFILES.in \
 	&& test ! -f $(PACKAGE).po \
 	   || ( rm -f $(srcdir)/$(PACKAGE).pot \
diff -ruN /home/aliens/cyba/gcvs/current/gimp/po-plug-ins/Makefile.in.in gimp/po-plug-ins/Makefile.in.in
--- /home/aliens/cyba/gcvs/current/gimp/po-plug-ins/Makefile.in.in	Tue Oct 31 18:11:29 2000
+++ gimp/po-plug-ins/Makefile.in.in	Tue Dec  5 13:41:06 2000
@@ -84,7 +84,7 @@
 
 $(srcdir)/$(PACKAGE).pot: $(POTFILES)
 	$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
-	  --add-comments --keyword=_ --keyword=N_ \
+	  --add-comments --keyword=_ --keyword=N_ --keyword=Q_ \
 	  --files-from=$(srcdir)/POTFILES.in \
 	&& test ! -f $(PACKAGE).po \
 	   || ( rm -f $(srcdir)/$(PACKAGE).pot \
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gimp/ChangeLog,v
retrieving revision 1.3066
diff -u -r1.3066 ChangeLog
--- ChangeLog	2000/12/03 21:36:25	1.3066
+++ ChangeLog	2000/12/05 13:39:04
@@ -1,3 +1,10 @@
+2000-12-05  Zbigniew Chyla  <cyba@xxxxxxxx>
+
+	* app/blend.c, app/brush_select.c, app/gradient.c, app/palette.c,
+	app/preferences_dialog.c, app/tools.c, modules/colorsel_water.c:
+	Marked some strings with Q_() macro instead of _() one and added
+	"!...!" prefixes.
+
 2000-12-03  Sven Neumann  <sven@xxxxxxxx>
 
 	* app/gimpimage.c: when merging layers, do not set the layer mode 
Index: app/blend.c
===================================================================
RCS file: /cvs/gnome/gimp/app/blend.c,v
retrieving revision 1.76
diff -u -r1.76 blend.c
--- app/blend.c	2000/06/23 00:14:06	1.76
+++ app/blend.c	2000/12/05 13:39:04
@@ -317,7 +317,7 @@
     (FALSE, gradient_type_callback,
      &options->gradient_type, (gpointer) options->gradient_type_d,
 
-     _("Linear"),                 (gpointer) LINEAR, NULL,
+     Q_("!gradient_type!Linear"), (gpointer) LINEAR, NULL,
      _("Bi-Linear"),              (gpointer) BILINEAR, NULL,
      _("Radial"),                 (gpointer) RADIAL, NULL,
      _("Square"),                 (gpointer) SQUARE, NULL,
Index: app/brush_select.c
===================================================================
RCS file: /cvs/gnome/gimp/app/brush_select.c,v
retrieving revision 1.77
diff -u -r1.77 brush_select.c
--- app/brush_select.c	2000/04/14 16:33:47	1.77
+++ app/brush_select.c	2000/12/05 13:39:04
@@ -464,7 +464,7 @@
   util_box = gtk_hbox_new (FALSE, 0);
   gtk_box_pack_end (GTK_BOX (bsp->options_box), util_box, FALSE, FALSE, 4);
 
-  button =  gtk_button_new_with_label (_("New"));
+  button =  gtk_button_new_with_label (Q_("!brush-button!New"));
   gtk_signal_connect (GTK_OBJECT (button), "clicked",
 		      GTK_SIGNAL_FUNC (brush_select_new_brush_callback),
 		      bsp);
Index: app/gradient.c
===================================================================
RCS file: /cvs/gnome/gimp/app/gradient.c,v
retrieving revision 1.90
diff -u -r1.90 gradient.c
--- app/gradient.c	2000/04/27 17:27:27	1.90
+++ app/gradient.c	2000/12/05 13:39:05
@@ -529,7 +529,7 @@
 
 static const gchar *blending_types[] =
 {
-  N_("Linear"),
+  N_("!blending_type!Linear"),
   N_("Curved"),
   N_("Sinusoidal"),
   N_("Spherical (increasing)"),
@@ -4617,7 +4617,7 @@
       else
 	menuitem =
 	  gtk_radio_menu_item_new_with_label (group,
-					      gettext (blending_types[i]));
+					      Q_(blending_types[i]));
 
       group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
 
Index: app/palette.c
===================================================================
RCS file: /cvs/gnome/gimp/app/palette.c,v
retrieving revision 1.78
diff -u -r1.78 palette.c
--- app/palette.c	2000/08/09 17:04:16	1.78
+++ app/palette.c	2000/12/05 13:39:05
@@ -1161,7 +1161,7 @@
 
   palette->popup_menu = menu = gtk_menu_new ();
 
-  menu_item = gtk_menu_item_new_with_label (_("New"));
+  menu_item = gtk_menu_item_new_with_label (Q_("!palette-menuitem!New"));
   gtk_menu_append (GTK_MENU (menu), menu_item);
   gtk_signal_connect (GTK_OBJECT (menu_item), "activate", 
 		      GTK_SIGNAL_FUNC (palette_dialog_new_entry_callback),
@@ -2216,7 +2216,7 @@
       gtk_container_add (GTK_CONTAINER (frame), vbox);
       gtk_widget_show (vbox);
       
-      button = gtk_button_new_with_label (_("New"));
+      button = gtk_button_new_with_label (Q_("!palette-button!New"));
       GTK_WIDGET_UNSET_FLAGS (button, GTK_RECEIVES_DEFAULT);
       gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0);
       gtk_signal_connect (GTK_OBJECT (button), "clicked",
Index: app/preferences_dialog.c
===================================================================
RCS file: /cvs/gnome/gimp/app/preferences_dialog.c,v
retrieving revision 1.107
diff -u -r1.107 preferences_dialog.c
--- app/preferences_dialog.c	2000/11/18 00:25:38	1.107
+++ app/preferences_dialog.c	2000/12/05 13:39:05
@@ -2109,9 +2109,9 @@
 
   /* Interface / Tool Options */
   vbox = prefs_notebook_append_page (GTK_NOTEBOOK (notebook),
-					  _("Tool Options"),
+					  Q_("!preferences_interface!Tool Options"),
 					  GTK_CTREE (ctree),
-					  _("Tool Options"),
+					  Q_("!preferences_interface!Tool Options"),
 					  "dialogs/preferences/interface.html#tool_options",
 					  top_insert,
 					  &child_insert,
@@ -2246,7 +2246,7 @@
 
 			   _("Nearest Neighbor (Fast)"),
 			   (gpointer) NEAREST_NEIGHBOR_INTERPOLATION, NULL,
-			   _("Linear"),
+			   Q_("!interpolation_type!Linear"),
 			   (gpointer) LINEAR_INTERPOLATION, NULL,
 			   _("Cubic (Slow)"),
 			   (gpointer) CUBIC_INTERPOLATION, NULL,
Index: app/tools.c
===================================================================
RCS file: /cvs/gnome/gimp/app/tools.c,v
retrieving revision 1.79
diff -u -r1.79 tools.c
--- app/tools.c	2000/11/18 00:25:38	1.79
+++ app/tools.c	2000/12/05 13:39:05
@@ -1534,7 +1534,7 @@
 
   /*  The shell and main vbox  */
   options_shell =
-    gimp_dialog_new (_("Tool Options"), "tool_options",
+    gimp_dialog_new (Q_("!dialog_title!Tool Options"), "tool_options",
 		     tools_help_func,
 		     "dialogs/tool_options.html",
 		     GTK_WIN_POS_NONE,
Index: modules/colorsel_water.c
===================================================================
RCS file: /cvs/gnome/gimp/modules/colorsel_water.c,v
retrieving revision 1.12
diff -u -r1.12 colorsel_water.c
--- modules/colorsel_water.c	2000/05/27 01:30:11	1.12
+++ modules/colorsel_water.c	2000/12/05 13:39:06
@@ -626,7 +626,7 @@
   bbox = gtk_vbutton_box_new ();
   gtk_box_pack_end (GTK_BOX (hbox2), bbox, FALSE, FALSE, 0);
 
-  button = gtk_button_new_with_label (_("New"));
+  button = gtk_button_new_with_label (Q_("!color-button!New"));
   gtk_container_add (GTK_CONTAINER (bbox), button);
   gtk_signal_connect (GTK_OBJECT (button), "clicked",
 		      (GtkSignalFunc) new_color_callback,

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux