Языковые шаблоны |
---|
Языки ( ISO 639 ) |
|
Викисловарь ссылки |
|
Другой |
|
Данные |
Этот модуль Lua используется примерно на 1 150 000 страниц, или примерно на 2% всех страниц. Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах модуля / sandbox или / testcases , или в изолированной программной среде вашего собственного модуля . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. |
Этот модуль зависит от следующих других модулей: |
Этот модуль существует в первую очередь для обеспечения правильной разметки html для неанглоязычного текста, где этот текст используется в англоязычной Википедии. Его второстепенная цель - обеспечить правильный визуальный рендеринг этого неанглийского текста. Модуль был разработан для консолидации обработки для , в (большинстве) и шаблонов в единый источник и использовать четко определенный набор данных извлекаются из международных стандартов. Он обеспечивает проверку ошибок и создание отчетов, чтобы убедиться, что отображаемый HTML-код является правильным для браузеров и программ чтения с экрана.{{Lang}}
{{lang-??}}
{{Transl}}
Другие шаблоны, которые получают поддержку имени языка из этого модуля:
{{Native name}}
Набор данных
Набор данных указывается в Module: Lang / data и включенных в него модулях данных:
- языковые данные тегов и имен
- Модуль: Язык / данные / языки iana - из файла реестра IANA language-subtag-registry
- данные языкового сценария
- Модуль: Язык / данные / скрипты iana - из файла реестра языковых вложенных тегов IANA
- данные языкового региона
- Модуль: Язык / данные / регионы iana - из файла реестра языковых подтегов IANA
- данные языкового варианта
- Модуль: варианты языка / данных / iana - из файла реестра языковых вложенных тегов IANA
- данные подавленного сценария
- Модуль: Подавленные скрипты языка / данных / iana - из файла реестра IANA language-subtag-registry
Набор данных также включает дополнительные модули данных:
- переопределение и другие нестандартные данные
- Модуль: Синонимы языка / ISO 639 - сопоставляет трехсимвольные коды ISO 639-2, -2T, -3 с двухсимвольными кодами ISO 639-1 - из кодов для представления названий языков.
- Модуль: Lang / tag from name - поменять местами данные тега и имени языка, чтобы имя языка было ключом, а языковой тег - значением
Тестовые наборы
- Модуль: Lang / testcases ( запустить )
- category_from_tag ()
- Модуль: Lang / testcases / ISO 639-1 категория из тега ( запустить )
- Модуль: Lang / testcases / ISO 639-3-1 категория из тега (A – H) ( запустить )
- Модуль: Lang / testcases / ISO 639-3-2 категория из тега (I – N) ( запустить )
- Модуль: Lang / testcases / ISO 639-3-3 категория из тега (O – Z) ( запустить )
- Модуль: Lang / testcases / ISO 639 устарел и переопределить категорию из тега ( запустить )
- name_from_tag ()
- Модуль: Lang / testcases / ISO 639-1 имя из тега ( запустить )
- Модуль: Lang / testcases / ISO 639-3-1 имя из тега (A – H) ( запустить )
- Модуль: Lang / testcases / ISO 639-3-2 имя из тега (I – N) ( запустить )
- Модуль: Lang / testcases / ISO 639-3-3 имя из тега (O – Z) ( запустить )
- Модуль: Lang / testcases / ISO 639 устарел и переопределить имя из тега ( запустить )
- tag_from_name ()
- Модуль: Lang / testcases / ISO 639-1 tag from name ( run )
- Модуль: Lang / testcases / ISO 639-3-1 тег из имени (A – H) ( запустить )
- Модуль: Lang / testcases / ISO 639-3-2 tag from name (I – N) ( run ).
- Модуль: Lang / testcases / ISO 639-3-3 tag from name (O – Z) ( run )
- Модуль: Lang / testcases / ISO 639 устарел и заменить тег из имени ( запустить )
Категории отслеживания
- Категория: Ошибки шаблонов Lang и lang-xx (51)
- Категория: Ошибки в шаблоне переводчика (11)
- Категория: код языка и языка-xx повышен до ISO 639-1 (158)
- Категория: Lang и lang-xx с использованием устаревших кодов ISO 639 (23)
Смотрите также
MoS на иностранных словах:
- Википедия: Руководство по стилю / форматированию текста § Иностранные термины
знак равноПоддержка Lua шаблонов {{lang}}, {{lang-xx}} и {{transl}} и замена различных поддерживающих шаблонов. знак равноrequire ( 'Модуль: без глобальных переменных' );local getArgs = require ( 'Модуль: аргументы' ). getArgs ;local unicode = require ( "Модуль: данные Unicode" ); - для is_latin () и is_rtl ()local yesno = require ( 'Модуль: Да нет' );локальный lang_data = mw . loadData ( 'Модуль: Lang / data' ); - таблицы подсказок для переопределения названий языков и транслитерацииlocal lang_name_table = lang_data . lang_name_table ; - языковые коды, имена, регионы, скрипты, подавленные скриптылокальный lang_table = lang_data . lang_name_table . lang ;локальный lang_dep_table = lang_data . lang_name_table . lang_dep ;локальная таблица_скриптов = lang_data . lang_name_table . сценарий ;local region_table = lang_data . lang_name_table . регион ;локальный вариант_таблицы = lang_data . lang_name_table . вариант ;локальная таблица suppressed_table = lang_data . lang_name_table . подавлен ;локальная override_table = lang_data . переопределить ;локальная таблица_синонимов = mw . loadData ( 'Модуль: синонимы Lang / ISO 639' ); - Перевод кода ISO 639-2 / 639-2T в код 639-1локальное пространство имен = mw . название . getCurrentTitle (). пространство имен ; - используется для категоризацииместные this_wiki_lang = mw . язык . getContentLanguage (). код ; - получить язык этой викилокальный initial_style_state ; - устанавливается lang_xx_normal () и lang_xx_italic ()местные maint_cats = {}; - категории обслуживания находятся здесьлокальный maint_msgs = {}; - и их сообщения идут сюда- [[-------------------------- <IS _ SET> --------------- -------------------------------------------------- -Возвращает истину, если аргумент установлен; в противном случае - ложь. Аргумент «установлен», если он существует (не ноль) или когда это не пустая строка.]]локальная функция is_set ( var ) не возвращать ( var == nil или var == '' );конец- [[-------------------------- <ИНВЕРТИРОВАТЬ _ ИТАЛИКА> --------------- ----------------------------------Эта функция пытается инвертировать курсивную разметку в args.text, добавляя / удаляя начальную / конечную курсивную разметку.в args.text. Подобно | italic = unset, | italic = invert отключает автоматическую разметку курсивом. Индивидуальные ведущие / конечныеапострофы преобразуются в их эквивалент числовой сущности html, так что новая курсивная разметка не становитсяжирная разметка непреднамеренно.Начальная и конечная разметка вики извлекается из args.text в отдельные элементы таблицы. Добавление, удаление,Замена разметки вики обрабатывается таблицей замены string.gsub (), работающей только с этими отдельными элементами.В шаблоне соответствия string.gsub () '. *' Соответствует пустой строке, а также трем ожидаемым шаблонам разметки вики.Эта функция ожидает, что разметка в args.text будет полной и правильной; в противном случае может возникнуть странность.]]локальная функция invert_italics ( источник )local invert_pattern_table = { - начальная / конечная разметка добавить / удалить / заменить шаблоны[ "" ] = " \ '\' " , - пустая строка становится курсивной разметкой[ " \ '\' " ] = "" , - курсивная разметка становится пустой строкой[ " \ '\' \ ' " ] = " \' \ '\' \ '\' " , - жирный шрифт становится полужирным курсивом[ " \ '\' \ '\' \ ' " ] = " \' \ '\' " , - жирный курсив становится жирным};локальный сегмент = {};source = source : gsub ( "% f [ \ ' ] \' % f [^ \ ' ]" , ' & # 39; ' ); - защитить одинарные кавычки от интерпретации полужирной разметкисегмент [ 1 ] = источник : совпадение ( '^ ( \' \ ' +% f [^ \' ]). + ' ) или ' ' ; - получить начальную разметку, если есть; игнорировать одинарную кавычкусегмент [ 3 ] = источник : совпадение ( '. + (% f [ \' ] \ '\' +) $ ' ) или ' ' ; - получить конечную разметку, если есть; игнорировать одинарную кавычкуесли '' ~ = seg [ 1 ] и '' ~ = seg [ 3 ], то - извлеките 'текст'seg [ 2 ] = source : match ( '^ \' \ ' +% f [^ \' ] (. +)% f [ \ ' ] \' \ ' + $' ) - между ведущей и конечной разметкойelseif '' ~ = seg [ 1 ] тогдаseg [ 2 ] = source : match ( '^ \' \ ' +% f [^ \' ] (. +) ' ) - следующая начальная разметкаelseif '' ~ = seg [ 3 ] тогдаseg [ 2 ] = source : match ( '(. +)% f [ \' ] \ '\' + $ ' ) - предшествующая конечная разметкаещеseg [ 2 ] = source - при отсутствии разметкиконецSEG [ 1 ] = invert_pattern_table [ SEG [ 1 ]] или SEG [ 1 ]; - заменить ведущую разметку в соответствии с таблицей шаблоновSEG [ 3 ] = invert_pattern_table [ SEG [ 3 ]] или SEG [ 3 ]; - заменить ведущую разметку в соответствии с таблицей шаблоноввернуть table.concat ( сегмент ); - собрал все вместе и готовоконец- [[-------------------------- <ПОДТВЕРДИТЬ _ ИТАЛИЧЕСКИЙ> --------------- ---------------------------------проверяет | курсивом = или | курсивом = присвоенные значения.Если установлен | italic = и ему присвоено допустимое значение, вернуть соответствующее значение свойства стиля шрифта css или,для особого случая «по умолчанию» вернуть ноль.Если | italic = не установлен или имеет недопустимое присвоенное значение, возвращается nil и сообщение об ошибке nil.Если установлены как | italic =, и | italics =, возвращается nil и сообщение об ошибке «конфликтующее».Возвращаемое значение nil заставляет вызывающую функцию lang, lang_xx или transl установить args.italic в соответствии с шаблоном.определены по умолчанию («наследовать» для {{lang}}, «наследовать» или «курсив» для {{lang-xx}} в зависимости оттребования отдельного шаблона, курсив для {{transl}}) или значение, соответствующее | script =, если установлено ({{lang}}и только {{lang-xx}}).Допустимые значения и значения, которые возвращает эта функция:nil - когда | курсив = отсутствует или не установлен; возвращает нольпо умолчанию - для полноты, должен использоваться редко, если вообще когда-либо; возвращает нольyes - принудительно отображать args.text курсивным шрифтом; возвращает курсивno - принудительно отображать args.text обычным шрифтом; возвращает "нормальный"unset - отключает управление шрифтом, чтобы стиль шрифта, применяемый к тексту, определялся разметкой внутри или вне шаблона; возвращает "наследование"инвертировать - отключает управление шрифтом, чтобы стиль шрифта, применяемый к тексту, определялся разметкой снаружи или инвертировался внутри шаблона; возвращает 'инвертировать']]локальная функция validate_italic ( args )local properties = {[ 'yes' ] = 'курсив' , [ 'no' ] = 'normal' , [ 'unset' ] = 'наследовать' , [ 'invert' ] = 'invert' , [ 'default' ] = nil };местный счетчик = 0for _ , arg в парах { 'курсив' , 'курсив' , 'i' } делатьесли args [ arg ], тоcount = count + 1конецконецесли count > 1, то - вернуть nil и сообщение об ошибке, если установлено более одногоreturn nil , 'можно указать только один из | italic =, | italics = или | i =' ;конецвернуть свойства [ args . курсив или аргументы . курсив или аргументы . i ], ноль ; - вернуть соответствующее значение и сообщение об ошибке nilконец- [= [-------------------------- <ПРОВЕРИТЬ _ CAT _ ARGS> ------------ ----------------------------------------------По умолчанию шаблоны {{lang}} и {{lang-xx}} добавляют категоризацию, когда шаблоны используются в основном пространстве.Эта функция по умолчанию может быть отключена установкой | nocat = yes или | cat = no. Эта функция выбирает один из этих двух параметров.для управления категоризацией.Поскольку наличие двух параметров с «противоположными» именами и «противоположными» значениями сбивает с толку, эта функция принимает только утвердительныезначения для | nocat = и только отрицательные значения для | cat =; в обоих случаях «другой» смысл (и бессмысленность) не принимается, ипараметр обрабатывается так, как если бы он не был задан в шаблоне.Устанавливает args.nocat в значение true, если категоризация должна быть отключена; в ноль, если должно применяться поведение по умолчанию.Допустимые значения для | nocat = - текстовые строки:'yes', 'y', 'true', 't', on, '1' - [[Module: Yesno]] возвращает логическое истинное значение для всех этих параметров; ложь или еще нольдля | cat ='no', 'n', 'false', 'f', 'off', '0' - [[Module: Yesno]] возвращает логическое false для всех этих параметров; правда или ноль иначезнак равнолокальная функция validate_cat_args ( args )если нет ( args . nocat или args . cat ), то - оба равны нулю, поэтому классифицируйтевозврат ;конецесли false == yesno ( args . cat ) или true == yesno ( args . nocat ), тоаргументы . nocat = true ; - установить в true, если args.nocat положительный; nil else (как если бы параметр не был задан в шаблоне)else - args.nocat - это фактически используемый параметр.аргументы . nocat = ноль ;конецконец- [[-------------------------- <IN _ ARRAY> --------------- -----------------------------------------------Находится ли иголка в стоге сена]]локальная функция in_array ( игла , стог сена )если игла == ноль, товернуть ложь ;конецдля n , v в ipairs ( стог сена ) делатьесли v == игла, тоreturn n ;конецконецвернуть ложь ;конец- [[-------------------------- <FORMAT _ IETF _ TAG> ------------- -----------------------------------prettify теги ietf для использования рекомендуемых форматов вложенных тегов:код: нижний регистрсценарий: падеж предложенийрегион: верхний регистрвариант: нижний регистрprivate: нижний регистр с префиксом -x-]]локальная функция format_ietf_tag ( код , скрипт , регион , вариант , частный )локальный выход = {};если is_set ( частный ), тоreturn table.concat ({ код : нижний (), 'x' , частный : нижний ()}, '-' ); - если приватный, все остальные теги игнорируютсяконецtable.insert ( выход , код : нижний ());если is_set ( скрипт ), тоскрипт = скрипт : нижний (): gsub ( '^% a' , string.upper );table.insert ( выход , скрипт );конецесли is_set ( регион ), тоtable.insert ( вне , регион : верхний ());конецесли is_set ( вариант ), тоtable.insert ( вне , вариант : нижний ());конецвернуть table.concat ( out , '-' );конец- [[-------------------------- <ПОЛУЧИТЬ _ IETF _ ЧАСТИ> ------------- -------------------------------------извлекает и возвращает части языковых тегов IETF:вложенный тег основного языка (обязательно) - 2- или 3-значный код языка IANAвложенный тег скрипта - четырехсимвольный код скрипта IANAподтег региона - двухбуквенный или трехзначный код региона IANAвариантный подтег - четырехзначный или 5-8-значный код варианта; поддерживается только один вариант подтегачастный вложенный тег - x-, за которым следует частный код 1-8 alnum; поддерживается только с тегом основного языкав любой из этих формlang lang-variantlang-скрипт lang-скрипт-вариантlang-region lang-region-variantрегион-скрипт-язык вариант-регион-скрипта-языкаlang-x-privateкаждый из языков, сценариев, регионов, вариантов и частных, если они используются, должен быть действительным.Языки с двухсимвольными и трехсимвольными кодовыми синонимами повышаются до двухсимвольных синонимов, потому чтов файле реестра IANA отсутствует синонимичный трехсимвольный код; мы не можем полагаться на понимание браузерамисинонимичные трехсимвольные коды в атрибуте lang =.Для шаблонов {{lang-xx}} поддерживаются параметры | script =, | region = и | variant = (не поддерживаются в {{lang}}потому что эти параметры излишни для вложенных тегов IETF в | code =)возвращает шесть значений; все строчные. Действительные детали возвращаются сами по себе; пропущенные части возвращаются как пустые строки, недопустимыдетали возвращаются как ноль; шестой возвращаемый элемент - это сообщение об ошибке (если ошибка обнаружена) или ноль.см. http://www.rfc-editor.org/rfc/bcp/bcp47.txt раздел 2.1.]]локальная функция get_ietf_parts ( источник , args_script , args_region , args_variant )локальный код , скрипт , регион , вариант , частный ; - части тега ietfесли не is_set ( источник ), товернуть nil , nil , nil , nil , nil , 'отсутствующий языковой тег' ;конецlocal pattern = { - таблица таблиц, содержащих допустимые шаблоны тегов ietf и короткие имена части ietf, захваченные шаблоном{ '^ (% a% a% a?)% - (% a% a% a% a)% - (% a% a)% - (% d% d% d% d) $' , 's' , 'r' , 'v' }, - 1 - ll-Ssss-RR-вариант (где вариант - 4 цифры){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% d% d% d)% - (% d% d% d% d) $' , ' s ' , ' r ' , ' v ' }, - 2 - ll-Ssss-DDD-вариант (где регион - 3 цифры; вариант - 4 цифры){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% a% a)% - (% w% w% w% w% w% w?% w ?% w?) $ ' , ' s ' , ' r ' , ' v ' }, - 3 - ll-Ssss-RR-option (где вариант - 5-8 alnum символов){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% d% d% d)% - (% w% w% w% w% w% w? % w?% w?) $ ' , ' s ' , ' r ' , ' v ' }, - 4 - ll-Ssss-DDD-вариант (где регион - 3 цифры; вариант - 5-8 буквенных символов){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% d% d% d% d) $' , 's' , 'v' }, - 5 - ll-Ssss-вариант (где вариант - 4 цифры){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% w% w% w% w% w% w?% w?% w?) $' , 's' , 'v' }, - 6 - ll-Ssss-option (где вариант - это 5-8 буквенных символов){ '^ (% a% a% a?)% - (% a% a)% - (% d% d% d% d) $' , 'r' , 'v' }, - 7 - ll- RR-вариант (где вариант - 4 цифры){ '^ (% a% a% a?)% - (% d% d% d)% - (% d% d% d% d) $' , 'r' , 'v' }, - 8 - ll-DDD-вариант (где регион - 3 цифры; вариант - 4 цифры){ '^ (% a% a% a?)% - (% a% a)% - (% w% w% w% w% w% w?% w?% w?) $' , 'r' , 'v' }, - 9 - ll-RR-вариант (где вариант - это 5-8 буквенных символов){ '^ (% a% a% a?)% - (% d% d% d)% - (% w% w% w% w% w% w?% w?% w?) $' , 'r ' , ' v ' }, - 10 - ll-DDD-вариант (где регион - 3 цифры; вариант - 5-8 буквенных знаков){ '^ (% a% a% a?)% - (% d% d% d% d) $' , 'v' }, - 11 - ll-вариант (где вариант - 4 цифры){ '^ (% a% a% a?)% - (% w% w% w% w% w% w?% w?% w?) $' , 'v' }, - 12 - ll-вариант (где вариант - 5-8 буквенных знаков){ '^ (% a% a% a?)% - (% a% a% a% a)% - (% a% a) $' , 's' , 'r' }, - 13 - ll- Ssss-RR{ '^ (% a% a% a?)% - (% a% a% a% a)% - (% d% d% d) $' , 's' , 'r' }, - 14 - ll-Ssss-DDD (регион состоит из 3 цифр){ '^ (% a% a% a?)% - (% a% a% a% a) $' , 's' }, - 15 - ll-Ssss{ '^ (% a% a% a?)% - (% a% a) $' , 'r' }, - 16 - ll-RR{ '^ (% a% a% a?)% - (% d% d% d) $' , 'r' }, - 17 - ll-DDD (регион состоит из 3 цифр){ '^ (% a% a% a?) $' }, - 18 - ll{ '^ (% a% a% a?)% - x% - (% w% w?% w?% w?% w?% w?% w?% w?) $' , 'p' }, - 19 - ll-x-pppppppp (частный - 1-8 буквенных символов)}местный t = {}; - таблица захватов; служит переводчиком между захваченными частями тега ietf и именованными переменнымиfor i , v в ipairs ( pattern ) do - пролистать таблицу шаблонов в поисках совпаденияместные c1 , c2 , c3 , c4 ; - снимки в 'шаблоне' из таблицы шаблонов идут сюдаc1 , c2 , c3 , c4 = источник : совпадение ( шаблон [ i ] [ 1 ]); - установлен один или несколько захватов, если источник соответствует шаблону [i])если c1, то - c1 всегда устанавливается при совпаденииcode = c1 ; - первый захват всегда кодt = {[ шаблон [ i ] [ 2 ] или 'x' ] = c2 , - заполнить таблицу захватов остальными захватами[ шаблон [ i ] [ 3 ] или 'x' ] = c3 , - взять имена индексов из таблицы шаблонов и назначить последовательные захваты[ pattern [ i ] [ 4 ] или 'x' ] = c4 , - имя индекса может быть нулем в таблице pattern [i], поэтому "или 'x'" подделывает имя для этого индекса в этой таблице};скрипт = т . s или '' ; - переводить содержимое таблицы в именованные переменные;регион = t . г или '' ; - отсутствующие записи в таблице равны нулю, поэтому установите для именованных частей ietf пустую строку для конкатенациивариант = т . v или '' ;частный = т . p или '' ;перерыв ; - и готовоконецконецесли не код, тоreturn nil , nil , nil , nil , nil , table.concat ({ 'нераспознанный языковой тег:' , источник }); - не знаю, что у нас есть, но он искаженконецкод = код : нижний (); - убедитесь, что мы используем и возвращаем строчные версии этогоесли нет ( override_table [ code ] или lang_table [ code ] или synonym_table [ code ] или lang_dep_table [ code ]), тоreturn nil , nil , nil , nil , nil , table.concat ({ 'нераспознанный код языка:' , code }); - неверный языковой код, не знаю о других (все равно?)конецif synonym_table [ code ] то - если код 639-2 / 639-2T имеет синоним 639-1table.insert ( maint_cats , table.concat ({ 'Ланг и Ланг-хе коды повышены до ISO 639-1 |' , код }));table.insert ( maint_msgs , table.concat ({ 'код:' , код , 'назначен код:' , synonym_table [ код ]}));код = таблица_синонимов [ код ]; - используйте синонимконецесли is_set ( скрипт ), тоесли is_set ( args_script ), то код возврата , nil , nil , nil , nil , 'избыточный тег скрипта' ; - оба кода со скриптом и | скрипт = не разрешеныконецещескрипт = args_script или '' ; - используйте args.script, если он указанконец если is_set ( скрипт ), тоскрипт = скрипт : нижний (); - убедитесь, что мы используем и возвращаем строчные версии этогоесли не script_table [ script ], то код возврата , ноль , ноль , ноль , ноль , table.concat ({ 'нераспознанный скрипт:' , скрипт , 'для кода:' , код }); - код языка в порядке, неверный сценарий, не знаю о других (все равно?)конецконецесли suppressed_table [ скрипт ], тогда - убедитесь, что код-скрипт не использует подавленный скриптесли in_array ( код , suppressed_table [ скрипт ]), то код возврата , ноль , ноль , ноль , ноль , table.concat ({ 'скрипт:' , скрипт , 'не поддерживается для кода:' , код }); - код языка в порядке, скрипт для этого кода отключенконецконецесли is_set ( регион ), тоесли is_set ( args_region ), то код возврата , nil , nil , nil , nil , 'избыточный тег региона' ; - оба кода с регионом и | регион = не разрешеныконецещеregion = args_region или '' ; - используйте args.region, если он предоставленконец если is_set ( регион ), торегион = регион : нижний (); - убедитесь, что мы используем и возвращаем строчные версии этогоесли не region_table [ регион ], то код возврата , скрипт , ноль , ноль , ноль , table.concat ({ 'нераспознанный регион:' , регион , 'для кода:' , код });конецконецесли is_set ( вариант ), тоесли is_set ( args_variant ), то код возврата , nil , nil , nil , nil , 'избыточный вариантный тег' ; - оба кода с вариантом и | вариант = не разрешеныконецещевариант = вариант_аргумента или '' ; - используйте args.variant, если он указанконец если is_set ( вариант ), товариант = вариант : нижний (); - убедитесь, что мы используем и возвращаем строчные версии этогоесли не вариант_таблица [ вариант ], тогда - убедитесь, что вариант действителен код возврата , сценарий , регион , ноль , ноль , table.concat ({ 'нераспознанный вариант:' , вариант });конец - это дублирует / заменяет тесты в lang () и lang_xx ()?if is_set ( script ) then - если установлен сценарий, он должен быть частью префиксаесли не in_array ( table.concat ({ код , '-' , сценарий }), variant_table [ вариант ] [ 'префиксы' ]) , то код возврата , скрипт , регион , ноль , ноль , table.concat ({ 'нераспознанный вариант:' , вариант , 'для пары код-скрипт:' , код , '-' , скрипт });конецelseif is_set ( region ) then - если задан регион, есть некоторые префиксы, требующие кода языка и региона (en-CA-newfound)если не in_array ( код , вариант_таблицы [ вариант ] [ 'префиксы' ]), то сначала проверьте, является ли код языка всем, что требуется (en-oxendict, хотя en-GB-oxendict предпочтительнее)если не in_array ( table.concat ({ code , '-' , region }), variant_table [ variant ] [ ' prefixes ' ]), то - теперь попробуйте ввести код языка и регион (en-CA-newfound) код возврата , скрипт , регион , ноль , ноль , table.concat ({ 'нераспознанный вариант:' , вариант , 'для пары код-регион:' , код , '-' , регион });конецконецещеесли не in_array ( код , вариант_таблица [ вариант ] [ 'префиксы' ]), то код возврата , сценарий , регион , ноль , ноль , table.concat ({ 'нераспознанный вариант:' , вариант , 'для кода:' , код });конецконецконецесли is_set ( частный ), точастный = частный : нижний (); - убедитесь, что мы используем и возвращаем строчные версии этогоесли не override_table [ table.concat ({ code , '-x-' , private })], тогда - убедитесь, что закрытый тег действителен; обратите внимание, что индекс код возврата , скрипт , регион , ноль , ноль , table.concat ({ 'нераспознанный частный тег:' , частный });конецконец код возврата , сценарий , регион , вариант , частный , ноль ; - вернуть хорошие биты; убедитесь, что msg равно нулюконец- [[-------------------------- <MAKE _ ERROR _ MSG> ------------- -------------------------------------собирает сообщение об ошибке из имени шаблона, текста сообщения, ссылки на справку и категории ошибки.]]локальная функция make_error_msg ( msg , args , template )локальный выход = {};местная категория ;если 'Transl' == шаблон, тоcategory = 'Перевод' ;ещеcategory = 'Lang and lang-xx'конецtable.insert ( out , table.concat ({ '[' , args . text или 'undefined' , ']' })); - для сообщений об ошибках выводить args.text, если естьtable.insert ( out , table.concat ({ '<span style = \ " font-size: 100%; font-style: normal; \" class = \ " error \" > Ошибка: {{' , template , ' }}: ' }));table.insert ( выход , сообщение );table.insert ( out , table.concat ({ '([[: Категория:' , категория , 'ошибки шаблона | справка]])' }));table.insert ( вне , '</span>' );if ( 0 == пространство имен или 10 == пространство имен ), а не args . nocat then - категоризируйте в пространстве статьи (и пространстве шаблона, чтобы позаботиться о неправильном использовании)table.insert ( out , table.concat ({ '[[Категория:' , категория , 'ошибки шаблона]]' }));конецreturn table.concat ( выход );конец- [= [------------------------- <СДЕЛАТЬ _ WIKILINK> --------------- -------------------------------------Создает вики-ссылку; если предоставлены и ссылка, и отображаемый текст, возвращает вики-ссылку в форме [[L | D]]; если толькоссылка предоставляется, возвращает вики-ссылку в форме [[L]]; если ни один из них не указан или ссылка не указана, возвращаетпустая строка.знак равнолокальная функция make_wikilink ( ссылка , отображение )если is_set ( ссылка ), тоесли is_set ( дисплей ), тоreturn table.concat ({ '[[' , ссылка , '|' , отображение , ']]' });ещевернуть table.concat ({ '[[' , ссылка , ']]' });конецещевозврат '' ;конецконец- [[-------------------------- <DIV _ MARKUP _ ADD> ------------- -------------------------------------добавляет теги <i> и </i> к тексту элемента списка или подразумеваемому тексту <p> .. </p>. смешанный не поддерживается]]локальная функция div_markup_add ( текст , стиль )местный implied_p = {};если text : find ( '^ \ n [% *:; #]' ) тогда - искать разметку списка; разметка списка должна начинаться с начала текстаесли 'курсив' == стиль, товернуть мв . ustring . gsub ( текст , '( \ n [% *:; #] +) ([^ \ n ] +)' , '% 1 <i>% 2 </i>' ); - вставлять курсивную разметку в каждый пункт спискаеще текст возврата ;конецконецif text : find ( ' \ n +' ) then - искать любое количество \ n символов в текстетекст = текст : gsub ( '([^ \ n ]) \ n ([^ \ n ])' , '% 1% 2' ); - заменить отдельные символы новой строки на пробел, имитирующий mediawikiесли 'курсив' == стиль, тотекст = текст : gsub ( '[^ \ n ] +' , '<p> <i>% 1 </i> </p>' ); - вставить p и курсивные теги разметки на каждом реализованном p (две или более последовательных последовательностей '\ n \ n')ещетекст = текст : gsub ( '[^ \ n ] +' , '<p>% 1 </p>' ); - вставить разметку p на каждом орудии pтекст = текст : gsub ( ' \ n ' , '' ); - убрать символы новой строкиконецконец текст возврата ;конец- [[-------------------------- <СДЕЛАТЬ _ ТЕКСТ _ HTML> ------------- -------------------------------------Добавьте html-разметку к тексту в соответствии с типом содержимого: теги <span> или <i> для встроенного содержимого или<div> теги для содержимого блока]]локальная функция make_text_html ( код , текст , тег , RTL , стиль , размер , язык )местный html = {};местный style_added = '' ;если text : match ( '^% *' ), тоtable.insert ( HTML , '& # 42;' ); - переместить текстовый префикс протоязыка за пределы курсивной разметки, если таковой имеется; используйте числовую сущность, потому что простой знак вводит в заблуждение MediaWikiтекст = текст : gsub ( '^% *' , '' ); - убрать заставку с текстаконецif 'span' == tag then - тег html по умолчанию для встроенного содержимогоесли 'курсив' == стиль, то - но если курсивtag = 'я' ; - заменить на теги <i>конециначе - должно быть div, так что впередтекст = div_markup_add ( текст , стиль ); - подразумеваемый дескриптор <p>, подразумеваемый <p> с <i> и разметка списка (*;: #) с <i>конецtable.insert ( HTML , table.concat ({ '<' , tag })); - откройте тег html <i>, <span> или <div>table.insert ( HTML , table.concat ({ 'lang = "' , code , ' \" ' })); - добавить атрибут языкаесли RTL или Unicode . is_rtl ( текст ), затемtable.insert ( html , 'dir = "rtl"' ); - добавить атрибут направления для языков справа налевоконецесли 'нормальный' == стиль, то - когда | курсив = нетtable.insert ( html , 'style = \ " font-style: normal;' ); - переопределить внешнюю разметку, если естьstyle_added = ' \ " ' ; - помните, что атрибут стиля добавлен и еще не закрытконецесли is_set ( размер ), то - когда | size = <что-то>если is_set ( style_added ), тоtable.insert ( html , table.concat ({ 'размер шрифта:' , размер , ';' })); - добавить, когда атрибут стиля уже вставленещеtable.insert ( html , table.concat ({ 'style = \ " font-size:' , size , ';' })); - создать атрибут стиляstyle_added = ' \ " ' ; - помните, что атрибут стиля добавлен и еще не закрытконецконецесли is_set ( язык ), тоtable.insert ( html , table.concat ({ style_added , 'title = \ " ' , language })); - начать текст заголовкаесли язык : найти ( 'языки' ), тогдаtable.insert ( html , 'собирательный текст' ); - для коллективных языковещеtable.insert ( html , '-языковой текст' ); - для отдельных языковконецtable.insert ( html , ' \ " >' ); - закрыть открывающий тег htmlещеtable.insert ( HTML , table.concat ({ style_added , '>' })); - закрыть атрибут стиля и закрыть открывающий тег htmlконецtable.insert ( HTML , текст ); - вставить текстtable.insert ( HTML , table.concat ({ '</' , tag , '>' })); - закройте теги <i>, <span> или <div> htmlесли rtl, то - legacy; не обязательно, потому что весь текст rtl заключен в тег html с атрибутом dir = "rtl"table.insert ( HTML , '& lrm;' ); - убедитесь, что браузер знает, что мы находимся в конце RTLконецвернуть table.concat ( html ); - Сложил все воедино и готовоконец- [= [------------------------- <СДЕЛАТЬ _ КАТЕГОРИЮ> --------------- -------------------------------------Для отдельного языка <language> возвращает:[[Категория: статьи, содержащие текст на <language> -языке]]для английского:[[Категория: статьи, содержащие явно цитируемый текст на английском языке]]для коллективных языков ISO 639-2 (и для 639-1 bh):[[Категория: статьи с текстом на <language> языках]]знак равнолокальная функция make_category ( код , language_name , nocat , name_get )местный кот = {};местный ретвал ;if (( 0 ~ = namespace ) или nocat ), а не name_get then - категоризировать только в пространстве статейвозврат '' ; - вернуть пустую строку для конкатенацииконецесли language_name : find ( 'languages' ), тоreturn table.concat ({ '[[Категория: статьи с текстом на' , language_name , ']]' });конецtable.insert ( cat , '[[Категория: статьи, содержащие' );если 'ru' == код, тоtable.insert ( cat , 'явно процитировано' .. language_name ); - возвращается к английскому языку, если региональное название недоступноещеtable.insert ( cat , language_name );конецtable.insert ( cat , '-языковый текст]]' );вернуть table.concat ( cat );конец- [[-------------------------- <СДЕЛАТЬ _ ПЕРЕВОД> --------------- -------------------------------------return translit <i lang = xx-Latn> ... </i> где xx - код языка; иначе вернуть пустую строкуЗначение | script = не используется в {{transl}} для этой цели; вместо этого он использует код. Потому что языковые скриптыперечислены в переключателях {{transl}}, которые включены в таблицы данных. Введен параметр скриптав {{Язык с названием и транслитерацией}}. Если установлен | script =, эта функция использует его вместо кода.Во избежание путаницы в этом модуле и в шаблонах, которые его используют, параметр скрипта транслитерации переименованбыть | translit-script = (в этой функции tscript)Эта функция используется как lang_xx (), так и transl ().lang_xx () всегда предоставляет код, имя_языка и транслит; может предоставить сценарий; никогда не дает стиляtransl () всегда предоставляет language_name, translit и одно из кода или tscript, но не оба сразу; всегда обеспечивает стильДля {{transl}} стиль применяется только в том случае, если указан языковой код.]]локальная функция make_translit ( код , language_name , транслит , станд , tscript , стиль )местное название ;местные tout = {};локальный title_table = lang_data . translit_title_table ; - таблица стандартов транслитерации, а также языковые коды и сценарии, применимые к этим стандартамесли is_set ( code ), то - когда предоставляется код языка (всегда с шаблонами {{lang-xx}}, не всегда с {{transl}})если не стиль, то - ноль для начального курсива по умолчаниюtable.insert ( tout , "<i lang = \" " ); - поэтому используйте тег <i>ещеtable.insert ( tout , table.concat ({ '<span style = \ " font-style:' , style , ' \" lang = \ " ' })); - нестандартный стиль, создайте тег span для Этоконецtable.insert ( tout , код );table.insert ( tout , "-Latn \" title = \ " " ); - транслитерация всегда выполняется латиницейещеtable.insert ( tout , "<span title = \" " ); - при отсутствии кода языка: без атрибута lang =, без курсива (только {{transl}})конецstd = std и std : lower (); - нижний регистр для индексации таблицыесли не is_set ( std ) и не is_set ( tscript ), то - когда ни стандарт, ни скрипт не указаныtable.insert ( tout , language_name ); - написать общую подсказкуесли не language_name : find ( 'languages' ) then - собирательные имена языков (множественное число 'languages' является частью имени)table.insert ( tout , '-language' ) - пропустить этот текст (только для отдельных языков и языков макросов)конецtable.insert ( tout , латинизация ); - доделать наконечник инструмента; используйте латинизацию, когда не поставляется ни скрипт, ни стандартelseif is_set ( std ) и is_set ( tscript ) тогда - когда оба указаныесли title_table [ std ], то - и если стандарт допустимесли title_table [ std ] [ tscript ], то - и если сценарий для этого стандарта является допустимымtable.insert ( tout , table.concat ({ title_table [ std ] [ tscript : lower ()], '(' , script_table [ tscript ] [ 1 ], 'script) транслитерация' })); - добавить соответствующий текст во всплывающую подсказкуещеtable.insert ( tout , title_table [ std ] [ 'по умолчанию' ]); - использовать значение по умолчанию, если скрипт отсутствует в таблице std; TODO: поддерживать кота? сообщение об ошибке, потому что сценарий не найден для этого стандарта?конецещевозврат '' ; - неверный стандарт, настройка для сообщения об ошибкеконецelseif is_set ( std ) then - транслит-скрипт не установлен, используйте код языкаесли не title_table [ std ], то верните '' ; конец - недопустимый стандарт, настройка для сообщения об ошибкеif title_table [ std ] [ code ] then - если код языка находится в таблице (переводчик может не предоставлять код языка)- table.insert (tout, table.concat ({title_table [std] [code: lower ()], '(', lang_table [code] [1], 'language) транслитерация'})); - добавить соответствующий текст во всплывающую подсказкуtable.insert ( tout , table.concat ({ title_table [ std ] [ code : lower ()], '(' , language_name , 'language) транслитерация' })); - добавить соответствующий текст во всплывающую подсказкуelse - код не совпадаетtable.insert ( tout , title_table [ std ] [ 'по умолчанию' ]); - поэтому используйте стандартное значение по умолчаниюконецelse - здесь, если транслит-скрипт установлен, а транслит-стандарт не заданесли title_table [ 'no_std' ] [ tscript ], тоtable.insert ( tout , title_table [ 'no_std' ] [ tscript ]); - использовать транслит-скрипт, если установленelseif title_table [ 'no_std' ] [ code ] тогдаtable.insert ( tout , title_table [ 'no_std' ] [ code ]); - использовать код языкаещеесли is_set ( tscript ), тоtable.insert ( Tout , table.concat ({ language_name , '-script транслитерации' })); - написать подсказку скриптаelseif is_set ( код ) тогдаесли не language_name : find ( 'languages' ) then - собирательные имена языков (множественное число 'languages' является частью имени)table.insert ( tout , '-language' ) - пропустить этот текст (только для отдельных языков и языков макросов)конецtable.insert ( tout , 'транслитерация' ); - доделать наконечник инструментаещеtable.insert ( tout , 'транслитерация' ); - общая подсказка (сможем ли мы когда-нибудь сюда добраться?)конецконецконецtable.insert ( tout , '">' );table.insert ( tout , транслит );если is_set ( code ), а не style, то - когда предоставляется код языка (всегда с шаблонами {{lang-xx}}, не всегда с {{transl}})table.insert ( tout , "</i>" ); - закрыть курсивный тегещеtable.insert ( tout , "</span>" ); - код языка отсутствует, поэтому закройте тег spanконецвернуть table.concat ( tout );конец- [[-------------------------- <ПРОВЕРИТЬ _ ТЕКСТ> --------------- -------------------------------------Эта функция проверяет содержимое args.text и возвращает пустую строку, если все в порядке, иначе она возвращаетсообщение об ошибке. Тесты предназначены для пустого или отсутствующего текста, а также для неправильного или запрещенного использования разметки апострофа.Отрисовка курсивом контролируется параметром | italic = template, поэтому курсивная разметка никогда не должна отображаться в args.textлибо как '' себя '', либо как '' '' 'жирный курсив' '' '', если | курсив = не установлен или | курсив = инвертировать.]]локальная функция validate_text ( шаблон , аргументы )если не is_set ( арг . текст ) , тоreturn make_error_msg ( 'без текста' , аргументы , шаблон );конецесли args . текст : find ( "% f [ \ ' ] \' \ '\' \ ' % f [^ \' ]" ) или аргументы . текст : find ( " \ '\' \ '\' \ ' [ \' ] +" ) затем - потому что мы ищем, ищите 4 аппострофа или 6+ аппострофовreturn make_error_msg ( 'текст имеет неверную разметку' , аргументы , шаблон );конецместный стиль = аргументы . курсив ;if ( 'unset' ~ = style ) и ( 'invert' ~ = style ), тоесли args . текст : find ( "% f [ \ ' ] \' \ ' % f [^ \' ]" ) или аргументы . текст : find ( "% f [ \ ' ] \' \ '\' \ '\' % f [^ \ ' ]" ) затем - курсив, но не полужирный, или полужирный курсивreturn make_error_msg ( 'текст имеет курсивную разметку' , аргументы , шаблон );конецконецконец- [[-------------------------- <ОТОБРАЖЕНИЕ _ ОБСЛУЖИВАНИЕ> --------------- ---------------------------------------отображать сообщения и категории обслуживания]]локальная функция render_maint ( nocat )локальный maint = {};if 0 < # maint_msgs then - когда есть сообщения обслуживанияtable.insert ( maint , table.concat ({ '<span class = "lang-comment" style = "font-style: normal; display: none; color: # 33aa33; margin-left: 0.3em;">' } )); - открывающий тег <span>для _ , сообщение в ipairs ( maint_msgs ) сделатьtable.insert ( maint , table.concat ({ msg , '' })); - добавить строки сообщенияконецtable.insert ( maint , '</span>' ); - закрыть пролётконецif ( 0 < # maint_cats ) и ( 0 == namespace ), а не nocat then - когда есть категории обслуживания; только пространство имен статьидля _ , кот в ipairs ( maint_cats ) делатьtable.insert ( maint , table.concat ({ '[[Категория:' , кошка , ']]' })); - форматировать и добавлять категорииконецконецвернуть table.concat ( maint );конец- [[-------------------------- <PROTO _ PREFIX> --------------- ---------------------------------------для протоязыков перед текстом стоит знак знака. Мы делаем это здесь как флаг для make_text_html (), чтобы значок splatбудет отображаться вне курсивной разметки (если используется). Если первый символ в тексте здесь уже знак, мыничего не делатьproto_param имеет логическое значение или ноль; true добавляет префикс splat независимо от названия языка; false удаляет и / или запрещаетнезависимо от названия языка; nil ничего не делает; предполагает, что значение в тексте правильное, но убирает лишние всплески]]локальная функция proto_prefix ( текст , language_name , proto_param )если false == proto_param, то - когда принудительно | proto = no текст возврата : gsub ( '^% **' , '' ); - возвращать текст без префикса splat независимо от названия языка или существующего префикса splat в текстеelseif ( language_name : find ( '^ Proto% -' ) or ( true == proto_param )) then - язык является прототипом или принудительно | proto = yes текст возврата : gsub ( '^% **' , '*' ); - префикс протоязычного текста знаком знака; также удаляет повторяющиеся знаки префиксаконец текст возврата : gsub ( '^% * +' , '*' ); - вернуть текст без помех, за исключением нескольких знаков, уменьшенных до одного знакаконец- [[-------------------------- <ИМЕЕТ _ ПОЭМА _ ТЕГ> ------------- -----------------------------------------ищет в тексте маркер полосы стихотворения; при нахождении возвращает истину; ложь ещеавтоматическое выделение курсивом отключено, если в тексте есть стрип-маркер стихотворения, потому что этот код не может знатьконтент, который заменит полосовой маркер.]]локальная функция has_poem_tag ( текст ) текст возврата : find ( ' \ 127 [^ \ 127 ] * UNIQ% -% - poem% - [% a% d] +% - QINU [^ \ 127 ] * \ 127 ' ) и true или false ;конец- [[-------------------------- <HTML _ TAG _ SELECT> ------------- -----------------------------------Проверяет содержимое и выборочно обрезает текст. Возвращает текст и имя соответствующего HTML-тега для текста.Если текст содержит:\ n \ n текст содержит теги <p> .. </p> - обрезать начальные и конечные пробелы и вернуть Если текст начинается с разметки списка:\ n * неупорядоченный\ п; определение\ n: определение\ n # заказанообрезать все ведущие пробелы, кроме \ n, и обрезать все конечные пробелыЕсли текст содержит полосу <poem> ... </poem>, вернуть текст без изменений и выбрать теги <div> .. </div>, потому что маркер полосы заменяется текстом, заключенным в теги <div> .. </div>.]]локальная функция html_tag_select ( текст )локальный тег ;if has_poem_tag ( text ) then - содержит стрип-маркер стихотворения (мы не можем знать его содержание)tag = 'div' ; - замена стихотворения в тегах div, поэтому lang должен использовать теги divelseif mw . текст . trim ( text ): find ( ' \ n \ n +' ) then - содержит подразумеваемые теги pтекст = mw . текст . обрезать ( текст ); - обрезать начальные и конечные пробельные символыtag = 'div' ; - должно быть div, потому что span не может содержать тегов p (добавлены позже MediaWiki); замена стихотворения в тегах divelseif text : find ( ' \ n [% *:;% #]' ) then - если текст имеет разметку спискатекст = текст : gsub ( '^ [ \ t \ r \ f ] *' , '' ): gsub ( '% s * $' , '' ); - обрезать все пробелы, кроме ведущего символа новой строки '\ n'tag = 'div' ; - должно быть div, потому что span не может содержать теги ul, dd, dl, ol (добавленные позже MediaWiki)ещетекст = mw . текст . обрезать ( текст ); -- простой текстtag = 'диапазон' ; - так что промежуток в порядкеконец текст возврата , тег ;конец- [[-------------------------- <ПОДТВЕРДИТЬ _ ПРОТО> --------------- -----------------------------------проверяет значение, присвоенное | proto =; допустимые значения - да и нет; да возвращается как истина, нет возвращается как ложь,пустая строка (или параметр пропущен) возвращается как nil; любое другое значение возвращается как nil со вторым возвращаемым значениемистина, что указывает на то, что параметру | proto = присвоено другое значение.]]локальная функция validate_proto ( proto_param )если 'yes' == proto_param, тогдавернуть истину ;elseif 'no' == proto_param тогдавернуть ложь ;elseif is_set ( proto_param ) тогдаreturn nil , true ; - | proto = что-то кроме "да" или "нет"ещевернуть ноль ; - отсутствует или пустоконецконец- [[-------------------------- <ЯЗЫК _ ИМЯ _ ПОЛУЧИТЬ> ------------- -------------------------------общая функция для возврата имени языка из набора данных в соответствии с тегом IETFвозвращает название языка, если оно найдено в таблицах данных; ноль еще]]локальная функция language_name_get ( ietf , code , cat )ietf = ietf : нижний (); - ietf: lower (), потому что format_ietf_tag () возвращает смешанный регистрместное имя ; - остается нулевым, если не найденif override_table [ ietf ] then - ищите весь тег IETF в таблице переопределенияname = override_table [ ietf ] [ 1 ];elseif override_table [ code ] тогда - не там, поэтому попробуйте базовый языковой кодname = override_table [ код ] [ 1 ];elseif lang_table [ code ] then - перейти к таблице кодов / имен iananame = lang_table [ код ] [ 1 ]; - записи в таблице иногда имеют несколько имен, всегда берите первоеelseif lang_dep_table [ код ] тогда- если кошка, то- table.insert (maint_cats, table.concat ({'Lang и lang-xx с использованием устаревших кодов ISO 639 |', code}));- table.insert (maint_msgs, table.concat ({'code:', code, 'не рекомендуется'}));-- конецname = lang_dep_table [ код ] [ 1 ]; - записи в таблице иногда имеют несколько имен, всегда берите первоеконецесли lang_dep_table [ code ] и cat, тогда - потому что устаревший код мог быть заменен предпочтительным именем en.wikitable.insert ( maint_cats , table.concat ({ 'Ланг и Ланг-ое использование устаревших ISO 639 кодов |' , код }));table.insert ( maint_msgs , table.concat ({ 'код:' , код , 'является устаревшим' }));конецвозвращаемое имя ; - имя из таблиц данных или нольконец- [[-------------------------- <_ LANG> ---------------- -------------------------------------------------- -точка входа для {{lang}}не должно быть причин для установки параметров в {{lang}} {{#invoke:}}<includeonly> {{#invoke: lang | lang}} </includeonly>параметры принимаются из фрейма шаблона (родительский фрейм)]]локальная функция _lang ( аргументы )локальный выход = {};местное имя_языка ; - используется для создания названий категорийлокальное имя_категории ; - то же, что и language_name, за исключением того, что он сохраняет любые символы устранения неоднозначности в скобках (если есть) из набора данныхлокальные подтеги = {}; - Сценарий вложенных тегов IETF, регион, вариант и частныйместный код ; - код языкаместное сообщение ; - для сообщений об ошибкахлокальный тег = 'диапазон' ; - начальное значение для make_text_html ()локальный шаблон = аргументы . шаблон или "Lang" ;validate_cat_args ( аргументы ); - определить, следует ли подавить категоризациюесли args [ 1 ] и args . код тогдаreturn make_error_msg ( 'конфликтующие: {{{1}}} и | код =' , аргументы , шаблон );ещеаргументы . код = аргументы [ 1 ] или аргументы . код ; - предпочитаю args.codeконецесли args [ 2 ] и args . текст тогдаreturn make_error_msg ( 'конфликтующие: {{{2}}} и | текст =' , аргументы , шаблон );ещеаргументы . текст = аргументы [ 2 ] или аргументы . текст ; - предпочитаю args.textконецmsg = validate_text ( шаблон , аргументы ); - убедитесь, что установлен | text =если is_set ( msg ), то - msg - это уже отформатированное сообщение об ошибкеreturn msg ;конецаргументы . текст , tag = html_tag_select ( аргумент . текст ); - проверяет текст; возвращает соответствующий тег html с соответствующим обрезанным текстомаргументы . rtl = аргументы . rtl == 'да' ; - преобразовать в логическое: 'да' -> истина, другие значения -> ложьаргументы . proto , msg = validate_proto ( аргументы . proto ); - вернуть логическое значение, или ноль, или ноль и флаг сообщения об ошибкеесли сообщение, тоВозвращение make_error_msg ( table.concat ({ 'недействителен | прото =:' , арг . прото }), арг , шаблон );конецкод , вложенные теги . скрипт , вложенные теги . регион , вложенные теги . вариант , вложенные теги . частный , сообщи = get_ietf_parts ( арг . код ); - | script =, | region =, | variant = не поддерживаются, потому что они должны быть частью args.code ({{{1}}} в {{lang}})если сообщение, товернуть make_error_msg ( сообщение , аргументы , шаблон );конецаргументы . курсив , msg = validate_italic ( args );если сообщение, товернуть make_error_msg ( сообщение , аргументы , шаблон );конецесли nil == args . курсив, затем - ноль, если | курсив = отсутствует или не установлен или | курсив = по умолчанию; args.italic controlsif ( 'latn' == subtags . script ) или - script - latn( This_wiki_lang \ = код и не is_set ( подтег . Сценарий ) и не has_poem_tag ( арг . Текст ) и юникод . Is_Latin ( арг . Текст )) затем - текст не язык этой Вики, ни один скрипт не указан , а не в стихотворении разметки , но полностью латинское письмо (автоматический курсив)аргументы . курсив = 'курсив' ; - ПО УМОЛЧАНИЮ для шаблонов {{lang}} вертикальное положение; но если скрипт latn установлен для font-style: italicещеаргументы . курсив = 'наследовать' ; - курсив не установлен; сценарий не латн; наследовать текущий стильконецконецif is_set ( subtags . script ) then - если скрипт установлен, переопределить настройку rtlесли in_array ( subtags . script , lang_data . rtl_scripts ), тоаргументы . rtl = true ; - скрипт - это скрипт RTLещеаргументы . rtl = ложь ; - сценарий не является сценарием RTLконецконецаргументы . код = format_ietf_tag ( код , подтеги . сценарий , подтеги . область , подтеги . вариант , подтеги . частный ); - форматирование в рекомендуемые стили вложенных теговlanguage_name = language_name_get ( аргумент . код , код , истина ); - получить название языка; сначала попробуйте тег ietf, затем код без варианта, затем код с вариантомесли 'invert' == args . наклонные и «пяди» == тег затем - инвертный поддерживаются только для контента в режиме онлайнаргументы . Текст = invert_italics ( арг . текст )конецаргументы . текст = proto_prefix ( арг . Текст , language_name , арг . прото ); - префикс протоязычного текста знакамиtable.insert ( out , make_text_html ( args . code , args . text , tag , args . rtl , args . italic , args . size , language_name ));table.insert ( вне , make_category ( код , language_name , арг . nocat ));table.insert ( out , render_maint ( аргументы . nocat )); - сообщения и категории обслуживанияreturn table.concat ( выход ); - Сложил все воедино и готовоконец- [[-------------------------- <ЯЗЫК> ----------------- -------------------------------------------------- ---точка входа для {{lang}}не должно быть причин для установки параметров в {{lang}} {{#invoke:}}<includeonly> {{#invoke: lang | lang}} </includeonly>параметры принимаются из фрейма шаблона (родительский фрейм)]]локальная функция Ланг ( рама )local args = getArgs ( frame , { - этот код, чтобы мы могли обнаруживать и обрабатывать разметку списка вики в текстеvalueFunc = функция ( ключ , значение )если 2 == ключ или «текст» == ключ затем - параметр «текст»; не обрезайте белое пространствовозвращаемое значение ; - вернуть необрезанный текстelseif value then - все остальные значения: если значение не nilзначение = mw . текст . обрезать ( значение ); - обрезать пробелыif '' ~ = value then - пустая строка, когда значение было только пробеломвозвращаемое значение ;конецконецвернуть ноль ; - значение было пустым или содержало только пробелыend - конец valueFunc});возврат _lang ( аргументы );конец- [[-------------------------- <ЯЗЫК _ XX> --------------- -------------------------------------------------Для шаблонов {{lang-xx}} единственный параметр, который необходимо установить в шаблоне, - это код языка. Вседругие параметры обычно должны быть записаны в вызове шаблона. Для {{lang-xx}} шаблонов для языковкоторые могут иметь несколько систем записи, также может быть уместным установить | script =.Для каждого шаблона {{lang-xx}} выберите соответствующую функцию точки входа, чтобы эта функция знала значение по умолчаниюстиль, который следует применить к тексту.Для нормального, вертикального стиля:<includeonly> {{#invoke: lang | lang_xx_inherit | code = xx}} </includeonly>Для курсива:<includeonly> {{#invoke: lang | lang_xx_italic | code = xx}} </includeonly>Все остальные параметры должны быть получены из фрейма шаблона (родительского фрейма).Поддерживаемые параметры:| code = (обязательно) код языка IANA| script = код сценария IANA; особенно для использования с языками, использующими несколько систем письма| region = код региона IANA| variant = код варианта IANA| text = (обязательно) отображаемый текст на языке, указанном в коде| link = boolean false ('no') не связывает имя языка, указанное в коде, со статьей на соответствующем языке| rtl = boolean true ('yes') определяет язык, указанный в коде, как язык с письмом справа налево| nocat = boolean true ('yes') запрещает нормальную категоризацию; категории ошибок не затрагиваются| cat = boolian false ('no') противоположная форма | nocat =| italic = boolean true ('yes') отображает отображаемый текст курсивным шрифтом; логическое значение false ('no') отображает отображаемый текст обычным шрифтом; не настроен рендеринг в соответствии с initial_style_state| lit = текст, который является дословным переводом текста| label = 'none' для подавления всех надписей (название языка, 'транслит.', 'букв.')любой другой текст заменяет метку с названием языка - автоматические вики-ссылки отключеныдля тех шаблонов {{lang-xx}}, которые поддерживают транслитерацию (те шаблоны, где | text = не является полностью латинским скриптом):| транслит = текст, являющийся транслитерацией текста| translit-std = стандарт, применяемый к транслитерации| translit-script = имя сценария ISO 15924; возвращается к кодуДля {{lang-xx}} позиционные параметры:{{{1}}} текст{{{2}}} транслитерированный текст{{{3}}} дословный перевод текстаникакие другие позиционные параметры не допускаются]]локальная функция _lang_xx ( аргументы )локальный выход = {};местное имя_языка ; - используется для отображения текста, ссылок на статьилокальное имя_категории ; - то же, что и language_name, за исключением того, что он сохраняет любые символы устранения неоднозначности в скобках (если есть) из набора данныхлокальные подтеги = {}; - Скрипт, регион и вариант вложенных тегов IETFместный код ; - код языкаместное имя_транслита ; - имя, связанное с кодом сценария IANA (ISO 15924)местный транслит ;местный translit_title ;местное сообщение ; - для сообщений об ошибкахлокальный тег = 'диапазон' ; - начальное значение для make_text_html ()локальный шаблон = аргументы . шаблон или "Lang-xx" ;если args [ 1 ] и args . текст тогдаreturn make_error_msg ( 'конфликтующие: {{{1}}} и | текст =' , аргументы , шаблон );ещеаргументы . текст = аргументы [ 1 ] или аргументы . текст ; - предпочитаю args.textконецmsg = validate_text ( шаблон , аргументы ); - убедитесь, что | text = установлен, не содержит курсивной разметки и защищен от неправильного выделения жирным шрифтом.если is_set ( msg ), тоreturn msg ;конецаргументы . текст , tag = html_tag_select ( аргумент . текст ); - проверяет текст; возвращает соответствующий тег html с соответствующим обрезанным текстомесли args [ 2 ] и args . транслит тогдаreturn make_error_msg ( 'конфликтующие: {{{2}}} и | translit =' , аргументы , шаблон );ещеаргументы . translit = args [ 2 ] или args . транслит - предпочитаю args.translitконецесли аргументы [ 3 ] и ( аргументы . перевод или аргументы . освещены ), тоreturn make_error_msg ( 'конфликтующие: {{{3}}} и | lit = или | translation =' , args , template );elseif args . перевод и аргументы . горит тогдаreturn make_error_msg ( 'конфликтующие: | lit = и | translation =' , args , template );ещеаргументы . translation = args [ 3 ] или args . перевод или аргументы . горит ; - предпочитаю args.translationконецесли args . ссылки и аргументы . тогда ссылка return make_error_msg ( 'конфликтующие: | ссылки = и | ссылка =' , аргументы , шаблон );ещеаргументы . ссылка = аргументы . ссылка или аргументы . ссылки ; - предпочитаю args.linkконецvalidate_cat_args ( аргументы ); - определить, следует ли подавить категоризациюаргументы . rtl = аргументы . rtl == 'да' ; - преобразовать в логическое: 'да' -> истина, другие значения -> ложькод , вложенные теги . скрипт , вложенные теги . регион , вложенные теги . вариант , вложенные теги . частный , msg = get_ietf_parts ( аргумент . код , аргумент . сценарий , аргумент . регион , аргумент . вариант ); - частный опущен, потому что частныйif msg then - если обнаружена ошибка, появляется сообщение об ошибкевернуть make_error_msg ( сообщение , аргументы , шаблон );конецаргументы . курсив , msg = validate_italic ( args );если сообщение, товернуть make_error_msg ( сообщение , аргументы , шаблон );конецесли nil == args . затем курсивом - args.italic controlsесли is_set ( subtags . script ), тоесли 'Latn' == подтеги . сценарий тогдааргументы . курсив = 'курсив' ; - | script = Latn; установлен для font-style: курсивещеаргументы . курсив = начальный_стайл_состояние ; - курсив не установлен; сценарий не латинский; установлен для стиля шрифта: <initial_style_state>конецещеаргументы . курсив = начальный_стайл_состояние ; - здесь, когда | italic = и | script = не установлено; установлен для стиля шрифта: <initial_style_state>конецконецif is_set ( subtags . script ) then - если скрипт установлен, переопределяет настройку rtlесли in_array ( subtags . script , lang_data . rtl_scripts ), тоаргументы . rtl = true ; - скрипт - это скрипт RTLещеаргументы . rtl = ложь ; - сценарий не является сценарием RTLконецконецаргументы . proto , msg = validate_proto ( аргументы . proto ); - вернуть логическое значение, или ноль, или ноль и флаг сообщения об ошибкеесли сообщение, тоВозвращение make_error_msg ( table.concat ({ 'недействителен | прото =:' , арг . прото }), арг , шаблон );конецаргументы . код = format_ietf_tag ( код , подтеги . сценарий , подтеги . область , подтеги . вариант , подтеги . частный ); - форматирование в рекомендуемые стили вложенных теговlanguage_name = language_name_get ( аргумент . код , код , истина ); - получить название языка; сначала попробуйте тег ietf, затем код без варианта, затем код с вариантомcategory_name = language_name ; - в названиях категорий сохраняются диэмбигуляторы IANA в скобках (если есть)language_name = language_name : GSUB ( '% S +% B ()' , '' ); - удалите разделители неоднозначности или квалификаторы в скобках IANA из имен, в которых они естьесли args . тогда лейбл если 'none' ~ = args . тогда лейбл table.insert ( вне , table.concat ({ args . label , ':' })); - персонализированный ярлыкконецещеесли 'no' == args . тогда ссылка table.insert ( из , language_name ); - название языка без викилинкаещеесли language_name : find ( 'languages' ), тоtable.insert ( из , make_wikilink ( language_name )); - собирательное название языка использует простую вики-ссылкуelseif lang_data . article_name [ code ] тогдаtable.insert ( out , make_wikilink ( lang_data . article_name [ code ] [ 1 ], language_name )); - название языка с вики-ссылкой из переопределенных данныхещеtable.insert ( вне , make_wikilink ( language_name .. 'язык' , language_name )); - название языка с вики-ссылкойконецконецtable.insert ( вне , ':' ); -- разделительконецесли 'invert' == args . курсив тогдааргументы . Текст = invert_italics ( арг . текст )конецаргументы . текст = proto_prefix ( арг . Текст , language_name , арг . прото ); - префикс протоязычного текста знакамиtable.insert ( out , make_text_html ( args . code , args . text , tag , args . rtl , args . italic , args . size , ( 'none' == args . label ) и language_name или nil ))если is_set ( аргументы . транслит ), а не юникод . is_Latin ( аргумент . текст ), затем - транслитерация (не поддерживается в {{lang}}); не поддерживается, если args.text полностью состоит из текста latn (это несовершенный тест)table.insert ( вне , ',' ); - запятая для отделения текста от транслитаесли 'none' ~ = args . тогда лейбл table.insert ( out , '<маленький>' );if script_table [ args [ 'translit-script' ]] тогда - когда | translit-script = установлен, попробуйте использовать имя сценарияtranslit_script_name = script_table [ args [ 'translit-script' ] [ 1 ]];ещеtranslit_script_name = language_name ; - вернуться к названию языкаконецtranslit_title = mw . название . makeTitle ( 0 , table.concat ({ 'романизация' , translit_script_name })); - сделать титровальный объектесли translit_title . существует и ( 'no' ~ = аргумент . ссылка ), тоtable.insert ( out , make_wikilink ( 'Романизация' .. translit_script_name или language_name , 'romanized' ) .. ':' ); - сделайте вики-ссылку, если есть статья, на которую можно ссылатьсяещеtable.insert ( out , 'романизированный:' ); - иначе обычный текстконецtable.insert ( вне , '& nbsp; </small>' ); - закрыть маленький тегконецtranslit = make_translit ( args . code , language_name , args . translit , args [ 'translit-std' ], args [ 'translit-script' ])если is_set ( транслит ), тоtable.insert ( выход , транслит );ещевернуться make_error_msg ( table.concat ({ 'недопустимого транслита-Std: \' ' , арг [ 'транслит-Std' ] или ' [отсутствует] }), арг , шаблон );конецконецесли is_set ( аргумент . перевод ), то - перевод (не поддерживается в {{lang}})table.insert ( вне , ',' );если 'none' ~ = args . тогда лейбл table.insert ( out , '<маленький>' );если 'no' == args . тогда ссылка table.insert ( out , '<abbr title = "literal translation"> lit. </abbr>' );ещеtable.insert ( out , make_wikilink ( ' Дословный перевод' , 'букв.' ));конецtable.insert ( out , "& thinsp; </small>" );конецtable.insert ( out , table.concat ({ '& # 39;' , args . translation , '& # 39;' })); - используйте html-сущности, чтобы избежать путаницы с разметкой викиконецtable.insert ( вне , make_category ( код , category_name , арг . nocat ));table.insert ( out , render_maint ( аргументы . nocat )); - сообщения и категории обслуживанияreturn table.concat ( выход ); - Сложил все воедино и готовоконец- [[-------------------------- <LANG _ XX _ ARGS _ GET> ----------- -----------------------------------общая функция для получения таблицы аргументов из {{lang- ??}} шаблоноввозвращает таблицу аргументов]]локальная функция lang_xx_args_get ( кадр )local args = getArgs ( кадр ,{parentFirst = true , - параметры в шаблоне переопределяют параметры, установленные в {{#invoke:}}valueFunc = функция ( ключ , значение )если 1 == ключ, то - параметр «текст»; не обрезайте белое пространствовозвращаемое значение ; - вернуть необрезанный текстelseif value then - все остальные значения: если значение не nilзначение = mw . текст . обрезать ( значение ); - обрезать пробелыif '' ~ = value then - пустая строка, когда значение было только пробеломвозвращаемое значение ;конецконецвернуть ноль ; - значение было пустым или содержало только пробелыend - конец valueFunc});вернуть аргументы ;конец- [[-------------------------- <ЯЗЫК _ XX _ ИТАЛИЯ> ------------- -------------------------------------Точка входа для тех шаблонов {{lang-xx}}, которые вызывают lang_xx_italic (). Устанавливает начальное состояние стиля курсивом.]]локальная функция lang_xx_italic ( кадр )локальные аргументы = lang_xx_args_get ( кадр );initial_style_state = 'курсив' ;return _lang_xx ( аргументы );конец- [[-------------------------- <_ ЯЗЫК _ XX _ ИТАЛИЯ> ------------ ------------------------------------Точка входа f из другого модуля. Устанавливает начальное состояние стиля курсивом.]]локальная функция _lang_xx_italic ( args )initial_style_state = 'курсив' ;return _lang_xx ( аргументы );конец- [[-------------------------- <LANG _ XX _ INHERIT> ------------- -----------------------------------Точка входа для тех шаблонов {{lang-xx}}, которые вызывают lang_xx_inherit (). Устанавливает начальное состояние стиля для наследования.]]локальная функция lang_xx_inherit ( фрейм )локальные аргументы = lang_xx_args_get ( кадр );initial_style_state = «наследовать» ;return _lang_xx ( аргументы );конец- [[-------------------------- <_ LANG _ XX _ INHERIT> ------------ ----------------------------------Точка входа из другого модуля. Устанавливает начальное состояние стиля для наследования.]]локальная функция _lang_xx_inherit ( args )initial_style_state = «наследовать» ;return _lang_xx ( аргументы );конец- [[-------------------------- <_ IS _ IETF _ TAG> ------------ ------------------------------------------Возвращает истину, если существует имя языка, связанное с языковым тегом IETF; ноль остальное. Тег языка IETF должен быть действительным.Все комбинации кода, поддерживаемые шаблонами {{lang}} и {{lang-xx}}, поддерживаются этой функцией.Точка входа в модуль из другого модуля]]локальная функция _is_ietf_tag ( tag ) - точка входа, когда этот модуль требует () d в другойместный c , s , r , v , p , err ; - код, скрипт, регион, вариант, приват, сообщение об ошибкеc , s , r , v , p , err = get_ietf_parts ( тег ); - разобрать тег на составные части и проверитьreturn (( c and not err ) и true ) или nil ; - возвращать истину, если часть кода имеет значение без сообщения об ошибке; ноль ещеконец- [[-------------------------- <IS _ IETF _ TAG> ------------- -------------------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция is_ietf_tag ( кадр )return _is_ietf_tag ( getArgs ( frame ) [ 1 ]); - args [1] - тестируемый языковой тег ietf; также получить родительский фреймконец- [[-------------------------- <IS _ IETF _ TAG _ FRAME> ----------- ---------------------------------Точка входа модуля из {{#invoke:}}; то же, что и is_ietf_tag (), за исключением того, что не получает параметры от родителя(шаблон) рамка. Эта функция бесполезна при вызове {{lang | fn = is_ietf_tag_frame | <tag>}}, потому что <tag>находится в родительском фрейме.]]локальная функция is_ietf_tag_frame ( кадр )return _is_ietf_tag ( getArgs ( frame , { frameOnly = true ,}) [ 1 ]); - args [1] - тестируемый языковой тег ietf; не получить родительский фреймконец- [[-------------------------- <_ ИМЯ _ ОТ _ ТЕГА> ------------ --------------------------------------Возвращает имя языка, связанное с языковым тегом IETF, если оно допустимо; сообщение об ошибке еще.Все комбинации кода, поддерживаемые шаблонами {{lang}} и {{lang-xx}}, поддерживаются этой функцией.Установите для параметра invoke | link = значение yes, чтобы получить версию названия языка с вики-ссылками.Точка входа в модуль из другого модуля]]локальная функция _name_from_tag ( args )локальные подтеги = {}; - Сценарий вложенных тегов IETF, регион, вариант и частныйлокальный raw_code = args [ 1 ]; - сохранить копию входного вложенного тега IETFлокальная ссылка = 'да' == аргументы [ 'ссылка' ]; - сделать логическоелокальная метка = args . этикетка ;местный код ; - код языкаместное сообщение ; - получает сообщение об ошибке, если языковой тег IETF неверен или недействителенместное имя_языка = '' ;код , вложенные теги . скрипт , вложенные теги . регион , вложенные теги . вариант , вложенные теги . частный , msg = get_ietf_parts ( raw_code );если сообщение, толокальный шаблон = ( args [ 'шаблон' ] и table.concat ({ '{{' , args [ 'template' ], '}}:' })) или '' ; - задайте имя шаблона (если оно предусмотрено шаблоном)return table.concat ({ '<span style = \ " font-size: 100%; font-style: normal; \" class = \ " error \" > Ошибка:' , template , msg , '</span>' });конецraw_code = format_ietf_tag ( код , подтеги . сценарий , подтеги . область , подтеги . вариант , подтеги . частный ); - форматирование в рекомендуемые стили вложенных тегов; частный опущен, потому что частныйlanguage_name = language_name_get ( raw_code , код ); - получить название языка; сначала попробуйте тег ietf, затем код без варианта, затем код с вариантомlanguage_name = language_name : GSUB ( '% S +% B ()' , '' ); - удалите разделители неоднозначности или квалификаторы в скобках IANA из имен, в которых они естьесли ссылка, то - когда | ссылка = да, wikilink название языкаесли language_name : find ( 'languages' ), тоlanguage_name = make_wikilink ( language_name , этикетки ); - собирательное название языка использует простую вики-ссылкуelseif lang_data . article_name [ code ] тогдаlanguage_name = make_wikilink ( lang_data . article_name [ code ] [ 1 ], метка или language_name ); - название языка с вики-ссылкой из переопределенных данныхещеlanguage_name = make_wikilink ( language_name .. 'язык' , этикетка или language_name ); - название языка с вики-ссылкойконецконецвернуть имя_языка ;конец- [[-------------------------- <ИМЯ _ ИЗ _ ТЕГА> ------------- ---------------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция name_from_tag ( frame ) - точка входа из {{#invoke: Lang | name_from_tag | <ietf tag> | link = <yes> | template = <имя шаблона>}}return _name_from_tag ( getArgs ( frame )) - передать таблицу аргументов, ничего больше; getArgs (), поэтому мы также получаем родительский фреймконец- [[-------------------------- <_ ТЕГ _ ОТ _ ИМЯ> ------------ --------------------------------------Возвращает тег языка ietf, связанный с названием языка. Название языка должно быть написано правильносогласно написанию в исходных таблицах. Когда в названии стандартного языка есть устранитель неоднозначности в скобках,этот устранитель неоднозначности должен быть опущен (их нет в таблицах преобразования имен данных в теги).Точка входа в модуль из другого модуля]]локальная функция _tag_from_name ( args ) - точка входа из другого модуляместное сообщение ;если args [ 1 ] и '' ~ = args [ 1 ], толокальные данные = mw . loadData ( 'Модуль: язык / тег из имени' ); - получить перевернутые таблицы данных TODO: изменить при запускеместный Ланг = арг [ 1 ]: нижний (); - разрешить любой регистр для названия языка (правописание должно быть правильным)локальный тег = данные . rev_override_table [ lang ] или данные . rev_lang_table [ lang ] или данные . rev_lang_dep_table [ языки ]; - получить код; сначала посмотрите на переопределение, затем на стандартесли тег, то тег возврата , истина ; - имя языка найдено, верните тег и готово; второй возврат, используемый is_lang_name ()ещеmsg = 'language:' .. args [ 1 ] .. 'not found' - имя языка не найдено, сообщение об ошибкеконецещеmsg = 'missing language name' - имя языка не указано, сообщение об ошибкеконецлокальный шаблон = '' ;если args . template и '' ~ = args . шаблон тогдаtemplate = table.concat ({ '{{' , args [ 'шаблон' ], '}}:' }); - задайте имя шаблона (если оно предусмотрено шаблоном)конецreturn table.concat ({ '<span style = \ " font-size: 100%; font-style: normal; \" class = \ " error \" > Ошибка:' , template , msg , '</span>' });конец- [[-------------------------- <ТЕГ _ ОТ _ ИМЯ> ------------- ---------------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция tag_from_name ( frame ) - точка входа из {{#invoke: Lang | tag_from_name | <название языка> | link = <yes> | template = <имя шаблона>}}локальный результат , _ = _tag_from_name ( getArgs ( frame )) - передача таблицы аргументов, больше ничего; getArgs (), поэтому мы также получаем родительский фрейм; подавить второй возврат, используемый is_lang_name ()вернуть результат ;конец- [[-------------------------- <IS _ LANG _ NAME> ------------- -----------------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция is_lang_name ( фрейм )local _ , result = _tag_from_name ( getArgs ( frame )) - передача таблицы аргументов, больше ничего; getArgs (), поэтому мы также получаем родительский фрейм; подавить второй возврат, используемый tag_from_name ()вернуть результат и истину или ноль ;конец- [[-------------------------- <_ TRANSL> ---------------- ------------------------------------------------Точка входа в модуль из другого модуля]]локальная функция _transl ( аргументы )локальный title_table = lang_data . translit_title_table ; - таблица стандартов транслитерации, а также языковые коды и сценарии, применимые к этим стандартамместное имя_языка ; - название языка, соответствующее коду языка; используется для подсказкиместный транслит ; - транслитерированный текст для отображениялокальный сценарий ; - сценарий IANAместное сообщение ; - поскольку при вызове функции возвращают сообщение об ошибкеif is_set ( args [ 3 ]), то - [3] устанавливается, когда {{transl | code | standard | text}}аргументы . текст = аргументы [ 3 ]; - получить транслитерированный текстаргументы . translit_std = args [ 2 ] и args [ 2 ]: lower (); - получить эталон; нижний регистр для индексации таблицыесли не title_table [ args . translit_std ] тогдавернуть make_error_msg ( table.concat ({ 'непризнанная стандарт транслитерации:' , арг . translit_std }), арг , 'Пер' );конецещеif is_set ( args [ 2 ]), то - [2] устанавливается, когда {{transl | code | text}}аргументы . текст = аргументы [ 2 ]; - получить транслитерированный текстещеесли args [ 1 ] и args [ 1 ]: match ( '^% a% a% a?% a? $' ), то - args [2] отсутствует; это args [1] код или это транслитерированный текст?return make_error_msg ( 'без текста' , аргументы , 'Перевод' ); - args [1] - это код, поэтому нам не хватает текстаещеаргументы . текст = аргументы [ 1 ]; - args [1] не является кодом, поэтому мы его упускаем; назначить args.text для сообщения об ошибкеreturn make_error_msg ( 'отсутствует код языка / скрипта' , args , 'Transl' );конецконецконецif is_set ( args [ 1 ]) then - код языка IANA, используемый для атрибута html lang =; или код сценария ISO 15924если args [ 1 ]: match ( '^% a% a% a?% a? $' ) тогда - args [1] имеет правильную форму?аргументы . код = аргументы [ 1 ]: нижний (); - используйте код языка / скрипта; только (2, 3 или 4 буквенных символа); нижний регистр, потому что индексы таблиц строчныеещеВозвращение make_error_msg ( table.concat ({ 'распознан код языка / сценария:' , арг [ 1 ]}), арг , 'Пер' ); - неверный код языка / скриптаконецещеreturn make_error_msg ( 'отсутствует код языка / скрипта' , args , 'Transl' ); - отсутствует код языка / скрипта, поэтому выйдитеконецаргументы . курсив , msg = validate_italic ( args );если сообщение, тоreturn make_error_msg ( msg , args , 'Перевод' );конецесли 'italic' == args . затем курсив - «курсив», когда | курсив = да; потому что это то же самое, что отсутствует или не установлено и | курсив = по умолчаниюаргументы . курсив = ноль ; - установить в ноль;конецесли override_table [ args . code ], тогда - это код языка, определенный в таблице переопределения?language_name = override_table [ args . код ] [ 1 ];elseif lang_table [ args . code ] тогда - это код языка, определенный в таблицах стандартных языковых кодов?language_name = lang_table [ аргументы . код ] [ 1 ];elseif lang_dep_table [ args . code ] тогда - это код языка, определенный в таблицах устаревших языковых кодов?language_name = lang_dep_table [ args . код ] [ 1 ];elseif script_table [ args . code ] then - если здесь код не является кодом языка; это код сценария?language_name = script_table [ арг . код ] [ 1 ];скрипт = аргументы . код ; - код был скриптом ISO 15924, поэтому используйте его вместоаргументы . код = '' ; - не установлено, потому что это не код языкаещеВозвращение make_error_msg ( table.concat ({ 'распознан код языка / сценария:' , арг . код }), арг , 'Пер' ); - неверный код языка / скриптаконец- здесь только тогда, когда все параметры, переданные в make_translit (), действительныВозвращение make_translit ( арг . код , language_name , арг . текст , арг . translit_std , сценарий , арг . курсивный );конец- [[-------------------------- <ПЕРЕВОД> ----------------- -------------------------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция transl ( фрейм )return _transl ( getArgs ( кадр ));конец- [[-------------------------- <КАТЕГОРИЯ _ ИЗ _ ТЕГА> ------------- -------------------------------Возвращает имя категории, связанное с языковым тегом IETF, если оно допустимо; сообщение об ошибке ещеВсе комбинации кода, поддерживаемые шаблонами {{lang}} и {{lang-xx}}, поддерживаются этой функцией.Точка входа в модуль из другого модуля]]локальная функция _category_from_tag ( аргументы )локальные подтеги = {}; - Сценарий вложенных тегов IETF, регион, вариант и частныйлокальный raw_code = args [ 1 ]; - сохранить копию входного вложенного тега IETFлокальная ссылка = 'да' == аргументы [ 'ссылка' ]; - сделать логическоелокальная метка = args . этикетка ;местный код ; - код языкаместное сообщение ; - получает сообщение об ошибке, если языковой тег IETF неверен или недействителенместное имя_категории = '' ;код , вложенные теги . скрипт , вложенные теги . регион , вложенные теги . вариант , вложенные теги . частный , msg = get_ietf_parts ( raw_code );если сообщение, толокальный шаблон = ( args [ 'шаблон' ] и table.concat ({ '{{' , args [ 'template' ], '}}:' })) или '' ; - задайте имя шаблона (если оно предусмотрено шаблоном)return table.concat ({ '<span style = \ " font-size: 100%; font-style: normal; \" class = \ " error \" > Ошибка:' , template , msg , '</span>' });конецraw_code = format_ietf_tag ( код , подтеги . сценарий , подтеги . область , подтеги . вариант , подтеги . частный ); - форматирование в рекомендуемые стили вложенных тегов; частный опущен, потому что частныйcategory_name = language_name_get ( raw_code , код ); - получить название языка; сначала попробуйте тег ietf, затем код без варианта, затем код с вариантомимя_категории = make_category ( код , имя_категория , ноль , правда ): GSUB ( '[% [%]]' , '' );вернуть имя_категории ;конец- [[-------------------------- <КАТЕГОРИЯ _ ИЗ _ ТЕГА> ------------- -------------------------------Точка входа модуля из {{#invoke:}}]]локальная функция category_from_tag ( frame ) - точка входа из {{#invoke: Lang | category_from_tag | <ietf tag> | template = <имя шаблона>}}return _category_from_tag ( getArgs ( frame )); - передать таблицу аргументов, ничего больше; getArgs (), поэтому мы также получаем родительский фреймконец- [[-------------------------- <ЭКСПОРТИРУЕМЫЕ ФУНКЦИИ> ----------------- -------------------------]]return {category_from_tag = category_from_tag ,lang = lang , - точка входа для {{lang}}lang_xx_inherit = lang_xx_inherit , - точки входа для {{lang- ??}}lang_xx_italic = lang_xx_italic ,is_ietf_tag = is_ietf_tag ,is_ietf_tag_frame = is_ietf_tag_frame ,is_lang_name = is_lang_name ,tag_from_name = tag_from_name , - возвращает тег ietf, связанный с названием языкаname_from_tag = name_from_tag , - используется для документации шаблона; возможное использование в названии ISO 639 из кодовых шаблоновtransl = transl , - точка входа для {{transl}}_category_from_tag = _category_from_tag , - точки входа, когда этот модуль требует () d в другие модули_lang = _lang ,_lang_xx_inherit = _lang_xx_inherit ,_lang_xx_italic = _lang_xx_italic ,_is_ietf_tag = _is_ietf_tag ,get_ietf_parts = get_ietf_parts ,_tag_from_name = _tag_from_name , _name_from_tag = _name_from_tag ,_transl = _transl ,};