Index: src/backend/main/main.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/main/main.c,v
retrieving revision 1.81
diff -c -c -r1.81 main.c
*** src/backend/main/main.c	24 May 2004 02:47:44 -0000	1.81
--- src/backend/main/main.c	25 May 2004 00:54:53 -0000
***************
*** 150,155 ****
--- 150,157 ----
  	 * startup error messages to be localized.
  	 */
  
+ 	set_pglocale(argv[0], "postgres");
+ 
  #ifdef WIN32
  	/* 
  	 * Windows uses codepages rather than the environment, so we work around
***************
*** 184,194 ****
  	setlocale(LC_MONETARY, "C");
  	setlocale(LC_NUMERIC, "C");
  	setlocale(LC_TIME, "C");
- 
- #ifdef ENABLE_NLS
- 	bindtextdomain("postgres", LOCALEDIR);
- 	textdomain("postgres");
- #endif
  
  	/*
  	 * Skip permission checks if we're just trying to do --help or
--- 186,191 ----
Index: src/bin/initdb/initdb.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/initdb/initdb.c,v
retrieving revision 1.32
diff -c -c -r1.32 initdb.c
*** src/bin/initdb/initdb.c	18 May 2004 03:36:36 -0000	1.32
--- src/bin/initdb/initdb.c	25 May 2004 00:54:56 -0000
***************
*** 167,173 ****
  static bool chklocale(const char *locale);
  static void setlocales(void);
  static void usage(const char *progname);
! static void init_nls(void);
  
  
  /*
--- 167,173 ----
  static bool chklocale(const char *locale);
  static void setlocales(void);
  static void usage(const char *progname);
! static void init_nls(const char *argv0);
  
  
  /*
***************
*** 1754,1766 ****
   * Initialized NLS if enabled.
   */
  static void
! init_nls(void)
  {
! #ifdef ENABLE_NLS
!         setlocale(LC_ALL, "");
!         bindtextdomain("initdb", LOCALEDIR);
!         textdomain("initdb");
! #endif
  }
  
  
--- 1754,1762 ----
   * Initialized NLS if enabled.
   */
  static void
! init_nls(const char *argv0)
  {
! 	set_pglocale(argv0, "initdb");
  }
  
  
***************
*** 1801,1807 ****
  								 * environment */
  	char	   *subdirs[] =
  	{"global", "pg_xlog", "pg_clog", "base", "base/1"};
! 	init_nls();
  
  	progname = get_progname(argv[0]);
  
--- 1797,1803 ----
  								 * environment */
  	char	   *subdirs[] =
  	{"global", "pg_xlog", "pg_clog", "base", "base/1"};
! 	init_nls(argv[0]);
  
  	progname = get_progname(argv[0]);
  
Index: src/bin/pg_controldata/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_controldata/Makefile,v
retrieving revision 1.7
diff -c -c -r1.7 Makefile
*** src/bin/pg_controldata/Makefile	30 Apr 2004 20:01:39 -0000	1.7
--- src/bin/pg_controldata/Makefile	25 May 2004 00:54:56 -0000
***************
*** 14,20 ****
  
  override CPPFLAGS += -DFRONTEND
  
! OBJS= pg_controldata.o pg_crc.o
  
  all: submake-libpgport pg_controldata
  
--- 14,20 ----
  
  override CPPFLAGS += -DFRONTEND
  
! OBJS= pg_controldata.o pg_crc.o exec.o
  
  all: submake-libpgport pg_controldata
  
***************
*** 24,29 ****
--- 24,32 ----
  pg_crc.c: $(top_srcdir)/src/backend/utils/hash/pg_crc.c
  	rm -f $@ && $(LN_S) $< .
  
+ exec.c: % : $(top_srcdir)/src/port/%
+ 	rm -f $@ && $(LN_S) $< .
+ 
  install: all installdirs
  	$(INSTALL_PROGRAM) pg_controldata$(X) $(DESTDIR)$(bindir)/pg_controldata$(X)
  
***************
*** 34,37 ****
  	rm -f $(DESTDIR)$(bindir)/pg_controldata$(X)
  
  clean distclean maintainer-clean:
