diff -uNr postgresql-6.5.1-orig/src/bin/pg_dump/Makefile.in postgresql-6.5.1/src/bin/pg_dump/Makefile.in
--- postgresql-6.5.1-orig/src/bin/pg_dump/Makefile.in	Sun Jan 17 14:19:05 1999
+++ postgresql-6.5.1/src/bin/pg_dump/Makefile.in	Mon Jul 26 01:20:50 1999
@@ -18,6 +18,10 @@
 
 CFLAGS+= -I$(LIBPQDIR)
 
+POTSRCFILE= pg_dump.c pg_dump.h common.c
+
+POTOBJFILE= pg_dump.pot
+
 #
 # And where libpq goes, so goes the authentication stuff...
 #
@@ -26,7 +30,7 @@
 CFLAGS+= $(KRBFLAGS)
 endif
 
-all: submake pg_dump
+all: submake pg_dump pot
 
 pg_dump: $(OBJS) $(LIBPQDIR)/libpq.a
 	$(CC) -o pg_dump -L$(LIBPQDIR) $(OBJS) -lpq $(LDFLAGS)
@@ -46,8 +50,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean: 
+clean: clean-pot
 	rm -f pg_dump$(X) $(OBJS) 
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext -C --keyword="_" -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/pg_dump/common.c postgresql-6.5.1/src/bin/pg_dump/common.c
--- postgresql-6.5.1-orig/src/bin/pg_dump/common.c	Fri May 28 00:29:03 1999
+++ postgresql-6.5.1/src/bin/pg_dump/common.c	Sun Jul 25 23:49:30 1999
@@ -36,6 +36,11 @@
 
 #include "pg_dump.h"
 
+#ifdef	USE_MULTILANG
+#define	PACKAGE	"pg_dump"
+#include "multilang.h"
+#endif
+
 static char **findParentsByOid(TableInfo *tbinfo, int numTables,
 				 InhInfo *inhinfo, int numInherits,
 				 const char *oid,
@@ -69,7 +74,7 @@
 	}
 
 	/* should never get here */
-	fprintf(stderr, "failed sanity check,  type with oid %s was not found\n",
+	fprintf(stderr, _("failed sanity check,  type with oid %s was not found\n"),
 			oid);
 	exit(2);
 }
@@ -94,7 +99,7 @@
 	}
 
 	/* should never get here */
-	fprintf(stderr, "failed sanity check,  opr with oid %s was not found\n",
+	fprintf(stderr, _("failed sanity check,  opr with oid %s was not found\n"),
 			oid);
 	exit(2);
 }
@@ -144,7 +149,7 @@
 				{
 					selfInd = findTableByOid(tblinfo, numTables, oid);
 					fprintf(stderr,
-							"failed sanity check, parent oid %s of table %s (oid %s) was not found\n",
+							_("failed sanity check, parent oid %s of table %s (oid %s) was not found\n"),
 							inhinfo[i].inhparent,
 						  (selfInd >= 0) ? tblinfo[selfInd].relname : "",
 							oid);
@@ -248,49 +253,49 @@
 	OprInfo    *oprinfo = NULL;
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading user-defined types %s\n",
+		fprintf(stderr, _("%s reading user-defined types %s\n"),
 				g_comment_start, g_comment_end);
 	tinfo = getTypes(&numTypes);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading user-defined functions %s\n",
+		fprintf(stderr, _("%s reading user-defined functions %s\n"),
 				g_comment_start, g_comment_end);
 	finfo = getFuncs(&numFuncs);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading user-defined aggregates %s\n",
+		fprintf(stderr, _("%s reading user-defined aggregates %s\n"),
 				g_comment_start, g_comment_end);
 	agginfo = getAggregates(&numAggregates);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading user-defined operators %s\n",
+		fprintf(stderr, _("%s reading user-defined operators %s\n"),
 				g_comment_start, g_comment_end);
 	oprinfo = getOperators(&numOperators);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading user-defined tables %s\n",
+		fprintf(stderr, _("%s reading user-defined tables %s\n"),
 				g_comment_start, g_comment_end);
 	tblinfo = getTables(&numTables, finfo, numFuncs);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading table inheritance information %s\n",
+		fprintf(stderr, _("%s reading table inheritance information %s\n"),
 				g_comment_start, g_comment_end);
 	inhinfo = getInherits(&numInherits);
 
 	if (g_verbose)
-		fprintf(stderr, "%s finding the attribute names and types for each table %s\n",
+		fprintf(stderr, _("%s finding the attribute names and types for each table %s\n"),
 				g_comment_start, g_comment_end);
 	getTableAttrs(tblinfo, numTables);
 
 	if (g_verbose)
-		fprintf(stderr, "%s flagging inherited attributes in subtables %s\n",
+		fprintf(stderr, _("%s flagging inherited attributes in subtables %s\n"),
 				g_comment_start, g_comment_end);
 	flagInhAttrs(tblinfo, numTables, inhinfo, numInherits);
 
 	if (!tablename && fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out user-defined types %s\n",
+			fprintf(stderr, _("%s dumping out user-defined types %s\n"),
 					g_comment_start, g_comment_end);
 		dumpTypes(fout, finfo, numFuncs, tinfo, numTypes);
 	}
@@ -298,7 +303,7 @@
 	if (fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out tables %s\n",
+			fprintf(stderr, _("%s dumping out tables %s\n"),
 					g_comment_start, g_comment_end);
 		dumpTables(fout, tblinfo, numTables, inhinfo, numInherits,
 				   tinfo, numTypes, tablename, aclsSkip);
@@ -307,7 +312,7 @@
 	if (!tablename && fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out user-defined procedural languages %s\n",
+			fprintf(stderr, _("%s dumping out user-defined procedural languages %s\n"),
 					g_comment_start, g_comment_end);
 		dumpProcLangs(fout, finfo, numFuncs, tinfo, numTypes);
 	}
@@ -315,7 +320,7 @@
 	if (!tablename && fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out user-defined functions %s\n",
+			fprintf(stderr, _("%s dumping out user-defined functions %s\n"),
 					g_comment_start, g_comment_end);
 		dumpFuncs(fout, finfo, numFuncs, tinfo, numTypes);
 	}
@@ -323,7 +328,7 @@
 	if (!tablename && fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out user-defined aggregates %s\n",
+			fprintf(stderr, _("%s dumping out user-defined aggregates %s\n"),
 					g_comment_start, g_comment_end);
 		dumpAggs(fout, agginfo, numAggregates, tinfo, numTypes);
 	}
@@ -331,7 +336,7 @@
 	if (!tablename && fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out user-defined operators %s\n",
+			fprintf(stderr, _("%s dumping out user-defined operators %s\n"),
 					g_comment_start, g_comment_end);
 		dumpOprs(fout, oprinfo, numOperators, tinfo, numTypes);
 	}
@@ -359,14 +364,14 @@
 	IndInfo    *indinfo;
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading indices information %s\n",
+		fprintf(stderr, _("%s reading indices information %s\n"),
 				g_comment_start, g_comment_end);
 	indinfo = getIndices(&numIndices);
 
 	if (fout)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out indices %s\n",
+			fprintf(stderr, _("%s dumping out indices %s\n"),
 					g_comment_start, g_comment_end);
 		dumpIndices(fout, indinfo, numIndices, tblinfo, numTables, tablename);
 	}
@@ -409,7 +414,7 @@
 			if (parentInd < 0)
 			{
 				/* shouldn't happen unless findParentsByOid is broken */
-				fprintf(stderr, "failed sanity check, table %s not found by flagInhAttrs\n",
+				fprintf(stderr, _("failed sanity check, table %s not found by flagInhAttrs\n"),
 						tblinfo[i].parentRels[k]);
 				exit(2);
 			}
diff -uNr postgresql-6.5.1-orig/src/bin/pg_dump/pg_dump.c postgresql-6.5.1/src/bin/pg_dump/pg_dump.c
--- postgresql-6.5.1-orig/src/bin/pg_dump/pg_dump.c	Thu Jun  3 12:01:16 1999
+++ postgresql-6.5.1/src/bin/pg_dump/pg_dump.c	Mon Jul 26 01:11:54 1999
@@ -82,6 +82,11 @@
 
 #include "pg_dump.h"
 
+#ifdef USE_MULTILANG
+#define	PACKAGE	"pg_dump"
+#include "multilang.h"
+#endif
+
 static void dumpSequence(FILE *fout, TableInfo tbinfo);
 static void dumpACL(FILE *fout, TableInfo tbinfo);
 static void dumpTriggers(FILE *fout, const char *tablename,
@@ -130,41 +135,41 @@
 usage(const char *progname)
 {
 	fprintf(stderr,
-			"usage:  %s [options] dbname\n", progname);
+			_("usage:  %s [options] dbname\n"), progname);
 	fprintf(stderr,
-			"\t -a          \t\t dump out only the data, no schema\n");
+			_("\t -a          \t\t dump out only the data, no schema\n"));
 	fprintf(stderr,
-			"\t -c          \t\t clean(drop) schema prior to create\n");
+			_("\t -c          \t\t clean(drop) schema prior to create\n"));
 	fprintf(stderr,
-			"\t -d          \t\t dump data as proper insert strings\n");
+			_("\t -d          \t\t dump data as proper insert strings\n"));
 	fprintf(stderr,
-			"\t -D          \t\t dump data as inserts"
-			" with attribute names\n");
+			_("\t -D          \t\t dump data as inserts"
+			" with attribute names\n"));
 	fprintf(stderr,
-			"\t -f filename \t\t script output filename\n");
+			_("\t -f filename \t\t script output filename\n"));
 	fprintf(stderr,
-			"\t -h hostname \t\t server host name\n");
+			_("\t -h hostname \t\t server host name\n"));
 	fprintf(stderr,
-		"\t -n          \t\t suppress most quotes around identifiers\n");
+		_("\t -n          \t\t suppress most quotes around identifiers\n"));
 	fprintf(stderr,
-		  "\t -N          \t\t enable most quotes around identifiers\n");
+		  _("\t -N          \t\t enable most quotes around identifiers\n"));
 	fprintf(stderr,
-			"\t -o          \t\t dump object id's (oids)\n");
+			_("\t -o          \t\t dump object id's (oids)\n"));
 	fprintf(stderr,
-			"\t -p port     \t\t server port number\n");
+			_("\t -p port     \t\t server port number\n"));
 	fprintf(stderr,
-			"\t -s          \t\t dump out only the schema, no data\n");
+			_("\t -s          \t\t dump out only the schema, no data\n"));
 	fprintf(stderr,
-			"\t -t table    \t\t dump for this table only\n");
+			_("\t -t table    \t\t dump for this table only\n"));
 	fprintf(stderr,
-			"\t -u          \t\t use password authentication\n");
+			_("\t -u          \t\t use password authentication\n"));
 	fprintf(stderr,
-			"\t -v          \t\t verbose\n");
+			_("\t -v          \t\t verbose\n"));
 	fprintf(stderr,
-			"\t -z          \t\t dump ACLs (grant/revoke)\n");
+			_("\t -z          \t\t dump ACLs (grant/revoke)\n"));
 	fprintf(stderr,
-			"\nIf dbname is not supplied, then the DATABASE environment "
-			"variable value is used.\n");
+			_("\nIf dbname is not supplied, then the DATABASE environment "
+			"variable value is used.\n"));
 	fprintf(stderr, "\n");
 
 	exit(1);
