Módulo:Character.i18n

De Wiki Gla
Ir para navegação Ir para pesquisar

A documentação para este módulo pode ser criada em Módulo:Character.i18n/doc

-- Módulo:Character.i18n — constantes e funções de internacionalização
local M = {}

--------------------------------------------------------------------------------
-- I18N: rótulos de atributos + "Nível"
--------------------------------------------------------------------------------

M.ATTR_I18N = {
    pt = {
        cooldown = "Recarga:",
        energy_gain = "Ganho de Energia:",
        energy_cost = "Custo de Energia:",
        power = "Poder:",
        power_pvp = "Poder PvP:",
        level = "Nível:"
    },
    en = {
        cooldown = "Cooldown:",
        energy_gain = "Energy Gain:",
        energy_cost = "Energy Cost:",
        power = "Power:",
        power_pvp = "PvP Power:",
        level = "Level:"
    },
    es = {
        cooldown = "Enfriamiento:",
        energy_gain = "Ganancia de Energía:",
        energy_cost = "Costo Energético:",
        power = "Poder:",
        power_pvp = "Poder PvP:",
        level = "Nivel:"
    },
    pl = {
        cooldown = "Czas Odnowienia:",
        energy_gain = "Odzyskanle Energii:",
        energy_cost = "Koszt energii:",
        power = "Moc:",
        power_pvp = "Moc PvP:",
        level = "Poziom:"
    }
}

M.FLAGS_I18N = {
    pt = {
        aggro = "Essa habilidade chama a atenção dos inimigos (PvE)",
        bridge = "Essa habilidade pode criar pontes em certos lugares",
        wall = "Essa habilidade quebra paredes específicas",
        quickcast = "Essa habilidade possuí mecânica de Quickcast"
    },
    en = {
        aggro = "This ability draws enemies attention (PvE)",
        bridge = "This ability can create bridges in certain places",
        wall = "This ability breaks specific walls",
        quickcast = "This ability is instant cast (quick cast)"
    },
    es = {
        aggro = "Esta habilidad atrae la atención de los enemigos (PvE)",
        bridge = "Esta habilidad puede crear puentes en ciertos lugares",
        wall = "Esta habilidad rompe paredes específicas",
        quickcast = "Esta habilidad es de lanzamiento instantáneo (quick cast)"
    },
    pl = {
        aggro = "Ta umiejętność przyciąga uwagę wrogów (PvE)",
        bridge = "Ta umiejętność może tworzyć mosty w niektórych miejscach",
        wall = "Ta umiejętność niszczy określone ściany",
        quickcast = "Ta umiejętność jest rzucana natychmiast (quick cast)"
    }
}

--------------------------------------------------------------------------------
-- I18N: rótulos das abas
--------------------------------------------------------------------------------
M.TAB_I18N = {
    pt = {
        skills = "Habilidades",
        skins = "Skins",
        skins_title = "SKINS & SPOTLIGHTS"
    },
    en = {
        skills = "Skills",
        skins = "Skins",
        skins_title = "SKINS & SPOTLIGHTS"
    },
    es = {
        skills = "Habilidades",
        skins = "Aspectos",
        skins_title = "ASPECTOS Y DESTACADOS"
    },
    pl = {
        skills = "Umiejętności",
        skins = "Skórki",
        skins_title = "SKÓRKI I PREZENTACJE"
    }
}

--------------------------------------------------------------------------------
-- AUTO-I18N (tier + tags) – completa i18n quando o módulo do char não traz
--------------------------------------------------------------------------------

-- tiers canônicos + sinônimos (case-insensitive)
M.TIER_CANON = {
    gold = {
        pt = "Ouro",
        en = "Gold",
        es = "Oro",
        pl = "Złoto"
    },
    silver = {
        pt = "Prata",
        en = "Silver",
        es = "Plata",
        pl = "Srebro"
    },
    bronze = {
        pt = "Bronze",
        en = "Bronze",
        es = "Bronce",
        pl = "Brąz"
    },
    diamond = {
        pt = "Diamante",
        en = "Diamond",
        es = "Diamante",
        pl = "Diament"
    }
}

M.TIER_SYNONYM = (function()
    local m = {
        ["ouro"] = "gold",
        ["gold"] = "gold",
        ["oro"] = "gold",
        ["złoto"] = "gold",
        ["zloto"] = "gold",
        ["prata"] = "silver",
        ["silver"] = "silver",
        ["plata"] = "silver",
        ["srebro"] = "silver",
        ["bronze"] = "bronze",
        ["bronce"] = "bronze",
        ["brąz"] = "bronze",
        ["braz"] = "bronze",
        ["diamante"] = "diamond",
        ["diamond"] = "diamond",
        ["diament"] = "diamond"
    }
    return setmetatable(m, {
        __index = function()
            return nil
        end
    })
end)()

