Exemple #1
0
const char *translate(AMX *amx, const char *lang, const char *key)
{
	auto pLangName = lang;
	int status;

	if (!pLangName || !isalpha(pLangName[0]))
	{
		pLangName = amxmodx_language->string;
	}

	auto def = g_langMngr.GetDef(pLangName, key, status);

	if (!amx_mldebug)
	{
		amx_mldebug = CVAR_GET_POINTER("amx_mldebug");
	}

	auto debug = (amx_mldebug && amx_mldebug->string && (amx_mldebug->string[0] != '\0'));

	if (debug)
	{
		int debug_status;
		auto validlang = true;
		auto testlang = amx_mldebug->string;

		if (!g_langMngr.LangExists(testlang))
		{
			AMXXLOG_Error("[AMXX] \"%s\" is an invalid debug language", testlang);
			validlang = false;
		}

		g_langMngr.GetDef(testlang, key, debug_status);

		if (validlang && debug_status == ERR_BADKEY)
		{
			AMXXLOG_Error("[AMXX] Language key \"%s\" not found for language \"%s\", check \"%s\"", key, testlang, GetFileName(amx));
		}
	}

	if (!def)
	{
		if (debug && status == ERR_BADLANG)
		{
			ke::AString langName(pLangName);

			auto &err = BadLang_Table.AltFindOrInsert(ke::Move(langName));

			if (err.last + 120.0f < gpGlobals->time)
			{
				AMXXLOG_Error("[AMXX] Language \"%s\" not found", pLangName);
				err.last = gpGlobals->time;
			}
		}

		if (strcmp(pLangName, amxmodx_language->string) != 0)
		{
			def = g_langMngr.GetDef(amxmodx_language->string, key, status);
		}

		if (!def && (strcmp(pLangName, "en") != 0 && strcmp(amxmodx_language->string, "en") != 0))
		{
			def = g_langMngr.GetDef("en", key, status);
		}
	}

	return def;
}