Module:Lang

From Deadlock Wiki
Revision as of 12:09, 15 September 2024 by Saag (talk | contribs) (Created lang module for loading localized strings from their relevant json file)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

overview

Functions

get_string

Localizes a given string to the current language, i.e. Data:Lang_en.json for english.

Parameters

  • key - Key string to localize
  • lang_code_override (OPTIONAL) - Overrides the current language to a specific language code
  • fallback_str (OPTIONAL) - Passing en causes it to return the english localization if it can't be localized to the current language. Passing any other string causes it to return that string if it can't be localized. Both have Template:MissingValveTranslationTooltip appended. Use this very often as some keys are not yet localized in every language by the game. Passing dictionary causes it to return the translation via Data:Dictionary if it can't be localized. If parsing the fallback_str from lua and is computationally expensive (i.e. add_space_before_cap), consider using fallback outside this function so it only computes when needed.
  • remove_var_index (OPTIONAL) - Removes %variables% from the resulting string. -1 also removes the character prefixing %variables%, while 1 removes the postfixed character, and 0 removes only the %variables%.

NOTE: Optional parameters are ideally named when not all parameters are provided, though named parameters can only be passed by invoke, and not internal lua calls.

Examples

Invokes from wikitext:

{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:CitadelHeroStats_Weapon_Falloff.json' is not a valid JSON page).


{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff|lang_code_override=es}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:CitadelHeroStats_Weapon_Falloff.json' is not a valid JSON page).


Examples for fallback_str

{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:StatDesc_CritDamageBonusScale.json' is not a valid JSON page).


{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=en}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:StatDesc_CritDamageBonusScale.json' is not a valid JSON page).


{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=Crit Damage Bonus Scale}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:StatDesc_CritDamageBonusScale.json' is not a valid JSON page).


{{#invoke:Lang|get_string|Tech Items|fallback_str=dictionary}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:Tech Items.json' is not a valid JSON page).

Examples for remove_var_index

{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:Citadel_HeroBuilds_DefaultHeroBuild.json' is not a valid JSON page).

TODO: Debug why is =0 still removing that extra space? Doesn't matter yet I suppose, no use cases for 0 yet {{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=0}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:Citadel_HeroBuilds_DefaultHeroBuild.json' is not a valid JSON page).


{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=-1}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:Citadel_HeroBuilds_DefaultHeroBuild.json' is not a valid JSON page).


When calling by internal modules, the parameters cannot be named, and therefore have to be in order. Unused parameters before the last used parameter should be nil. Such as, .get_string('hero_atlas', nil, 'en')

search_string

Searches for the unlocalized key corresponding to a given english string, then localizes it to the current language. NOTE: Use sparingly, always use get_string instead where plausible, as it has time complexity O(1) compared to search_string's O(10,000).

Parameters

  • string - English string to search for

Examples

From wikitext:

{{#invoke:Lang|search_string|Abrams}}

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:Abrams.json' is not a valid JSON page).


local p = {}

function get_lang_file(lang_code)
	local data = mw.loadJsonData(string.format("Data:%s.json", lang_code))
	if (data == nil) then 
		return string.format("Language code '%s' not found") 
	end
end

-- Get a localized string by the raw key
p.get_string = function(frame)
	local lang_code = frame.args[1]
	local key = frame.args[2]
	local data = get_lang_file(lang_code)
	local label = data[key]
	if (label == nil) then 
		return string.format("Key '%s' not found", key) 
	end
	
	return label
end

-- Search for a localized string using its English label
p.search_string = function(frame)
	local lang_code = frame.args[1]
	local attr_key = frame.args[2]
	local data = get_lang_file(lang_code)
end

return p