! 	rm -f pg_controldata$(X) pg_controldata.o pg_crc.o pg_crc.c
--- 37,40 ----
  	rm -f $(DESTDIR)$(bindir)/pg_controldata$(X)
  
  clean distclean maintainer-clean:
! 	rm -f pg_controldata$(X) pg_controldata.o pg_crc.o pg_crc.c exec.c
Index: src/bin/pg_controldata/pg_controldata.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_controldata/pg_controldata.c,v
retrieving revision 1.15
diff -c -c -r1.15 pg_controldata.c
*** src/bin/pg_controldata/pg_controldata.c	12 May 2004 13:38:43 -0000	1.15
--- src/bin/pg_controldata/pg_controldata.c	25 May 2004 00:54:57 -0000
***************
*** 77,87 ****
  	char	   *strftime_fmt = "%c";
  	const char *progname;
  
! 	setlocale(LC_ALL, "");
! #ifdef ENABLE_NLS
! 	bindtextdomain("pg_controldata", LOCALEDIR);
! 	textdomain("pg_controldata");
! #endif
  
  	progname = get_progname(argv[0]);
  
--- 77,83 ----
  	char	   *strftime_fmt = "%c";
  	const char *progname;
  
! 	set_pglocale(argv[0], "pg_controldata");
  
  	progname = get_progname(argv[0]);
  
Index: src/bin/pg_dump/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_dump/Makefile,v
retrieving revision 1.51
diff -c -c -r1.51 Makefile
*** src/bin/pg_dump/Makefile	24 May 2004 01:01:37 -0000	1.51
--- src/bin/pg_dump/Makefile	25 May 2004 00:54:57 -0000
***************
*** 17,24 ****
  
  OBJS=	pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \
  	pg_backup_files.o pg_backup_null.o pg_backup_tar.o \
! 	dumputils.o
! PG_DUMPALL_OBJS = exec.o
  
  EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o
  
--- 17,23 ----
  
  OBJS=	pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \
  	pg_backup_files.o pg_backup_null.o pg_backup_tar.o \
! 	dumputils.o exec.o
  
  EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o
  
***************
*** 31,38 ****
  pg_restore: pg_restore.o $(OBJS) $(libpq_builddir)/libpq.a
  	$(CC) $(CFLAGS) pg_restore.o $(OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
! pg_dumpall: pg_dumpall.o dumputils.o $(PG_DUMPALL_OBJS) $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(PG_DUMPALL_OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
  # We need our own build of exec.c so it gets made with -DFRONTEND
  exec.c: % : $(top_srcdir)/src/port/%
--- 30,37 ----
  pg_restore: pg_restore.o $(OBJS) $(libpq_builddir)/libpq.a
  	$(CC) $(CFLAGS) pg_restore.o $(OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
! pg_dumpall: pg_dumpall.o dumputils.o exec.o $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o exec.o $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
  # We need our own build of exec.c so it gets made with -DFRONTEND
  exec.c: % : $(top_srcdir)/src/port/%
***************
*** 55,58 ****
  	rm -f $(addprefix $(DESTDIR)$(bindir)/, pg_dump$(X) pg_restore$(X) pg_dumpall$(X))
  
  clean distclean maintainer-clean:
! 	rm -f pg_dump$(X) pg_restore$(X) pg_dumpall$(X) $(OBJS) $(PG_DUMPALL_OBJS) pg_dump.o common.o pg_dump_sort.o pg_restore.o pg_dumpall.o exec.c
--- 54,57 ----
  	rm -f $(addprefix $(DESTDIR)$(bindir)/, pg_dump$(X) pg_restore$(X) pg_dumpall$(X))
  
  clean distclean maintainer-clean:
! 	rm -f pg_dump$(X) pg_restore$(X) pg_dumpall$(X) $(OBJS) pg_dump.o common.o pg_dump_sort.o pg_restore.o pg_dumpall.o exec.c
Index: src/bin/pg_dump/pg_dump.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_dump/pg_dump.c,v
retrieving revision 1.370
diff -c -c -r1.370 pg_dump.c
*** src/bin/pg_dump/pg_dump.c	24 Mar 2004 03:06:08 -0000	1.370
--- src/bin/pg_dump/pg_dump.c	25 May 2004 00:55:02 -0000
***************
*** 242,252 ****
  	};
  	int			optindex;
  
! #ifdef ENABLE_NLS
! 	setlocale(LC_ALL, "");
! 	bindtextdomain("pg_dump", LOCALEDIR);
! 	textdomain("pg_dump");
! #endif
  
  	g_verbose = false;
  
--- 242,248 ----
  	};
  	int			optindex;
  
! 	set_pglocale(argv[0], "pg_dump");
  
  	g_verbose = false;
  
Index: src/bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.34
diff -c -c -r1.34 pg_dumpall.c
*** src/bin/pg_dump/pg_dumpall.c	19 May 2004 21:21:26 -0000	1.34
--- src/bin/pg_dump/pg_dumpall.c	25 May 2004 00:55:03 -0000
***************
*** 101,111 ****
  
  	int			optindex;
  
! #ifdef ENABLE_NLS
! 	setlocale(LC_ALL, "");
! 	bindtextdomain("pg_dump", LOCALEDIR);
! 	textdomain("pg_dump");
! #endif
  
  	progname = get_progname(argv[0]);
  
--- 101,107 ----
  
  	int			optindex;
  
! 	set_pglocale(argv[0], "pg_dump");
  
  	progname = get_progname(argv[0]);
  
Index: src/bin/pg_dump/pg_restore.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_dump/pg_restore.c,v
retrieving revision 1.56
diff -c -c -r1.56 pg_restore.c
*** src/bin/pg_dump/pg_restore.c	22 Apr 2004 02:39:10 -0000	1.56
--- src/bin/pg_dump/pg_restore.c	25 May 2004 00:55:03 -0000
***************
*** 121,131 ****
  		{NULL, 0, NULL, 0}
  	};
  
