diff --git a/xhost.c b/xhost.c
index a67d136..0e867b0 100644
--- a/xhost.c
+++ b/xhost.c
@@ -119,6 +119,11 @@ extern int getdomainname(char *name, size_t len);
 #endif
 #endif
 
+/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+#include <locale.h>	/* setlocale()  */
+#include <libintl.h>	/* gettext(), textdomain(), etc. */
+#include <stdlib.h>	/* getenv() */
+
 static int change_host(Display *dpy, char *name, Bool add);
 static const char *get_hostname(XHostAddress *ha);
 static int local_xerror(Display *dpy, XErrorEvent *rep);
@@ -171,15 +176,30 @@ main(int argc, char *argv[])
     Bool enabled = False;
     Display *dpy;
  
+    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+    char *domaindir;
+    setlocale(LC_ALL,"");
+    textdomain("xhost");
+    
+    /* mainly for debugging */
+    if((domaindir=getenv("TEXTDOMAINDIR")) == NULL) {
+	domaindir = "/usr/share/locale"; /*XLOCALEDIR;*/
+    }
+    bindtextdomain("xhost",domaindir);
+
+
     ProgramName = argv[0];
 
     if (argc == 2 && !strcmp(argv[1], "-help")) {
-	fprintf(stderr, "usage: %s [[+-]hostname ...]\n", argv[0]);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf(stderr, gettext("usage: %s [[+-]hostname ...]\n"), argv[0]);
 	exit(1);
     }
 
     if ((dpy = XOpenDisplay(NULL)) == NULL) {
-	fprintf(stderr, "%s:  unable to open display \"%s\"\n",
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf(stderr,
+		gettext("%s:  unable to open display \"%s\"\n"),
 		ProgramName, XDisplayName (NULL));
 	exit(1);
     }
@@ -191,9 +211,11 @@ main(int argc, char *argv[])
 	sethostent(1);		/* don't close the data base each time */
 	list = XListHosts(dpy, &nhosts, &enabled);
 	if (enabled)
-	    printf ("access control enabled, only authorized clients can connect\n");
+	    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	    printf (gettext("access control enabled, only authorized clients can connect\n"));
 	else
-	    printf ("access control disabled, clients can connect from any host\n");
+	    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	    printf (gettext("access control disabled, clients can connect from any host\n"));
 
 	if (nhosts != 0) {
 	    for (i = 0; i < nhosts; i++ )  {
@@ -222,16 +244,18 @@ main(int argc, char *argv[])
 			printf("SI:");
 			break;
 		    default:
-			printf("<unknown family type %d>:", list[i].family);
+			printf(gettext("<unknown family type %d>:"), list[i].family);
 			break;
 		    }
 		    printf ("%s", hostname);
 		} else {
-		    printf ("<unknown address in family %d>",
+		    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		    printf (gettext("<unknown address in family %d>"),
 			    list[i].family);
 		}
 		if (nameserver_timedout) {
-		    printf("\t(no nameserver response within %d seconds)\n",
+		    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		    printf(gettext("\t(no nameserver response within %d seconds)\n"),
 			   NAMESERVER_TIMEOUT);
 		    nameserver_timedout = 0;
 		} else
@@ -248,26 +272,30 @@ main(int argc, char *argv[])
 	if (*arg == '-') {
 	    
 	    if (!argv[i][1] && ((i+1) == argc)) {
-		printf ("access control enabled, only authorized clients can connect\n");
+		/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		printf (gettext("access control enabled, only authorized clients can connect\n"));
 		XEnableAccessControl(dpy);
 	    } else {
 		arg = argv[i][1]? &argv[i][1] : argv[++i];
 		if (!change_host (dpy, arg, False)) {
-		    fprintf (stderr, "%s:  bad hostname \"%s\"\n",
+		    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		    fprintf (stderr, gettext("%s:  bad hostname \"%s\"\n"),
 			     ProgramName, arg);
 		    nfailed++;
 		}
 	    }
 	} else {
 	    if (*arg == '+' && !argv[i][1] && ((i+1) == argc)) {
-		printf ("access control disabled, clients can connect from any host\n");
+		/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		printf (gettext("access control disabled, clients can connect from any host\n"));
 		XDisableAccessControl(dpy);
 	    } else {
 		if (*arg == '+') {
 		    arg = argv[i][1]? &argv[i][1] : argv[++i];
 		}
 		if (!change_host (dpy, arg, True)) {
-		    fprintf (stderr, "%s:  bad hostname \"%s\"\n",
+		    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		    fprintf (stderr, gettext("%s:  bad hostname \"%s\"\n"),
 			     ProgramName, arg);
 		    nfailed++;
 		}
@@ -308,12 +336,14 @@ change_host(Display *dpy, char *name, Bool add)
 #endif
 #endif
     char *cp;
-    static const char *add_msg = "being added to access control list";
-    static const char *remove_msg = "being removed from access control list";
+    const char *add_msg = gettext("being added to access control list");
+    const char *remove_msg = gettext("being removed from access control list");
 
     namelen = strlen(name);
     if ((lname = (char *)malloc(namelen+1)) == NULL) {
-	fprintf (stderr, "%s: malloc bombed in change_host\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: malloc bombed in change_host\n"),
+		 ProgramName);
 	exit (1);
     }
     for (i = 0; i < namelen; i++) {
@@ -325,7 +355,8 @@ change_host(Display *dpy, char *name, Bool add)
 	family = FamilyInternet;
 	name += 5;
 #else
-	fprintf (stderr, "%s: not compiled for TCP/IP\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for TCP/IP\n"), ProgramName);
 	free(lname);
 	return 0;
 #endif
@@ -335,7 +366,8 @@ change_host(Display *dpy, char *name, Bool add)
 	family = FamilyInternet6;
 	name += 6;
 #else
-	fprintf (stderr, "%s: not compiled for IPv6\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for IPv6\n"), ProgramName);
 	free(lname);
 	return 0;
 #endif
@@ -347,14 +379,16 @@ change_host(Display *dpy, char *name, Bool add)
 	family = FamilyInternet6;
 	name += 7;
 #else
-	fprintf (stderr, "%s: not compiled for IPv6\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for IPv6\n"), ProgramName);
 	free(lname);
 	return 0;
 #endif
     }
 #endif /* ACCEPT_INETV6 */
     else if (!strncmp("dnet:", lname, 5)) {
-	fprintf (stderr, "%s: not compiled for DECnet\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for DECnet\n"), ProgramName);
 	free(lname);
 	return 0;
     }
@@ -363,7 +397,8 @@ change_host(Display *dpy, char *name, Bool add)
 	family = FamilyNetname;
 	name += 4;
 #else
-	fprintf (stderr, "%s: not compiled for Secure RPC\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for Secure RPC\n"), ProgramName);
 	free(lname);
 	return 0;
 #endif
@@ -373,7 +408,8 @@ change_host(Display *dpy, char *name, Bool add)
 	family = FamilyKrb5Principal;
 	name +=4;
 #else
-	fprintf (stderr, "%s: not compiled for Kerberos 5\n", ProgramName);
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	fprintf (stderr, gettext("%s: not compiled for Kerberos 5\n"), ProgramName);
 	free(lname);
 	return 0;
 #endif
@@ -386,11 +422,22 @@ change_host(Display *dpy, char *name, Bool add)
 	name += 3;
     }
     if (family == FamilyWild && (cp = strchr(lname, ':'))) {
-	*cp = '\0';
-	fprintf (stderr, "%s: unknown address family \"%s\"\n",
-		 ProgramName, lname);
-	free(lname);
-	return 0;
+#ifdef IPv6
+	/*
+	 * Check to see if inet_pton() can grok it as an IPv6 address
+	 */
+	if (inet_pton(AF_INET6, lname, &addr6.s6_addr) == 1) {
+	    family = FamilyInternet6;
+	} else
+#endif
+	{
+	    *cp = '\0';
+	    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	    fprintf (stderr, gettext("%s: unknown address family \"%s\"\n"),
+		     ProgramName, lname);
+	    free(lname);
+	    return 0;
+	}
     }
     free(lname);
 
