core/Translator.cpp
changeset 2042 4a2faafca477
parent 1952 b7aa2b626807
child 2279 d1d825f60854
     1.1 --- a/core/Translator.cpp	Fri May 09 08:22:39 2008 +0000
     1.2 +++ b/core/Translator.cpp	Sat May 10 09:23:55 2008 +0000
     1.3 @@ -38,9 +38,11 @@
     1.4  #include "sm_stringutil.h"
     1.5  #include "sourcemod.h"
     1.6  #include "PlayerManager.h"
     1.7 +#include "PhraseCollection.h"
     1.8 +#include "ShareSys.h"
     1.9  
    1.10  Translator g_Translator;
    1.11 -CPhraseFile *g_pCorePhrases = NULL;
    1.12 +IPhraseCollection *g_pCorePhrases = NULL;
    1.13  unsigned int g_pCorePhraseID = 0;
    1.14  
    1.15  struct trans_t
    1.16 @@ -663,7 +665,7 @@
    1.17   ** MAIN TRANSLATOR CODE **
    1.18   **************************/
    1.19  
    1.20 -Translator::Translator() : m_ServerLang(LANGUAGE_ENGLISH)
    1.21 +Translator::Translator() : m_ServerLang(SOURCEMOD_LANGUAGE_ENGLISH)
    1.22  {
    1.23  	m_pStringTab = new BaseStringTable(2048);
    1.24  	m_pLCodeLookup = sm_trie_create();
    1.25 @@ -727,11 +729,15 @@
    1.26  {
    1.27  	AddLanguage("en", "English");
    1.28  
    1.29 -	unsigned int id;
    1.30 +	g_pCorePhrases = CreatePhraseCollection();
    1.31 +	g_pCorePhrases->AddPhraseFile("core.phrases");
    1.32  
    1.33 -	id = FindOrAddPhraseFile("core.phrases.txt");
    1.34 -	g_pCorePhraseID = id;
    1.35 -	g_pCorePhrases = GetFileByIndex(id);
    1.36 +	g_ShareSys.AddInterface(NULL, this);
    1.37 +}
    1.38 +
    1.39 +void Translator::OnSourceModShutdown()
    1.40 +{
    1.41 +	g_pCorePhrases->Destroy();
    1.42  }
    1.43  
    1.44  bool Translator::GetLanguageByCode(const char *code, unsigned int *index)
    1.45 @@ -842,7 +848,7 @@
    1.46  		g_Logger.LogError("Server language was set to bad language \"%s\" -- reverting to English", m_InitialLang);
    1.47  
    1.48  		strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
    1.49 -		m_ServerLang = LANGUAGE_ENGLISH;
    1.50 +		m_ServerLang = SOURCEMOD_LANGUAGE_ENGLISH;
    1.51  	}
    1.52  
    1.53  	m_ServerLang = reinterpret_cast<unsigned int>(serverLang);
    1.54 @@ -936,61 +942,6 @@
    1.55  	return m_Files[index];
    1.56  }
    1.57  
    1.58 -size_t Translator::Translate(char *buffer, size_t maxlength, void **params, const Translation *pTrans)
    1.59 -{
    1.60 -	void *new_params[MAX_TRANSLATE_PARAMS];
    1.61 -
    1.62 -	/* Rewrite the parameter order */
    1.63 -	for (unsigned int i=0; i<pTrans->fmt_count; i++)
    1.64 -	{
    1.65 -		new_params[i] = params[pTrans->fmt_order[i]];
    1.66 -	}
    1.67 -
    1.68 -	return gnprintf(buffer, maxlength, pTrans->szPhrase, new_params);
    1.69 -}
    1.70 -
    1.71 -TransError Translator::CoreTransEx(CPhraseFile *pFile,
    1.72 -								   int client, 
    1.73 -								   char *buffer, 
    1.74 -								   size_t maxlength, 
    1.75 -								   const char *phrase, 
    1.76 -								   void **params, 
    1.77 -								   size_t *outlen)
    1.78 -{
    1.79 -	Translation trans;
    1.80 -	TransError err;
    1.81 -
    1.82 -	/* Using server lang temporarily until client lang stuff is implemented */
    1.83 -	if ((err = pFile->GetTranslation(phrase, m_ServerLang, &trans)) != Trans_Okay)
    1.84 -	{
    1.85 -		return err;
    1.86 -	}
    1.87 -
    1.88 -	size_t len = Translate(buffer, maxlength, params, &trans);
    1.89 -
    1.90 -	if (outlen)
    1.91 -	{
    1.92 -		*outlen = len;
    1.93 -	}
    1.94 -
    1.95 -	return Trans_Okay;
    1.96 -}
    1.97 -
    1.98 -TransError Translator::CoreTrans(int client, 
    1.99 -								  char *buffer, 
   1.100 -								  size_t maxlength, 
   1.101 -								  const char *phrase, 
   1.102 -								  void **params, 
   1.103 -								  size_t *outlen)
   1.104 -{
   1.105 -	if (!g_pCorePhrases)
   1.106 -	{
   1.107 -		return Trans_BadPhraseFile;
   1.108 -	}
   1.109 -
   1.110 -	return CoreTransEx(g_pCorePhrases, client, buffer, maxlength, phrase, params, outlen);
   1.111 -}
   1.112 -
   1.113  unsigned int Translator::GetServerLanguage()
   1.114  {
   1.115  	return m_ServerLang;
   1.116 @@ -1021,3 +972,105 @@
   1.117  
   1.118  	return true;
   1.119  }
   1.120 +
   1.121 +const char *Translator::GetInterfaceName()
   1.122 +{
   1.123 +	return SMINTERFACE_TRANSLATOR_NAME;
   1.124 +}
   1.125 +
   1.126 +unsigned int Translator::GetInterfaceVersion()
   1.127 +{
   1.128 +	return SMINTERFACE_TRANSLATOR_VERSION;
   1.129 +}
   1.130 +
   1.131 +IPhraseCollection *Translator::CreatePhraseCollection()
   1.132 +{
   1.133 +	return new CPhraseCollection();
   1.134 +}
   1.135 +
   1.136 +int Translator::SetGlobalTarget(int index)
   1.137 +{
   1.138 +	return g_SourceMod.SetGlobalTarget(index);
   1.139 +}
   1.140 +
   1.141 +int Translator::GetGlobalTarget() const
   1.142 +{
   1.143 +	return g_SourceMod.GetGlobalTarget();
   1.144 +}
   1.145 +
   1.146 +bool CoreTranslate(char *buffer, 
   1.147 +				   size_t maxlength,
   1.148 +				   const char *format,
   1.149 +				   unsigned int numparams,
   1.150 +				   size_t *pOutLength,
   1.151 +				   ...)
   1.152 +{
   1.153 +	va_list ap;
   1.154 +	unsigned int i;
   1.155 +	const char *fail_phrase;
   1.156 +	void *params[MAX_TRANSLATE_PARAMS];
   1.157 +
   1.158 +	if (numparams > MAX_TRANSLATE_PARAMS)
   1.159 +	{
   1.160 +		assert(false);
   1.161 +		return false;
   1.162 +	}
   1.163 +
   1.164 +	va_start(ap, pOutLength);
   1.165 +	for (i = 0; i < numparams; i++)
   1.166 +	{
   1.167 +		params[i] = va_arg(ap, void *);
   1.168 +	}
   1.169 +	va_end(ap);
   1.170 +
   1.171 +	if (!g_pCorePhrases->FormatString(buffer,
   1.172 +		maxlength, 
   1.173 +		format, 
   1.174 +		params,
   1.175 +		numparams,
   1.176 +		pOutLength,
   1.177 +		&fail_phrase))
   1.178 +	{
   1.179 +		if (fail_phrase != NULL)
   1.180 +		{
   1.181 +			g_Logger.LogError("[SM] Could not find core phrase: %s", fail_phrase);
   1.182 +		}
   1.183 +		else
   1.184 +		{
   1.185 +			g_Logger.LogError("[SM] Unknown fatal error while translating a core phrase.");
   1.186 +		}
   1.187 +
   1.188 +		return false;
   1.189 +	}
   1.190 +
   1.191 +	return true;
   1.192 +}
   1.193 +
   1.194 +bool Translator::FormatString(char *buffer,
   1.195 +							  size_t maxlength,
   1.196 +							  const char *format,
   1.197 +							  IPhraseCollection *pPhrases,
   1.198 +							  void **params,
   1.199 +							  unsigned int numparams,
   1.200 +							  size_t *pOutLength,
   1.201 +							  const char **pFailPhrase)
   1.202 +{
   1.203 +	unsigned int arg;
   1.204 +
   1.205 +	arg = 0;
   1.206 +	if (!gnprintf(buffer, maxlength, format, pPhrases, params, numparams, arg, pOutLength, pFailPhrase))
   1.207 +	{
   1.208 +		return false;
   1.209 +	}
   1.210 +
   1.211 +	if (arg != numparams)
   1.212 +	{
   1.213 +		if (pFailPhrase != NULL)
   1.214 +		{
   1.215 +			*pFailPhrase = NULL;
   1.216 +		}
   1.217 +		return false;
   1.218 +	}
   1.219 +
   1.220 +	return true;
   1.221 +}