Модуль:Loc: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
local data = mw.loadData("Модуль:IanComradeBot/loc/data") | local data = mw.loadData("Модуль:IanComradeBot/loc.json/data") | ||
local p = {} | local p = {} | ||
| Строка 58: | Строка 58: | ||
local key = frame.args[1] | local key = frame.args[1] | ||
local subkey = frame.args[2] or "_value" | local subkey = frame.args[2] or "_value" | ||
local noFormat = frame.args.noFormat or "" | |||
if not key then | if not key then | ||
| Строка 69: | Строка 70: | ||
end | end | ||
if noFormat == "" then | |||
return frame:preprocess("{{#invoke:Loc/Marking|main|<nowiki>".. result .. "</nowiki>}}") | |||
else | |||
return frame:preprocess("{{#invoke:Loc/Marking|main|noFormat=1|<nowiki>".. result .. "</nowiki>}}") | |||
end | |||
end | end | ||
| Строка 75: | Строка 80: | ||
local key = frame.args[1] | local key = frame.args[1] | ||
local subkey = frame.args[2] or "_value" | local subkey = frame.args[2] or "_value" | ||
local noFormat = frame.args.noFormat or "" | |||
if not key then | if not key then | ||
| Строка 86: | Строка 92: | ||
end | end | ||
if noFormat == "" then | |||
return result | |||
else | |||
return frame:preprocess("<nowiki>".. result .. "</nowiki>") | |||
end | |||
end | end | ||
return p | return p | ||
Текущая версия от 16:58, 28 февраля 2026
Для документации этого модуля может быть создана страница Модуль:Loc/doc
local data = mw.loadData("Модуль:IanComradeBot/loc.json/data")
local p = {}
local function tolower(s)
return s and mw.ustring.lower(s) or s
end
local complexLowerIndex = nil
local function buildComplexIndex()
if complexLowerIndex then return end
complexLowerIndex = {}
for k, v in pairs(data) do
if type(v) == "table" and type(k) == "string" then
local lk = tolower(k)
if not complexLowerIndex[lk] then
complexLowerIndex[lk] = v
end
end
end
end
local function getValueFromEntry(entry, subkey)
if entry == nil then return nil end
local t = type(entry)
if t == "string" then
return entry
elseif t == "table" then
if subkey then
return entry[subkey]
else
return entry["_value"]
end
end
return nil
end
local function findTextByKeyOptimized(key, subkey)
if not key then return nil end
local direct = data[key]
local r = getValueFromEntry(direct, subkey)
if r then return r end
buildComplexIndex()
local lk = tolower(key)
local complexEntry = complexLowerIndex[lk]
if complexEntry then
local rr = getValueFromEntry(complexEntry, subkey)
if rr then return rr end
end
return nil
end
function p.GetString(frame)
local key = frame.args[1]
local subkey = frame.args[2] or "_value"
local noFormat = frame.args.noFormat or ""
if not key then
return "Ошибка: Не указаны все необходимые параметры."
end
local result = findTextByKeyOptimized(key, subkey)
if not result then
return key
end
if noFormat == "" then
return frame:preprocess("{{#invoke:Loc/Marking|main|<nowiki>".. result .. "</nowiki>}}")
else
return frame:preprocess("{{#invoke:Loc/Marking|main|noFormat=1|<nowiki>".. result .. "</nowiki>}}")
end
end
function p.GetRawString(frame)
local key = frame.args[1]
local subkey = frame.args[2] or "_value"
local noFormat = frame.args.noFormat or ""
if not key then
return "Ошибка: Не указаны все необходимые параметры."
end
local result = findTextByKeyOptimized(key, subkey)
if not result then
return key
end
if noFormat == "" then
return result
else
return frame:preprocess("<nowiki>".. result .. "</nowiki>")
end
end
return p