int LoadStrFiles(char* language) { char buf[256]; sprintf_s(buf, sizeof(buf), "%s/localizedstrings/", language); int count; char** list = FS_ListFiles(buf, "str", 0, &count); for(int i = 0;i < count;i++) { sprintf_s(buf, sizeof(buf), "%s/localizedstrings/%s", language, list[i]); Com_Printf(0, "Parsing localized string file: %s\n", buf); char* Error = SE_Load(buf, 0); if(Error) Com_Printf(0, "Error parsing localized string file: %s\n", Error); } FS_FreeFileList(list); return count; }
void SE_Init( void ) { char **fileList; int numFiles, i; char title[MAX_QPATH]; se_debug = Cvar_Get( "se_debug", "0", CVAR_TEMP ); se_language = Cvar_Get( "se_language", "english", CVAR_ARCHIVE|CVAR_NORESTART ); fileList = FS_ListFiles( "strings/english", ".str", &numFiles ); if( numFiles > 128 ) numFiles = 128; for ( i = 0; i < numFiles; i++ ) { COM_StripExtension( fileList[i], title, MAX_QPATH ); Q_strupr( title ); SE_Load( title, va( "strings/english/%s", fileList[i] ) ); } }
// returns error message else NULL for ok. // // Any errors that result from this should probably be treated as game-fatal, since an asset file is fuxored. // const char *SE_LoadLanguage( const char *psLanguage, SE_BOOL bLoadDebug /* = SE_TRUE */ ) { const char *psErrorMessage = NULL; if (psLanguage && psLanguage[0]) { SE_NewLanguage(); std::string strResults; /*int iFilesFound = */SE_BuildFileList( #ifdef _STRINGED va("C:\\Source\\Tools\\StringEd\\test_data\\%s",sSE_STRINGS_DIR) #else sSE_STRINGS_DIR #endif , strResults ); const char *p; while ( (p=SE_GetFoundFile (strResults)) != NULL && !psErrorMessage ) { const char *psThisLang = TheStringPackage.ExtractLanguageFromPath( p ); if ( !Q_stricmp( psLanguage, psThisLang ) ) { psErrorMessage = SE_Load( p, bLoadDebug ); } } } else { __ASSERT( 0 && "SE_LoadLanguage(): Bad language name!" ); } return psErrorMessage; }
void SELoadLanguageHookStub() { _localizedStrings.clear(); //get language from loc_modLanguage dvar_t* modLang = Dvar_FindVar("loc_modLanguage"); char** enumList = *(char***)&(modLang->max); //not sure if this is really dvar_maxmin_t max. char* language = enumList[modLang->current.integer]; //'official' iw4m localized strings isW2Strings = true; SE_Load("localizedstrings/w2.str", 0); isW2Strings = false; if(LoadStrFiles(language)==0) LoadStrFiles("english");//load english str files if there aren't any of selected language __asm { leave mov eax, 0x41D885 //back to SE_LoadLanguage jmp eax } }