Editing Module:Lang/doc

Warning: You are not logged in. Once you make an edit, a temporary account will be created for you. Learn more. Log in or create an account to continue receiving notifications after this account expires, and to access other features.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
=Overview=
==Overview==
This module serves as the primary interface for retrieving and formatting localized game text from the <code>Data:Lang_*.json</code> files. It handles variable substitution by fetching data from [[Module:ItemData]], automatically applies rich text formatting for game-specific keywords (adding icons, colors, and links), and provides robust fallback mechanisms for missing translations.
overview


=Functions=
==Functions==
==get_string==
===get_string===
Localizes a given string key to the current language, i.e. [[Data:Lang_en.json]] for English. This function also automatically processes game-specific formatting tags (see "Automatic Text Formatting" section below).
Localizes a given string to the current language, i.e. [[Data:Lang_en.json]] for english


Note: If you need to get a string that uses a value referenced from another Data page, pass the <code>item_name</code> parameter to <code>get_string</code>.
====Parameters====
* '''string''' - String to localize


===Parameters===
====Examples====
* '''key''' - Key string to localize.
From wikitext:<br>
* '''lang_code_override''' (OPTIONAL) - Overrides the current language to a specific language code.
* '''fallback_str''' (OPTIONAL) - Specifies behavior when a key is not found in the target language.
** Passing <code>en</code> causes it to return the English localization.
** Passing any other string causes it to return that string.
** Both of the above options have [[Template:MissingValveTranslationTooltip]] appended.
** Passing <code>dictionary</code> causes it to return a translation via [[Module:Dictionary]] without the tooltip.
** Use this often, as some keys are not yet localized in every language by the game. If parsing the fallback_str from Lua is computationally expensive, consider using the 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%.
* '''item_name''' (OPTIONAL) - Required for strings containing <code>{s:variable}</code> placeholders. It will fetch the corresponding property from [[Module:ItemData]] to fill in the variable.


NOTE: When calling from wikitext via #invoke, parameters can be named. When calling from another Lua module, parameters must be passed in order (e.g., <code>p.get_string(key, nil, 'en')</code>).
<pre>{{#invoke:Lang|get_string|hero_atlas}}</pre>
{{#invoke:Lang|get_string|hero_atlas}}


===Internal Logic & Fallbacks===
The function includes several automatic behaviors to handle inconsistencies in the source data:
* '''Key Overrides:''' It checks a hardcoded list of overrides for known edge cases. For example, if the key <code>MoveSlowPercent_label</code> is requested, the module will internally use the value for <code>MovementSlow_label</code> to handle this known inconsistency.
* '''Post-value Label Fallback:''' If a key ending in <code>_label</code> is not found, it will automatically try again with a key ending in <code>_postvalue_label</code>.
* '''String Parsing:''' If a retrieved string contains <code>|</code> or <code>#</code>, the function will automatically use only the text that comes after the final instance of that character.
===Examples===
Invokes from wikitext:<br>
<code><nowiki>{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff}}</nowiki></code>


<pre>{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff}}</pre>
{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff}}
{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff}}


===search_string===
Searches for the unlocalized key corresponding to a given english string, then localizes it to the current language


<code><nowiki>{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff|lang_code_override=es}}</nowiki></code>
====Parameters====
 