@@ -400,8 +447,8 @@ change_host(Display *dpy, char *name, Bool add)
 
 	cp = strchr(name, ':');
 	if (cp == NULL || cp == name) {
-	    fprintf(stderr, 
-	   "%s: type must be specified for server interpreted family \"%s\"\n",
+	    fprintf(stderr, gettext(
+	  "%s: type must be specified for server interpreted family \"%s\"\n"),
 	      ProgramName, name);
 	    return 0;
 	}
@@ -429,7 +476,8 @@ change_host(Display *dpy, char *name, Bool add)
 	retval = krb5_parse_name(name, &princ);
 	if (retval) {
 	    krb5_init_ets();	/* init krb errs for error_message() */
-	    fprintf(stderr, "%s: cannot parse Kerberos name: %s\n",
+	    /* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+	    fprintf(stderr, gettext("%s: cannot parse Kerberos name: %s\n"),
 		    ProgramName, error_message(retval));
 	    return 0;
 	}
@@ -456,7 +504,7 @@ change_host(Display *dpy, char *name, Bool add)
 	    XAddHost(dpy, &ha);
 	else
 	    XRemoveHost(dpy, &ha);
-	printf( "non-network local connections %s\n", add ? add_msg : remove_msg);
+	printf( gettext("non-network local connections %s\n"), add ? add_msg : remove_msg);
 	return 1;
     }
     /*
@@ -475,12 +523,14 @@ change_host(Display *dpy, char *name, Bool add)
 	    *cp = '\0';
 	    pwd = getpwnam(name);
 	    if (!pwd) {
-		fprintf(stderr, "no such user \"%s\"\n", name);
+		/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		fprintf(stderr, gettext("no such user \"%s\"\n"), name);
 		return 0;
 	    }
 	    getdomainname(domainname, sizeof(domainname));
 	    if (!user2netname(username, pwd->pw_uid, domainname)) {
-		fprintf(stderr, "failed to get netname for \"%s\"\n", name);
+		/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
+		fprintf(stderr, gettext("failed to get netname for \"%s\"\n"), name);
 		return 0;
 	    }
 	    netname = username;
@@ -587,8 +637,11 @@ change_host(Display *dpy, char *name, Bool add)
 		familyMsg = "inet ";
 	    }
 
-	    fprintf(stderr, "%s: unable to get %saddress for \"%s\"\n",
-		ProgramName, familyMsg, name);
+	    /* L10N_Comments - Parts composed to make full error string
+	       'unable to get' ['inet'|'inetv6'|''] 'address for' <address> */
+	    fprintf (stderr, "%s:  %s %s%s \"%s\"\n", ProgramName, 
+	      gettext("unable to get"), familyMsg, gettext("address for"), 
+	      name);
 	}
 	freeaddrinfo(addresses);
 	return 1;
@@ -824,14 +877,16 @@ static int
 local_xerror(Display *dpy, XErrorEvent *rep)
 {
     if ((rep->error_code == BadAccess) && (rep->request_code == X_ChangeHosts)) {
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
 	fprintf (stderr, 
-		 "%s:  must be on local machine to add or remove hosts.\n",
+		 gettext("%s:  must be on local machine to add or remove hosts.\n"),
 		 ProgramName);
 	return 1;
     } else if ((rep->error_code == BadAccess) && 
 	       (rep->request_code == X_SetAccessControl)) {
+	/* Internationalize messages for bug 4256527... S Swales 5/25/00 */
 	fprintf (stderr, 
-	"%s:  must be on local machine to enable or disable access control.\n",
+		 gettext("%s:  must be on local machine to enable or disable access control.\n"),
 		 ProgramName);
 	return 1;
     } else if ((rep->error_code == BadValue) && 
