Модуль:RuValues
Материал из проекта «Повелитель Тайн Вики»
Дополнительные действия
-- [ru] Translation of English enum-like values that articles pass to infobox templates
-- (status, type, outcome, sex, sequence rank...). Unknown values are returned unchanged.
-- {{#invoke:RuValues|tr|Destroyed}} -> Уничтожено ; {{#invoke:RuValues|tr|Deceased (resurrected)}} -> Мертв (resurrected)
-- Only the whole value or its leading word(s) (before " (", ",", "/", ";") are translated.
local p = {}
local map = {
-- statuses
['exists'] = 'Существует', ['exist'] = 'Существует', ['existed'] = 'Существовало', ['existing'] = 'Существует',
['active'] = 'Действует', ['inactive'] = 'Не действует', ['defunct'] = 'Прекратило существование',
['disbanded'] = 'Распущена', ['dissolved'] = 'Распущена', ['hidden'] = 'Скрыто', ['sealed'] = 'Запечатан',
['destroyed'] = 'Уничтожено', ['ruined'] = 'Разрушено', ['ruins'] = 'Руины', ['abandoned'] = 'Заброшено',
['used'] = 'Использован', ['accommodated'] = 'Вмещён', ['lost'] = 'Утерян', ['missing'] = 'Пропал без вести',
['unknown'] = 'Неизвестно', ['alive'] = 'Жив', ['dead'] = 'Мертв', ['deceased'] = 'Мертв',
['perished'] = 'Погиб', ['resurrected'] = 'Воскрешён', ['revived'] = 'Возрождён', ['sleeping'] = 'Спит',
['slumbering'] = 'Спит', ['imprisoned'] = 'В заточении', ['fallen'] = 'Пал', ['merged'] = 'Слился',
['undead'] = 'Нежить', ['evil spirit'] = 'Злой дух', ['unclear'] = 'Неясно', ['n/a'] = '—', ['none'] = 'Нет',
['yes'] = 'Да', ['no'] = 'Нет', ['partially'] = 'Частично', ['ongoing'] = 'Продолжается', ['ended'] = 'Завершено',
-- fight outcomes
['win'] = 'Победа', ['victory'] = 'Победа', ['loss'] = 'Поражение', ['defeat'] = 'Поражение', ['lose'] = 'Поражение',
['draw'] = 'Ничья', ['stalemate'] = 'Ничья', ['inconclusive'] = 'Без результата', ['interrupted'] = 'Прервано',
-- sex
['male'] = 'Мужской', ['female'] = 'Женский', ['hermaphrodite'] = 'Гермафродит', ['genderless'] = 'Бесполый',
['none (genderless)'] = 'Бесполый', ['androgynous'] = 'Андрогин',
-- location/organization types
['city'] = 'Город', ['town'] = 'Городок', ['village'] = 'Деревня', ['country'] = 'Страна', ['kingdom'] = 'Королевство',
['empire'] = 'Империя', ['republic'] = 'Республика', ['continent'] = 'Континент', ['island'] = 'Остров',
['islands'] = 'Острова', ['archipelago'] = 'Архипелаг', ['sea'] = 'Море', ['ocean'] = 'Океан', ['castle'] = 'Замок',
['palace'] = 'Дворец', ['church'] = 'Церковь', ['cathedral'] = 'Собор', ['district'] = 'Район', ['street'] = 'Улица',
['region'] = 'Регион', ['province'] = 'Провинция', ['capital'] = 'Столица', ['port'] = 'Порт', ['harbor'] = 'Гавань',
['headquarter'] = 'Штаб-квартира', ['headquarters'] = 'Штаб-квартира', ['building'] = 'Здание', ['ruin'] = 'Руины',
['bar'] = 'Бар', ['pub'] = 'Паб', ['club'] = 'Клуб', ['school'] = 'Школа', ['university'] = 'Университет',
['company'] = 'Компания', ['ship'] = 'Корабль', ['forest'] = 'Лес', ['mountain'] = 'Гора', ['desert'] = 'Пустыня',
['realm'] = 'Мир', ['world'] = 'Мир', ['dimension'] = 'Измерение', ['plane'] = 'План', ['kingdom of god'] = 'Божье Царство',
['divine kingdom'] = 'Божественное Царство', ['secret organization'] = 'Тайная организация',
-- sequence ranks
['low-sequence'] = 'Низкая Последовательность', ['low sequence'] = 'Низкая Последовательность',
['mid-sequence'] = 'Средняя Последовательность', ['mid sequence'] = 'Средняя Последовательность',
['middle sequence'] = 'Средняя Последовательность', ['high-sequence'] = 'Высшая Последовательность',
['high sequence'] = 'Высшая Последовательность', ['demigod'] = 'Полубог', ['angel'] = 'Ангел',
['king of angels'] = 'Король Ангелов', ['true god'] = 'Истинный Бог', ['god'] = 'Бог', ['ordinary'] = 'Обычный человек',
}
p.map = map
local function tr1(s)
local key = mw.ustring.lower(mw.text.trim(s))
return map[key]
end
local function translate(v)
if v == nil then return '' end
local t = mw.text.trim(v)
if t == '' then return '' end
local r = tr1(t)
if r then return r end
-- "X/Y" of known words
if t:find('/') then
local parts, okall = {}, true
for part in mw.text.gsplit(t, '/', true) do
local x = tr1(part)
if not x then okall = false; break end
table.insert(parts, x)
end
if okall then return table.concat(parts, ' / ') end
end
-- leading English word(s) followed by " (", ",", ";", " -", "<", "[" or a digit-free tail
local head, tail = mw.ustring.match(t, '^([%a%s%-]-)%s*([%(,;<%[].*)$')
if head and head ~= '' then
local x = tr1(head)
if x then
-- translate a simple "(Resurrected)" tail as well
local inner = mw.ustring.match(tail, '^%(([%a%s%-]+)%)$')
if inner and tr1(inner) then tail = '(' .. mw.ustring.lower(tr1(inner)) .. ')' end
return x .. ' ' .. tail
end
end
-- "6 or 5 - Mid Sequence"
local pre, word = mw.ustring.match(t, '^(.-%s[%-–]%s)([%a%s%-]+)$')
if pre and tr1(word) then return (pre:gsub(' or ', ' или ')) .. tr1(word) end
return t
end
p.translate = translate
function p.tr(frame)
return translate(frame.args[1])
end
return p