diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp index c50595ca..fbb7f0e3 100755 --- a/amxmodx/amxmodx.cpp +++ b/amxmodx/amxmodx.cpp @@ -4431,6 +4431,14 @@ static cell AMX_NATIVE_CALL LookupLangKey(AMX *amx, cell *params) return 1; }; +// SetGlobalTransTarget(client) +static cell AMX_NATIVE_CALL SetGlobalTransTarget(AMX *amx, cell *params) +{ + g_langMngr.SetDefLang(params[1]); + + return 1; +}; + // has_map_ent_class(const classname[]) static cell AMX_NATIVE_CALL has_map_ent_class(AMX *amx, cell *params) { @@ -4629,6 +4637,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] = {"GetLangTransKey", GetLangTransKey}, {"LibraryExists", LibraryExists}, {"LookupLangKey", LookupLangKey}, + {"SetGlobalTransTarget", SetGlobalTransTarget}, {"PrepareArray", PrepareArray}, {"ShowSyncHudMsg", ShowSyncHudMsg}, {"is_rukia_a_hag", is_rukia_a_hag}, diff --git a/amxmodx/format.cpp b/amxmodx/format.cpp index 28543514..3332167d 100644 --- a/amxmodx/format.cpp +++ b/amxmodx/format.cpp @@ -650,16 +650,26 @@ reswitch: arg++; break; case 'L': + case 'l': { - CHECK_ARGS(1); - cell addr = params[arg++]; + cell target; + if (ch == 'L') + { + CHECK_ARGS(1); + target = params[arg++]; + } + else + { + CHECK_ARGS(0); + target = g_langMngr.GetDefLang(); + } int len; const char *key = get_amxstring(amx, params[arg++], 3, len); - const char *def = translate(amx, addr, key); + const char *def = translate(amx, target, key); if (!def) { static char buf[255]; - UTIL_Format(buf, sizeof(buf)-1, "ML_NOTFOUND: %s", key); + UTIL_Format(buf, sizeof(buf) - 1, "ML_NOTFOUND: %s", key); def = buf; } size_t written = atcprintf(buf_p, llen, def, amx, params, &arg); diff --git a/plugins/include/lang.inc b/plugins/include/lang.inc index fcd61edb..1bf1ebc7 100755 --- a/plugins/include/lang.inc +++ b/plugins/include/lang.inc @@ -60,3 +60,16 @@ native AddTranslation(const lang[3], TransKey:key, const phrase[]); * or LANG_SERVER */ native LookupLangKey(Output[], OutputSize, const Key[], &id); + +/** + * Sets the global language target. + * + * @note This is useful for creating functions + * that will be compatible with the %l format specifier. Note that invalid + * indexes can be specified but the error will occur during translation, + * not during this function call. + * + * @param client Client index or LANG_SERVER + * @noreturn + */ +native SetGlobalTransTarget(client);