* '''string''' - English string to search for
{{#invoke:Lang|get_string|CitadelHeroStats_Weapon_Falloff|lang_code_override=es}}
 
====Strings with Variables====
For strings containing <code>{s:variable}</code>, provide the <code>item_name</code>:
 
'''Example:'''
<code><nowiki>{{#invoke:Lang|get_string|upgrade_target_stun_desc|item_name=Knockdown}}</nowiki></code>
→ {{#invoke:Lang|get_string|upgrade_target_stun_desc|item_name=Knockdown}}
 
Without <code>item_name</code>, variables won't be filled:
<code><nowiki>{{#invoke:Lang|get_string|upgrade_target_stun_desc}}</nowiki></code>
→ {{#invoke:Lang|get_string|upgrade_target_stun_desc}}
 
 
===Examples for fallback_str===
<code><nowiki>{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es}}</nowiki></code>
 
{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es}}


 
====Examples====
<code><nowiki>{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=en}}</nowiki></code>
 
{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=en}}
 
 
<code><nowiki>{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=Crit Damage Bonus Scale}}</nowiki></code>
 
{{#invoke:Lang|get_string|StatDesc_CritDamageBonusScale|lang_code_override=es|fallback_str=Crit Damage Bonus Scale}}
 
 
<code><nowiki>{{#invoke:Lang|get_string|Tech Items|fallback_str=dictionary}}</nowiki></code>
 
{{#invoke:Lang|get_string|Tech Items|fallback_str=dictionary}}
 
===Examples for remove_var_index===
<code><nowiki>{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild}}</nowiki></code>
 
{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild}}
 
<i>TODO: Debug why is =0 still removing that extra space? Doesn't matter yet I suppose, no use cases for 0 yet</i>
<code><nowiki>{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=0}}</nowiki></code>
 
{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=0}}
 
 
<code><nowiki>{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=-1}}</nowiki></code>
 
{{#invoke:Lang|get_string|Citadel_HeroBuilds_DefaultHeroBuild|remove_var_index=-1}}
 
==Automatic Text Formatting==
When a string is retrieved by <code>get_string</code>, it undergoes several automatic transformations to convert in-game formatting tags into rich wikitext.
* '''Newlines:''' <code>"n</code> is converted to a line break (<code><br/></code>).
* '''HTML Spans:''' Tags like <code><span class="highlight_spirit">...</span></code> are converted into styled text (e.g., bolded and colored purple).
* '''Game Attribute Icons:''' Special tags like <code><Panel class="AbilityPropertyIcon prop_cooldown"></code> or <code>{g:citadel_inline_attribute:'SpiritDamage'}</code> are replaced with formatted wikitext that includes an icon, a colored label, and a wiki link. If a keyword is not recognized, it will be highlighted in red.
* '''Keybinds:''' Tags like <code>{g:citadel_binding:'Ability1'}</code> are replaced with their respective text string (e.g., '''Ability 1'''). A replacement can be added to the list in case of tags that don't match their string name (e.g. <code>AltCast</code> > <code>alt_cast</code>). The module also cleans up spacing around these replacements for better readability. (Note: If we want to add additional text to the string like "[Ability] button" this needs to be supported by localizations)
 
==search_string==
Searches for the unlocalized key corresponding to a given English string, then localizes it to the current language. NOTE: Use sparingly. This function is much slower than <code>get_string</code> and should be avoided when the key is known. For use in other Lua modules, see <code>_search_string</code>.
 
===Parameters===
* '''string''' - English string to search for.
* '''lang_code_override''' (OPTIONAL) - Overrides the current language to a specific language code.
 
===Examples===
From wikitext:<br>
From wikitext:<br>


<pre>{{#invoke:Lang|search_string|Abrams}}</pre>
<pre>{{#invoke:Lang|get_string|Abrams}}</pre>
{{#invoke:Lang|search_string|Abrams}}
{{#invoke:Lang|search_string|Abrams}}
==_search_string==
This is the internal version of <code>search_string</code>, intended for use by other Lua modules. It provides the core search logic without the wikitext frame overhead or final text processing.
NOTE: This function returns the raw localized string. Unlike the invoked <code>search_string</code>, it does '''not''' process newlines (<code>"n</code>). The calling module is responsible for any further processing.
===Parameters===
* '''label''' (string) - The English string to search for.
* '''lang_code_override''' (string, optional) - The language code to translate to.
===Example (from another Lua module)===
<pre>
local lang_module = require("Module:Lang")
-- Searches for the Spanish localization of the string "Abrams"
local localized_name = lang_module._search_string("Abrams", "es")
</pre>
==get_lang_code==
Outputs the language subpage of the current page (e.g., "en", "es"). Defaults to "en" if the page is not a language subpage.
<pre>{{#invoke:Lang|get_lang_code}}</pre>
{{#invoke:Lang|get_lang_code}}
Please note that all contributions to The Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see Deadlock:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template