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 +}