Шаблон:PamirTranslit
{{{1}}}
{{{1}}}
local p = {} -- Таблица соответствий латиница -> кириллица local lat_to_cyr_map = { -- Основные буквы ['a'] = 'а', ['A'] = 'А', ['b'] = 'б', ['B'] = 'Б', ['c'] = 'ц', ['C'] = 'Ц', ['d'] = 'д', ['D'] = 'Д', ['e'] = 'е', ['E'] = 'Е', ['f'] = 'ф', ['F'] = 'Ф', ['g'] = 'г', ['G'] = 'Г', ['h'] = 'ҳ', ['H'] = 'Ҳ', ['i'] = 'и', ['I'] = 'И', ['j'] = 'ҷ', ['J'] = 'Ҷ', ['k'] = 'к', ['K'] = 'К', ['l'] = 'л', ['L'] = 'Л', ['m'] = 'м', ['M'] = 'М', ['n'] = 'н', ['N'] = 'Н', ['o'] = 'о', ['O'] = 'О', ['p'] = 'п', ['P'] = 'П', ['q'] = 'қ', ['Q'] = 'Қ', ['r'] = 'р', ['R'] = 'Р', ['s'] = 'с', ['S'] = 'С', ['t'] = 'т', ['T'] = 'Т', ['u'] = 'у', ['U'] = 'У', ['v'] = 'в', ['V'] = 'В', ['w'] = 'в̌', ['W'] = 'В̌', -- в с гачеком ['x'] = 'х', ['X'] = 'Х', ['y'] = 'й', ['Y'] = 'Й', ['z'] = 'з', ['Z'] = 'З', -- Диакритические знаки ['ī'] = 'ӣ', ['Ī'] = 'Ӣ', ['ū'] = 'ӯ', ['Ū'] = 'Ӯ', ['ů'] = 'у̊', ['Ů'] = 'У̊', -- у с кольцом ['x̊'] = 'х̊', ['X̊'] = 'Х̊', -- х с кольцом ['ǰ'] = 'ҷ', ['J̌'] = 'Ҷ', ['ɣ'] = 'ғ', ['Ɣ'] = 'Ғ', ['ɣ̌'] = 'г̌', ['Ɣ̌'] = 'Г̌', -- ɣ с гачеком -> г с гачеком всегда ['ə'] = 'ә', ['Ə'] = 'Ә', ['ē'] = 'е̄', ['Ē'] = 'Е̄', ['ō'] = 'о̄', ['Ō'] = 'О̄', ['ā'] = 'а̄', ['Ā'] = 'А̄', ['θ'] = 'т̌', ['Θ'] = 'Т̌', -- тета для т с гачеком ['ǵ'] = 'ѓ', ['Ǵ'] = 'Ѓ', -- g с ударением ['ḱ'] = 'ќ', ['Ḱ'] = 'Ќ', -- k с ударением ['ʒ'] = 'з̌', ['Ʒ'] = 'З̌', -- З с гачеком ['š'] = 'ш', ['Š'] = 'Ш', ['č'] = 'ч', ['Č'] = 'Ч', ['ž'] = 'ж', ['Ž'] = 'Ж', ['ś'] = 'с̌', ['Ś'] = 'С̌', -- с с гачеком = т с гачеком ['č̌'] = 'ц̌', ['Č̌'] = 'Ц̌', -- ц с гачеком -- С точкой внизу ['ḍ'] = 'д̣', ['Ḍ'] = 'Д̣', ['ẓ̌'] = 'ж̣', ['Ẓ̌'] = 'Ж̣', -- ž с точкой внизу ['ṣ̌'] = 'ш̣', ['Ṣ̌'] = 'Ш̣', -- š с точкой внизу ['ṭ'] = 'т̣', ['Ṭ'] = 'Т̣', ['č̣'] = 'ч̣', ['Č̣'] = 'Ч̣', -- č с точкой внизу ['j̇'] = 'ҷ̣', ['J̇'] = 'Ҷ̣', -- ǰ с точкой -- С умлаутом (кроме ü) ['ü'] = 'ӱ', ['Ü'] = 'Ӱ', ['d̈'] = 'д̈', ['D̈'] = 'Д̈', ['ẗ'] = 'т̈', ['T̈'] = 'Т̈', -- Специальные для язгулямского (с кольцом рядом) ['k̥'] = 'к̊', ['K̥'] = 'К̊', -- к с кольцом рядом ['q̊'] = 'қ̊', ['Q̊'] = 'Қ̊', -- қ с кольцом рядом ['x̥'] = 'х̊', ['X̥'] = 'Х̊', -- х с кольцом рядом ['x̌̊'] = 'х̌̊', ['X̌̊'] = 'Х̌̊', -- х с гачеком и кольцом ['ɣ̊'] = 'ғ̊', ['Ɣ̊'] = 'Ғ̊', -- ғ с кольцом рядом ['g̊'] = 'г̊', ['G̊'] = 'Г̊', -- г с кольцом рядом -- Диграфы ['yu'] = 'йу', ['Yu'] = 'Йу', ['YU'] = 'ЙУ', ['ya'] = 'йа', ['Ya'] = 'Йа', ['YA'] = 'ЙА', ['ye'] = 'йе', ['Ye'] = 'Йе', ['YE'] = 'ЙЕ', -- Остаются как есть ['ы'] = 'ы', ['Ы'] = 'Ы', ['ь'] = 'ь', ['Ь'] = 'Ь', } -- Обратная таблица кириллица -> латиница local cyr_to_lat_map = {} for lat, cyr in pairs(lat_to_cyr_map) do cyr_to_lat_map[cyr] = lat end -- Дополнительные обратные соответствия local additional_cyr_to_lat = { ['ю'] = 'yu', ['Ю'] = 'Yu', ['я'] = 'ya', ['Я'] = 'Ya', -- Для двойных соответствий ɣ̌ ['ғ̌'] = 'ɣ̌', ['Ғ̌'] = 'Ɣ̌', -- ғ с гачеком тоже переводим в ɣ̌ } for cyr, lat in pairs(additional_cyr_to_lat) do cyr_to_lat_map[cyr] = lat end -- Функция определения письменности function p.detect_script(frame) local text = frame.args[1] or frame -- Если содержит кириллические буквы if mw.ustring.find(text, '[а-яё]') or mw.ustring.find(text, '[А-ЯЁ]') or mw.ustring.find(text, '[ғқўҳҷӯә]') or mw.ustring.find(text, '[ҒҚЎҲҶӮӘ]') then return 'cyrillic' else return 'latin' end end -- Функция транслитерации латиницы в кириллицу function p.lat_to_cyr(frame) local text = frame.args[1] or frame local result = text -- Сначала обрабатываем длинные последовательности for lat, cyr in pairs(lat_to_cyr_map) do if mw.ustring.len(lat) > 1 then result = mw.ustring.gsub(result, lat, cyr) end end -- Затем одиночные символы for lat, cyr in pairs(lat_to_cyr_map) do if mw.ustring.len(lat) == 1 then result = mw.ustring.gsub(result, lat, cyr) end end return result end -- Функция транслитерации кириллицы в латиницу function p.cyr_to_lat(frame) local text = frame.args[1] or frame local result = text -- Сначала длинные последовательности for cyr, lat in pairs(cyr_to_lat_map) do if mw.ustring.len(cyr) > 1 then result = mw.ustring.gsub(result, cyr, lat) end end -- Затем одиночные символы for cyr, lat in pairs(cyr_to_lat_map) do if mw.ustring.len(cyr) == 1 then result = mw.ustring.gsub(result, cyr, lat) end end return result end return p