function M.tierPackFrom(raw)
    raw = mw.ustring.lower((raw or ""):gsub("^%s+", ""):gsub("%s+$", ""))
    local canon = M.TIER_SYNONYM[raw]
    if canon and M.TIER_CANON[canon] then
        return M.TIER_CANON[canon]
    end
    -- desconhecido: replica o mesmo texto em todos
    raw = (raw ~= "" and raw) or ""
    return {
        pt = raw,
        en = raw,
        es = raw,
        pl = raw
    }
end

-- tags canônicas + sinônimos (amplie à vontade)
M.TAGS_CANON = {
    suporte = {
        pt = "Suporte",
        en = "Support",
        es = "Soporte",
        pl = "Wsparcie"
    },
    atirador = {
        pt = "Atirador",
        en = "Marksman",
        es = "Tirador",
        pl = "Strzelec"
    },
    devilfruit = {
        pt = "Fruta do Diabo",
        en = "Devil Fruit",
        es = "Fruta del Diablo",
        pl = "Owoc Diabła"
    },
    cortante = {
        pt = "Cortante",
        en = "Slasher",
        es = "Cortante",
        pl = "Tnący"
    },
    lutador = {
        pt = "Lutador",
        en = "Fighter",
        es = "Luchador",
        pl = "Wojownik"
    },
    tanque = {
        pt = "Tanque",
        en = "Tank",
        es = "Tanque",
        pl = "Tank"
    },
    bruiser = {
        pt = "Bruiser",
        en = "Bruiser",
        es = "Bruiser",
        pl = "Bruiser"
    },
    especialista = {
        pt = "Especialista",
        en = "Specialist",
        es = "Especialista",
        pl = "Specjalista"
    }
}

M.TAGS_SYNONYM = (function()
    local m = {
        -- suporte
        ["suporte"] = "suporte",
        ["support"] = "suporte",
        ["soporte"] = "suporte",
        ["wsparcie"] = "suporte",

        -- atirador
        ["atirador"] = "atirador",
        ["marksman"] = "atirador",
        ["tirador"] = "atirador",
        ["strzelec"] = "atirador",
        ["shooter"] = "atirador",

        -- fruta do diabo
        ["fruta do diabo"] = "devilfruit",
        ["devil fruit"] = "devilfruit",
        ["fruta del diablo"] = "devilfruit",
        ["owoc diabła"] = "devilfruit",
        ["owoc diabla"] = "devilfruit",

        -- cortante
        ["cortante"] = "cortante",
        ["slasher"] = "cortante",
        ["tnący"] = "cortante",
        ["tnacy"] = "cortante",

        -- lutador
        ["lutador"] = "lutador",
        ["fighter"] = "lutador",
        ["luchador"] = "lutador",
        ["wojownik"] = "lutador",

        -- tanque
        ["tanque"] = "tanque",
        ["tank"] = "tanque",

        -- bruiser
        ["bruiser"] = "bruiser",

        -- especialista
        ["especialista"] = "especialista",
        ["specialist"] = "especialista",
        ["specjalista"] = "especialista",

        -- alguns termos relacionados (não-banidos)
        ["healer"] = "suporte",
        ["sanador"] = "suporte",
        ["uzdrowiciel"] = "suporte",
        ["mage"] = "especialista",
        ["mag"] = "especialista",
        ["control"] = "especialista"
    }
    return setmetatable(m, {
        __index = function()
            return nil
        end
    })
end)()

function M.tagsPackFrom(list)
    local pack = {
        pt = {},
        en = {},
        es = {},
        pl = {}
    }
    -- termos banidos (não devem aparecer, nem como pass-through)
    local BANNED_TAGS = {
        ["mago"] = true,
        ["controle"] = true,
        ["curandeiro"] = true,
        ["assassin"] = true,
        ["assassino"] = true
    }
    for _, t in ipairs(list or {}) do
        local cleaned = (t or ""):gsub("^%s+", ""):gsub("%s+$", "")
        local lowered = mw.ustring.lower(cleaned)
        if not BANNED_TAGS[lowered] then
            local key = M.TAGS_SYNONYM[lowered]
            if key and M.TAGS_CANON[key] then
                local m = M.TAGS_CANON[key]
                table.insert(pack.pt, m.pt);
                table.insert(pack.en, m.en)
                table.insert(pack.es, m.es);
                table.insert(pack.pl, m.pl)
            else
                if cleaned ~= "" then
                    table.insert(pack.pt, cleaned);
                    table.insert(pack.en, cleaned)
                    table.insert(pack.es, cleaned);
                    table.insert(pack.pl, cleaned)
                end
            end
        end
    end
    return pack
end

return M