! #ifdef ENABLE_NLS
! 	setlocale(LC_ALL, "");
! 	bindtextdomain("pg_dump", LOCALEDIR);
! 	textdomain("pg_dump");
! #endif
  
  	opts = NewRestoreOptions();
  
--- 121,127 ----
  		{NULL, 0, NULL, 0}
  	};
  
! 	set_pglocale(argv[0], "pg_dump");
  
  	opts = NewRestoreOptions();
  
Index: src/bin/pg_resetxlog/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_resetxlog/Makefile,v
retrieving revision 1.9
diff -c -c -r1.9 Makefile
*** src/bin/pg_resetxlog/Makefile	24 May 2004 01:01:37 -0000	1.9
--- src/bin/pg_resetxlog/Makefile	25 May 2004 00:55:03 -0000
***************
*** 14,20 ****
  
  override CPPFLAGS += -DFRONTEND
  
! OBJS= pg_resetxlog.o pg_crc.o dirmod.o
  
  all: submake-libpgport pg_resetxlog
  
--- 14,20 ----
  
  override CPPFLAGS += -DFRONTEND
  
! OBJS= pg_resetxlog.o pg_crc.o dirmod.o exec.o
  
  all: submake-libpgport pg_resetxlog
  
***************
*** 27,32 ****
--- 27,35 ----
  pg_crc.c: $(top_srcdir)/src/backend/utils/hash/pg_crc.c
  	rm -f $@ && $(LN_S) $< .
  
+ exec.c: % : $(top_srcdir)/src/port/%
+ 	rm -f $@ && $(LN_S) $< .
+ 
  install: all installdirs
  	$(INSTALL_PROGRAM) pg_resetxlog$(X) $(DESTDIR)$(bindir)/pg_resetxlog$(X)
  
***************
*** 37,40 ****
  	rm -f $(DESTDIR)$(bindir)/pg_resetxlog$(X)
  
  clean distclean maintainer-clean:
! 	rm -f pg_resetxlog$(X) pg_crc.c dirmod.c $(OBJS)
--- 40,43 ----
  	rm -f $(DESTDIR)$(bindir)/pg_resetxlog$(X)
  
  clean distclean maintainer-clean:
