about summary refs log tree commit diff
path: root/src/game/client/components
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-09-16 13:32:56 +0200
committeroy <Tom_Adams@web.de>2010-09-16 13:32:56 +0200
commit0905b7755d4d5da79144979ffae554476d44495f (patch)
tree0f2b1d0ce92de6e7e504a1e8b3aca1dd74fa26ac /src/game/client/components
parent9727cd25ec207c45fb1421efba9881c47cf25f43 (diff)
downloadzcatch-0905b7755d4d5da79144979ffae554476d44495f.tar.gz
zcatch-0905b7755d4d5da79144979ffae554476d44495f.zip
localised the language names. Closes #153
Diffstat (limited to 'src/game/client/components')
-rw-r--r--src/game/client/components/menus_settings.cpp59
1 files changed, 38 insertions, 21 deletions
diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp
index b4c82c63..33a5695a 100644
--- a/src/game/client/components/menus_settings.cpp
+++ b/src/game/client/components/menus_settings.cpp
@@ -3,8 +3,10 @@
 
 
 #include <engine/graphics.h>
+#include <engine/storage.h>
 #include <engine/textrender.h>
 #include <engine/shared/config.h>
+#include <engine/shared/linereader.h>
 
 #include <game/generated/protocol.h>
 #include <game/generated/client_data.h>
@@ -647,28 +649,43 @@ public:
 	bool operator<(const CLanguage &Other) { return m_Name < Other.m_Name; }
 };
 
-
-int fs_listdir(const char *pDir, FS_LISTDIR_CALLBACK cb, void *pUser);
-
-void GatherLanguages(const char *pName, int IsDir, void *pUser)
+void LoadLanguageIndexfile(IStorage *pStorage, IConsole *pConsole, sorted_array<CLanguage> *pLanguages)
 {
-	if(IsDir || pName[0] == '.')
+	IOHANDLE File = pStorage->OpenFile("data/languages/index.txt", IOFLAG_READ);
+	if(!File)
+	{
+		pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "localization", "couldn't open index file");
 		return;
-
-	sorted_array<CLanguage> &Languages = *((sorted_array<CLanguage> *)pUser);
-	char aFileName[128];
-	str_format(aFileName, sizeof(aFileName), "data/languages/%s", pName);
-
-	char NiceName[128];
-	str_format(NiceName, sizeof(NiceName), "%s", pName);
-	NiceName[0] = str_uppercase(NiceName[0]);
-
-
-	for(char *p = NiceName; *p; p++)
-		if(*p == '.')
-			*p = 0;
-
-	Languages.add(CLanguage(NiceName, aFileName));
+	}
+	
+	CLineReader LineReader;
+	LineReader.Init(File);
+	char *pLine;
+	while((pLine = LineReader.Get()))
+	{
+		if(!str_length(pLine) || pLine[0] == '#') // skip empty lines and comments
+			continue;
+			
+		char *pReplacement = LineReader.Get();
+		if(!pReplacement)
+		{
+			pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "localization", "unexpected end of index file");
+			break;
+		}
+		
+		if(pReplacement[0] != '=' || pReplacement[1] != '=' || pReplacement[2] != ' ')
+		{
+			char aBuf[128];
+			str_format(aBuf, sizeof(aBuf), "malform replacement for index '%s'", pLine);
+			pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "localization", aBuf);
+			continue;
+		}
+		
+		char aFileName[128];
+		str_format(aFileName, sizeof(aFileName), "data/languages/%s.txt", pLine);
+		pLanguages->add(CLanguage(pReplacement+3, aFileName));
+	}
+	io_close(File);
 }
 
 void CMenus::RenderSettingsGeneral(CUIRect MainView)
@@ -681,7 +698,7 @@ void CMenus::RenderSettingsGeneral(CUIRect MainView)
 	if(s_Languages.size() == 0)
 	{
 		s_Languages.add(CLanguage("English", ""));
-		fs_listdir("data/languages", GatherLanguages, &s_Languages);
+		LoadLanguageIndexfile(Storage(), Console(), &s_Languages);
 		for(int i = 0; i < s_Languages.size(); i++)
 			if(str_comp(s_Languages[i].m_FileName, g_Config.m_ClLanguagefile) == 0)
 			{