diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 1be891e86e2cc73835e9d76cebe40def4a3ef4ad..e3713cd64c89e54b46e2e118ff940cb8dfb07d29 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.148 2007/10/24 20:11:00 alvherre Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.149 2007/10/25 20:22:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -719,7 +719,7 @@ get_encoding_id(char *encoding_name)
 
 /*
  * Support for determining the best default text search configuration.
- * We key this off LC_CTYPE, after stripping its encoding indicator if any.
+ * We key this off the first part of LC_CTYPE (ie, the language name).
  */
 struct tsearch_config_match
 {
@@ -729,39 +729,37 @@ struct tsearch_config_match
 
 static const struct tsearch_config_match tsearch_config_languages[] =
 {
-	{"danish", "da_DK"},
-	{"danish", "Danish_Denmark"},
-	{"dutch", "nl_NL"},
-	{"dutch", "Dutch_Netherlands"},
+	{"danish", "da"},
+	{"danish", "Danish"},
+	{"dutch", "nl"},
+	{"dutch", "Dutch"},
 	{"english", "C"},
 	{"english", "POSIX"},
-	{"english", "en_US"},
-	{"english", "English_America"},
-	{"english", "en_UK"},
-	{"english", "English_Britain"},
-	{"finnish", "fi_FI"},
-	{"finnish", "Finnish_Finland"},
-	{"french", "fr_FR"},
-	{"french", "French_France"},
-	{"german", "de_DE"},
-	{"german", "German_Germany"},
-	{"hungarian", "hu_HU"},
-	{"hungarian", "Hungarian_Hungary"},
-	{"italian", "it_IT"},
-	{"italian", "Italian_Italy"},
-	{"norwegian", "no_NO"},
-	{"norwegian", "Norwegian_Norway"},
-	{"portuguese", "pt_PT"},
-	{"portuguese", "Portuguese_Portugal"},
-	{"romanian", "ro_RO"},
-	{"russian", "ru_RU"},
-	{"russian", "Russian_Russia"},
-	{"spanish", "es_ES"},
-	{"spanish", "Spanish_Spain"},
-	{"swedish", "sv_SE"},
-	{"swedish", "Swedish_Sweden"},
-	{"turkish", "tr_TR"},
-	{"turkish", "Turkish_Turkey"},
+	{"english", "en"},
+	{"english", "English"},
+	{"finnish", "fi"},
+	{"finnish", "Finnish"},
+	{"french", "fr"},
+	{"french", "French"},
+	{"german", "de"},
+	{"german", "German"},
+	{"hungarian", "hu"},
+	{"hungarian", "Hungarian"},
+	{"italian", "it"},
+	{"italian", "Italian"},
+	{"norwegian", "no"},
+	{"norwegian", "Norwegian"},
+	{"portuguese", "pt"},
+	{"portuguese", "Portuguese"},
+	{"romanian", "ro"},
+	{"russian", "ru"},
+	{"russian", "Russian"},
+	{"spanish", "es"},
+	{"spanish", "Spanish"},
+	{"swedish", "sv"},
+	{"swedish", "Swedish"},
+	{"turkish", "tr"},
+	{"turkish", "Turkish"},
 	{NULL, NULL}				/* end marker */
 };
 
@@ -777,15 +775,15 @@ find_matching_ts_config(const char *lc_type)
 			   *ptr;
 
 	/*
-	 * Convert lc_ctype to a language name by stripping ".utf8", "@euro", or
-	 * what-have-you
+	 * Convert lc_ctype to a language name by stripping everything after
+	 * an underscore.  Just for paranoia, we also stop at '.' or '@'.
 	 */
 	if (lc_type == NULL)
 		langname = xstrdup("");
 	else
 	{
 		ptr = langname = xstrdup(lc_type);
-		while (*ptr && *ptr != '.' && *ptr != '@')
+		while (*ptr && *ptr != '_' && *ptr != '.' && *ptr != '@')
 			ptr++;
 		*ptr = '\0';
 	}