! 	rm -f pg_resetxlog$(X) pg_crc.c dirmod.c exec.c $(OBJS)
Index: src/bin/pg_resetxlog/pg_resetxlog.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_resetxlog/pg_resetxlog.c,v
retrieving revision 1.18
diff -c -c -r1.18 pg_resetxlog.c
*** src/bin/pg_resetxlog/pg_resetxlog.c	12 May 2004 13:38:44 -0000	1.18
--- src/bin/pg_resetxlog/pg_resetxlog.c	25 May 2004 00:55:03 -0000
***************
*** 102,112 ****
  	int			fd;
  	char		path[MAXPGPATH];
  
! 	setlocale(LC_ALL, "");
! #ifdef ENABLE_NLS
! 	bindtextdomain("pg_resetxlog", LOCALEDIR);
! 	textdomain("pg_resetxlog");
! #endif
  
  	progname = get_progname(argv[0]);
  
--- 102,108 ----
  	int			fd;
  	char		path[MAXPGPATH];
  
! 	set_pglocale(argv[0], "pg_resetxlog");
  
  	progname = get_progname(argv[0]);
  
Index: src/bin/psql/startup.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.93
diff -c -c -r1.93 startup.c
*** src/bin/psql/startup.c	17 May 2004 14:35:33 -0000	1.93
--- src/bin/psql/startup.c	25 May 2004 00:55:04 -0000
***************
*** 102,112 ****
  	char	   *password = NULL;
  	bool		need_pass;
  
! 	setlocale(LC_ALL, "");
! #ifdef ENABLE_NLS
! 	bindtextdomain("psql", LOCALEDIR);
! 	textdomain("psql");
! #endif
  
  	pset.progname = get_progname(argv[0]);
  
--- 102,108 ----
  	char	   *password = NULL;
  	bool		need_pass;
  
! 	set_pglocale(argv[0], "psql");
  
  	pset.progname = get_progname(argv[0]);
  
Index: src/bin/scripts/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/Makefile,v
retrieving revision 1.26
diff -c -c -r1.26 Makefile
*** src/bin/scripts/Makefile	26 Apr 2004 17:40:48 -0000	1.26
--- src/bin/scripts/Makefile	25 May 2004 00:55:04 -0000
***************
*** 15,35 ****
  
  PROGRAMS = createdb createlang createuser dropdb droplang dropuser clusterdb vacuumdb
  
! override CPPFLAGS := -I$(top_srcdir)/src/bin/pg_dump -I$(top_srcdir)/src/bin/psql -I$(libpq_srcdir) $(CPPFLAGS)
  
  all: submake-libpq submake-backend $(PROGRAMS)
  
  %: %.o
  	$(CC) $(CFLAGS) $^ $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
! createdb: createdb.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! createlang: createlang.o common.o print.o mbprint.o
! createuser: createuser.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! dropdb: dropdb.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! droplang: droplang.o common.o print.o mbprint.o
! dropuser: dropuser.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! clusterdb: clusterdb.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! vacuumdb: vacuumdb.o common.o
  
  dumputils.c: % : $(top_srcdir)/src/bin/pg_dump/%
  	rm -f $@ && $(LN_S) $< .
--- 15,38 ----
  
  PROGRAMS = createdb createlang createuser dropdb droplang dropuser clusterdb vacuumdb
  
! override CPPFLAGS := -DFRONTEND -I$(top_srcdir)/src/bin/pg_dump -I$(top_srcdir)/src/bin/psql -I$(libpq_srcdir) $(CPPFLAGS)
  
  all: submake-libpq submake-backend $(PROGRAMS)
  
  %: %.o
  	$(CC) $(CFLAGS) $^ $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
  
! createdb: createdb.o common.o exec.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! createlang: createlang.o common.o exec.o print.o mbprint.o
! createuser: createuser.o common.o exec.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! dropdb: dropdb.o common.o exec.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! droplang: droplang.o common.o exec.o print.o mbprint.o
! dropuser: dropuser.o common.o exec.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! clusterdb: clusterdb.o common.o exec.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o
! vacuumdb: vacuumdb.o common.o exec.o
! 
! exec.c: % : $(top_srcdir)/src/port/%
! 	rm -f $@ && $(LN_S) $< .
  
  dumputils.c: % : $(top_srcdir)/src/bin/pg_dump/%
  	rm -f $@ && $(LN_S) $< .
