Module:Sandbox: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(29 intermediate revisions by 4 users not shown)
Line 1: Line 1:
local p = {}
This page is protected from editing. Please see [[Deadlock:User pages]].
local util_module = require("Module:Utilities")
local lang_codes_set = mw.loadJsonData("Data:LangCodes.json")
local dictionary_module = require("Module:Dictionary")
 
-- Overrides applied to searches by key. Designed to handle edge cases where
-- the expected key does not have a localization entry
local KEY_OVERRIDES = {
    MoveSlowPercent_label = 'MovementSlow_label',
    BonusHealthRegen_label = 'HealthRegen_label',
    BarbedWireRadius_label = 'Radius_label',
    BarbedWireDamagePerMeter_label = 'DamagePerMeter_label',
    BuildUpDuration_label = 'BuildupDuration_label',
    TechArmorDamageReduction_label = 'TechArmorDamageReduction_Label',
    DamageAbsorb_label = 'DamageAbsorb_Label',
    InvisRegen_label = 'InvisRegen_Label',
    EvasionChance_label = 'EvasionChance_Label',
    DelayBetweenShots_label = 'DelayBetweenShots_Label',
}
 
function get_lang_file(lang_code)
    local file_name = string.format("Data:Lang_%s.json", lang_code)
    local success, data = pcall(mw.loadJsonData, file_name)
    if success then
        return data
    else
        return nil
    end
end
 
-- Get a localized string by the raw key
p.get_string = function(key, lang_code_override, fallback_str, remove_var_index)
    -- If called internally (direct Lua call), args will be passed directly.
    -- If called from wikitext, `key` will be the `frame` object, and we get args from `frame.args`.
 
    -- Handle the case where it's called via #invoke (i.e., from wikitext)
    if type(key) == "table" and key.args then
        local frame = key
        key = frame.args[1]
        lang_code_override = frame.args["lang_code_override"]
        fallback_str = frame.args["fallback_str"]
        remove_var_index = frame.args["remove_var_index"]
    end
 
    -- Determine lang_code if not overridden
    local lang_code = lang_code_override
    if (lang_code == '' or lang_code == nil) then
        lang_code = get_lang_code()
    end
 
    -- Retrieve lang data
    local data = get_lang_file(lang_code)
    if (data == nil) then
        return string.format("Lang code '%s' does not have a json file", lang_code)   
    end
   
    -- Localize
    local label = data[KEY_OVERRIDES[key] or key]
    if (label == nil) then
        -- Apply fallback
        local fallback_tooltip = mw.getCurrentFrame():expandTemplate{title = "MissingValveTranslationTooltip"}
        local fallback
        if (fallback_str == 'en') then
            fallback = p.get_string(key, 'en', key .. fallback_tooltip, remove_var_index, upper_lower)
        elseif fallback_str == 'dictionary' then
            return dictionary_module.translate(key, lang_code_override)
        elseif fallback_str ~= nil then
            fallback = fallback_str
        else
            return ''
        end
        return fallback .. fallback_tooltip
    end
   
    -- Apply remove_var
    if (remove_var_index ~= nil) then
        label = util_module.remove_var(label, remove_var_index)
    end
   
    -- Replace \"n with newline characters
    label = label:gsub('\\"n', '\n')
   
    return label
end
 
-- Search for a localized string using its English label
p.search_string = function(frame)
    local label = frame.args[1]
    local lang_code_override = frame.args[2]
 
    return p._search_string(label, lang_code_override)
end
 
-- search_string, but for internal use by other modules
p._search_string = function(label, lang_code_override)
    lang_code = lang_code_override
    if (lang_code == '' or lang_code == nil) then
        lang_code = get_lang_code()
    end
 
    -- Load the language files
    local data_en = get_lang_file('en')  -- English data
    local data_lang = get_lang_file(lang_code)  -- Target language data
 
    if (data_lang == nil) then
        error("Lang code '%s' does not have a json file", lang_code)   
    end
   
    -- Search for the key in the English data
    local key = nil
    for k, v in pairs(data_en) do
        if v == label then
            key = k  -- Find the key corresponding to the label
            break
        end
    end
 
    -- Default to input label if localized string is not found
    if (key == nil) then
        return label
    end
    if (data_lang[key] == nil) then
        return label
    end
 
    -- Replace \"n with newline characters in the result
    local result = data_lang[key]
    result = result:gsub('\\"n', '\n')
   
    return result
end
 
function get_lang_code()
    local title = mw.title.getCurrentTitle()
    local lang_code = title.fullText:match(".*/(.*)$")
   
    if lang_code == nil or lang_codes_set[lang_code] == nil then
        return 'en'   
    end
       
    return lang_code
end
 
return p

Latest revision as of 21:01, 30 July 2026

This page is protected from editing. Please see Deadlock:User pages.