Перейти к содержанию

Модуль:languages

Эта страница бессрочно защищена от изменения
Материал из Викисловаря
Документация

Модуль предназначен для форматирования списка переводов. Этот модуль используется в шаблоне{{перев-блок}}.

Описание функций и параметров

  • list— функция форматирования списка переводов.
    Принимает в качестве параметров коды языков, а в качестве значений параметров строки переводов.

Используемые модули

Таблица кодов языков содержится в модулеlanguages/data.Каждая строка таблицы задаёт параметры необходимые для формирования названия языка. Строка состоит из двух частей разделённых знаком равно. Слева указывается имя параметра в двойных кавычках и квадратных скобках, а справа в фигурных скобках в двойных кавычках через запятую: код языка, название языка, индекс и уточнение. Например

["ith.lat"]={"ith","Ифкуиль","и","(лат.)"},

Для строки выше будет сформирована строка:

Индексы могут принимать значения:

  • в— восстановленные языки
  • и— искусственные языки
  • р— реконструированные языки
  • ф— фантастические языки
  • — мёртвые языки
-- Модуль для создания списка переводов по языкам

-- загрузка модуля данных с таблицей языков
locallanguages=mw.loadData("Module:languages/data");
localp={};

-- вспомогательная функция, удаляет пробелы
localfunctiontrimstr(s)
return(s:gsub("^%s*(.-)%s*$","%1"));
end

localfunctionformatLang(code,name,index,extention)
localresult='';
localmargin='';
result=result.."* [["..mw.ustring.lower(name).."#Русский|"..name.."]]";
ifindex~=nilandindex~=""then
localindexes={
["в"]="восстановленный язык",
["и"]="искусственный язык",
["р"]="реконструированный язык",
["ф"]="фантастический язык",
["†"]="мёртвый язык"
}
localtitle=indexes[index]or'';
iftitle~=''then
title="title='"..title.."'";
end
result=result.."<sup style='color:#66C033'"..title..">"..index.."</sup>";
margin=';margin-left: -5px';
end
ifcode~=nilandcode~=""then
result=result.."<sub style='color:#33C066"..margin.."'>"..code.."</sub>";
end
ifextention~=nilandextention~=""then
result=result..""..extention;
end
returnresult;
end

functionp.list(frame)
localresult="";
localnames={};
localnnames={};
localkey="";
localcnt=0;
localdemo=frame.args['demo'];
ifdemo~=nilanddemo~=""then
forcode,vinpairs(languages)do
key=v[2];
ifv[4]~=nilandv[4]~=""then
key=key..v[4];
end
table.insert(nnames,key);
names[key]={code=v[1],name=v[2],index=v[3],extention=v[4],value=code};
cnt=cnt+1;
end;
else
forcode,valueinpairs(frame:getParent().args)do
iftype(code)=='string'then
localtrimmed=trimstr(code);
localv=trimstr(value);
locall=languages[trimmed];
ifl~=nilandl~=""andv~=nilandv~=""then
key=l[2];
ifl[4]~=nilandl[4]~=""then
key=key..l[4];
end
table.insert(nnames,key);
names[key]={code=l[1],name=l[2],index=l[3],extention=l[4],value=v};
cnt=cnt+1;
end
end
end
end
ifcnt>0then
table.sort(nnames);
fori,keyinipairs(nnames)do
localv=names[key];
result=result..formatLang(v.code,v.name,v.index,v.extention);
result=result..': <span lang= "'..v.code..' ">'..v.value..'</span>\n';
end
end
returnresult
end

functionp.ref(frame)
localresult="";
localargs=frame.args;
ifargs[1]==nilthen
args=frame:getParent().args;
end
localcode=args[1];
iftype(code)=='string'then
localtrimmed=trimstr(code);
locall=languages[trimmed];
ifl~=nilthen
result=result..formatLang(l[1],l[2],l[3],l[4]);
end
end
ifresult==''then
result=tostring(code);
end
returnresult;
end

returnp