***************
*** 60,63 ****
  
  
  clean distclean maintainer-clean:
! 	rm -f $(addsuffix $(X), $(PROGRAMS)) $(addsuffix .o, $(PROGRAMS)) common.o dumputils.o print.o mbprint.o dumputils.c print.c mbprint.c
--- 63,66 ----
  
  
  clean distclean maintainer-clean:
! 	rm -f $(addsuffix $(X), $(PROGRAMS)) $(addsuffix .o, $(PROGRAMS)) common.o dumputils.o print.o mbprint.o dumputils.c exec.c print.c mbprint.c
Index: src/bin/scripts/clusterdb.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/clusterdb.c,v
retrieving revision 1.6
diff -c -c -r1.6 clusterdb.c
*** src/bin/scripts/clusterdb.c	12 May 2004 13:38:46 -0000	1.6
--- src/bin/scripts/clusterdb.c	25 May 2004 00:55:04 -0000
***************
*** 58,64 ****
  	char	   *table = NULL;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "clusterdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:", long_options, &optindex)) != -1)
--- 58,64 ----
  	char	   *table = NULL;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "clusterdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:", long_options, &optindex)) != -1)
Index: src/bin/scripts/common.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/common.c,v
retrieving revision 1.7
diff -c -c -r1.7 common.c
*** src/bin/scripts/common.c	19 Apr 2004 17:42:59 -0000	1.7
--- src/bin/scripts/common.c	25 May 2004 00:55:04 -0000
***************
*** 51,63 ****
   * Initialized NLS if enabled.
   */
  void
! init_nls(void)
  {
! #ifdef ENABLE_NLS
! 	setlocale(LC_ALL, "");
! 	bindtextdomain("pgscripts", LOCALEDIR);
! 	textdomain("pgscripts");
! #endif
  }
  
  
--- 51,59 ----
   * Initialized NLS if enabled.
   */
  void
! init_nls(const char *argv0)
  {
! 	set_pglocale(argv0, "pgscripts");
  }
  
  
Index: src/bin/scripts/common.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/common.h,v
retrieving revision 1.6
diff -c -c -r1.6 common.h
*** src/bin/scripts/common.h	8 Aug 2003 04:52:21 -0000	1.6
--- src/bin/scripts/common.h	25 May 2004 00:55:04 -0000
***************
*** 11,17 ****
  const char *get_user_name(const char *progname);
  
  #define _(x) gettext((x))
! void		init_nls(void);
  
  typedef void (*help_handler) (const char *);
  
--- 11,17 ----
  const char *get_user_name(const char *progname);
  
  #define _(x) gettext((x))
! void		init_nls(const char *argv0);
  
  typedef void (*help_handler) (const char *);
  
Index: src/bin/scripts/createdb.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/createdb.c,v
retrieving revision 1.8
diff -c -c -r1.8 createdb.c
*** src/bin/scripts/createdb.c	12 May 2004 13:38:47 -0000	1.8
--- src/bin/scripts/createdb.c	25 May 2004 00:55:04 -0000
***************
*** 60,66 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "createdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:WeqO:D:T:E:", long_options, &optindex)) != -1)
--- 60,66 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "createdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:WeqO:D:T:E:", long_options, &optindex)) != -1)
Index: src/bin/scripts/createlang.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/createlang.c,v
retrieving revision 1.9
diff -c -c -r1.9 createlang.c
*** src/bin/scripts/createlang.c	12 May 2004 13:38:47 -0000	1.9
--- src/bin/scripts/createlang.c	25 May 2004 00:55:04 -0000
***************
*** 61,67 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "createlang", help);
  
  	while ((c = getopt_long(argc, argv, "lh:p:U:Wd:L:e", long_options, &optindex)) != -1)
--- 61,67 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "createlang", help);
  
  	while ((c = getopt_long(argc, argv, "lh:p:U:Wd:L:e", long_options, &optindex)) != -1)
