mirror of
https://codeberg.org/Duvelcorp/MetaHunt.git
synced 2026-09-22 07:36:58 +00:00
340 lines
10 KiB
Lua
340 lines
10 KiB
Lua
------------------------------------------------------
|
|
-- MetaHunt Localization System
|
|
------------------------------------------------------
|
|
|
|
MTH.localization = MTH.localization or {}
|
|
MTH.currentLocale = GetLocale()
|
|
|
|
local MTH_LOCALE_ALIASES = {
|
|
enGB = "enUS",
|
|
esMX = "esES",
|
|
zhTW = "zhCN",
|
|
}
|
|
|
|
local MTH_SUPPORTED_LOCALES = {
|
|
enUS = true,
|
|
deDE = true,
|
|
esES = true,
|
|
ptBR = true,
|
|
ruRU = true,
|
|
zhCN = true,
|
|
}
|
|
|
|
local function MTH_ResolveLocale(locale)
|
|
local resolved = tostring(locale or "enUS")
|
|
if MTH_LOCALE_ALIASES[resolved] then
|
|
resolved = MTH_LOCALE_ALIASES[resolved]
|
|
end
|
|
if not MTH_SUPPORTED_LOCALES[resolved] then
|
|
resolved = "enUS"
|
|
end
|
|
return resolved
|
|
end
|
|
|
|
local activeLocale = MTH_ResolveLocale(MTH.currentLocale)
|
|
local localeData = MTH_LocaleData or {}
|
|
local uiLocales = localeData.ui or {}
|
|
local uiDefault = uiLocales.enUS or {}
|
|
local uiActive = uiLocales[activeLocale] or {}
|
|
|
|
local function MTH_L(key, default)
|
|
if uiActive[key] ~= nil then
|
|
return uiActive[key]
|
|
end
|
|
if uiDefault[key] ~= nil then
|
|
return uiDefault[key]
|
|
end
|
|
return default or key
|
|
end
|
|
|
|
MTH.localization[activeLocale] = uiActive
|
|
MTH.localization.enUS = uiDefault
|
|
|
|
BINDING_HEADER_FEEDOMATIC = MTH_L("BINDING_HEADER_FEEDOMATIC", "[MetaHunt] Feed-O-Matic")
|
|
BINDING_HEADER_ZAspectHeader = MTH_L("BINDING_HEADER_ZAspectHeader", "[MetaHunt] ZAspect Buttons")
|
|
BINDING_HEADER_ZTrackHeader = MTH_L("BINDING_HEADER_ZTrackHeader", "[MetaHunt] ZTrack Buttons")
|
|
BINDING_HEADER_ZTrapHeader = MTH_L("BINDING_HEADER_ZTrapHeader", "[MetaHunt] ZTrap Buttons")
|
|
BINDING_HEADER_ZPetHeader = MTH_L("BINDING_HEADER_ZPetHeader", "[MetaHunt] ZPet Buttons")
|
|
BINDING_HEADER_ZAmmoHeader = MTH_L("BINDING_HEADER_ZAmmoHeader", "[MetaHunt] ZAmmo Buttons")
|
|
|
|
function MTH:GetLocalization(key, default)
|
|
return MTH_L(key, default)
|
|
end
|
|
|
|
local function MTH_GetLocaleVendorNameMap(locale)
|
|
local dataLocales = (MTH_LocaleData and MTH_LocaleData.data) or nil
|
|
local vendorLocales = dataLocales and dataLocales.vendors or nil
|
|
if type(vendorLocales) ~= "table" then
|
|
return nil
|
|
end
|
|
return vendorLocales[locale]
|
|
end
|
|
|
|
local function MTH_GetLocaleItemNameMap(locale)
|
|
local dataLocales = (MTH_LocaleData and MTH_LocaleData.data) or nil
|
|
local itemLocales = dataLocales and dataLocales.items or nil
|
|
if type(itemLocales) ~= "table" then
|
|
return nil
|
|
end
|
|
return itemLocales[locale]
|
|
end
|
|
|
|
local function MTH_GetLocaleBeastNameMap(locale)
|
|
local dataLocales = (MTH_LocaleData and MTH_LocaleData.data) or nil
|
|
if type(dataLocales) ~= "table" then
|
|
MTH_LocaleData = MTH_LocaleData or {}
|
|
MTH_LocaleData.data = MTH_LocaleData.data or {}
|
|
dataLocales = MTH_LocaleData.data
|
|
end
|
|
local beastLocales = dataLocales and dataLocales.beasts or nil
|
|
if type(beastLocales) ~= "table" then
|
|
dataLocales.beasts = {}
|
|
beastLocales = dataLocales.beasts
|
|
end
|
|
|
|
if locale == "enUS" then
|
|
local enMap = beastLocales.enUS
|
|
if type(enMap) ~= "table" then
|
|
enMap = {}
|
|
beastLocales.enUS = enMap
|
|
end
|
|
if next(enMap) == nil then
|
|
local beasts = _G and _G.MTH_DS_Beasts or MTH_DS_Beasts
|
|
if type(beasts) == "table" then
|
|
for beastId, beast in pairs(beasts) do
|
|
local id = tonumber(beastId)
|
|
local name = type(beast) == "table" and tostring(beast.name or "") or ""
|
|
if id and name ~= "" and enMap[id] == nil then
|
|
enMap[id] = name
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return beastLocales[locale]
|
|
end
|
|
|
|
function MTH:GetLocalizedVendorName(vendorId, defaultName)
|
|
local id = tonumber(vendorId)
|
|
if not id then
|
|
return defaultName or "Unknown"
|
|
end
|
|
local locale = MTH_ResolveLocale(self.currentLocale or GetLocale() or "enUS")
|
|
local localeMap = MTH_GetLocaleVendorNameMap(locale)
|
|
if localeMap and localeMap[id] and localeMap[id] ~= "" then
|
|
return localeMap[id]
|
|
end
|
|
local fallbackMap = MTH_GetLocaleVendorNameMap("enUS")
|
|
if fallbackMap and fallbackMap[id] and fallbackMap[id] ~= "" then
|
|
return fallbackMap[id]
|
|
end
|
|
return defaultName or "Unknown"
|
|
end
|
|
|
|
function MTH:GetLocalizedNPCNameById(npcId, defaultName)
|
|
return self:GetLocalizedVendorName(npcId, defaultName)
|
|
end
|
|
|
|
function MTH:GetLocalizedItemName(itemId, defaultName)
|
|
local id = tonumber(itemId)
|
|
if not id then
|
|
return defaultName or "Unknown"
|
|
end
|
|
local locale = MTH_ResolveLocale(self.currentLocale or GetLocale() or "enUS")
|
|
local localeMap = MTH_GetLocaleItemNameMap(locale)
|
|
if localeMap and localeMap[id] and localeMap[id] ~= "" then
|
|
return localeMap[id]
|
|
end
|
|
local fallbackMap = MTH_GetLocaleItemNameMap("enUS")
|
|
if fallbackMap and fallbackMap[id] and fallbackMap[id] ~= "" then
|
|
return fallbackMap[id]
|
|
end
|
|
return defaultName or "Unknown"
|
|
end
|
|
|
|
function MTH:GetLocalizedBeastName(beastId, defaultName)
|
|
local id = tonumber(beastId)
|
|
if not id then
|
|
return defaultName or "Unknown"
|
|
end
|
|
local locale = MTH_ResolveLocale(self.currentLocale or GetLocale() or "enUS")
|
|
local localeMap = MTH_GetLocaleBeastNameMap(locale)
|
|
if localeMap and localeMap[id] and localeMap[id] ~= "" then
|
|
return localeMap[id]
|
|
end
|
|
local fallbackMap = MTH_GetLocaleBeastNameMap("enUS")
|
|
if fallbackMap and fallbackMap[id] and fallbackMap[id] ~= "" then
|
|
return fallbackMap[id]
|
|
end
|
|
return defaultName or "Unknown"
|
|
end
|
|
|
|
-- Module localization helper
|
|
function MTH:RegisterModuleLocalization(module_name, localizationTable)
|
|
if not self.localization.modules then
|
|
self.localization.modules = {}
|
|
end
|
|
self.localization.modules[module_name] = localizationTable
|
|
end
|
|
|
|
function MTH:GetModuleLocalization(module_name, key, default)
|
|
if self.localization.modules and self.localization.modules[module_name] then
|
|
local L = self.localization.modules[module_name]
|
|
if L[key] then
|
|
return L[key]
|
|
end
|
|
end
|
|
return default or key
|
|
end
|
|
|
|
local MTH_SPELL_LOCALE = {
|
|
}
|
|
|
|
local MTH_SPELL_ID_BY_TOKEN = {
|
|
["Banish"] = 710,
|
|
["Bestial Wrath"] = 19574,
|
|
["Concussive Shot"] = 5116,
|
|
["Counterattack"] = 19306,
|
|
["Clever Traps"] = 19239,
|
|
["Deterrence"] = 19263,
|
|
["Entrapment"] = 19184,
|
|
["Entrapment (Rank 2)"] = 19387,
|
|
["Entrapment (Rank 3)"] = 19388,
|
|
["Explosive Trap"] = 13813,
|
|
["Explosive Trap Effect"] = 13812,
|
|
["Feed Pet"] = 6991,
|
|
["Flare"] = 1543,
|
|
["Freezing Trap"] = 1499,
|
|
["Freezing Trap Effect"] = 3355,
|
|
["Frost Trap"] = 13809,
|
|
["Frost Trap Aura"] = 13810,
|
|
["Hunter's Mark"] = 1130,
|
|
["Immolation Trap"] = 13795,
|
|
["Immolation Trap Effect"] = 13797,
|
|
["Improved Concussive Shot"] = 19407,
|
|
["Improved Wing Clip"] = 19229,
|
|
["Perception"] = 20600,
|
|
["Rapid Fire"] = 3045,
|
|
["Scare Beast"] = 1513,
|
|
["Scatter Shot"] = 19503,
|
|
["Scorpid Sting"] = 3043,
|
|
["Serpent Sting"] = 1978,
|
|
["Stoneform"] = 20594,
|
|
["Viper Sting"] = 3034,
|
|
["War Stomp"] = 20549,
|
|
["Will of the Forsaken"] = 7744,
|
|
["Wing Clip"] = 2974,
|
|
["Wyvern Sting"] = 19386,
|
|
["Blood Fury"] = 20572,
|
|
["Berserking"] = 26297,
|
|
}
|
|
|
|
do
|
|
local spellLocales = (MTH_LocaleData and MTH_LocaleData.spells) or nil
|
|
if type(spellLocales) == "table" then
|
|
for localeKey, localeMap in pairs(spellLocales) do
|
|
if type(localeMap) == "table" then
|
|
MTH_SPELL_LOCALE[localeKey] = localeMap
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local extras = {
|
|
enUS = {
|
|
["Devilsaur Eye"] = "Devilsaur Eye",
|
|
["Devilsaur Fury"] = "Devilsaur Fury",
|
|
["Zandalarian Hero Medallion"] = "Zandalarian Hero Medallion",
|
|
["Restless Strength"] = "Restless Strength",
|
|
["Earthstrike"] = "Earthstrike",
|
|
["Badge of the Swarmguard"] = "Badge of the Swarmguard",
|
|
["Jom Gabbar"] = "Jom Gabbar",
|
|
["Kiss of the Spider"] = "Kiss of the Spider",
|
|
["Slayer's Crest"] = "Slayer's Crest",
|
|
},
|
|
deDE = {
|
|
["Devilsaur Eye"] = "Auge eines Teufelssauriers",
|
|
["Devilsaur Fury"] = "Zorn des Teufelssauriers",
|
|
["Zandalarian Hero Medallion"] = "Zandalarianisches Heldenmedallion",
|
|
["Restless Strength"] = "Ruhelose Stärke",
|
|
["Earthstrike"] = "Erdschlag",
|
|
["Badge of the Swarmguard"] = "Abzeichen der Schwarmwache",
|
|
["Jom Gabbar"] = "Jom Gabbar",
|
|
["Kiss of the Spider"] = "Kuss der Spinne",
|
|
["Slayer's Crest"] = "Jägerspitze",
|
|
},
|
|
esES = {
|
|
["Devilsaur Eye"] = "Ojo de Demosaurio",
|
|
["Devilsaur Fury"] = "Furia del devilsaurio",
|
|
["Zandalarian Hero Medallion"] = "Zandalarian Hero Medallion",
|
|
["Restless Strength"] = "Fuerza agitada",
|
|
["Earthstrike"] = "Golpeterra",
|
|
["Badge of the Swarmguard"] = "Badge of the Swarmguard",
|
|
["Jom Gabbar"] = "Jom Gabbar",
|
|
["Kiss of the Spider"] = "Kiss of the Spider",
|
|
["Slayer's Crest"] = "Cresta de Matador",
|
|
},
|
|
frFR = {
|
|
["Devilsaur Eye"] = "Oeil de diablosaure",
|
|
["Devilsaur Fury"] = "Fureur du diablosaure",
|
|
["Zandalarian Hero Medallion"] = "Médaillon de héros zandalarien",
|
|
["Restless Strength"] = "Force inconstante",
|
|
["Earthstrike"] = "Choc de terre",
|
|
["Badge of the Swarmguard"] = "Insigne de garde-essaim",
|
|
["Jom Gabbar"] = "Jom Gabbar",
|
|
["Kiss of the Spider"] = "Baiser de l'araignée",
|
|
["Slayer's Crest"] = "Ecusson de tueur",
|
|
},
|
|
zhCN = {
|
|
["Devilsaur Eye"] = "魔暴龙眼",
|
|
["Devilsaur Fury"] = "魔暴龙之怒",
|
|
["Zandalarian Hero Medallion"] = "赞达拉英雄徽记",
|
|
["Restless Strength"] = "充沛之力",
|
|
["Earthstrike"] = "大地之击",
|
|
["Badge of the Swarmguard"] = "虫群守卫徽章",
|
|
["Jom Gabbar"] = "Jom Gabbar",
|
|
["Kiss of the Spider"] = "蜘蛛之吻",
|
|
["Slayer's Crest"] = "屠戮者徽记",
|
|
},
|
|
}
|
|
|
|
for localeKey, localeMap in pairs(extras) do
|
|
if type(MTH_SPELL_LOCALE[localeKey]) ~= "table" then
|
|
MTH_SPELL_LOCALE[localeKey] = {}
|
|
end
|
|
for token, localized in pairs(localeMap) do
|
|
if MTH_SPELL_LOCALE[localeKey][token] == nil then
|
|
MTH_SPELL_LOCALE[localeKey][token] = localized
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
MTH.Const = MTH.Const or {}
|
|
MTH.Const.SpellLocaleMap = MTH_SPELL_LOCALE
|
|
MTH.Const.NPCLocaleMap = (MTH_LocaleData and MTH_LocaleData.data and MTH_LocaleData.data.vendors) or {}
|
|
MTH.Const.ItemLocaleMap = (MTH_LocaleData and MTH_LocaleData.data and MTH_LocaleData.data.items) or {}
|
|
MTH.Const.BeastLocaleMap = (MTH_LocaleData and MTH_LocaleData.data and MTH_LocaleData.data.beasts) or {}
|
|
|
|
function MTH:LocalizeSpell(spellToken)
|
|
local key = tostring(spellToken or "")
|
|
if key == "" then
|
|
return key
|
|
end
|
|
local getSpellInfo = _G and _G["GetSpellInfo"] or nil
|
|
local spellId = MTH_SPELL_ID_BY_TOKEN[key]
|
|
if spellId and getSpellInfo then
|
|
local spellName = getSpellInfo(spellId)
|
|
if spellName and spellName ~= "" then
|
|
return spellName
|
|
end
|
|
end
|
|
local locale = MTH_ResolveLocale(self.currentLocale or GetLocale() or "enUS")
|
|
local localeMap = MTH_SPELL_LOCALE[locale] or MTH_SPELL_LOCALE.enUS
|
|
if localeMap and localeMap[key] then
|
|
return localeMap[key]
|
|
end
|
|
return key
|
|
end
|