Перейти к содержимому страницы
Переключить меню
Переключить меню настроек
Переключить персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.
Сообщество «Повелителя Тайн»Telegram — новости, дунхуа, игры и мерчDiscord — обсуждение книг и теорий, вопросы по вики

Модуль: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