Index: src/bin/scripts/createuser.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/createuser.c,v
retrieving revision 1.10
diff -c -c -r1.10 createuser.c
*** src/bin/scripts/createuser.c	12 May 2004 13:38:48 -0000	1.10
--- src/bin/scripts/createuser.c	25 May 2004 00:55:04 -0000
***************
*** 63,69 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "createuser", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:WeqaAdDi:PEN", long_options, &optindex)) != -1)
--- 63,69 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "createuser", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:WeqaAdDi:PEN", long_options, &optindex)) != -1)
Index: src/bin/scripts/dropdb.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/dropdb.c,v
retrieving revision 1.9
diff -c -c -r1.9 dropdb.c
*** src/bin/scripts/dropdb.c	12 May 2004 13:38:48 -0000	1.9
--- src/bin/scripts/dropdb.c	25 May 2004 00:55:04 -0000
***************
*** 51,57 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "dropdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqi", long_options, &optindex)) != -1)
--- 51,57 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "dropdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqi", long_options, &optindex)) != -1)
Index: src/bin/scripts/droplang.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/droplang.c,v
retrieving revision 1.8
diff -c -c -r1.8 droplang.c
*** src/bin/scripts/droplang.c	12 May 2004 13:38:48 -0000	1.8
--- src/bin/scripts/droplang.c	25 May 2004 00:55:04 -0000
***************
*** 61,67 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "droplang", help);
  
  	while ((c = getopt_long(argc, argv, "lh:p:U:Wd:e", long_options, &optindex)) != -1)
--- 61,67 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "droplang", help);
  
  	while ((c = getopt_long(argc, argv, "lh:p:U:Wd:e", long_options, &optindex)) != -1)
Index: src/bin/scripts/dropuser.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/dropuser.c,v
retrieving revision 1.8
diff -c -c -r1.8 dropuser.c
*** src/bin/scripts/dropuser.c	12 May 2004 13:38:48 -0000	1.8
--- src/bin/scripts/dropuser.c	25 May 2004 00:55:04 -0000
***************
*** 51,57 ****
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "dropuser", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqi", long_options, &optindex)) != -1)
--- 51,57 ----
  	PGresult   *result;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "dropuser", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqi", long_options, &optindex)) != -1)
Index: src/bin/scripts/vacuumdb.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/scripts/vacuumdb.c,v
retrieving revision 1.6
diff -c -c -r1.6 vacuumdb.c
*** src/bin/scripts/vacuumdb.c	12 May 2004 13:38:48 -0000	1.6
--- src/bin/scripts/vacuumdb.c	25 May 2004 00:55:05 -0000
***************
*** 66,72 ****
  	bool		verbose = false;
  
  	progname = get_progname(argv[0]);
! 	init_nls();
  	handle_help_version_opts(argc, argv, "vacuumdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqd:zat:fv", long_options, &optindex)) != -1)
--- 66,72 ----
  	bool		verbose = false;
  
  	progname = get_progname(argv[0]);
! 	init_nls(argv[0]);
  	handle_help_version_opts(argc, argv, "vacuumdb", help);
  
  	while ((c = getopt_long(argc, argv, "h:p:U:Weqd:zat:fv", long_options, &optindex)) != -1)
Index: src/include/port.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port.h,v
retrieving revision 1.37
diff -c -c -r1.37 port.h
*** src/include/port.h	21 May 2004 16:06:22 -0000	1.37
--- src/include/port.h	25 May 2004 00:55:05 -0000
***************
*** 31,36 ****
--- 31,38 ----
  extern void get_include_path(const char *my_exec_path, char *ret_path);
  extern void get_pkginclude_path(const char *my_exec_path, char *ret_path);
  extern void get_pkglib_path(const char *my_exec_path, char *ret_path);
+ extern void get_locale_path(const char *my_exec_path, char *ret_path);
+ extern void set_pglocale(const char *argv0, const char *app);
  
  /*
   *	is_absolute_path
Index: src/interfaces/libpq/fe-misc.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-misc.c,v
retrieving revision 1.105
diff -c -c -r1.105 fe-misc.c
*** src/interfaces/libpq/fe-misc.c	15 Mar 2004 10:41:26 -0000	1.105
--- src/interfaces/libpq/fe-misc.c	25 May 2004 00:55:06 -0000
***************
*** 1131,1136 ****
--- 1131,1137 ----
  	if (!already_bound)
  	{
  		already_bound = 1;
+ 		/* No relocatable lookup here because the binary could be anywhere */
  		bindtextdomain("libpq", LOCALEDIR);
  	}
  