@@ -199,7 +204,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "isViewRule(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("isViewRule(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -238,9 +243,9 @@
 	if (!res ||
 		PQresultStatus(res) == PGRES_FATAL_ERROR)
 	{
-		fprintf(stderr, "SQL query to dump the contents of Table '%s' "
+		fprintf(stderr, _("SQL query to dump the contents of Table '%s' "
 				"did not execute.  Explanation from backend: '%s'.\n"
-				"The query was: '%s'.\n",
+				"The query was: '%s'.\n"),
 				classname, PQerrorMessage(g_conn), query);
 		exit_nicely(g_conn);
 	}
@@ -248,10 +253,10 @@
 	{
 		if (PQresultStatus(res) != PGRES_COPY_OUT)
 		{
-			fprintf(stderr, "SQL query to dump the contents of Table '%s' "
+			fprintf(stderr, _("SQL query to dump the contents of Table '%s' "
 					"executed abnormally.\n"
 					"PQexec() returned status %d when %d was expected.\n"
-					"The query was: '%s'.\n",
+					"The query was: '%s'.\n"),
 				  classname, PQresultStatus(res), PGRES_COPY_OUT, query);
 			exit_nicely(g_conn);
 		}
@@ -289,11 +294,11 @@
 		ret = PQendcopy(g_conn);
 		if (ret != 0)
 		{
-			fprintf(stderr, "SQL query to dump the contents of Table '%s' "
+			fprintf(stderr, _("SQL query to dump the contents of Table '%s' "
 					"did not execute correctly.  After we read all the "
 				 "table contents from the backend, PQendcopy() failed.  "
 					"Explanation from backend: '%s'.\n"
-					"The query was: '%s'.\n",
+					"The query was: '%s'.\n"),
 					classname, PQerrorMessage(g_conn), query);
 			PQclear(res);
 			exit_nicely(g_conn);
@@ -318,7 +323,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpClasses(): command failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("dumpClasses(): command failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	for (tuple = 0; tuple < PQntuples(res); tuple++)
@@ -415,7 +420,7 @@
 		all_only = "only";
 
 	if (g_verbose)
-		fprintf(stderr, "%s dumping out the contents of %s %d table%s/sequence%s %s\n",
+		fprintf(stderr, _("%s dumping out the contents of %s %d table%s/sequence%s %s\n"),
 				g_comment_start, all_only,
 				(onlytable == NULL) ? numTables : 1,
 				(onlytable == NULL) ? "s" : "", (onlytable == NULL) ? "s" : "",
@@ -431,7 +436,7 @@
 			if (!onlytable || (!strcmp(tblinfo[i].relname, onlytable)))
 			{
 				if (g_verbose)
-					fprintf(stderr, "%s dumping out schema of sequence '%s' %s\n",
+					fprintf(stderr, _("%s dumping out schema of sequence '%s' %s\n"),
 					 g_comment_start, tblinfo[i].relname, g_comment_end);
 				becomeUser(fout, tblinfo[i].usename);
 				dumpSequence(fout, tblinfo[i]);
@@ -453,7 +458,7 @@
 		if (!onlytable || (!strcmp(classname, onlytable)))
 		{
 			if (g_verbose)
-				fprintf(stderr, "%s dumping out the contents of Table '%s' %s\n",
+				fprintf(stderr, _("%s dumping out the contents of Table '%s' %s\n"),
 						g_comment_start, classname, g_comment_end);
 
 			becomeUser(fout, tblinfo[i].usename);
@@ -493,7 +498,7 @@
 	if (length > 0 && username[length - 1] == '\n')
 		username[length - 1] = '\0';
 
-	printf("Password: ");
+	printf(_("Password: "));
 #ifdef HAVE_TERMIOS_H
 	tcgetattr(0, &t);
 	t_orig = t;
@@ -540,6 +545,10 @@
 	char		password[100];
 	bool		use_password = false;
 
+#ifdef	USE_MULTILANG
+	InitMultiLang(PACKAGE, LOCALEDIR);
+#endif
+
 	g_verbose = false;
 	force_quotes = true;
 	dropSchema = false;
@@ -630,7 +639,7 @@
 				break;
 			case 'z':			/* Old ACL option bjm 1999/05/27 */
 				fprintf(stderr,
-				 "%s: The -z option(dump ACLs) is now the default, continuing.\n",
+				 _("%s: The -z option(dump ACLs) is now the default, continuing.\n"),
 					progname);
 				break;
 			default:
@@ -642,7 +651,7 @@
 	if (dumpData == true && oids == true)
 	{
 		fprintf(stderr,
-			 "%s: INSERT's can not set oids, so INSERT and OID options can not be used together.\n",
+			 _("%s: INSERT's can not set oids, so INSERT and OID options can not be used together.\n"),
 				progname);
 		exit(2);
 	}
@@ -660,7 +669,7 @@
 		if (g_fout == NULL)
 		{
 			fprintf(stderr,
-				 "%s: could not open output file named %s for writing\n",
+				_("%s: could not open output file named %s for writing\n"),
 					progname, filename);
 			exit(2);
 		}
@@ -670,7 +679,7 @@
 	if (!(dbname = argv[optind]) &&
 		!(dbname = getenv("DATABASE")))
 	{
-		fprintf(stderr, "%s: no database name specified\n", progname);
+		fprintf(stderr, _("%s: no database name specified\n"), progname);
 		exit(2);
 	}
 
@@ -706,7 +715,7 @@
 	/* check to see that the backend connection was successfully made */
 	if (PQstatus(g_conn) == CONNECTION_BAD)
 	{
-		fprintf(stderr, "Connection to database '%s' failed.\n", dbname);
+		fprintf(stderr, _("Connection to database '%s' failed.\n"), dbname);
 		fprintf(stderr, "%s\n", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
@@ -720,14 +729,14 @@
 		res = PQexec(g_conn, "begin");
 		if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
 		{
-			fprintf(stderr, "BEGIN command failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			fprintf(stderr, _("BEGIN command failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 		PQclear(res);
 		res = PQexec(g_conn, "set transaction isolation level serializable");
 		if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
 		{
-			fprintf(stderr, "SET TRANSACTION command failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			fprintf(stderr, _("SET TRANSACTION command failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 		PQclear(res);
@@ -740,7 +749,7 @@
 	if (!dataOnly)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s last builtin oid is %u %s\n",
+			fprintf(stderr, _("%s last builtin oid is %u %s\n"),
 					g_comment_start, g_last_builtin_oid, g_comment_end);
 		tblinfo = dumpSchema(g_fout, &numTables, tablename, aclsSkip);
 	}
@@ -820,7 +829,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getTypes(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getTypes(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -932,7 +941,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getOperators(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getOperators(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1258,7 +1267,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getAggregates(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getAggregates(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1341,7 +1350,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getFuncs(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getFuncs(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1436,7 +1445,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getTables(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getTables(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1475,8 +1484,8 @@
 			int			ntups2;
 
 			if (g_verbose)
-				fprintf(stderr, "%s excluding inherited CHECK constraints "
-						"for relation: '%s' %s\n",
+				fprintf(stderr, _("%s excluding inherited CHECK constraints "
+						"for relation: '%s' %s\n"),
 						g_comment_start,
 						tblinfo[i].relname,
 						g_comment_end);
@@ -1494,15 +1503,15 @@
 			if (!res2 ||
 				PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for inherited CHECK) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				fprintf(stderr, _("getTables(): SELECT (for inherited CHECK) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			ntups2 = PQntuples(res2);
 			tblinfo[i].ncheck -= ntups2;
 			if (tblinfo[i].ncheck < 0)
 			{
-				fprintf(stderr, "getTables(): found more inherited CHECKs than total for "
-						"relation %s\n",
+				fprintf(stderr, _("getTables(): found more inherited CHECKs than total for "
+						"relation %s\n"),
 						tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
@@ -1519,7 +1528,7 @@
 			int			i2;
 
 			if (g_verbose)
-				fprintf(stderr, "%s finding CHECK constraints for relation: '%s' %s\n",
+				fprintf(stderr, _("%s finding CHECK constraints for relation: '%s' %s\n"),
 						g_comment_start,
 						tblinfo[i].relname,
 						g_comment_end);
@@ -1537,13 +1546,13 @@
 			if (!res2 ||
 				PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for CHECK) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				fprintf(stderr, _("getTables(): SELECT (for CHECK) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			ntups2 = PQntuples(res2);
 			if (ntups2 != tblinfo[i].ncheck)
 			{
-				fprintf(stderr, "getTables(): relation '%s': %d CHECKs were expected, but got %d\n",
+				fprintf(stderr, _("getTables(): relation '%s': %d CHECKs were expected, but got %d\n"),
 						tblinfo[i].relname, tblinfo[i].ncheck, ntups2);
 				exit_nicely(g_conn);
 			}
@@ -1579,7 +1588,7 @@
 			int			i2;
 
 			if (g_verbose)
-				fprintf(stderr, "%s finding Triggers for relation: '%s' %s\n",
+				fprintf(stderr, _("%s finding Triggers for relation: '%s' %s\n"),
 						g_comment_start,
 						tblinfo[i].relname,
 						g_comment_end);
@@ -1592,13 +1601,13 @@
 			if (!res2 ||
 				PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for TRIGGER) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				fprintf(stderr, _("getTables(): SELECT (for TRIGGER) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			ntups2 = PQntuples(res2);
 			if (ntups2 != tblinfo[i].ntrig)
 			{
-				fprintf(stderr, "getTables(): relation '%s': %d Triggers were expected, but got %d\n",
+				fprintf(stderr, _("getTables(): relation '%s': %d Triggers were expected, but got %d\n"),
 						tblinfo[i].relname, tblinfo[i].ntrig, ntups2);
 				exit_nicely(g_conn);
 			}
@@ -1627,7 +1636,7 @@
 				}
 				if (findx == numFuncs)
 				{
-					fprintf(stderr, "getTables(): relation '%s': cannot find function with oid %s for trigger %s\n",
+					fprintf(stderr, _("getTables(): relation '%s': cannot find function with oid %s for trigger %s\n"),
 							tblinfo[i].relname, tgfunc, PQgetvalue(res2, i2, i_tgname));
 					exit_nicely(g_conn);
 				}
@@ -1683,7 +1692,7 @@
 						p = strchr(p, '\\');
 						if (p == NULL)
 						{
-							fprintf(stderr, "getTables(): relation '%s': bad argument string (%s) for trigger '%s'\n",
+							fprintf(stderr, _("getTables(): relation '%s': bad argument string (%s) for trigger '%s'\n"),
 									tblinfo[i].relname,
 									PQgetvalue(res2, i2, i_tgargs),
 									PQgetvalue(res2, i2, i_tgname));
@@ -1754,7 +1763,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getInherits(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getInherits(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1815,7 +1824,7 @@
 		 * later
 		 */
 		if (g_verbose)
-			fprintf(stderr, "%s finding the attrs and types for table: '%s' %s\n",
+			fprintf(stderr, _("%s finding the attrs and types for table: '%s' %s\n"),
 					g_comment_start,
 					tblinfo[i].relname,
 					g_comment_end);
@@ -1830,7 +1839,7 @@
 		if (!res ||
 			PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "getTableAttrs(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			fprintf(stderr, _("getTableAttrs(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 
@@ -1864,7 +1873,7 @@
 				PGresult   *res2;
 
 				if (g_verbose)
-					fprintf(stderr, "%s finding DEFAULT expression for attr: '%s' %s\n",
+					fprintf(stderr, _("%s finding DEFAULT expression for attr: '%s' %s\n"),
 							g_comment_start,
 							tblinfo[i].attnames[j],
 							g_comment_end);
@@ -1876,7 +1885,7 @@
 				if (!res2 ||
 					PQresultStatus(res2) != PGRES_TUPLES_OK)
 				{
-					fprintf(stderr, "getTableAttrs(): SELECT (for DEFAULT) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+					fprintf(stderr, _("getTableAttrs(): SELECT (for DEFAULT) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 					exit_nicely(g_conn);
 				}
 				tblinfo[i].adef_expr[j] = strdup(PQgetvalue(res2, 0, PQfnumber(res2, "adsrc")));
@@ -1939,7 +1948,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getIndices(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("getIndices(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -2082,7 +2091,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpProcLangs(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("dumpProcLangs(): SELECT failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	ntups = PQntuples(res);
@@ -2102,7 +2111,7 @@
 		}
 		if (fidx >= numFuncs)
 		{
-			fprintf(stderr, "dumpProcLangs(): handler procedure for language %s not found\n", PQgetvalue(res, i, i_lanname));
+			fprintf(stderr, _("dumpProcLangs(): handler procedure for language %s not found\n"), PQgetvalue(res, i, i_lanname));
 			exit_nicely(g_conn);
 		}
 
@@ -2196,14 +2205,14 @@
 		if (!res ||
 			PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "dumpOneFunc(): SELECT for procedural language failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			fprintf(stderr, _("dumpOneFunc(): SELECT for procedural language failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 		nlangs = PQntuples(res);
 
 		if (nlangs != 1)
 		{
-			fprintf(stderr, "dumpOneFunc(): procedural language for function %s not found\n", finfo[i].proname);
+			fprintf(stderr, _("dumpOneFunc(): procedural language for function %s not found\n"), finfo[i].proname);
 			exit_nicely(g_conn);
 		}
 
@@ -2559,7 +2568,7 @@
 		eqpos = strchr(tok, '=');
 		if (!eqpos)
 		{
-			fprintf(stderr, "Could not parse ACL list for '%s'...Exiting!\n",
+			fprintf(stderr, _("Could not parse ACL list for '%s'...Exiting!\n"),
 					tbinfo.relname);
 			exit_nicely(g_conn);
 		}
@@ -2805,7 +2814,7 @@
 								   indinfo[i].indrelname);
 		if (tableInd < 0)
 		{
-			fprintf(stderr, "failed sanity check, table %s was not found\n",
+			fprintf(stderr, _("failed sanity check, table %s was not found\n"),
 					indinfo[i].indrelname);
 			exit(2);
 		}
@@ -2828,7 +2837,7 @@
 			res = PQexec(g_conn, q);
 			if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (funcname) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				fprintf(stderr, _("dumpIndices(): SELECT (funcname) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			funcname = strdup(PQgetvalue(res, 0,
@@ -2849,7 +2858,7 @@
 			res = PQexec(g_conn, q);
 			if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (classname) failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				fprintf(stderr, _("dumpIndices(): SELECT (classname) failed.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			classname[nclass] = strdup(PQgetvalue(res, 0,
@@ -2859,8 +2868,8 @@
 
 		if (funcname && nclass != 1)
 		{
-			fprintf(stderr, "dumpIndices(): Must be exactly one OpClass "
-					"for functional index %s\n", indinfo[i].indexrelname);
+			fprintf(stderr, _("dumpIndices(): Must be exactly one OpClass "
+					"for functional index %s\n"), indinfo[i].indexrelname);
 			exit_nicely(g_conn);
 		}
 
@@ -2884,8 +2893,8 @@
 			{
 				if (k >= nclass)
 				{
-					fprintf(stderr, "dumpIndices(): OpClass not found for "
-							"attribute '%s' of index '%s'\n",
+					fprintf(stderr, _("dumpIndices(): OpClass not found for "
+							"attribute '%s' of index '%s'\n"),
 							attname, indinfo[i].indexrelname);
 					exit_nicely(g_conn);
 				}
@@ -3016,7 +3025,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not create pgdump_oid table.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("Can not create pgdump_oid table.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
@@ -3024,13 +3033,13 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not insert into pgdump_oid table.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("Can not insert into pgdump_oid table.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	max_oid = atol(PQoidStatus(res));
 	if (max_oid == 0)
 	{
-		fprintf(stderr, "Invalid max id in setMaxOid\n");
+		fprintf(stderr, _("Invalid max id in setMaxOid\n"));
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
@@ -3038,7 +3047,7 @@
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not drop pgdump_oid table.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("Can not drop pgdump_oid table.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
@@ -3071,14 +3080,14 @@
 	if (res == NULL ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "pg_dump error in finding the template1 database.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		fprintf(stderr, _("pg_dump error in finding the template1 database.  Explanation from backend: '%s'.\n"), PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	ntups = PQntuples(res);
 	if (ntups != 1)
 	{
-		fprintf(stderr, "pg_dump: couldn't find the template1 database.  "
-				"You are really hosed.\nGiving up.\n");
+		fprintf(stderr, _("pg_dump: couldn't find the template1 database.  "
+				"You are really hosed.\nGiving up.\n"));
 		exit_nicely(g_conn);
 	}
 	last_oid = atoi(PQgetvalue(res, 0, PQfnumber(res, "oid")));
@@ -3144,21 +3153,21 @@
 	res = PQexec(g_conn, query);
 	if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpSequence(%s): SELECT failed.  Explanation from backend: '%s'.\n", tbinfo.relname, PQerrorMessage(g_conn));
+		fprintf(stderr, _("dumpSequence(%s): SELECT failed.  Explanation from backend: '%s'.\n"), tbinfo.relname, PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
 	if (PQntuples(res) != 1)
 	{
-		fprintf(stderr, "dumpSequence(%s): %d (!= 1) tuples returned by SELECT\n",
+		fprintf(stderr, _("dumpSequence(%s): %d (!= 1) tuples returned by SELECT\n"),
 				tbinfo.relname, PQntuples(res));
 		exit_nicely(g_conn);
 	}
 
 	if (strcmp(PQgetvalue(res, 0, 0), tbinfo.relname) != 0)
 	{
-		fprintf(stderr, "dumpSequence(%s): different sequence name "
-				"returned by SELECT: %s\n",
+		fprintf(stderr, _("dumpSequence(%s): different sequence name "
+				"returned by SELECT: %s\n"),
 				tbinfo.relname, PQgetvalue(res, 0, 0));
 		exit_nicely(g_conn);
 	}
@@ -3207,7 +3216,7 @@
 				j;
 
 	if (g_verbose)
-		fprintf(stderr, "%s dumping out triggers %s\n",
+		fprintf(stderr, _("%s dumping out triggers %s\n"),
 				g_comment_start, g_comment_end);
 
 	for (i = 0; i < numTables; i++)
@@ -3236,7 +3245,7 @@
 	int			i_definition;
 
 	if (g_verbose)
-		fprintf(stderr, "%s dumping out rules %s\n",
+		fprintf(stderr, _("%s dumping out rules %s\n"),
 				g_comment_start, g_comment_end);
 
 	/*
@@ -3260,7 +3269,7 @@
 		if (!res ||
 			PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "dumpRules(): SELECT failed for table %s.  Explanation from backend: '%s'.\n",
+			fprintf(stderr, _("dumpRules(): SELECT failed for table %s.  Explanation from backend: '%s'.\n"),
 					tblinfo[t].relname, PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
diff -uNr postgresql-6.5.1-orig/src/bin/pg_encoding/Makefile postgresql-6.5.1/src/bin/pg_encoding/Makefile
--- postgresql-6.5.1-orig/src/bin/pg_encoding/Makefile	Sat Jun  5 18:27:31 1999
+++ postgresql-6.5.1/src/bin/pg_encoding/Makefile	Mon Jul 26 01:14:17 1999
@@ -17,7 +17,12 @@
 
 CFLAGS+= $(MBFLAGS) -I$(SRCDIR)/include
 
-all: pg_encoding
+POTSRCFILE= pg_encoding.c
+
+POTOBJFILE= pg_encoding.pot
+
+
+all: pg_encoding pot
 
 pg_encoding: $(OBJS) $(LIBPQDIR)/libpq.a
 	$(CC) -o pg_encoding $(OBJS) -L$(LIBPQDIR) -lpq $(LDFLAGS)
@@ -28,8 +33,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean: 
+clean: clean-pot
 	rm -f pg_encoding pg_encoding.o
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext --keyword="_" -C -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/pg_encoding/pg_encoding.c postgresql-6.5.1/src/bin/pg_encoding/pg_encoding.c
--- postgresql-6.5.1-orig/src/bin/pg_encoding/pg_encoding.c	Sun Feb 14 07:20:26 1999
+++ postgresql-6.5.1/src/bin/pg_encoding/pg_encoding.c	Mon Jul 26 01:12:53 1999
@@ -13,9 +13,16 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+
 #include "postgres.h"
 #include "mb/pg_wchar.h"
 
+#ifdef USE_MULTILANG
+#define	PACKAGE	"pg_encoding"
+#include "multilang.h"
+#endif
+
+
 static void usage(void);
 
 int
@@ -25,6 +32,10 @@
 	char	   *p;
 	int			rtn;
 
+#ifdef	USE_MULTILANG
+	InitMultiLang(PACKAGE, LOCALEDIR);
+#endif
+
 	if (argc < 2)
 	{
 		usage();
@@ -48,5 +59,5 @@
 static void
 usage()
 {
-	fprintf(stderr, "pg_encoding: encoding_name | encoding_number\n");
+	fprintf(stderr, _("pg_encoding: encoding_name | encoding_number\n"));
 }
diff -uNr postgresql-6.5.1-orig/src/bin/pg_id/Makefile postgresql-6.5.1/src/bin/pg_id/Makefile
--- postgresql-6.5.1-orig/src/bin/pg_id/Makefile	Sun Jan 17 14:19:10 1999
+++ postgresql-6.5.1/src/bin/pg_id/Makefile	Mon Jul 26 01:16:32 1999
@@ -16,6 +16,10 @@
 
 OBJS= pg_id.o
 
+POTSRCFILE= pg_id.c
+
+POTOBJFILE= pg_id.pot
+
 #
 # And where libpq goes, so goes the authentication stuff...
 #
@@ -24,7 +28,7 @@
 CFLAGS+= $(KRBFLAGS)
 endif
 
-all: pg_id
+all: pg_id pot
 
 pg_id: $(OBJS) $(LIBPQDIR)/libpq.a
 	$(CC) -o pg_id -L$(LIBPQDIR) $(OBJS) -lpq $(LDFLAGS)
@@ -38,8 +42,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean: 
+clean: clean-pot
 	rm -f pg_id$(X) $(OBJS) 
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext -C --keyword="_" -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/pg_id/pg_id.c postgresql-6.5.1/src/bin/pg_id/pg_id.c
--- postgresql-6.5.1-orig/src/bin/pg_id/pg_id.c	Sun Feb 14 07:20:29 1999
+++ postgresql-6.5.1/src/bin/pg_id/pg_id.c	Mon Jul 26 01:16:51 1999
@@ -22,6 +22,13 @@
 #include <getopt.h>
 #endif
 
+#include "config.h"
+
+#ifdef USE_MULTILANG
+#define PACKAGE	"pg_id"
+#include "multilang.h"
+#endif
+
 int
 main(int argc, char **argv)
 {
@@ -29,12 +36,16 @@
 	int			ch;
 	extern int	optind;
 
+#ifdef	USE_MULTILANG
+	InitMultiLang(PACKAGE, LOCALEDIR);
+#endif
+
 	while ((ch = getopt(argc, argv, "")) != EOF)
 		switch (ch)
 		{
 			case '?':
 			default:
-				fprintf(stderr, "usage: pg_id [login]\n");
+				fprintf(stderr, _("usage: pg_id [login]\n"));
 				exit(1);
 		}
 	argc -= optind;
@@ -44,12 +55,12 @@
 	{
 		if (argc > 1)
 		{
-			fprintf(stderr, "usage: pg_id [login]\n");
+			fprintf(stderr, _("usage: pg_id [login]\n"));
 			exit(1);
 		}
 		if ((pw = getpwnam(argv[0])) == NULL)
 		{
-			printf("NOUSER\n");
+			printf(_("NOUSER\n"));
 			exit(1);
 		}
 		printf("%ld\n", (long) pw->pw_uid);
diff -uNr postgresql-6.5.1-orig/src/bin/pg_passwd/Makefile postgresql-6.5.1/src/bin/pg_passwd/Makefile
--- postgresql-6.5.1-orig/src/bin/pg_passwd/Makefile	Sun Jan 17 14:19:13 1999
+++ postgresql-6.5.1/src/bin/pg_passwd/Makefile	Mon Jul 26 01:19:55 1999
@@ -9,7 +9,11 @@
 
 OBJS= pg_passwd.o
 
-all: pg_passwd
+POTSRCFILE= pg_passwd.c
+
+POTOBJFILE= pg_passwd.pot
+
+all: pg_passwd pot
 
 pg_passwd: $(OBJS)
 	$(CC) -o pg_passwd $(OBJS) $(LDFLAGS)
@@ -24,8 +28,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean:
+clean: clean-pot
 	rm -f pg_passwd$(X) $(OBJS)
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext -C --keyword="_" -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/pg_passwd/pg_passwd.c postgresql-6.5.1/src/bin/pg_passwd/pg_passwd.c
--- postgresql-6.5.1-orig/src/bin/pg_passwd/pg_passwd.c	Wed May 26 20:56:11 1999
+++ postgresql-6.5.1/src/bin/pg_passwd/pg_passwd.c	Mon Jul 26 01:18:36 1999
@@ -1,8 +1,15 @@
 /*
  * @(#) pg_passwd.c 1.8 09:13:16 97/07/02		Y. Ichikawa
  */
+
 #include "postgres.h"
 
+
+#ifdef	USE_MULTILANG
+#define	PACKAGE	"pg_passwd"
+#include "multilang.h"
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #if defined(HAVE_STRING_H)
@@ -37,7 +44,7 @@
 static void
 usage(FILE *stream)
 {
-	fprintf(stream, "Usage: %s <password file>\n", comname);
+	fprintf(stream, _("Usage: %s <password file>\n"), comname);
 }
 
 typedef struct
@@ -71,7 +78,7 @@
 	{
 		if (errno == ENOENT)
 		{
-			printf("File \"%s\" does not exist.  Create? (y/n): ", filename);
+			printf(_("File \"%s\" does not exist.  Create? (y/n): "), filename);
 			fflush(stdout);
 			fgets(ans, 128, stdin);
 			switch (ans[0])
@@ -114,7 +121,7 @@
 			line[l - 1] = '\0';
 		else
 		{						/* too long */
-			fprintf(stderr, "%s: line %d: line too long.\n",
+			fprintf(stderr, _("%s: line %d: line too long.\n"),
 					filename, npwds + 1);
 			exit(1);
 		}
@@ -123,14 +130,14 @@
 		p = line;
 		if ((q = strchr(p, ':')) == NULL)
 		{
-			fprintf(stderr, "%s: line %d: illegal format.\n",
+			fprintf(stderr, _("%s: line %d: illegal format.\n"),
 					filename, npwds + 1);
 			exit(1);
 		}
 		*(q++) = '\0';
 		if (strlen(p) == 0)
 		{
-			fprintf(stderr, "%s: line %d: null user name.\n",
+			fprintf(stderr, _("%s: line %d: null user name.\n"),
 					filename, npwds + 1);
 			exit(1);
 		}
@@ -141,7 +148,7 @@
 		{
 			if (strcmp(pwds[i].uname, pwds[npwds].uname) == 0)
 			{
-				fprintf(stderr, "%s: duplicated entry.\n", pwds[npwds].uname);
+				fprintf(stderr, _("%s: duplicated entry.\n"), pwds[npwds].uname);
 				exit(1);
 			}
 		}
@@ -160,7 +167,7 @@
 			*(q++) = '\0';
 		if (strlen(p) != 13)
 		{
-			fprintf(stderr, "WARNING: %s: line %d: illegal password length.\n",
+			fprintf(stderr, _("WARNING: %s: line %d: illegal password length.\n"),
 					filename, npwds + 1);
 		}
 		pwds[npwds].pwd = strdup(p);
@@ -247,7 +254,7 @@
 	/* show it */
 
 	/*
-	 * fprintf(stderr, "key = %s, salt = %s, password = %s\n", key, salt,
+	 * fprintf(stderr, _("key = %s, salt = %s, password = %s\n"), key, salt,
 	 * passwd);
 	 */
 }
@@ -273,7 +280,7 @@
 {
 	int			length;
 
-	printf("Username: ");
+	printf(_("Username: "));
 	fgets(username, 9, stdin);
 	length = strlen(username);
 
@@ -342,6 +349,10 @@
 	char		e_passwd[14];
 	int			i;
 
+#ifdef	USE_MULTILANG
+	InitMultiLang(PACKAGE, LOCALEDIR);
+#endif
+
 	comname = argv[0];
 	if (argc != 2)
 	{
@@ -355,11 +366,11 @@
 
 	/* ask for the user name and the password */
 	prompt_for_username(username);
-	prompt_for_password("New password: ", key);
-	prompt_for_password("Re-enter new password: ", key2);
+	prompt_for_password(_("New password: "), key);
+	prompt_for_password(_("Re-enter new password: "), key2);
 	if (strncmp(key, key2, 8) != 0)
 	{
-		fprintf(stderr, "Password mismatch.\n");
+		fprintf(stderr, _("Password mismatch.\n"));
 		exit(1);
 	}
 	salt[0] = '\0';
@@ -378,7 +389,7 @@
 	{							/* did not exist */
 		if (npwds == MAXPWDS)
 		{
-			fprintf(stderr, "%s: cannot handle so may entries.\n", comname);
+			fprintf(stderr, _("%s: cannot handle so may entries.\n"), comname);
 			exit(1);
 		}
 		pwds[npwds].uname = strdup(username);
diff -uNr postgresql-6.5.1-orig/src/bin/pg_version/Makefile.in postgresql-6.5.1/src/bin/pg_version/Makefile.in
--- postgresql-6.5.1-orig/src/bin/pg_version/Makefile.in	Sun Jan 17 14:19:14 1999
+++ postgresql-6.5.1/src/bin/pg_version/Makefile.in	Mon Jul 26 01:08:38 1999
@@ -18,7 +18,13 @@
 
 CFLAGS+= -I$(SRCDIR)/include
 
-all: pg_version
+
+POTSRCFILE=	pg_version.c
+
+POTOBJFILE=	pg_version.pot
+
+
+all: pg_version pot
 
 pg_version: submake $(OBJS)
 	$(CC) -o pg_version $(OBJS) $(LDFLAGS)
@@ -33,8 +39,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean: 
+clean: clean-pot
 	rm -f pg_version$(X) pg_version.o
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext -C --keyword="_" -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/pg_version/pg_version.c postgresql-6.5.1/src/bin/pg_version/pg_version.c
--- postgresql-6.5.1-orig/src/bin/pg_version/pg_version.c	Sun Feb 14 07:20:32 1999
+++ postgresql-6.5.1/src/bin/pg_version/pg_version.c	Mon Jul 26 00:56:34 1999
@@ -14,6 +14,13 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#include "config.h"
+
+#ifdef	USE_MULTILANG
+#define PACKAGE "pg_version"
+#include "multilang.h"
+#endif
+
 #include "version.h"			/* interface to SetPgVersion */
 
 
@@ -25,17 +32,21 @@
 	char	   *reason;			/* Reason that SetPgVersion failed, NULL
 								 * if it didn't. */
 
+#ifdef	USE_MULTILANG
+	InitMultiLang(PACKAGE, LOCALEDIR);
+#endif
+
 	if (argc < 2)
 	{
-		fprintf(stderr, "pg_version: missing argument\n");
+		fprintf(stderr, _("pg_version: missing argument\n"));
 		exit(1);
 	}
 	SetPgVersion(argv[1], &reason);
 	if (reason)
 	{
 		fprintf(stderr,
-				"pg_version is unable to create the PG_VERSION file. "
-				"SetPgVersion gave this reason: %s\n",
+				_("pg_version is unable to create the PG_VERSION file. "
+				"SetPgVersion gave this reason: %s\n"),
 				reason);
 		retcode = 10;
 	}
diff -uNr postgresql-6.5.1-orig/src/bin/pg_version/pg_version.pot postgresql-6.5.1/src/bin/pg_version/pg_version.pot
--- postgresql-6.5.1-orig/src/bin/pg_version/pg_version.pot	Thu Jan  1 08:00:00 1970
+++ postgresql-6.5.1/src/bin/pg_version/pg_version.pot	Mon Jul 26 01:03:41 1999
@@ -0,0 +1,26 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_version\n"
+"POT-Creation-Date: 1999-07-26 00:59+0800\n"
+"PO-Revision-Date: 1999-07-26 01:00+0800\n"
+"Last-Translator: Cd Chen <cdchen@mail.cynix.com.tw>\n"
+"Language-Team: Chinese <zh@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=Big5\n"
+"Content-Transfer-Encoding: 8Bit\n"
+
+#: pg_version.c:41
+msgid "pg_version: missing argument\n"
+msgstr "pg_version: �޼Ƥ���\n"
+
+#: pg_version.c:48
+#, c-format
+msgid ""
+"pg_version is unable to create the PG_VERSION file. SetPgVersion gave this "
+"reason: %s\n"
+msgstr "pg_version �L�k�إ� PG_VERSION �ɮסCSerPgVersion ���z�ѬO: %s\n"
diff -uNr postgresql-6.5.1-orig/src/bin/psql/Makefile.in postgresql-6.5.1/src/bin/psql/Makefile.in
--- postgresql-6.5.1-orig/src/bin/psql/Makefile.in	Sun Jan 17 14:19:19 1999
+++ postgresql-6.5.1/src/bin/psql/Makefile.in	Mon Jul 26 01:23:19 1999
@@ -30,7 +30,12 @@
 
 OBJS= psql.o stringutils.o @STRDUP@ @STRERROR2@
 
-all: submake psql
+
+POTSRCFILE= psql.c psqlHelp.h stringutils.c stringutils.h
+
+POTOBJFILE= psql.pot
+
+all: submake psql pot
 
 psql: $(OBJS) $(LIBPQDIR)/libpq.a
 	$(CC) -o psql -L$(LIBPQDIR) $(OBJS) -lpq $(LDFLAGS)
@@ -48,8 +53,14 @@
 depend dep:
 	$(CC) -MM $(CFLAGS) *.c >depend
 
-clean: 
+clean: clean-pot
 	rm -f psql$(X) $(OBJS) 
+
+clean-pot:
+	rm -f $(POTOBJFILE)
+
+pot:
+	xgettext -C --keyword="_" -o $(POTOBJFILE) $(POTSRCFILE)
 
 ifeq (depend,$(wildcard depend))
 include depend
diff -uNr postgresql-6.5.1-orig/src/bin/psql/messages.po postgresql-6.5.1/src/bin/psql/messages.po
--- postgresql-6.5.1-orig/src/bin/psql/messages.po	Thu Jan  1 08:00:00 1970
+++ postgresql-6.5.1/src/bin/psql/messages.po	Sun Jul 25 22:55:49 1999
@@ -0,0 +1,374 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 1999-07-25 22:55+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: psqlHelp.h:22
+msgid "abort the current transaction"
+msgstr ""
+
+#: psqlHelp.h:23
+msgid "\tabort [transaction|work];"
+msgstr ""
+
+#: psqlHelp.h:26
+msgid "add/rename attributes, rename tables"
+msgstr ""
+
+#: psqlHelp.h:27
+msgid ""
+"\tALTER TABLE class_name [*] ADD COLUMN attr type\n"
+"\tALTER TABLE class_name [*] RENAME [COLUMN] attr1 TO attr2\n"
+"\tALTER TABLE class_name1 RENAME TO class_name2"
+msgstr ""
+
+#: psqlHelp.h:32
+msgid "alter system information for a user"
+msgstr ""
+
+#: psqlHelp.h:33
+msgid ""
+"\tALTER USER user_name\n"
+"\t[WITH PASSWORD password]\n"
+"\t[CREATEDB | NOCCREATEDB]\n"
+"\t[CREATEUSER | NOCREATEUSER]\n"
+"\t[IN GROUP group_1, ...groupN]\n"
+"\t[VALID UNTIL 'abstime'];"
+msgstr ""
+
+#: psqlHelp.h:41
+msgid "begin a new transaction"
+msgstr ""
+
+#: psqlHelp.h:42
+msgid "\tBEGIN [WORK|TRANSACTION];"
+msgstr ""
+
+#: psqlHelp.h:45
+msgid "create a clustered index (from an existing index)"
+msgstr ""
+
+#: psqlHelp.h:46
+msgid "\tCLUSTER index_name ON relation_name"
+msgstr ""
+
+#: psqlHelp.h:49
+msgid "close an existing cursor (cursor)"
+msgstr ""
+
+#: psqlHelp.h:50
+msgid "\tCLOSE cursorname;"
+msgstr ""
+
+#: psqlHelp.h:53
+msgid "commit a transaction"
+msgstr ""
+
+#: psqlHelp.h:54
+msgid "\tCOMMIT [WORK|TRANSACTION]"
+msgstr ""
+
+#: psqlHelp.h:57
+msgid "copy data to and from a table"
+msgstr ""
+
+#: psqlHelp.h:58
+msgid ""
+"\tCOPY [BINARY] class_name [WITH OIDS]\n"
+"\tTO|FROM filename|STDIN|STDOUT [USING DELIMITERS 'delim'];"
+msgstr ""
+
+#: psqlHelp.h:62 psqlHelp.h:184
+msgid "Please be more specific:"
+msgstr ""
+
+#: psqlHelp.h:76
+msgid "define an aggregate function"
+msgstr ""
+
+#: psqlHelp.h:77
+msgid ""
+"\tCREATE AGGREGATE agg_name [AS] (BASETYPE = data_type, \n"
+"\t[SFUNC1 = sfunc_1, STYPE1 = sfunc1_return_type]\n"
+"\t[SFUNC2 = sfunc_2, STYPE2 = sfunc2_return_type]\n"
+"\t[,FINALFUNC = final-function]\n"
+"\t[,INITCOND1 = initial-cond1][,INITCOND2 = initial-cond2]);"
+msgstr ""
+
+#: psqlHelp.h:84
+msgid "create a database"
+msgstr ""
+
+#: psqlHelp.h:85
+msgid "\tCREATE DATABASE dbname [WITH LOCATION = 'dbpath']"
+msgstr ""
+
+#: psqlHelp.h:88
+msgid "create a user-defined function"
+msgstr ""
+
+#: psqlHelp.h:89
+msgid ""
+"\tCREATE FUNCTION function_name ([type1, ...typeN]) RETURNS return_type\n"
+"\tAS 'object_filename'|'sql-queries'|'builtin_function_name'\n"
+"\tLANGUAGE 'c'|'sql'|'internal';"
+msgstr ""
+
+#: psqlHelp.h:94
+msgid "construct an index"
+msgstr ""
+
+#: psqlHelp.h:95
+msgid ""
+"\tCREATE [UNIQUE] INDEX indexname ON class_name [USING access_method]\n"
+"( attr1 [type_class1], ...attrN | funcname(attr1, ...) [type_class] );"
+msgstr ""
+
+#: psqlHelp.h:99
+msgid "create a user-defined operator"
+msgstr ""
+
+#: psqlHelp.h:100
+msgid ""
+"\tCREATE OPERATOR operator_name (\n"
+"\t[LEFTARG = type1][,RIGHTARG = type2]\n"
+"\t,PROCEDURE = func_name,\n"
+"\t[,COMMUTATOR = com_op][,NEGATOR = neg_op]\n"
+"\t[,RESTRICT = res_proc][,JOIN = join_proc][,HASHES]\n"
+"\t[,SORT1 = left_sort_op][,SORT2 = right_sort_op]);"
+msgstr ""
+
+#: psqlHelp.h:108
+msgid "define a new rule"
+msgstr ""
+
+#: psqlHelp.h:109
+msgid ""
+"\tCREATE RULE rule_name AS ON\n"
+"\t{ SELECT | UPDATE | DELETE | INSERT }\n"
+"\tTO object [WHERE qual]\n"
+"\tDO [INSTEAD] [action|NOTHING|[actions]];"
+msgstr ""
+
+#: psqlHelp.h:115
+msgid "create a new sequence number generator"
+msgstr ""
+
+#: psqlHelp.h:116
+msgid ""
+"\tCREATE SEQUENCE sequence_name\n"
+"\t[INCREMENT number]\n"
+"\t[START number]\n"
+"\t[MINVALUE number]\n"
+"\t[MAXVALUE number]\n"
+"\t[CACHE number]\n"
+"\t[CYCLE];"
+msgstr ""
+
+#: psqlHelp.h:125
+msgid "create a new table"
+msgstr ""
+
+#: psqlHelp.h:126
+msgid ""
+"\tCREATE [TEMP] TABLE class_name\n"
+"\t(attr1 type1 [DEFAULT expression] [NOT NULL], ...attrN\n"
+"\t[[CONSTRAINT name] CHECK condition1, ...conditionN] )\n"
+"\t[INHERITS (class_name1, ...class_nameN)\n"
+";"
+msgstr ""
+
+#: psqlHelp.h:133
+msgid "create a new trigger"
+msgstr ""
+
+#: psqlHelp.h:134
+msgid ""
+"\tCREATE TRIGGER trigger_name AFTER|BEFORE event1 [OR event2 [OR event3] ]\n"
+"\tON class_name FOR EACH ROW|STATEMENT\n"
+"\tEXECUTE PROCEDURE func_name ([arguments])\n"
+"\n"
+"\teventX is one of INSERT, DELETE, UPDATE"
+msgstr ""
+
+#: psqlHelp.h:141
+msgid "create a new user-defined base data type"
+msgstr ""
+
+#: psqlHelp.h:142
+msgid ""
+"\tCREATE TYPE typename (\n"
+"\tINTERNALLENGTH = (number|VARIABLE),\n"
+"\t[EXTERNALLENGTH = (number|VARIABLE),]\n"
+"\tINPUT = input_function, OUTPUT = output_function\n"
+"\t[,ELEMENT = typename][,DELIMITER = character][,DEFAULT='<string>']\n"
+"\t[,SEND = send_function][,RECEIVE = receive_function][,PASSEDBYVALUE]);"
+msgstr ""
+
+#: psqlHelp.h:150
+msgid "create a new user"
+msgstr ""
+
+#: psqlHelp.h:151
+msgid ""
+"\tCREATE USER user_name\n"
+"\t[WITH PASSWORD password]\n"
+"\t[CREATEDB | NOCREATEDB]\n"
+"\t[CREATEUSER | NOCREATEUSER]\n"
+"\t[IN GROUP group1, ...groupN]\n"
+"\t[VALID UNTIL 'abstime'];"
+msgstr ""
+
+#: psqlHelp.h:159
+msgid "create a view"
+msgstr ""
+
+#: psqlHelp.h:160
+msgid ""
+"\tCREATE VIEW view_name AS\n"
+"\tSELECT [DISTINCT [ON attrN]]\n"
+"\texpr1 [AS attr1], ...exprN\n"
+"\t[FROM from_list]\n"
+"\t[WHERE qual]\n"
+"\t[GROUP BY group_list];"
+msgstr ""
+
+#: psqlHelp.h:168
+msgid "set up a cursor"
+msgstr ""
+
+#: psqlHelp.h:169
+msgid ""
+"\tDECLARE cursorname [BINARY] CURSOR FOR\n"
+"\tSELECT [DISTINCT [ON attrN]]\n"
+"\texpr1 [AS attr1], ...exprN\n"
+"\t[FROM from_list]\n"
+"\t[WHERE qual]\n"
+"\t[GROUP BY group_list]\n"
+"\t[HAVING having_clause]\n"
+"\t[ORDER BY attr1 [USING op1], ...attrN]\n"
+"\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"
+msgstr ""
+
+#: psqlHelp.h:180
+msgid "delete tuples"
+msgstr ""
+
+#: psqlHelp.h:181
+msgid "\tDELETE FROM class_name [WHERE qual];"
+msgstr ""
+
+#: psqlHelp.h:198
+msgid "remove an aggregate function"
+msgstr ""
+
+#: psqlHelp.h:199
+msgid "\tDROP AGGREGATE agg_name agg_type|*;"
+msgstr ""
+
+#: psqlHelp.h:202
+msgid "remove a database"
+msgstr ""
+
+#: psqlHelp.h:203
+msgid "\tDROP DATABASE dbname"
+msgstr ""
+
+#: psqlHelp.h:206
+msgid "remove a user-defined function"
+msgstr ""
+
+#: psqlHelp.h:207
+msgid "\tDROP FUNCTION funcname ([type1, ...typeN]);"
+msgstr ""
+
+#: psqlHelp.h:210
+msgid "remove an existing index"
+msgstr ""
+
+#: psqlHelp.h:211
+msgid "\tDROP INDEX indexname;"
+msgstr ""
+
+#: psqlHelp.h:214
+msgid "remove a user-defined operator"
+msgstr ""
+
+#: psqlHelp.h:215
+msgid "\tDROP OPERATOR operator_name ([ltype|NONE],[RTYPE|none]);"
+msgstr ""
+
+#: psqlHelp.h:218
+msgid "remove a rule"
+msgstr ""
+
+#: psqlHelp.h:219
+msgid "\tDROP RULE rulename;"
+msgstr ""
+
+#: psqlHelp.h:222
+msgid "remove a sequence number generator"
+msgstr ""
+
+#: psqlHelp.h:223
+msgid "\tDROP SEQUENCE sequence_name[, ...sequence_nameN];"
+msgstr ""
+
+#: psqlHelp.h:226
+msgid "remove a table"
+msgstr ""
+
+#: psqlHelp.h:227
+msgid "\tDROP TABLE class_name1, ...class_nameN;"
+msgstr ""
+
+#: psqlHelp.h:230
+msgid "remove a trigger"
+msgstr ""
+
+#: psqlHelp.h:231
+msgid "\tDROP TRIGGER trigger_name ON class_name;"
+msgstr ""
+
+#: psqlHelp.h:234
+msgid "remove a user-defined base type"
+msgstr ""
+
+#: psqlHelp.h:235
+msgid "\tDROP TYPE typename;"
+msgstr ""
+
+#: psqlHelp.h:238
+msgid "remove a user from the system"
+msgstr ""
+
+#: psqlHelp.h:239
+msgid "\tDROP USER user_name;"
+msgstr ""
+
+#: psqlHelp.h:242
+msgid "remove a view"
+msgstr ""
+
+#: psqlHelp.h:243
+msgid "\tDROP VIEW view_name"
+msgstr ""
+
+#: psqlHelp.h:246
+msgid "end the current transaction"
+msgstr ""
+
+#: psqlHelp.h:247
+msgid "\tEND [WORK|TRANSACTION];"
+msgstr ""
diff -uNr postgresql-6.5.1-orig/src/bin/psql/psql.c postgresql-6.5.1/src/bin/psql/psql.c
--- postgresql-6.5.1-orig/src/bin/psql/psql.c	Sat Jun  5 05:21:13 1999
+++ postgresql-6.5.1/src/bin/psql/psql.c	Sun Jul 25 16:00:50 1999
@@ -68,6 +68,7 @@
 #endif
 
 
+
 #ifdef WIN32
 #define popen(x,y) _popen(x,y)
 #define pclose(x) _pclose(x)
@@ -200,28 +201,28 @@
 static void
 usage(char *progname)
 {
-	fprintf(stderr, "Usage: %s [options] [dbname]\n", progname);
-	fprintf(stderr, "\t -a authsvc              set authentication service\n");
-	fprintf(stderr, "\t -A                      turn off alignment when printing out attributes\n");
-	fprintf(stderr, "\t -c query                run single query (slash commands too)\n");
-	fprintf(stderr, "\t -d dbName               specify database name\n");
-	fprintf(stderr, "\t -e                      echo the query sent to the backend\n");
-	fprintf(stderr, "\t -E                      echo all queries sent to the backend\n");
-	fprintf(stderr, "\t -f filename             use file as a source of queries\n");
-	fprintf(stderr, "\t -F sep                  set the field separator (default is '|')\n");
-	fprintf(stderr, "\t -h host                 set database server host\n");
-	fprintf(stderr, "\t -H                      turn on html3.0 table output\n");
-	fprintf(stderr, "\t -l                      list available databases\n");
-	fprintf(stderr, "\t -n                      don't use readline library\n");
-	fprintf(stderr, "\t -o filename             send output to filename or (|pipe)\n");
-	fprintf(stderr, "\t -p port                 set port number\n");
-	fprintf(stderr, "\t -q                      run quietly (no messages, no prompts)\n");
-	fprintf(stderr, "\t -s                      single step mode (prompts for each query)\n");
-	fprintf(stderr, "\t -S                      single line mode (i.e. query terminated by newline)\n");
-	fprintf(stderr, "\t -t                      turn off printing of headings and row count\n");
-	fprintf(stderr, "\t -T html                 set html3.0 table command options (cf. -H)\n");
-	fprintf(stderr, "\t -u                      ask for a username and password for authentication\n");
-	fprintf(stderr, "\t -x                      turn on expanded output (field names on left)\n");
+	fprintf(stderr, _("Usage: %s [options] [dbname]\n"), progname);
+	fprintf(stderr, _("\t -a authsvc              set authentication service\n"));
+	fprintf(stderr, _("\t -A                      turn off alignment when printing out attributes\n"));
+	fprintf(stderr, _("\t -c query                run single query (slash commands too)\n"));
+	fprintf(stderr, _("\t -d dbName               specify database name\n"));
+	fprintf(stderr, _("\t -e                      echo the query sent to the backend\n"));
+	fprintf(stderr, _("\t -E                      echo all queries sent to the backend\n"));
+	fprintf(stderr, _("\t -f filename             use file as a source of queries\n"));
+	fprintf(stderr, _("\t -F sep                  set the field separator (default is '|')\n"));
+	fprintf(stderr, _("\t -h host                 set database server host\n"));
+	fprintf(stderr, _("\t -H                      turn on html3.0 table output\n"));
+	fprintf(stderr, _("\t -l                      list available databases\n"));
+	fprintf(stderr, _("\t -n                      don't use readline library\n"));
+	fprintf(stderr, _("\t -o filename             send output to filename or (|pipe)\n"));
+	fprintf(stderr, _("\t -p port                 set port number\n"));
+	fprintf(stderr, _("\t -q                      run quietly (no messages, no prompts)\n"));
+	fprintf(stderr, _("\t -s                      single step mode (prompts for each query)\n"));
+	fprintf(stderr, _("\t -S                      single line mode (i.e. query terminated by newline)\n"));
+	fprintf(stderr, _("\t -t                      turn off printing of headings and row count\n"));
+	fprintf(stderr, _("\t -T html                 set html3.0 table command options (cf. -H)\n"));
+	fprintf(stderr, _("\t -u                      ask for a username and password for authentication\n"));
+	fprintf(stderr, _("\t -x                      turn on expanded output (field names on left)\n"));
 	exit(1);
 }
 
@@ -268,41 +269,41 @@
 		fout = stdout;
 
 	/* if you add/remove a line here, change the row test above */
-	fprintf(fout, " \\?           -- help\n");
-	fprintf(fout, " \\a           -- toggle field-alignment (currently %s)\n", on(pset->opt.align));
-	fprintf(fout, " \\C [<captn>] -- set html3 caption (currently '%s')\n", pset->opt.caption ? pset->opt.caption : "");
-	fprintf(fout, " \\connect <dbname|-> <user> -- connect to new database (currently '%s')\n", PQdb(pset->db));
-	fprintf(fout, " \\copy table {from | to} <fname>\n");
-	fprintf(fout, " \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n");
-	fprintf(fout, " \\da          -- list aggregates\n");
-	fprintf(fout, " \\dd [<object>]- list comment for table, field, type, function, or operator.\n");
-	fprintf(fout, " \\df          -- list functions\n");
-	fprintf(fout, " \\di          -- list only indices\n");
-	fprintf(fout, " \\do          -- list operators\n");
-	fprintf(fout, " \\ds          -- list only sequences\n");
-	fprintf(fout, " \\dS          -- list system tables and indexes\n");
-	fprintf(fout, " \\dt          -- list only tables\n");
-	fprintf(fout, " \\dT          -- list types\n");
-	fprintf(fout, " \\e [<fname>] -- edit the current query buffer or <fname>\n");
-	fprintf(fout, " \\E [<fname>] -- edit the current query buffer or <fname>, and execute\n");
-	fprintf(fout, " \\f [<sep>]   -- change field separater (currently '%s')\n", pset->opt.fieldSep);
-	fprintf(fout, " \\g [<fname>] [|<cmd>] -- send query to backend [and results in <fname> or pipe]\n");
-	fprintf(fout, " \\h [<cmd>]   -- help on syntax of sql commands, * for all commands\n");
-	fprintf(fout, " \\H           -- toggle html3 output (currently %s)\n", on(pset->opt.html3));
-	fprintf(fout, " \\i <fname>   -- read and execute queries from filename\n");
-	fprintf(fout, " \\l           -- list all databases\n");
-	fprintf(fout, " \\m           -- toggle monitor-like table display (currently %s)\n", on(pset->opt.standard));
-	fprintf(fout, " \\o [<fname>] [|<cmd>] -- send all query results to stdout, <fname>, or pipe\n");
-	fprintf(fout, " \\p           -- print the current query buffer\n");
-	fprintf(fout, " \\q           -- quit\n");
-	fprintf(fout, " \\r           -- reset(clear) the query buffer\n");
-	fprintf(fout, " \\s [<fname>] -- print history or save it in <fname>\n");
-	fprintf(fout, " \\t           -- toggle table headings and row count (currently %s)\n", on(pset->opt.header));
-	fprintf(fout, " \\T [<html>]  -- set html3.0 <table ...> options (currently '%s')\n", pset->opt.tableOpt ? pset->opt.tableOpt : "");
-	fprintf(fout, " \\x           -- toggle expanded output (currently %s)\n", on(pset->opt.expanded));
-	fprintf(fout, " \\w <fname>   -- output current buffer to a file\n");
-	fprintf(fout, " \\z           -- list current grant/revoke permissions\n");
-	fprintf(fout, " \\! [<cmd>]   -- shell escape or command\n");
+	fprintf(fout, _(" \\?           -- help\n"));
+	fprintf(fout, _(" \\a           -- toggle field-alignment (currently %s)\n"), on(pset->opt.align));
+	fprintf(fout, _(" \\C [<captn>] -- set html3 caption (currently '%s')\n"), pset->opt.caption ? pset->opt.caption : "");
+	fprintf(fout, _(" \\connect <dbname|-> <user> -- connect to new database (currently '%s')\n"), PQdb(pset->db));
+	fprintf(fout, _(" \\copy table {from | to} <fname>\n"));
+	fprintf(fout, _(" \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n"));
+	fprintf(fout, _(" \\da          -- list aggregates\n"));
+	fprintf(fout, _(" \\dd [<object>]- list comment for table, field, type, function, or operator.\n"));
+	fprintf(fout, _(" \\df          -- list functions\n"));
+	fprintf(fout, _(" \\di          -- list only indices\n"));
+	fprintf(fout, _(" \\do          -- list operators\n"));
+	fprintf(fout, _(" \\ds          -- list only sequences\n"));
+	fprintf(fout, _(" \\dS          -- list system tables and indexes\n"));
+	fprintf(fout, -(" \\dt          -- list only tables\n"));
+	fprintf(fout, _(" \\dT          -- list types\n"));
+	fprintf(fout, _(" \\e [<fname>] -- edit the current query buffer or <fname>\n"));
+	fprintf(fout, _(" \\E [<fname>] -- edit the current query buffer or <fname>, and execute\n"));
+	fprintf(fout, _(" \\f [<sep>]   -- change field separater (currently '%s')\n"), pset->opt.fieldSep);
+	fprintf(fout, _(" \\g [<fname>] [|<cmd>] -- send query to backend [and results in <fname> or pipe]\n"));
+	fprintf(fout, _(" \\h [<cmd>]   -- help on syntax of sql commands, * for all commands\n"));
+	fprintf(fout, _(" \\H           -- toggle html3 output (currently %s)\n"), on(pset->opt.html3));
+	fprintf(fout, _(" \\i <fname>   -- read and execute queries from filename\n"));
+	fprintf(fout, _(" \\l           -- list all databases\n"));
+	fprintf(fout, _(" \\m           -- toggle monitor-like table display (currently %s)\n"), on(pset->opt.standard));
+	fprintf(fout, _(" \\o [<fname>] [|<cmd>] -- send all query results to stdout, <fname>, or pipe\n"));
+	fprintf(fout, _(" \\p           -- print the current query buffer\n"));
+	fprintf(fout, _(" \\q           -- quit\n"));
+	fprintf(fout, _(" \\r           -- reset(clear) the query buffer\n"));
+	fprintf(fout, _(" \\s [<fname>] -- print history or save it in <fname>\n"));
+	fprintf(fout, _(" \\t           -- toggle table headings and row count (currently %s)\n"), on(pset->opt.header));
+	fprintf(fout, _(" \\T [<html>]  -- set html3.0 <table ...> options (currently '%s')\n"), pset->opt.tableOpt ? pset->opt.tableOpt : "");
+	fprintf(fout, _(" \\x           -- toggle expanded output (currently %s)\n"), on(pset->opt.expanded));
+	fprintf(fout, _(" \\w <fname>   -- output current buffer to a file\n"));
+	fprintf(fout, _(" \\z           -- list current grant/revoke permissions\n"));
+	fprintf(fout, _(" \\! [<cmd>]   -- shell escape or command\n"));
 
 	if (usePipe)
 	{
@@ -318,7 +319,7 @@
 
 	if (pset->echoAllQueries)
 	{
-		fprintf(stderr, "QUERY: %s\n", query);
+		fprintf(stderr, _("QUERY: %s\n"), query);
 		fprintf(stderr, "\n");
 		fflush(stderr);
 	}
@@ -371,10 +372,10 @@
 		exit(1);				/* accept signal if no connection */
 	/* Try to send cancel request */
 	if (PQrequestCancel(cancelConn))
-		safe_write_stderr("\nCANCEL request sent\n");
+		safe_write_stderr(_("\nCANCEL request sent\n"));
 	else
 	{
-		safe_write_stderr("\nCannot send cancel request:\n");
+		safe_write_stderr(_("\nCannot send cancel request:\n"));
 		safe_write_stderr(PQerrorMessage(cancelConn));
 	}
 }
@@ -529,10 +530,10 @@
 		{
 			/* Display the information */
 
-			fprintf(fout, "Database    = %s\n", PQdb(pset->db));
-			fprintf(fout, " +------------------+----------------------------------+----------+\n");
-			fprintf(fout, " |  Owner           |             Relation             |   Type   |\n");
-			fprintf(fout, " +------------------+----------------------------------+----------+\n");
+			fprintf(fout, _("Database    = %s\n"), PQdb(pset->db));
+			fprintf(fout, _(" +------------------+----------------------------------+----------+\n"));
+			fprintf(fout, _(" |  Owner           |             Relation             |   Type   |\n"));
+			fprintf(fout, _(" +------------------+----------------------------------+----------+\n"));
 
 			/* next, print out the instances */
 			for (i = 0; i < PQntuples(res); i++)
@@ -542,14 +543,14 @@
 				rk = PQgetvalue(res, i, 2);
 				rr = PQgetvalue(res, i, 3);
 				if (strcmp(rk, "r") == 0)
-					fprintf(fout, "%-8.8s |", (rr[0] == 't') ? "view?" : "table");
+					fprintf(fout, "%-8.8s |", (rr[0] == 't') ? _("view?") : _("table"));
 				else if (strcmp(rk, "i") == 0)
-					fprintf(fout, "%-8.8s |", "index");
+					fprintf(fout, "%-8.8s |", _("index"));
 				else
-					fprintf(fout, "%-8.8s |", "sequence");
+					fprintf(fout, "%-8.8s |", _("sequence"));
 				fprintf(fout, "\n");
 			}
-			fprintf(fout, " +------------------+----------------------------------+----------+\n");
+			fprintf(fout, _(" +------------------+----------------------------------+----------+\n"));
 			fprintf(fout, "\n");
 			PQclear(res);
 		}
@@ -567,17 +568,17 @@
 		switch (info_type)
 		{
 			case 't':
-				fprintf(stderr, "Couldn't find any tables!\n");
+				fprintf(stderr, _("Couldn't find any tables!\n"));
 				break;
 			case 'i':
-				fprintf(stderr, "Couldn't find any indices!\n");
+				fprintf(stderr, _("Couldn't find any indices!\n"));
 				break;
 			case 'S':
-				fprintf(stderr, "Couldn't find any sequences!\n");
+				fprintf(stderr, _("Couldn't find any sequences!\n"));
 				break;
 			case 'b':
 			default:
-				fprintf(stderr, "Couldn't find any tables, sequences or indices!\n");
+				fprintf(stderr, _("Couldn't find any tables, sequences or indices!\n"));
 				break;
 		}
 		return -1;
@@ -655,15 +656,15 @@
 
 		/* Display the information */
 
-		fprintf(fout, "Database    = %s\n", PQdb(pset->db));
+		fprintf(fout, _("Database    = %s\n"), PQdb(pset->db));
 		fprintf(fout, " +");
 		emitNtimes(fout, "-", maxCol1Len + 2);
 		fprintf(fout, "+");
 		emitNtimes(fout, "-", maxCol2Len + 2);
 		fprintf(fout, "+\n");
 		fprintf(fout, " | %-*s | %-*s |\n",
-				maxCol1Len, "Relation",
-				maxCol2Len, "Grant/Revoke Permissions");
+				maxCol1Len, _("Relation"),
+				maxCol2Len, _("Grant/Revoke Permissions"));
 		fprintf(fout, " +");
 		emitNtimes(fout, "-", maxCol1Len + 2);
 		fprintf(fout, "+");
@@ -695,7 +696,7 @@
 	else
 	{
 		PQclear(res);
-		fprintf(stderr, "Couldn't find any tables!\n");
+		fprintf(stderr, _("Couldn't find any tables!\n"));
 		return -1;
 	}
 }
@@ -825,16 +826,16 @@
 			/*
 			 * display the query. o			 * -Ryan 2/14/99
 			 */
-			fprintf(fout, "View    = %s\n", table);
-			fprintf(fout, "Query   = %s\n", PQgetvalue(res2, 0, 1));
+			fprintf(fout, _("View    = %s\n"), table);
+			fprintf(fout, _("Query   = %s\n"), PQgetvalue(res2, 0, 1));
 		}
 		else
-			fprintf(fout, "Table    = %s\n", table);
+			fprintf(fout, _("Table    = %s\n"), table);
 		PQclear(res2);
 
-		fprintf(fout, "+----------------------------------+----------------------------------+-------+\n");
-		fprintf(fout, "|              Field               |              Type                | Length|\n");
-		fprintf(fout, "+----------------------------------+----------------------------------+-------+\n");
+		fprintf(fout, _("+----------------------------------+----------------------------------+-------+\n"));
+		fprintf(fout, _("|              Field               |              Type                | Length|\n"));
+		fprintf(fout, _("+----------------------------------+----------------------------------+-------+\n"));
 
 		/* next, print out the instances */
 		for (i = 0; i < PQntuples(res); i++)
@@ -862,7 +863,7 @@
 
 			if (rnotnull[0] == 't')
 			{
-				strncat(type_str, " not null", 32 - strlen(type_str));
+				strncat(type_str, _(" not null"), 32 - strlen(type_str));
 				type_str[32] = '\0';
 			}
 			if (rhasdef[0] == 't')
@@ -902,7 +903,7 @@
 			}
 			fprintf(fout, "\n");
 		}
-		fprintf(fout, "+----------------------------------+----------------------------------+-------+\n");
+		fprintf(fout, _("+----------------------------------+----------------------------------+-------+\n"));
 		PQclear(res);
 
 		/* display defined indexes for this table */
@@ -926,9 +927,9 @@
 				 */
 
 				if (nIndices == 1)
-					fprintf(fout, "Index:    ");
+					fprintf(fout, _("Index:    "));
 				else
-					fprintf(fout, "Indices:  ");
+					fprintf(fout, _("Indices:  "));
 
 				/* next, print out the instances */
 				for (i = 0; i < PQntuples(res); i++)
@@ -950,7 +951,7 @@
 	else
 	{
 		PQclear(res);
-		fprintf(stderr, "Couldn't find table %s!\n", table);
+		fprintf(stderr, _("Couldn't find table %s!\n"), table);
 		return -1;
 	}
 }
@@ -1158,7 +1159,7 @@
 	line[MAX_QUERY_BUFFER - 1] = '\0';	/* this is unnecessary, I think */
 	if (strlen(line) == MAX_QUERY_BUFFER - 1)
 	{
-		fprintf(stderr, "line read exceeds maximum length.  Truncating at %d\n",
+		fprintf(stderr, _("line read exceeds maximum length.  Truncating at %d\n"),
 				MAX_QUERY_BUFFER - 1);
 	}
 	return line;
@@ -1186,7 +1187,7 @@
 
 	if (pset->echoQuery || pset->singleStep)
 	{
-		fprintf(stderr, "QUERY: %s\n", query);
+		fprintf(stderr, _("QUERY: %s\n"), query);
 		fflush(stderr);
 	}
 	if (pset->singleStep)
@@ -1194,7 +1195,7 @@
 		fprintf(stdout, "\n**************************************"
 				"*****************************************\n");
 		fflush(stdout);
-		printf("\npress return to continue ..\n");
+		printf(_("\npress return to continue ..\n"));
 		gets_fromFile("", stdin);
 	}
 	results = PQexec(pset->db, query);
@@ -1255,7 +1256,7 @@
 				else
 				{
 					if (pset->queryFout == stdout && !pset->quiet)
-						printf("Copy command returns...\n");
+						printf(_("Copy command returns...\n"));
 
 					success = handleCopyOut(pset->db, pset->queryFout);
 				}
@@ -1279,16 +1280,14 @@
 		if (PQstatus(pset->db) == CONNECTION_BAD)
 		{
 			fprintf(stderr,
-					"We have lost the connection to the backend, so "
-					"further processing is impossible.  "
-					"Terminating.\n");
+					_("We have lost the connection to the backend, so further processing is impossible.  Terminating.\n"));
 			exit(2);			/* we are out'ta here */
 		}
 		/* check for asynchronous returns */
 		while ((notify = PQnotifies(pset->db)) != NULL)
 		{
 			fprintf(stderr,
-				 "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
+				 _("ASYNC NOTIFY of '%s' from backend pid '%d' received\n"),
 					notify->relname, notify->be_pid);
 			free(notify);
 		}
@@ -1325,7 +1324,7 @@
 {
 	*sw = !*sw;
 	if (!pset->quiet)
-		printf("turned %s %s\n", on(*sw), msg);
+		printf(_("turned %s %s\n"), on(*sw), msg);
 	return *sw;
 }
 
@@ -1413,7 +1412,7 @@
 	table_tok = strtok(work_args, " ");
 	if (table_tok == NULL)
 	{
-		fprintf(stderr, "\\copy needs arguments.\n");
+		fprintf(stderr, _("\\copy needs arguments.\n"));
 		*error_p = true;
 	}
 	else
@@ -1424,7 +1423,7 @@
 		fromto_tok = strtok(NULL, "  ");
 		if (fromto_tok == NULL)
 		{
-			fprintf(stderr, "'FROM' or 'TO' must follow table name.\n");
+			fprintf(stderr, _("'FROM' or 'TO' must follow table name.\n"));
 			*error_p = true;
 		}
 		else
@@ -1436,8 +1435,8 @@
 			else
 			{
 				fprintf(stderr,
-						"Unrecognized token found where "
-						"'FROM' or 'TO' expected: '%s'.\n",
+						_("Unrecognized token found where "
+						"'FROM' or 'TO' expected: '%s'.\n"),
 						fromto_tok);
 				*error_p = true;
 			}
@@ -1448,7 +1447,7 @@
 				file_tok = strtok(NULL, " ");
 				if (file_tok == NULL)
 				{
-					fprintf(stderr, "A file pathname must follow '%s'.\n",
+					fprintf(stderr, _("A file pathname must follow '%s'.\n"),
 							fromto_tok);
 					*error_p = true;
 				}
@@ -1459,7 +1458,7 @@
 					if (strtok(NULL, " ") != NULL)
 					{
 						fprintf(stderr,
-						  "You have extra tokens after the filename.\n");
+						  _("You have extra tokens after the filename.\n"));
 						*error_p = true;
 					}
 				}
@@ -1526,7 +1525,7 @@
 #endif
 		if (copystream == NULL)
 			fprintf(stderr,
-				"Unable to open file %s which to copy, errno = %s (%d).",
+				_("Unable to open file %s which to copy, errno = %s (%d)."),
 					from ? "from" : "to", strerror(errno), errno);
 		else
 		{
@@ -1539,9 +1538,9 @@
 			if (!pset->quiet)
 			{
 				if (success)
-					printf("Successfully copied.\n");
+					printf(_("Successfully copied.\n"));
 				else
-					printf("Copy failed.\n");
+					printf(_("Copy failed.\n"));
 			}
 		}
 	}
@@ -1554,9 +1553,9 @@
 		   PsqlSettings *pset)
 {
 	if (!new_dbname)
-		fprintf(stderr, "\\connect must be followed by a database name\n");
+		fprintf(stderr, _("\\connect must be followed by a database name\n"));
 	else if (new_user != NULL && pset->getPassword)
-		fprintf(stderr, "You can't specify a username when using passwords.\n");
+		fprintf(stderr, _("You can't specify a username when using passwords.\n"));
 	else
 	{
 		PGconn	   *olddb = pset->db;
@@ -1601,18 +1600,18 @@
 		if (!pset->quiet)
 		{
 			if (!new_user)
-				printf("connecting to new database: %s\n", dbparam);
+				printf(_("connecting to new database: %s\n"), dbparam);
 			else if (dbparam != new_dbname)
-				printf("connecting as new user: %s\n", new_user);
+				printf(_("connecting as new user: %s\n"), new_user);
 			else
-				printf("connecting to new database: %s as user: %s\n",
+				printf(_("connecting to new database: %s as user: %s\n"),
 					   dbparam, new_user);
 		}
 
 		if (PQstatus(pset->db) == CONNECTION_BAD)
 		{
 			fprintf(stderr, "%s\n", PQerrorMessage(pset->db));
-			fprintf(stderr, "Could not connect to new database. exiting\n");
+			fprintf(stderr, _("Could not connect to new database. exiting\n"));
 			exit(2);
 		}
 		else
@@ -1726,7 +1725,7 @@
 		char		left_center_right;	/* Which column we're displaying */
 		int			i;			/* Index into QL_HELP[] */
 
-		printf("type \\h <cmd> where <cmd> is one of the following:\n");
+		printf(_("type \\h <cmd> where <cmd> is one of the following:\n"));
 
 		left_center_right = 'L';/* Start with left column */
 		i = 0;
@@ -1751,7 +1750,7 @@
 		}
 		if (left_center_right != 'L')
 			puts("\n");
-		printf("type \\h * for a complete description of all commands\n");
+		printf(_("type \\h * for a complete description of all commands\n"));
 	}
 	else
 	{
@@ -1781,9 +1780,9 @@
 				strcmp(topic, "*") == 0)
 			{
 				help_found = true;
-				fprintf(fout, "Command: %s\n", QL_HELP[i].cmd);
-				fprintf(fout, "Description: %s\n", QL_HELP[i].help);
-				fprintf(fout, "Syntax:\n");
+				fprintf(fout, _("Command: %s\n"), QL_HELP[i].cmd);
+				fprintf(fout, _("Description: %s\n"), QL_HELP[i].help);
+				fprintf(fout, _("Syntax:\n"));
 				fprintf(fout, "%s\n", QL_HELP[i].syntax);
 				fprintf(fout, "\n");
 			}
@@ -1796,8 +1795,8 @@
 		}
 
 		if (!help_found)
-			fprintf(stderr, "command not found, "
-					"try \\h with no arguments to see available help\n");
+			fprintf(stderr, _("command not found, "
+					"try \\h with no arguments to see available help\n"));
 	}
 }
 
@@ -1928,7 +1927,7 @@
 					do_copy(optarg2, pset);
 				else if (strcmp(cmd, "copy") == 0)
 				{
-					fprintf(stderr, "See \\? for help\n");
+					fprintf(stderr, _("See \\? for help\n"));
 					break;
 				}
 				else if (strncmp(cmd, "connect ", strlen("connect ")) == 0 ||
@@ -2227,7 +2226,7 @@
 				}
 				else if (!lastfile)
 				{
-					fprintf(stderr, "\\r must be followed by a file name initially\n");
+					fprintf(stderr, _("\\r must be followed by a file name initially\n"));
 					break;
 				}
 				stat(lastfile, &st);
@@ -2244,7 +2243,7 @@
 				if (st2.st_mtime == st.st_mtime)
 				{
 					if (!pset->quiet)
-						fprintf(stderr, "warning: %s not modified. query not executed\n", lastfile);
+						fprintf(stderr, _("warning: %s not modified. query not executed\n"), lastfile);
 					fclose(fd);
 					break;
 				}
@@ -2277,7 +2276,7 @@
 					exit(CMD_TERMINATE);
 				}
 				if (!pset->quiet)
-					printf("field separator changed to '%s'\n", pset->opt.fieldSep);
+					printf(_("field separator changed to '%s'\n"), pset->opt.fieldSep);
 				break;
 			}
 		case 'g':				/* \g means send query */
@@ -2303,7 +2302,7 @@
 
 				if (!optarg)
 				{
-					fprintf(stderr, "\\i must be followed by a file name\n");
+					fprintf(stderr, _("\\i must be followed by a file name\n"));
 					break;
 				}
 #ifndef __CYGWIN32__
@@ -2312,7 +2311,7 @@
 				if ((fd = fopen(optarg, "rb")) == NULL)
 #endif
 				{
-					fprintf(stderr, "file named %s could not be opened\n", optarg);
+					fprintf(stderr, _("file named %s could not be opened\n"), optarg);
 					break;
 				}
 				MainLoop(pset, query, fd);
@@ -2321,7 +2320,7 @@
 			}
 
 		case 'H':
-			if (toggle(pset, &pset->opt.html3, "HTML3.0 tabular output"))
+			if (toggle(pset, &pset->opt.html3, _("HTML3.0 tabular output")))
 				pset->opt.standard = 0;
 			break;
 
@@ -2330,7 +2329,7 @@
 			break;
 
 		case 'm':				/* monitor like type-setting */
-			if (toggle(pset, &pset->opt.standard, "standard SQL separaters and padding"))
+			if (toggle(pset, &pset->opt.standard, _("standard SQL separaters and padding")))
 			{
 				pset->opt.html3 = pset->opt.expanded = 0;
 				pset->opt.align = pset->opt.header = 1;
@@ -2338,7 +2337,7 @@
 					free(pset->opt.fieldSep);
 				pset->opt.fieldSep = strdup("|");
 				if (!pset->quiet)
-					printf("field separator changed to '%s'\n", pset->opt.fieldSep);
+					printf(_("field separator changed to '%s'\n"), pset->opt.fieldSep);
 			}
 			else
 			{
@@ -2346,7 +2345,7 @@
 					free(pset->opt.fieldSep);
 				pset->opt.fieldSep = strdup(DEFAULT_FIELD_SEP);
 				if (!pset->quiet)
-					printf("field separator changed to '%s'\n", pset->opt.fieldSep);
+					printf(_("field separator changed to '%s'\n"), pset->opt.fieldSep);
 			}
 			break;
 
@@ -2369,7 +2368,7 @@
 		case 'r':				/* reset(clear) the buffer */
 			query[0] = '\0';
 			if (!pset->quiet)
-				printf("buffer reset(cleared)\n");
+				printf(_("buffer reset(cleared)\n"));
 			break;
 
 		case 's':				/* \s is save history to a file */
@@ -2377,12 +2376,12 @@
 				optarg = "/dev/tty";
 #ifdef USE_HISTORY
 			if (write_history(optarg) != 0)
-				fprintf(stderr, "cannot write history to %s\n", optarg);
+				fprintf(stderr, _("cannot write history to %s\n"), optarg);
 #endif
 			break;
 
 		case 't':				/* toggle headers */
-			toggle(pset, &pset->opt.header, "output headings and row count");
+			toggle(pset, &pset->opt.header, _("output headings and row count"));
 			break;
 
 		case 'T':				/* define html <table ...> option */
@@ -2403,7 +2402,7 @@
 
 				if (!optarg)
 				{
-					fprintf(stderr, "\\w must be followed by a file name\n");
+					fprintf(stderr, _("\\w must be followed by a file name\n"));
 					break;
 				}
 #ifndef __CYGWIN32__
@@ -2412,7 +2411,7 @@
 				if ((fd = fopen(optarg, "w")) == NULL)
 #endif
 				{
-					fprintf(stderr, "file named %s could not be opened\n", optarg);
+					fprintf(stderr, _("file named %s could not be opened\n"), optarg);
 					break;
 				}
 				fputs(query, fd);
@@ -2422,7 +2421,7 @@
 			}
 
 		case 'x':
-			toggle(pset, &pset->opt.expanded, "expanded table representation");
+			toggle(pset, &pset->opt.expanded, _("expanded table representation"));
 			break;
 
 		case 'z':				/* list table rights (grant/revoke) */
@@ -2491,7 +2490,7 @@
 	cur_cmd_interactive = ((source == stdin) && !pset->notty);
 
 	if ((query = malloc(MAX_QUERY_BUFFER)) == NULL)
-		perror("Memory Allocation Failed");
+		perror(_("Memory Allocation Failed"));
 
 	if (cur_cmd_interactive)
 	{
@@ -2570,7 +2569,7 @@
 		{						/* No more input.  Time to quit, or \i
 								 * done */
 			if (!pset->quiet)
-				printf("EOF\n");/* Goes on prompt line */
+				printf(_("EOF\n"));/* Goes on prompt line */
 			eof = true;
 			continue;
 		}
@@ -2786,9 +2785,9 @@
 		}
 		else if (strlen(query) + strlen(query_start) > MAX_QUERY_BUFFER)
 		{
-			fprintf(stderr, "query buffer max length of %d exceeded\n",
+			fprintf(stderr, _("query buffer max length of %d exceeded\n"),
 					MAX_QUERY_BUFFER);
-			fprintf(stderr, "query line ignored\n");
+			fprintf(stderr, _("query line ignored\n"));
 			free(line);
 		}
 		else
@@ -2887,6 +2886,10 @@
 	has_client_encoding = getenv("PGCLIENTENCODING");
 #endif
 
+#ifdef USE_MULTILANG
+	InitMaltiLang();
+#endif
+
 	while ((c = getopt(argc, argv, "Aa:c:d:eEf:F:lh:Hnso:p:qStT:ux")) != EOF)
 	{
 		switch (c)
@@ -2988,7 +2991,7 @@
 
 	if (PQstatus(settings.db) == CONNECTION_BAD)
 	{
-		fprintf(stderr, "Connection to database '%s' failed.\n", dbname);
+		fprintf(stderr, _("Connection to database '%s' failed.\n"), dbname);
 		fprintf(stderr, "%s\n", PQerrorMessage(settings.db));
 		PQfinish(settings.db);
 		exit(1);
@@ -3000,18 +3003,18 @@
 		exit(listAllDbs(&settings));
 	if (!settings.quiet && !settings.notty && !singleQuery && !qfilename)
 	{
-		printf("Welcome to the POSTGRESQL interactive sql monitor:\n");
-		printf("  Please read the file COPYRIGHT for copyright terms "
-			   "of POSTGRESQL\n");
+		printf(_("Welcome to the POSTGRESQL interactive sql monitor:\n"));
+		printf(_("  Please read the file COPYRIGHT for copyright terms "
+			   "of POSTGRESQL\n"));
 
 		if ((version = selectVersion(&settings)) != NULL)
 			printf("[%s]\n", version);
 
 		printf("\n");
-		printf("   type \\? for help on slash commands\n");
-		printf("   type \\q to quit\n");
-		printf("   type \\g or terminate with semicolon to execute query\n");
-		printf(" You are currently connected to the database: %s\n\n", dbname);
+		printf(_("   type \\? for help on slash commands\n"));
+		printf(_("   type \\q to quit\n"));
+		printf(_("   type \\g or terminate with semicolon to execute query\n"));
+		printf(_(" You are currently connected to the database: %s\n\n"), dbname);
 	}
 
 	/*
@@ -3135,9 +3138,9 @@
 
 	if (mustprompt)
 	{
-		fputs("Enter info followed by a newline\n", stdout);
-		fputs("End with a backslash and a "
-			  "period on a line by itself.\n", stdout);
+		fputs(_("Enter info followed by a newline\n"), stdout);
+		fputs(_("End with a backslash and a "
+			  "period on a line by itself.\n"), stdout);
 	}
 	while (!copydone)
 	{							/* for each input line ... */
@@ -3241,7 +3244,7 @@
 
 #endif
 
-	printf("Username: ");
+	printf(_("Username: "));
 	fgets(username, 100, stdin);
 	length = strlen(username);
 	/* skip rest of the line */
diff -uNr postgresql-6.5.1-orig/src/bin/psql/psqlHelp.h postgresql-6.5.1/src/bin/psql/psqlHelp.h
--- postgresql-6.5.1-orig/src/bin/psql/psqlHelp.h	Mon Jul 12 06:47:21 1999
+++ postgresql-6.5.1/src/bin/psql/psqlHelp.h	Sun Jul 25 22:59:08 1999
@@ -19,47 +19,47 @@
 
 static struct _helpStruct QL_HELP[] = {
 	{"abort transaction",
-		"abort the current transaction",
-	"\
-\tabort [transaction|work];"},
+		_("abort the current transaction"),
+	_("\
+\tabort [transaction|work];")},
 	{"alter table",
-		"add/rename attributes, rename tables",
-	"\
+		_("add/rename attributes, rename tables"),
+	_("\
 \tALTER TABLE class_name [*] ADD COLUMN attr type\n\
 \tALTER TABLE class_name [*] RENAME [COLUMN] attr1 TO attr2\n\
-\tALTER TABLE class_name1 RENAME TO class_name2"},
+\tALTER TABLE class_name1 RENAME TO class_name2")},
 	{"alter user",
-		"alter system information for a user",
-	"\
+		_("alter system information for a user"),
+	_("\
 \tALTER USER user_name\n\
 \t[WITH PASSWORD password]\n\
 \t[CREATEDB | NOCCREATEDB]\n\
 \t[CREATEUSER | NOCREATEUSER]\n\
 \t[IN GROUP group_1, ...groupN]\n\
-\t[VALID UNTIL 'abstime'];"},
+\t[VALID UNTIL 'abstime'];")},
 	{"begin work",
-		"begin a new transaction",
-	"\
-\tBEGIN [WORK|TRANSACTION];"},
+		_("begin a new transaction"),
+	_("\
+\tBEGIN [WORK|TRANSACTION];")},
 	{"cluster",
-		"create a clustered index (from an existing index)",
-	"\
-\tCLUSTER index_name ON relation_name"},
+		_("create a clustered index (from an existing index)"),
+	_("\
+\tCLUSTER index_name ON relation_name")},
 	{"close",
-		"close an existing cursor (cursor)",
-	"\
-\tCLOSE cursorname;"},
+		_("close an existing cursor (cursor)"),
+	_("\
+\tCLOSE cursorname;")},
 	{"commit work",
-		"commit a transaction",
-	"\
-\tCOMMIT [WORK|TRANSACTION]"},
+		_("commit a transaction"),
+	_("\
+\tCOMMIT [WORK|TRANSACTION]")},
 	{"copy",
-		"copy data to and from a table",
-	"\
+		_("copy data to and from a table"),
+	_("\
 \tCOPY [BINARY] class_name [WITH OIDS]\n\
-\tTO|FROM filename|STDIN|STDOUT [USING DELIMITERS 'delim'];"},
+\tTO|FROM filename|STDIN|STDOUT [USING DELIMITERS 'delim'];")},
 	{"create",
-		"Please be more specific:",
+		_("Please be more specific:"),
 	"\
 \tcreate aggregate\n\
 \tcreate database\n\
@@ -73,100 +73,100 @@
 \tcreate type\n\
 \tcreate view"},
 	{"create aggregate",
-		"define an aggregate function",
-	"\
+		_("define an aggregate function"),
+	_("\
 \tCREATE AGGREGATE agg_name [AS] (BASETYPE = data_type, \n\
 \t[SFUNC1 = sfunc_1, STYPE1 = sfunc1_return_type]\n\
 \t[SFUNC2 = sfunc_2, STYPE2 = sfunc2_return_type]\n\
 \t[,FINALFUNC = final-function]\n\
-\t[,INITCOND1 = initial-cond1][,INITCOND2 = initial-cond2]);"},
+\t[,INITCOND1 = initial-cond1][,INITCOND2 = initial-cond2]);")},
 	{"create database",
-		"create a database",
-	"\
-\tCREATE DATABASE dbname [WITH LOCATION = 'dbpath']"},
+		_("create a database"),
+	_("\
+\tCREATE DATABASE dbname [WITH LOCATION = 'dbpath']")},
 	{"create function",
-		"create a user-defined function",
-	"\
+		_("create a user-defined function"),
+	_("\
 \tCREATE FUNCTION function_name ([type1, ...typeN]) RETURNS return_type\n\
 \tAS 'object_filename'|'sql-queries'|'builtin_function_name'\n\
-\tLANGUAGE 'c'|'sql'|'internal';"},
+\tLANGUAGE 'c'|'sql'|'internal';")},
 	{"create index",
-		"construct an index",
-	"\
+		_("construct an index"),
+	_("\
 \tCREATE [UNIQUE] INDEX indexname ON class_name [USING access_method]\n\
-( attr1 [type_class1], ...attrN | funcname(attr1, ...) [type_class] );"},
+( attr1 [type_class1], ...attrN | funcname(attr1, ...) [type_class] );")},
 	{"create operator",
-		"create a user-defined operator",
-	"\
+		_("create a user-defined operator"),
+	_("\
 \tCREATE OPERATOR operator_name (\n\
 \t[LEFTARG = type1][,RIGHTARG = type2]\n\
 \t,PROCEDURE = func_name,\n\
 \t[,COMMUTATOR = com_op][,NEGATOR = neg_op]\n\
 \t[,RESTRICT = res_proc][,JOIN = join_proc][,HASHES]\n\
-\t[,SORT1 = left_sort_op][,SORT2 = right_sort_op]);"},
+\t[,SORT1 = left_sort_op][,SORT2 = right_sort_op]);")},
 	{"create rule",
-		"define a new rule",
-	"\
+		_("define a new rule"),
+	_("\
 \tCREATE RULE rule_name AS ON\n\
 \t{ SELECT | UPDATE | DELETE | INSERT }\n\
 \tTO object [WHERE qual]\n\
-\tDO [INSTEAD] [action|NOTHING|[actions]];"},
+\tDO [INSTEAD] [action|NOTHING|[actions]];")},
 	{"create sequence",
-		"create a new sequence number generator",
-	"\
+		_("create a new sequence number generator"),
+	_("\
 \tCREATE SEQUENCE sequence_name\n\
 \t[INCREMENT number]\n\
 \t[START number]\n\
 \t[MINVALUE number]\n\
 \t[MAXVALUE number]\n\
 \t[CACHE number]\n\
-\t[CYCLE];"},
+\t[CYCLE];")},
 	{"create table",
-		"create a new table",
-	"\
+		_("create a new table"),
+	_("\
 \tCREATE [TEMP] TABLE class_name\n\
 \t(attr1 type1 [DEFAULT expression] [NOT NULL], ...attrN\n\
 \t[[CONSTRAINT name] CHECK condition1, ...conditionN] )\n\
 \t[INHERITS (class_name1, ...class_nameN)\n\
-;"},
+;")},
 	{"create trigger",
-		"create a new trigger",
-	"\
+		_("create a new trigger"),
+	_("\
 \tCREATE TRIGGER trigger_name AFTER|BEFORE event1 [OR event2 [OR event3] ]\n\
 \tON class_name FOR EACH ROW|STATEMENT\n\
 \tEXECUTE PROCEDURE func_name ([arguments])\n\
 \n\
-\teventX is one of INSERT, DELETE, UPDATE"},
+\teventX is one of INSERT, DELETE, UPDATE")},
 	{"create type",
-		"create a new user-defined base data type",
-	"\
+		_("create a new user-defined base data type"),
+	_("\
 \tCREATE TYPE typename (\n\
 \tINTERNALLENGTH = (number|VARIABLE),\n\
 \t[EXTERNALLENGTH = (number|VARIABLE),]\n\
 \tINPUT = input_function, OUTPUT = output_function\n\
 \t[,ELEMENT = typename][,DELIMITER = character][,DEFAULT=\'<string>\']\n\
-\t[,SEND = send_function][,RECEIVE = receive_function][,PASSEDBYVALUE]);"},
+\t[,SEND = send_function][,RECEIVE = receive_function][,PASSEDBYVALUE]);")},
 	{"create user",
-		"create a new user",
-	"\
+		_("create a new user"),
+	_("\
 \tCREATE USER user_name\n\
 \t[WITH PASSWORD password]\n\
 \t[CREATEDB | NOCREATEDB]\n\
 \t[CREATEUSER | NOCREATEUSER]\n\
 \t[IN GROUP group1, ...groupN]\n\
-\t[VALID UNTIL 'abstime'];"},
+\t[VALID UNTIL 'abstime'];")},
 	{"create view",
-		"create a view",
-	"\
+		_("create a view"),
+	_("\
 \tCREATE VIEW view_name AS\n\
 \tSELECT [DISTINCT [ON attrN]]\n\
 \texpr1 [AS attr1], ...exprN\n\
 \t[FROM from_list]\n\
 \t[WHERE qual]\n\
-\t[GROUP BY group_list];"},
+\t[GROUP BY group_list];")},
 	{"declare",
-		"set up a cursor",
-	"\
+		_("set up a cursor"),
+	_("\
 \tDECLARE cursorname [BINARY] CURSOR FOR\n\
 \tSELECT [DISTINCT [ON attrN]]\n\
 \texpr1 [AS attr1], ...exprN\n\
@@ -175,13 +175,13 @@
 \t[GROUP BY group_list]\n\
 \t[HAVING having_clause]\n\
 \t[ORDER BY attr1 [USING op1], ...attrN]\n\
-\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"},
+\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];")},
 	{"delete",
-		"delete tuples",
-	"\
-\tDELETE FROM class_name [WHERE qual];"},
+		_("delete tuples"),
+	_("\
+\tDELETE FROM class_name [WHERE qual];")},
 	{"drop",
-		"Please be more specific:",
+		_("Please be more specific:"),
 	"\
 \tdrop aggregate\n\
 \tdrop database\n\
@@ -195,74 +195,74 @@
 \tdrop type\n\
 \tdrop view"},
 	{"drop aggregate",
-		"remove an aggregate function",
-	"\
-\tDROP AGGREGATE agg_name agg_type|*;"},
+		_("remove an aggregate function"),
+	_("\
+\tDROP AGGREGATE agg_name agg_type|*;")},
 	{"drop database",
-		"remove a database",
-	"\
-\tDROP DATABASE dbname"},
+		_("remove a database"),
+	_("\
+\tDROP DATABASE dbname")},
 	{"drop function",
-		"remove a user-defined function",
-	"\
-\tDROP FUNCTION funcname ([type1, ...typeN]);"},
+		_("remove a user-defined function"),
+	_("\
+\tDROP FUNCTION funcname ([type1, ...typeN]);")},
 	{"drop index",
-		"remove an existing index",
-	"\
-\tDROP INDEX indexname;"},
+		_("remove an existing index"),
+	_("\
+\tDROP INDEX indexname;")},
 	{"drop operator",
-		"remove a user-defined operator",
-	"\
-\tDROP OPERATOR operator_name ([ltype|NONE],[RTYPE|none]);"},
+		_("remove a user-defined operator"),
+	_("\
+\tDROP OPERATOR operator_name ([ltype|NONE],[RTYPE|none]);")},
 	{"drop rule",
-		"remove a rule",
-	"\
-\tDROP RULE rulename;"},
+		_("remove a rule"),
+	_("\
+\tDROP RULE rulename;")},
 	{"drop sequence",
-		"remove a sequence number generator",
-	"\
-\tDROP SEQUENCE sequence_name[, ...sequence_nameN];"},
+		_("remove a sequence number generator"),
+	_("\
+\tDROP SEQUENCE sequence_name[, ...sequence_nameN];")},
 	{"drop table",
-		"remove a table",
-	"\
-\tDROP TABLE class_name1, ...class_nameN;"},
+		_("remove a table"),
+	_("\
+\tDROP TABLE class_name1, ...class_nameN;")},
 	{"drop trigger",
-		"remove a trigger",
-	"\
-\tDROP TRIGGER trigger_name ON class_name;"},
+		_("remove a trigger"),
+	_("\
+\tDROP TRIGGER trigger_name ON class_name;")},
 	{"drop type",
-		"remove a user-defined base type",
-	"\
-\tDROP TYPE typename;"},
+		_("remove a user-defined base type"),
+	_("\
+\tDROP TYPE typename;")},
 	{"drop user",
-		"remove a user from the system",
-	"\
-\tDROP USER user_name;"},
+		_("remove a user from the system"),
+	_("\
+\tDROP USER user_name;")},
 	{"drop view",
-		"remove a view",
-	"\
-\tDROP VIEW view_name"},
+		_("remove a view"),
+	_("\
+\tDROP VIEW view_name")},
 	{"end work",
-		"end the current transaction",
-	"\
-\tEND [WORK|TRANSACTION];"},
+		_("end the current transaction"),
+	_("\
+\tEND [WORK|TRANSACTION];")},
 	{"explain",
-		"explain the query execution plan",
-	"\
-\tEXPLAIN [VERBOSE] query"},
+		_("explain the query execution plan"),
+	_("\
+\tEXPLAIN [VERBOSE] query")},
 	{"fetch",
-		"retrieve tuples from a cursor",
-	"\
-\tFETCH [FORWARD|BACKWARD] [number|ALL] [IN cursorname];"},
+		_("retrieve tuples from a cursor"),
+	_("\
+\tFETCH [FORWARD|BACKWARD] [number|ALL] [IN cursorname];")},
 	{"grant",
-		"grant access control to a user or group",
-	"\
+		_("grant access control to a user or group"),
+	_("\
 \tGRANT privilege1, ...privilegeN ON rel1, ...relN TO \n\
 { PUBLIC | GROUP group | username }\n\
-\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }"},
+\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }")},
 	{"insert",
-		"insert tuples",
-	"\
+		_("insert tuples"),
+	_("\
 \tINSERT INTO class_name [(attr1, ...attrN)]\n\
 \tVALUES (expr1,..exprN) |\n\
 \tSELECT [DISTINCT [ON attrN]]\n\
@@ -271,46 +271,46 @@
 \t[WHERE qual]\n\
 \t[GROUP BY group_list]\n\
 \t[HAVING having_clause]\n\
-\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"},
+\t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];")},
 	{"listen",
-		"listen for notification on a condition name",
-	"\
-\tLISTEN name|\"non-name string\""},
+		_("listen for notification on a condition name"),
+	_("\
+\tLISTEN name|\"non-name string\"")},
 	{"load",
-		"dynamically load a module",
-	"\
-\tLOAD 'filename';"},
+		_("dynamically load a module"),
+	_("\
+\tLOAD 'filename';")},
 	{"lock",
-		"exclusive lock a table inside a transaction",
-	"\
+		_("exclusive lock a table inside a transaction"),
+	_("\
 \tLOCK [TABLE] class_name \n\
-\t[IN [ROW|ACCESS] [SHARE|EXCLUSIVE] | [SHARE ROW EXCLUSIVE] MODE];"},
+\t[IN [ROW|ACCESS] [SHARE|EXCLUSIVE] | [SHARE ROW EXCLUSIVE] MODE];")},
 	{"move",
-		"move an cursor position",
-	"\
-\tMOVE [FORWARD|BACKWARD] [number|ALL] [IN cursorname];"},
+		_("move an cursor position"),
+	_("\
+\tMOVE [FORWARD|BACKWARD] [number|ALL] [IN cursorname];")},
 	{"notify",
-		"signal all frontends listening on a condition name",
-	"\
-\tNOTIFY name|\"non-name string\""},
+		_("signal all frontends listening on a condition name"),
+	_("\
+\tNOTIFY name|\"non-name string\"")},
 	{"reset",
-		"set run-time environment back to default",
-	"\
+		_("set run-time environment back to default"),
+	_("\
 \tRESET DATESTYLE|COST_HEAP|COST_INDEX|GEQO|KSQO|\n\
-TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING"},
+TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING")},
 	{"revoke",
-		"revoke access control from a user or group",
-	"\
+		_("revoke access control from a user or group"),
+	_("\
 \tREVOKE privilege1, ...privilegeN ON rel1, ...relN FROM \n\
 { PUBLIC | GROUP group | username }\n\
-\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }"},
+\t privilege is { ALL | SELECT | INSERT | UPDATE | DELETE | RULE }")},
 	{"rollback work",
-		"abort a transaction",
-	"\
-\tROLLBACK [WORK|TRANSACTION]"},
+		_("abort a transaction"),
+	_("\
+\tROLLBACK [WORK|TRANSACTION]")},
 	{"select",
-		"retrieve tuples",
-	"\
+		_("retrieve tuples"),
+	_("\
 \tSELECT [DISTINCT [ON attrN]] expr1 [AS attr1], ...exprN\n\
 \t[INTO [TEMP] [TABLE] class_name]\n\
 \t[FROM from_list]\n\
@@ -320,10 +320,10 @@
 \t[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...]\n\
 \t[ORDER BY attr1 [ASC|DESC] [USING op1], ...attrN ]\n\
 \t[FOR UPDATE [OF class_name...]]\n\
-\t[LIMIT count [OFFSET|, count]];"},
+\t[LIMIT count [OFFSET|, count]];")},
 	{"set",
-		"set run-time environment",
-	"\
+		_("set run-time environment"),
+	_("\
 \tSET DATESTYLE TO 'ISO'|'SQL'|'Postgres'|'European'|'US'|'NonEuropean'\n\
 \tSET COST_HEAP TO #\n\
 \tSET COST_INDEX TO #\n\
@@ -336,28 +336,28 @@
 \t  'KOI8|'WIN'|'ALT'|'WIN1250'\n\
 \tSET SERVER_ENCODING TO 'EUC_JP'|'SJIS'|'EUC_CN'|'EUC_KR'|'EUC_TW'|\n\
 \t  'BIG5'|'MULE_INTERNAL'|'LATIN1'|'LATIN2'|'LATIN3'|'LATIN4'|'LATIN5'|\n\
-\t  'KOI8|'WIN'|'ALT'"},
+\t  'KOI8|'WIN'|'ALT'")},
 	{"show",
-		"show current run-time environment",
-	"\
+		_("show current run-time environment"),
+	_("\
 \tSHOW DATESTYLE|COST_HEAP|COST_INDEX|GEQO|KSQO|\n\
-TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING"},
+TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING")},
 	{"unlisten",
-		"stop listening for notification on a condition name",
-	"\
-\tUNLISTEN name|\"non-name string\"|\"*\""},
+		_("stop listening for notification on a condition name"),
+	_("\
+\tUNLISTEN name|\"non-name string\"|\"*\"")},
 	{"update",
-		"update tuples",
-	"\
+		_("update tuples"),
+	_("\
 \tUPDATE class_name SET attr1 = expr1, ...attrN = exprN\n\
 \t[FROM from_clause]\n\
-\t[WHERE qual];"},
+\t[WHERE qual];")},
 	{"vacuum",
-		"vacuum the database, i.e. cleans out deleted records, updates statistics",
-	"\
+		_("vacuum the database, i.e. cleans out deleted records, updates statistics"),
+	_("\
 \tVACUUM [VERBOSE] [ANALYZE] [table]\n\
 \tor\n\
-\tVACUUM [VERBOSE]  ANALYZE  [table [(attr1, ...attrN)]];"},
+\tVACUUM [VERBOSE]  ANALYZE  [table [(attr1, ...attrN)]];")},
 	{NULL, NULL, NULL}			/* important to keep a NULL terminator
 								 * here! */
 };
diff -uNr postgresql-6.5.1-orig/src/bin/psql/stringutils.c postgresql-6.5.1/src/bin/psql/stringutils.c
--- postgresql-6.5.1-orig/src/bin/psql/stringutils.c	Sun Feb 14 07:20:41 1999
+++ postgresql-6.5.1/src/bin/psql/stringutils.c	Sun Jul 25 23:00:00 1999
@@ -106,14 +106,14 @@
 		char	   *t;
 
 		t = strdup(tests[i]);
-		printf("leftTrim(%s) = ", t);
-		printf("%sEND\n", leftTrim(t));
+		printf(_("leftTrim(%s) = "), t);
+		printf(_("%sEND\n"), leftTrim(t));
 		t = strdup(tests[i]);
-		printf("rightTrim(%s) = ", t);
-		printf("%sEND\n", rightTrim(t));
+		printf(_("rightTrim(%s) = "), t);
+		printf(_("%sEND\n"), rightTrim(t));
 		t = strdup(tests[i]);
-		printf("doubleTrim(%s) = ", t);
-		printf("%sEND\n", doubleTrim(t));
+		printf(_("doubleTrim(%s) = "), t);
+		printf(_("%sEND\n"), doubleTrim(t));
 		i++;
 	}
 
diff -uNr postgresql-6.5.1-orig/src/bin/psql/stringutils.h postgresql-6.5.1/src/bin/psql/stringutils.h
--- postgresql-6.5.1-orig/src/bin/psql/stringutils.h	Sun Feb 14 07:20:42 1999
+++ postgresql-6.5.1/src/bin/psql/stringutils.h	Sun Jul 25 23:00:30 1999
@@ -21,6 +21,8 @@
 #define realloc(x,y) ckrealloc(x,y)
 #endif
 
+#include "multilang.h"
+
 /* string fiddling utilties */
 
 /* all routines assume null-terminated strings! as arguments */
diff -uNr postgresql-6.5.1-orig/src/include/multilang.h postgresql-6.5.1/src/include/multilang.h
--- postgresql-6.5.1-orig/src/include/multilang.h	Thu Jan  1 08:00:00 1970
+++ postgresql-6.5.1/src/include/multilang.h	Mon Jul 26 00:58:31 1999
@@ -0,0 +1,40 @@
+/* ---------------------------------------------------------------------------
+ * multilang.h
+ *
+ * This is a header file of PostgreSQL for support MultiLang via GNU Library
+ * C gettext() function. This file is written by 
+ * Cd Chen <cdchen@mail.cynix.com.tw>, 1999-07-30.
+ *
+ * $Author$
+ *
+ * $Date$
+ *
+ * $Id$
+ *
+ * --------------------------------------------------------------------------- */
+
+#ifndef _H_MULTILANG_H_
+#define _H_MULTILANG_H_
+
+#include <libintl.h>
+
+#ifdef USE_MULTILANG
+#define LOCALEDIR	"/usr/share/locale"
+#define _(String)	gettext (String)
+
+void
+InitMultiLang(char *Package, char *LocaleDir)
+{
+  setlocale (LC_ALL, "");
+  bindtextdomain(Package, LocaleDir);
+  textdomain (Package);
+}
+
+
+#else
+#define _(String)	String
+#endif
+
+
+
+#endif _H_MULTILANG_H_
diff -uNr postgresql-6.5.1-orig/src/include/multilang.h~ postgresql-6.5.1/src/include/multilang.h~
--- postgresql-6.5.1-orig/src/include/multilang.h~	Thu Jan  1 08:00:00 1970
+++ postgresql-6.5.1/src/include/multilang.h~	Mon Jul 26 00:45:10 1999
@@ -0,0 +1,39 @@
+/* ---------------------------------------------------------------------------
+ * multilang.h
+ *
+ * This is a header file of PostgreSQL for support MultiLang via GNU Library
+ * C gettext() function. This file is written by 
+ * Cd Chen <cdchen@mail.cynix.com.tw>, 1999-07-30.
+ *
+ * $Author$
+ *
+ * $Date$
+ *
+ * $Id$
+ *
+ * --------------------------------------------------------------------------- */
+
+#ifndef _H_MULTILANG_H_
+#define _H_MULTILANG_H_
+
+#ifdef USE_MULTILANG
+#include <libintl.h>
+#define LOCALEDIR	"/usr/share/locale"
+#define _(String)	gettext (String)
+
+void
+InitMaltiLang(void)
+{
+  setlocale (LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain (PACKAGE);
+}
+
+
+#else
+#define _(String)	(String)
+#endif
+
+
+
+#endif _H_MULTILANG_H_
