(svn r2777) -Feature: When starting without a config file determine the language on basis of the current locale
authortron
Mon, 01 Aug 2005 01:12:21 +0000
changeset 2257 9cf0a4b8eadb
parent 2256 1fb1e07b9768
child 2258 b7cf3b92ee49
(svn r2777) -Feature: When starting without a config file determine the language on basis of the current locale
strings.c
--- a/strings.c	Mon Aug 01 00:17:11 2005 +0000
+++ b/strings.c	Mon Aug 01 01:12:21 2005 +0000
@@ -1084,13 +1084,32 @@
 	int n;
 	int m;
 	int def;
+	int fallback;
 	LanguagePack hdr;
 	FILE *in;
 	char *files[32];
+	uint j;
+
+	char lang[] = "en";
+	static const char* env[] = {
+		"LANGUAGE",
+		"LC_ALL",
+		"LC_MESSAGES",
+		"LANG"
+	};
+
+	for (j = 0; j < lengthof(env); j++) {
+		const char* envlang = getenv(env[j]);
+		if (envlang != NULL) {
+			snprintf(lang, lengthof(lang), "%.2s", envlang);
+			break;
+		}
+	}
 
 	n = GetLanguageList(files, lengthof(files));
 
-	def = 0; // default language file
+	def = -1;
+	fallback = 0;
 
 	// go through the language files and make sure that they are valid.
 	for (i = m = 0; i != n; i++) {
@@ -1110,10 +1129,12 @@
 		dl->ent[m].file = files[i];
 		dl->ent[m].name = strdup(hdr.name);
 
-		if (strcmp(hdr.name, "English") == 0) def = m;
+		if (strcmp(hdr.name, "English") == 0) fallback = m;
+		if (strcmp(hdr.isocode, lang) == 0) def = m;
 
 		m++;
 	}
+	if (def == -1) def = fallback;
 
 	if (m == 0)
 		error(n == 0 ? "No available language packs" : "Invalid version of language packs");