Index: src/port/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/Makefile,v
retrieving revision 1.13
diff -c -c -r1.13 Makefile
*** src/port/Makefile	22 May 2004 02:15:08 -0000	1.13
--- src/port/Makefile	25 May 2004 00:55:06 -0000
***************
*** 37,42 ****
--- 37,43 ----
  	echo "#define INCLUDEDIR \"$(includedir)\"" >>$@
  	echo "#define PKGINCLUDEDIR \"$(pkgincludedir)\"" >>$@
  	echo "#define PKGLIBDIR \"$(pkglibdir)\"" >>$@
+ 	echo "#define LOCALEDIR \"$(localedir)\"" >>$@
  
  clean distclean maintainer-clean:
  	rm -f libpgport.a $(LIBOBJS) pg_config_paths.h
Index: src/port/path.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/path.c,v
retrieving revision 1.11
diff -c -c -r1.11 path.c
*** src/port/path.c	21 May 2004 20:56:50 -0000	1.11
--- src/port/path.c	25 May 2004 00:55:06 -0000
***************
*** 113,124 ****
  void
  get_share_path(const char *my_exec_path, char *ret_path)
  {
  	if (relative_path(PGBINDIR, PGSHAREDIR))
  	{
! 		StrNCpy(ret_path, my_exec_path, MAXPGPATH);
! 		trim_directory(ret_path);	/* trim off binary */
! 		trim_directory(ret_path);	/* trim off /bin */
! 		strcat(ret_path, "/share");	/* add /share */
  	}
  	else
  		StrNCpy(ret_path, PGSHAREDIR, MAXPGPATH);
--- 113,126 ----
  void
  get_share_path(const char *my_exec_path, char *ret_path)
  {
+ 	char path[MAXPGPATH];
+ 	
  	if (relative_path(PGBINDIR, PGSHAREDIR))
  	{
! 		StrNCpy(path, my_exec_path, MAXPGPATH);
! 		trim_directory(path);	/* trim off binary */
! 		trim_directory(path);	/* trim off /bin */
! 		snprintf(ret_path, MAXPGPATH, "%s/share", path);
  	}
  	else
  		StrNCpy(ret_path, PGSHAREDIR, MAXPGPATH);
***************
*** 132,143 ****
  void
  get_etc_path(const char *my_exec_path, char *ret_path)
  {
  	if (relative_path(PGBINDIR, SYSCONFDIR))
  	{
! 		StrNCpy(ret_path, my_exec_path, MAXPGPATH);
! 		trim_directory(ret_path);
! 		trim_directory(ret_path);
! 		strcat(ret_path, "/etc");
  	}
  	else
  		StrNCpy(ret_path, SYSCONFDIR, MAXPGPATH);
--- 134,147 ----
  void
  get_etc_path(const char *my_exec_path, char *ret_path)
  {
+ 	char path[MAXPGPATH];
+ 	
  	if (relative_path(PGBINDIR, SYSCONFDIR))
  	{
! 		StrNCpy(path, my_exec_path, MAXPGPATH);
! 		trim_directory(path);
! 		trim_directory(path);
! 		snprintf(ret_path, MAXPGPATH, "%s/etc", path);
  	}
  	else
  		StrNCpy(ret_path, SYSCONFDIR, MAXPGPATH);
***************
*** 151,162 ****
  void
  get_include_path(const char *my_exec_path, char *ret_path)
  {
  	if (relative_path(PGBINDIR, INCLUDEDIR))
  	{
! 		StrNCpy(ret_path, my_exec_path, MAXPGPATH);
! 		trim_directory(ret_path);
! 		trim_directory(ret_path);
! 		strcat(ret_path, "/include");
  	}
  	else
  		StrNCpy(ret_path, INCLUDEDIR, MAXPGPATH);
--- 155,168 ----
  void
  get_include_path(const char *my_exec_path, char *ret_path)
  {
+ 	char path[MAXPGPATH];
+ 	
  	if (relative_path(PGBINDIR, INCLUDEDIR))
  	{
! 		StrNCpy(path, my_exec_path, MAXPGPATH);
! 		trim_directory(path);
! 		trim_directory(path);
! 		snprintf(ret_path, MAXPGPATH, "%s/include", path);
  	}
  	else
  		StrNCpy(ret_path, INCLUDEDIR, MAXPGPATH);
***************
*** 170,181 ****
  void
  get_pkginclude_path(const char *my_exec_path, char *ret_path)
  {
  	if (relative_path(PGBINDIR, PKGINCLUDEDIR))
  	{
! 		StrNCpy(ret_path, my_exec_path, MAXPGPATH);
! 		trim_directory(ret_path);
! 		trim_directory(ret_path);
! 		strcat(ret_path, "/include");
  	}
  	else
  		StrNCpy(ret_path, PKGINCLUDEDIR, MAXPGPATH);
--- 176,189 ----
  void
  get_pkginclude_path(const char *my_exec_path, char *ret_path)
  {
+ 	char path[MAXPGPATH];
+ 	
  	if (relative_path(PGBINDIR, PKGINCLUDEDIR))
  	{
! 		StrNCpy(path, my_exec_path, MAXPGPATH);
! 		trim_directory(path);
! 		trim_directory(path);
! 		snprintf(ret_path, MAXPGPATH, "%s/include", path);
  	}
  	else
  		StrNCpy(ret_path, PKGINCLUDEDIR, MAXPGPATH);
***************
*** 191,205 ****
  void
  get_pkglib_path(const char *my_exec_path, char *ret_path)
  {
  	if (relative_path(PGBINDIR, PKGLIBDIR))
  	{
! 		StrNCpy(ret_path, my_exec_path, MAXPGPATH);
! 		trim_directory(ret_path);
! 		trim_directory(ret_path);
! 		strcat(ret_path, "/lib");
  	}
  	else
  		StrNCpy(ret_path, PKGLIBDIR, MAXPGPATH);
  }
  
  
--- 199,264 ----
  void
  get_pkglib_path(const char *my_exec_path, char *ret_path)
  {
+ 	char path[MAXPGPATH];
+ 	
  	if (relative_path(PGBINDIR, PKGLIBDIR))
  	{
! 		StrNCpy(path, my_exec_path, MAXPGPATH);
! 		trim_directory(path);
! 		trim_directory(path);
! 		snprintf(ret_path, MAXPGPATH, "%s/lib", path);
  	}
  	else
  		StrNCpy(ret_path, PKGLIBDIR, MAXPGPATH);
+ }
+ 
+ 
+ 
+ /*
+  *	get_locale_path
+  *
+  *	Return locale path, either relative to /bin or hardcoded
+  */
+ void
+ get_locale_path(const char *my_exec_path, char *ret_path)
+ {
+ 	char path[MAXPGPATH];
+ 	
+ 	if (relative_path(PGBINDIR, LOCALEDIR))
+ 	{
+ 		StrNCpy(path, my_exec_path, MAXPGPATH);
+ 		trim_directory(path);
+ 		trim_directory(path);
+ 		snprintf(ret_path, MAXPGPATH, "%s/share/locale", path);
+ 	}
+ 	else
+ 		StrNCpy(ret_path, LOCALEDIR, MAXPGPATH);
+ }
+ 
+ 
+ 
+ /*
+  *	set_pglocale
+  *
+  *	Set application-specific locale
+  *
+  *	This function takes an argv[0] rather than a full path.
+  */
+ void
+ set_pglocale(const char *argv0, const char *app)
+ {
+ #ifdef ENABLE_NLS
+ 	char path[MAXPGPATH];
+ 	char my_exec_path[MAXPGPATH];
+ 
+ 	setlocale(LC_ALL, "");
+ 	if (find_my_exec(argv0, my_exec_path) < 0)
+ 		return;
+ 		
+ 	get_locale_path(argv0, path);
+ 	bindtextdomain(app, path);
+ 	textdomain(app);
+ #endif
  }
  
  
