int main(int argc, const char **argv) { char szCmdLine[1024]; char *pszStart = szCmdLine; char * const pszEnd = szCmdLine + Q_ARRAYSIZE(szCmdLine); *szCmdLine = '\0'; for ( int i = 1; i < argc; i++ ) { const char *parm = argv[i]; while ( *parm && (pszStart < pszEnd) ) { *pszStart++ = *parm++; } if ( pszStart >= pszEnd ) break; if ( i < argc-1 ) *pszStart++ = ' '; } szCmdLine[Q_ARRAYSIZE(szCmdLine) - 1] = '\0'; return RealMain( szCmdLine, 0, 0 ); }
//----------------------------------------------------------------------------- // Purpose: find the language by ICU short code //----------------------------------------------------------------------------- ELanguage PchLanguageICUCodeToELanguage( const char *pchICUCode, ELanguage eDefault ) { Assert( Q_ARRAYSIZE(s_LanguageNames) == k_Lang_MAX + 1 ); if ( !pchICUCode ) return eDefault; // Match to no more than the param length so either a short 'en' or // full 'zh-Hant' can match int nLen = Q_strlen( pchICUCode ); // we only have 5 character ICU codes so this should be enough room char rchCleanedCode[ 6 ]; Q_strncpy( rchCleanedCode, pchICUCode, Q_ARRAYSIZE( rchCleanedCode ) ); if( nLen >= 3 && rchCleanedCode[ 2 ] == '-' ) { rchCleanedCode[ 2 ] = '_'; } for ( uint iLang = 0; iLang < Q_ARRAYSIZE(s_LanguageNames); ++iLang ) { if ( !Q_strnicmp( rchCleanedCode, s_LanguageNames[iLang].m_pchICUName, nLen ) ) { return s_LanguageNames[iLang].m_ELanguage; } } // return default return eDefault; }
//----------------------------------------------------------------------------- // Purpose: find the language by name //----------------------------------------------------------------------------- ELanguage PchLanguageToELanguage( const char *pchShortName, ELanguage eDefault ) { Assert( Q_ARRAYSIZE(s_LanguageNames) == k_Lang_MAX + 1 ); if ( !pchShortName ) return eDefault; for ( uint iLang = 0; iLang < Q_ARRAYSIZE(s_LanguageNames); ++iLang ) { if ( !Q_stricmp( pchShortName, s_LanguageNames[iLang].m_pchShortName ) ) { return s_LanguageNames[iLang].m_ELanguage; } } // return default return eDefault; }
//----------------------------------------------------------------------------- // Purpose: translate language enum into closests windows language code ID //----------------------------------------------------------------------------- int GetLanguageCodeID(ELanguage eLang) { for ( uint iLang = 0; iLang < Q_ARRAYSIZE(s_LanguageNames); ++iLang ) { if ( s_LanguageNames[iLang].m_ELanguage == eLang ) return s_LanguageNames[iLang].m_LanguageCodeID; } // default to English return 1033; }
//----------------------------------------------------------------------------- // Purpose: return the short string name used for this language by SteamUI //----------------------------------------------------------------------------- const char *GetLanguageVGUILocalization( ELanguage eLang ) { COMPILE_TIME_ASSERT( Q_ARRAYSIZE(s_LanguageNames) == k_Lang_MAX + 1 ); if ( s_LanguageNames[ eLang + 1 ].m_ELanguage == eLang ) { Assert( eLang + 1 < ARRAYSIZE(s_LanguageNames) ); return s_LanguageNames[ eLang + 1 ].m_pchVGUILocalizationName; } Assert( !"enum ELanguage order mismatched from Language_t s_LanguageNames, fix it!" ); return s_LanguageNames[0].m_pchVGUILocalizationName; }