stringtranslate.com

Модуль:WikidataIB

-- Версия: 2023-07-10-- Модуль для реализации использования черного и белого списков для полей инфобокса-- Может принимать именованный параметр |qid, который является идентификатором Wikidata для статьи-- если не указан, будет использован идентификатор Wikidata, связанный с текущей страницей.-- Поля в черном списке никогда не должны отображаться, т.е. модуль должен возвращать ноль при любых обстоятельствах-- Поля в белом списке возвращают локальное значение, если оно существует, или значение Wikidata в противном случае-- Имя поля, из которого вызывается эта функция, передается в именованном параметре |name-- Имя обязательно при использовании черного или белого списка,-- поэтому модуль возвращает nil, если он не указан.-- черный список передается в именованном параметре |suppressfields (или |spf)-- белый список передается в именованном параметре |fetchwikidata (или |fwd)требуется("строгий")локальный р = {}local cdate — инициализируется как nil и загружает функцию _complex_date только при необходимости-- Модуль: Комплексная дата загружается лениво и имеет следующие зависимости:-- Модуль:Календарь-- Модуль:ISOdate-- Модуль:ДатаI18n-- Модуль:I18n/комплексная дата-- Модуль:Порядковый-- Модуль:I18n/порядковый-- Модуль:Данет-- Модуль:Formatnum-- Модуль: Лингвистический---- Следующее взято с https://www.mediawiki.org/wiki/Module:WikidataIB/Wikibase/DataModel#Dates_and_times,-- необходимо использовать Модуль:Комплексная дата, который, по-видимому, требует точности даты в виде строки.-- Было бы лучше, если бы слово «миллениум» могли написать только авторы страницы mediawiki.локальный дп = {[6] = "тысячелетие",[7] = "век",[8] = "десятилетие",[9] = "год",[10] = "месяц",[11] = "день",}локальный i18n ={["ошибки"] ={["property-not-found"] = "Свойство не найдено.",["Недвижимость не предоставлена"] = "Недвижимость не предоставлена",["entity-not-found"] = "Сущность Викиданных не найдена.",["unknown-claim-type"] = "Неизвестный тип претензии.",["unknown-entity-type"] = "Неизвестный тип сущности.",["qualifier-not-found"] = "Квалификатор не найден.",["site-not-found"] = "Проект Викимедиа не найден.",["labels-not-found"] = "Метки не найдены.",["descriptions-not-found"] = "Описания не найдены.",["aliases-not-found"] = "Псевдонимы не найдены.",["unknown-datetime-format"] = "Неизвестный формат даты и времени.",["local-article-not-found"] = "Статья доступна в Wikidata, но не в Wikipedia",["dab-page"] = "(dab)",},["месяцев"] ={«Январь», «Февраль», «Март», «Апрель», «Май», «Июнь»,«Июль», «Август», «Сентябрь», «Октябрь», «Ноябрь», «Декабрь»},["век"] = "век",["До н.э."] = "До н.э.",["до н.э."] = "до н.э.",["порядковый"] ={[1] = "ст",[2] = "й",[3] = "рд",["по умолчанию"] = "th"},["файловое пространство"] = "Файл",["Неизвестно"] = "Неизвестно",["NaN"] = "Не число",-- установите следующее в качестве имени категории отслеживания,-- например, «[[Категория:Статьи с отсутствующей информацией Wikidata]]» или «» для отключения:["missinginfocat"] = "[[Категория:Статьи с отсутствующей информацией Wikidata]]",["editonwikidata"] = "Изменить это в Викиданных",["latestdatequalifier"] = функция (дата) возвращает "до " .. дата конец,-- некоторые языки, например, боснийский, используют точку в качестве суффикса после каждой цифры в дате["датанумберсуффикс"] = "",["разделитель списка"] = ", ",["множители"] = {[0] = "",[3] = "тысяча",[6] = "миллион",[9] = "миллиард",[12] = "триллион",}}-- Это позволяет модулю интернационализации переопределить приведенную выше таблицу.если 'en' ~= mw.getContentLanguage():getCode() тогдаrequire("Модуль:i18n").loadI18n("Модуль:WikidataIB/i18n", i18n)конец-- Этот фрагмент html реализует сворачиваемый контейнер. Проверьте, существуют ли классы на вашей вики.локальный коллапсdiv = '<div class="mw-collapsible mw-collapsed" style="width:100%; overflow:auto;" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}">'-- Некоторые элементы не должны быть связаны.-- Каждая вики может создать список тех, что находятся в Module:WikidataIB/nolinks-- Он должен возвращать таблицу с именем itemsindex, содержащую значение true для каждого элемента, который не должен быть связанлокальный donotlink = {}локальный nolinks_exists, nolinks = pcall(mw.loadData, "Модуль:WikidataIB/nolinks")если nolinks_exists тогдаdonotlink = nolinks.itemsindexконец-- В соответствии с требованиями Wikipedia:Manual of Style/Titles некоторые типы элементов выделены курсивом, а другие заключены в кавычки.-- Подмодуль [[Module:WikidataIB/titleformats]] перечисляет идентификаторы сущностей, используемые в «экземпляре» (P31),-- что позволяет этому модулю определять значения, которые следует отформатировать.-- WikidataIB/titleformats экспортирует таблицу p.formats, которая индексируется по идентификатору сущности и содержит значение " или ''локальные форматы = {}локальный titleformats_exists, titleformats = pcall(mw.loadData, «Модуль:WikidataIB/titleformats»)если titleformats_exists тогдаформаты = titleformats.formatsконец-------------------------------------------------- ------------------------------- Частные мероприятия-------------------------------------------------- --------------------------------------------------------------------------------- ------------------------------- makeOrdinal необходимо интернационализировать вместе с вышеперечисленным:-- принимает количественное числительное как число и возвращает порядковое число как строку-- нам нужны три исключения в английском языке для 1-го, 2-го, 3-го, 21-го, .. 31-го и т.д.-------------------------------------------------- ------------------------------- Зависимости: нет-------------------------------------------------- -----------------------------локальный makeOrdinal = функция(кардинальный)локальный ordsuffix = i18n.ordinal.defaultесли кардинал % 10 == 1 тогдаordsuffix = i18n.ordinal[1]elseif кардинал % 10 == 2 тогдаordsuffix = i18n.ordinal[2]elseif кардинал % 10 == 3 тогдаordsuffix = i18n.ordinal[3]конец-- В английском языке 1, 21, 31 и т. д. используют «st», а 11, 111 и т. д. используют «th».-- аналогично для 12 и 13 и т.д.если (кардинальное число % 100 == 11) или (кардинальное число % 100 == 12) или (кардинальное число % 100 == 13) тогдаordsuffix = i18n.порядковый.по умолчаниюконецвернуться кстроке(кардинал) .. ordsuffixконец-------------------------------------------------- ------------------------------- findLang принимает параметр "langcode", если он указан и действителен-- в противном случае он пытается создать его на основе установленного пользователем языка ({{int:lang}})-- в противном случае используется язык контента вики.-- Возвращает языковой объект-------------------------------------------------- ------------------------------- Зависимости: нет-------------------------------------------------- -----------------------------локальный findLang = функция(код_языка)местный лангобжlangcode = mw.text.trim(langcode или "")если mw.language.isKnownLanguageTag(код_языка) тогдаlangobj = mw.language.new(код языка)ещеlangcode = mw.getCurrentFrame():callParserFunction('int', {'lang'})если mw.language.isKnownLanguageTag(код_языка) тогдаlangobj = mw.language.new(код языка)ещеlangobj = mw.language.getContentLanguage()конецконецвернуть лангобжконец-------------------------------------------------- ------------------------------- _getItemLangCode принимает параметр qid (используя qid текущей страницы, если он пуст)-- Если элемент для этого qid имеет свойство country (P17), он смотрит на первое предпочтительное значение-- Если в стране есть официальный язык (P37), то учитывается первое предпочтительное значение.-- Если у этого официального языка есть код языка (P424), он возвращает первое предпочтительное значение-- В противном случае ничего не возвращается.-------------------------------------------------- ------------------------------- Зависимости: нет-------------------------------------------------- -----------------------------локальный _getItemLangCode = функция(qid)qid = mw.text.trim(qid или ""):upper()если qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() endесли не qid, то вернуть конецlocal prop17 = mw.wikibase.getBestStatements(qid, "P17")[1]если не prop17 или prop17.mainsnak.snaktype ~= "value", то вернуть конецлокальный qid17 = prop17.mainsnak.datavalue.value.idлокальный prop37 = mw.wikibase.getBestStatements(qid17, "P37")[1]если не prop37 или prop37.mainsnak.snaktype ~= "value", то вернуть конецлокальный qid37 = prop37.mainsnak.datavalue.value.idлокальный prop424 = mw.wikibase.getBestStatements(qid37, "P424")[1]если не prop424 или prop424.mainsnak.snaktype ~= "value", то вернуть endвернуть prop424.mainsnak.datavalue.valueконец-------------------------------------------------- ------------------------------- roundto принимает число (x)-- и возвращает его округленным до (sf) значащих цифр-------------------------------------------------- ------------------------------- Зависимости: нет-------------------------------------------------- -----------------------------локальное округление = функция (x, sf)если x == 0, то вернуть 0 конецлокальный с = 1если х < 0, тох = -хс = -1конецесли sf < 1, то sf = 1 конецлокальный p = 10 ^ (math.floor(math.log10(x)) - sf + 1)x = мат.пол(x / p + 0,5) * p * s-- если оно целое, привести к целому числу:если x == math.floor(x) тогда x = math.floor(x) конецвернуть хконец-------------------------------------------------- ------------------------------- decimalToDMS принимает десятичные градусы (x) с точностью (p)-- и возвращает градусы/минуты/секунды в соответствии с точностью-------------------------------------------------- ------------------------------- Зависимости: нет-------------------------------------------------- -----------------------------локальная decimalToDMS = функция(x, p)-- если p не указано, используйте точность около 0,1 секундыесли не tonumber(p), то p = 1e-4 конецлокальный d = math.floor(x)локальная мс = (x - d) * 60если p > 0,5 то -- точность > 1/2 градусаесли мс > 30 то d = d + 1 конецмс = 0конецлокальный m = math.floor(ms)локальный s = (мс - м) * 60если p > 0,008, то -- точность > 1/2 минутыесли s > 30, то m = m +1 конецс = 0elseif p > 0,00014 тогда -- точность > 1/2 секундыs = мат.пол(s + 0,5)elseif p > 0.000014 тогда -- точность > 1/20 секундыs = мат.пол(10 * s + 0,5) / 10elseif p > 0.0000014 тогда -- точность > 1/200 секундыs = мат.пол(100 * s + 0,5) / 100в противном случае -- на данный момент ограничьтесь 3 дек-местамиs = мат.пол(1000 * s + 0,5) / 1000конецвернуться д, м, сконец-------------------------------------------------- ------------------------------- decimalPrecision принимает десятичную дробь (x) с точностью (p)