diff options
| author | oy <Tom_Adams@web.de> | 2010-09-16 13:32:56 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-09-16 13:32:56 +0200 |
| commit | 0905b7755d4d5da79144979ffae554476d44495f (patch) | |
| tree | 0f2b1d0ce92de6e7e504a1e8b3aca1dd74fa26ac /src/game/client | |
| parent | 9727cd25ec207c45fb1421efba9881c47cf25f43 (diff) | |
| download | zcatch-0905b7755d4d5da79144979ffae554476d44495f.tar.gz zcatch-0905b7755d4d5da79144979ffae554476d44495f.zip | |
localised the language names. Closes #153
Diffstat (limited to 'src/game/client')
| -rw-r--r-- | src/game/client/components/menus_settings.cpp | 59 |
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) { |