stringtranslate.com

Модуль:Конвертировать

-- Преобразование значения из одной единицы измерения в другую.-- Пример: {{convert|123|lb|kg}} --> 123 фунта (56 кг)-- См. [[:en:Template:Convert/Transwiki guide]] при копировании в другую вики.локальный МИНУС = '−' -- ЗНАК МИНУС Unicode U+2212 (UTF-8: e2 88 92)локальная абс = математика.абслокальный пол = math.floorлокальный формат = string.formatлокальный log10 = math.log10локальная строка ustring = mw.ustringлокальный ulen = ustring.lenлокальный usub = ustring.sub-- Параметры конфигурации для хранения магических значений в одном месте.-- Данные преобразования и текст сообщения определяются в отдельных модулях.локальная конфигурация, maxsigfigлокальная точка -- должна быть '.' или ',' или символом, который работает в регулярном выражениилокальный numsep, numsep_remove, numsep_remove2локальный data_code, все_единицылокальный текстовый_кодlocal varname — может быть кодом для использования имен переменных, зависящих от значенияlocal from_en_table — для перевода выходной строки из en-цифр на локальный языкlocal to_en_table — для перевода входной строки цифр на локальном языке в en-- Используйте translation_table в convert/text, чтобы изменить следующее.local en_default -- true использует lang=en, если только convert не имеет lang=local или локальных цифрlocal group_method = 3 — код количества цифр в группеlocal per_word = 'per' — для таких единиц, как «литры на километр»local plural_suffix = 's' — возможно, единственным полезным значением является '' для отключения названий единиц во множественном числеlocal omitsep — true для пропуска разделителя перед локальным символом/именем-- Все единицы должны быть определены в модуле данных. Однако, чтобы обеспечить быстрые изменения-- и эксперименты, любая неизвестная единица ищется в дополнительном модуле данных, если таковой существует.-- Этот модуль будет включен только в небольшое количество страниц, поэтому его следует-- незначительная нагрузка на сервер при внесении изменений, и изменения должны быстро распространяться.local extra_module -- имя модуля с дополнительными модулямиlocal extra_units -- nil или таблица дополнительных единиц из extra_module-- Некоторые параметры в вызывающем шаблоне могут задавать переменные, используемые позднее в модуле.local currency_text — для пользовательского символа валюты: {{convert|12|$/ha|$=€}} (евро заменяет доллар)локальная функция from_en(текст)-- Входные данные — строка, представляющая число в en цифрах с десятичным знаком «.»,-- без группировки цифр (которая выполняется сразу после вызова).-- Верните перевод строки с точкой и цифрами на локальном языке.если нумдот ~= '.' тогдатекст = текст:gsub('%.', numdot)конецесли from_en_table тогдатекст = текст:gsub('%d', from_en_table)конецвернуть текстконецлокальная функция to_en(текст)-- Входные данные — это строка, представляющая число на местном языке с-- необязательный десятичный знак numdot и группировка цифр numsep.-- Верните перевод строки с символом «.» и цифрами en,-- и никаких разделителей (их необходимо удалить здесь, чтобы обработать такие случаи, как-- numsep = '.' и numdot = ',' с вводом "1.234.567,8").если to_en_table тогдатекст = ustring.gsub(текст, '%d', to_en_table)конецесли numsep_remove тогдатекст = текст:gsub(numsep_remove, '')конецесли numsep_remove2 тогдатекст = текст:gsub(numsep_remove2, '')конецесли нумдот ~= '.' тогдатекст = текст:gsub(numdot, '.')конецвернуть текстконецлокальная функция decimal_mark(текст)-- Верните ',', если в тексте, вероятно, используется запятая в качестве десятичного знака или десятичный знак отсутствует.-- Возвращает «.», если в тексте, вероятно, используется точка в качестве десятичного разделителя.-- В противном случае ничего не возвращать (десятичный разделитель неизвестен).если не text:find('[.,]') тогда вернуть ',' конецtext = text:gsub('^%-', ''):gsub('%+%d+/%d+$', ''):gsub('[Ee]%-?%d+$', '')местная десятичная дробь =текст:соответствие('^0?([.,])%d+$') илитекст:соответствие('%d([.,])%d?%d?$') илитекст:соответствие('%d([.,])%d%d%d%d+$')если десятичная, то вернуть десятичный конецесли текст:соответствие('%.%d+%.') тогда вернуть ',' конецесли текст:соответствие('%,%d+,') то вернуть '.' конецконецlocal add_warning, with_separator -- предварительные объявлениялокальная функция to_en_with_check(текст, параметры)-- Версия to_en() для вики, использующая numdot = ',' и numsep = '.' для проверки-- текст (входное число в виде строки), который мог быть скопирован из enwiki.-- Например, в числе «1.234» точка «.» может быть десятичным знаком или разделителем групп.-- Из Вивики.если to_en_table тогдатекст = ustring.gsub(текст, '%d', to_en_table)конецесли decimal_mark(текст) == '.' тогдалокальный оригинал = текстtext = text:gsub(',', '') -- например, интерпретировать "1,234.5" как значение enwikiесли пармс тогдаadd_warning(parms, 0, 'cvt_enwiki_num', оригинал, with_separator({}, текст))конецещеесли numsep_remove тогдатекст = текст:gsub(numsep_remove, '')конецесли numsep_remove2 тогдатекст = текст:gsub(numsep_remove2, '')конецесли нумдот ~= '.' тогдатекст = текст:gsub(numdot, '.')конецконецвернуть текстконецлокальная функция omit_separator(id)-- Возвращает true, если перед идентификатором (символом или именем единицы измерения) не должно быть разделителя.-- Для zhwiki разделитель не должен быть, если идентификатор использует локальные символы.-- Следующий трюк должен послужить достаточным тестом.если омицеп тогдаесли id:sub(1, 2) == '-{' тогда -- для варианта языка контента "-{...}-"вернуть истинуконецесли id:byte() > 127 тогдалокальный первый = usub(id, 1, 1)если первый ~= 'Å' и первый ~= '°' и первый ~= 'µ' тогдавернуть истинуконецконецконецreturn id:sub(1, 1) == '/' -- без разделителя перед единицами, например "/ha"конецlocal spell_module — имя модуля, который может записывать числалокальный орфограф — функция из этого модуля для обработки орфографии (устанавливается при необходимости)local wikidata_module, wikidata_data_module — названия модулей Викиданныхlocal wikidata_code, wikidata_data — экспортированные таблицы из этих модулей (устанавливаются при необходимости)локальная функция set_config(args)-- Установите параметры конфигурации из шаблона #invoke или значения по умолчанию.конфигурация = аргументыmaxsigfig = config.maxsigfig или 14 — максимальное количество значащих цифрлокальный модуль_данных, текстовый_модульлокальная песочница = config.sandbox и ('/' .. config.sandbox) или ''data_module = "Модуль:Конвертировать/данные" .. песочницаtext_module = "Модуль:Преобразовать/текст" .. песочницаextra_module = "Модуль:Конвертировать/дополнительно" .. песочницаwikidata_module = "Модуль:Convert/wikidata" .. песочницаwikidata_data_module = "Модуль:Convert/wikidata/data" .. песочницаspell_module = "Модуль: ПреобразованиеЧисла"data_code = mw.loadData(модуль_данных)текстовый_код = mw.loadData(текстовый_модуль)все_единицы = код_данных.все_единицылокальный перевод = text_code.translation_tableесли перевод тоnumdot = перевод.numdotnumsep = перевод.numsepесли numdot == ',' и numsep == '.' тогдаесли текстовый_код.все_сообщения.cvt_enwiki_номер тогдаto_en = to_en_with_checkконецконецесли перевод.группа тогдаметод_группы = перевод.группаконецесли перевод.на_слово тогдаза_слово = перевод.за_словоконецесли перевод.множественное_суффикс тогдасуффикс_множественного_числа = перевод.суффикс_множественного_числаконецимя_переменной = перевод.имя_переменнойfrom_en_table = перевод.from_enлокальное использование_обходного пути = trueесли использовать_обходной путь, то-- 2013-07-05 обход ошибки путем создания копии необходимой таблицы.-- mw.ustring.gsub завершается ошибкой с таблицей (to_en_table) в качестве замены,-- если доступ к таблице осуществляется через mw.loadData.локальный источник = translation.to_enесли источник тоto_en_table = {}для k, v в парах(источник) сделатьto_en_table[k] = vконецконецещеto_en_table = перевод.to_enконецесли translation.lang == 'en default' тогдаen_default = true -- для hiwikiконецomitsep = перевод.omitsep -- для zhwikiконецnumdot = config.numdot или numdot или '.' -- десятичный знак перед дробными цифрамиnumsep = config.numsep или numsep или ',' -- разделитель групп для чисел-- numsep должен быть ',' или '.' или '' или ' ' или символом Unicode.-- numsep_remove должен работать в регулярном выражении для определения разделителей, которые необходимо удалить.если numsep ~= '' тогдаnumsep_remove = (numsep == '.') и '%.' или numsepконецесли numsep ~= ',' и numdot ~= ',' тогдаnumsep_remove2 = ',' -- поэтому числа, скопированные из enwiki, будут работатьконецконецлокальная функция collection()-- Верните стол для хранения вещей.возвращаться {п = 0,добавить = функция (сам, элемент)я.n = я.n + 1self[self.n] = элементконец,}конецлокальная функция деление(числитель, знаменатель)-- Возвращает частное от деления целых чисел и остаток от деления двух чисел-- заданы числа, которые должны быть целыми числами без знака.локальное частное, остаток = пол(числитель / знаменатель), числитель % знаменательесли нет (0 <= остаток и остаток < знаменатель), то-- Это может потребоваться для пределов с плавающей точкой, как в {{convert|160.02|Ym|ydftin}}.остаток = 0конецвозвратное частное, остатокконецлокальная функция split(текст, разделитель)-- Возвращает пронумерованную таблицу с полями из разделенного текста.-- Разделитель используется в регулярном выражении без экранирования (например, «.» не сработает).-- В каждом поле удалены все начальные и конечные пробелы.локальный т = {}текст = текст .. разделитель -- для получения последнего элементадля элемента в тексте:gmatch('%s*(.-)%s*' .. разделитель) сделатьтаблица.вставка(т, элемент)конецвернуть тконецлокальная функция strip(текст)-- Если текст является строкой, вернуть ее содержимое без начальных и конечных символов.-- пробел. В противном случае вернуть nil (аргумент nil дает nil результат).если тип(текст) == 'строка' тогдавозвращаемый текст:соответствие("^%s*(.-)%s*$")конецконецлокальная функция table_len(t)-- Возвращает длину (<100) пронумерованной таблицы для замены #t, которая является-- задокументировано, что не работает, если доступ к t осуществляется через mw.loadData().для i = 1, 100 сделать