Permanently protected module

모듈:날짜 I18n

Module
--[[ __  __           _       _        ____        _       ___ _  ___ \/    ___   __   _   _    ___ _   _ \  __ _   _ ___ _ _/  ( _ ) _ __ \/   / _ \ / _`          / _ (_)      / _`   __/ _ \      / _ \  '_ \ (_)   (_     _       __/_   _    (_        __/       (_) _    _ \___/ \__,_ \__,_ _ \___(_)____/ \__,_ \__\___ ___ _ \___/ _   _    이 모듈은 날짜 문자열 처리를 목적으로 합니다.  모듈에서 변경 사항을 먼저 적용하지 않고 이 코드를 수정하지 마십시오.날짜/샌드박스 및 테스트 모듈:날짜/샌드박스/테스트 케이스 및 모듈 토크:날짜/샌드박스/테스트 케이스.  작성자 및 유지관리자: * 사용자:Parent5446 - 함수 모방 템플릿의 원래 버전:ISO 날짜 * 사용자: Jarekt - 템플릿을 모방한 함수의 원래 버전:날짜. ]] 요구하다('모듈:글로벌 없음)  -- ================================================== -- === 내부 기능 =========================== -- ==================================================  -- 부울과 같은 Wikitext 입력을 일관되게 처리할 수 있는 함수입니다. --모듈과 같이 동작합니다.예스노 현지의 기능. 네, 아니요(, 체납)  한다면 유형() == '실패' 그리고나서   돌아가다   그렇지 않으면 유형() == '숫자' 그리고나서   한다면 ==1 그리고나서     돌아가다 진실의   그렇지 않으면 ==0 그리고나서    돌아가다 거짓의   끝.  그렇지 않으면 유형() == '문자열 그리고나서       = .스트링.더 낮게()  -- 소문자로 표시      한다면  == '아니요'  또는  == 'n' 또는  == 'false' 또는 톤수() == 0 그리고나서          돌아가다 거짓의      그렇지 않으면  == '네' 또는  == 'y' 또는  == '진짜'  또는 톤수() == 1 그리고나서          돌아가다 진실의      끝.     끝.     돌아가다 체납 끝.  --------------------------------------------------------------------------------------- -- "..." 문자열의 일부를 무시하는 문자열 치환. 현지의 기능. strReplace(스트링, 늙은, 신규)  한다면 스트링:발견하다('"') 그리고나서   현지의 T={}   위해서 i, 스트레이트  아이페어(.본문.분열되다( 스트링, '"', 진실의 )) 하다    한다면 i%2==1 그리고나서     스트레이트 = 스트레이트:서브(늙은, 신규)    끝.    table.insert(T, 스트레이트)   끝.   돌아가다 table.concat(T,'"')  또 다른   돌아가다 스트링:서브(늙은, 신규)  끝. 끝.  --------------------------------------------------------------------------------------- -- 처리 날짜 vec -- 입력: -- * datevec - 파손된 {year, month, day, hour, minute, second, tzhour, tzmin} 배열 -- down date-time 컴포넌트 문자열 또는 숫자 -- 출력: -- * 날짜 코드 - 배열의 내용을 지정하는 코드입니다.여기서 Y는 년, M은 월, D는 일, H는 시간, M은 분, S는 두 번째입니다.출력은 YMDHMS, YMDHM, YMD, YM, MD, Y 중 하나여야 합니다. -- * datenum - 같은 배열이지만 숫자 또는 null만 보유합니다. 현지의 기능. parser Datevec(날짜)  -- 월이 숫자가 아닌 경우 프로젝트 언어로 된 월 이름인지 확인합니다.  현지의  = 날짜[2]  한다면  그리고. ~='' 그리고. 것은 아니다. 톤수() 그리고나서   날짜[2] = .get Content Language(get Content Language)():포맷 날짜( "n", )  끝.   -- 제공된 변수를 기반으로 날짜 코드를 만들고 범위를 벗어난 값을 확인합니다.  현지의 최대값 = {제로, 12, 31, 23, 59, 59,  23, 59} -- 년, 월, ...의 최대값  현지의 최소값 = {제로,  1,  1,  0,  0,  0, -23,  0} -- 년, 월, ...의 최소값  현지의 c = {'Y', 'M', 'D', 'H', 'M', 'S', '', ''}  현지의 날짜 코드 = '' -- 제공된 변수의 조합을 나타내는 문자열  현지의 데이터 번호 = {}  -- 벡터 = [ year , month , ... , second ]로 인코딩된 날짜 시간  위해서 i = 1,8 하다   데이터 번호[i] = 톤수(날짜[i])   한다면 데이터 번호[i] 그리고. (i==1 또는 (데이터 번호[i]>=최소값[i] 그리고. 데이터 번호[i]<=>최대값[i])) 그리고나서    날짜 코드 = 날짜 코드 .. c[i]   끝.  끝.  돌아가다 날짜 코드, 데이터 번호 끝.   --------------------------------------------------------------------------------------- -- 처리 날짜 vec -- 입력: -- * 날짜 코드 - 배열의 내용을 지정하는 코드입니다.여기서 Y는 년, M은 월, D는 일, H는 시간, M은 분, S는 두 번째입니다.출력은 YMDHMS, YMDHM, YMD, YM, MD, Y 중 하나여야 합니다. -- * datenum - 숫자 또는 null로서 {year, month, day, hour, minute, second, tzhour, tzmin}의 배열 -- 출력: -- * timeStamp - mw.language: formatDate lua 함수 및 {{#time} perser 함수 형식의 날짜 문자열 -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions #.23 time -- * 날짜 코드 - 수정 가능 현지의 기능. getTimestamp(날짜 코드, 데이터 번호)  -- 제공된 변수를 기반으로 타임스탬프 문자열(예: 2000-02-20 02:20)을 만듭니다.  현지의 타임스탬프  한다면 날짜 코드 == 'YMDHMS' 그리고나서   타임스탬프 = string.format('%04i-%02i-%02i:%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3], 데이터 번호[4], 데이터 번호[5], 데이터 번호[6] )  그렇지 않으면 날짜 코드 == 'YMDHM' 그리고나서   타임스탬프 = string.format('%04i-%02i-%02i %02i:%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3], 데이터 번호[4], 데이터 번호[5] )  그렇지 않으면 날짜 코드:후보선수(1,3)=='YMD' 그리고나서   타임스탬프 = string.format('%04i-%02i-%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3] )   날짜 코드 = 'YMD' -- 'YMD', 'YMDHMS' 및 'YMDHM'은 'YMD'로 시작하는 유일한 형식입니다. 다른 모든 형식은 'YMD'로 변환됩니다.  그렇지 않으면 날짜 코드 == 'YM' 그리고나서   타임스탬프 = string.format('%04i-%02i', 데이터 번호[1], 데이터 번호[2] )  그렇지 않으면 날짜 코드:후보선수(1,1)=='Y' 그리고나서   타임스탬프 = string.format('%04i', 데이터 번호[1] )   날짜 코드 = 'Y'   그렇지 않으면 날짜 코드 == 'M' 그리고나서   타임스탬프 = string.format('%04i-%02i-%02i', 2000, 데이터 번호[2], 1 )  그렇지 않으면 날짜 코드 == 'MD' 그리고나서   타임스탬프 = string.format('%04i-%02i-%02i', 2000, 데이터 번호[2], 데이터 번호[3] )  또 다른   타임스탬프 = 제로 -- 형식은 지원되지 않습니다.  끝.  돌아가다 타임스탬프, 날짜 코드 끝.  --------------------------------------------------------------------------------------- -- 선행 0을 1000년 전에 잘라냅니다. -- 입력: -- * datestr - 변환된 날짜 문자열 -- * lang - 번역 언어 -- 출력: -- * datestr - 갱신된 날짜 문자열  현지의 기능. 트림 연도(데이터, 연도, 언어)  현지의 연도 0, 연도 Str1, 연도 Str2, 제로 스트러  연도 0 = string.format('%04i', 연도 ) -- 표준 형식 "0123"의 4자리 연도  연도 Str1 = .언어.신규(언어):포맷 날짜( 'Y', 연도 0) -- {{#time}} 파서 함수를 호출하는 것과 같습니다.  --yearStr1 = mw.getCurrentFrame(): callParserFunction("#time", {'Y', yearStr0, lang}) -- 언어 변환  한다면 연도 0==연도 Str1 그리고나서 --대부분의 언어는 표준 연식을 사용한다.   연도 Str2 = 스트링(연도)  또 다른 -- 일부 언어에서는 숫자에 다른 문자를 사용합니다.   연도 Str2 = 연도 Str1   제로 스트러 = .스트링.후보선수(연도 Str1,1,1) -- 어떤 언어로든 "0"을 받습니다.   위해서 i=1,3 하다 -- 선행 0을 잘라냅니다.    한다면 .스트링.후보선수(연도 Str2,1,1)==제로 스트러 그리고나서     연도 Str2 = .스트링.후보선수(연도 Str2, 2, 5-i)    또 다른     브레이크.    끝.   끝.  끝.  돌아가다 string.gsub(데이터, 연도 Str1, 연도 Str2 ) -- datestr에서는 long year를 trimed year로 바꿉니다. 끝.  --------------------------------------------------------------------------------------- -- {{#time}} 파서 함수에 전달될 올바른 형식 문자열을 검색합니다. -- 입력: -- * 날짜 코드: YMDHMS, YMDHM, YMD, YM, MD, Y 또는 M -- * day : 1 ~31 의 숫자(대부분의 언어에서는 불필요) -- * lang : 언어 -- 출력: -- * dFormat : {{#time} 함수에 입력 현지의 기능. get Date Format(날짜 형식)(날짜 코드, 하루, 언어)  현지의 기능. 해석 형식(d포맷, 하루)   한다면 d포맷:발견하다('디폴트') 그리고. #d포맷>10 그리고나서    -- dFormat 코드의 특수한(및 난잡한) 경우는, 일수에 따라 다릅니다.    -- 그러면 json에는 "default" 필드와 2자리 day 키가 포함된 json이 더 많은 문자열이 포함됩니다.    -- 원하는 날짜가 해당 json이 아닌 경우 "default" 대소문자를 사용합니다.    d포맷 = d포맷:서브('”','"') -- json 마킹에 사용되는 화려한 이중 따옴표를 스트레이트 따옴표로 변경합니다.    현지의 D = .본문.json 디코드( d포맷 )  --com = mw.dumpObject(D)    하루 = string.format('d%02i',하루) -- 요일 키 생성    d포맷 = D[하루] 또는 D.체납    d포맷 = d포맷:서브("'", '"') -- 작은따옴표를 큰따옴표로 변경하여 {{#time}} 표시에 사용합니다.   끝.   돌아가다 d포맷  끝.    현지의 T = {}  현지의  = .익스텐트.데이터..얻다('DateI18n.탭', 언어)  위해서 _, 배를 젓다  쌍들(.데이터.) 하다 -- 출력을 사전 테이블로 변환합니다.   현지의 아이디, _, 메시지 = 개봉하다(배를 젓다)   T[아이디] = 메시지  끝.  현지의 d포맷 = T[날짜 코드]  한다면 d포맷=='디폴트' 그리고. (날짜 코드=='YMDHMS' 또는 날짜 코드=='YMDHM')  그리고나서    -- 대부분의 언어에서 hour:minute:second는 ", HH:MM:SS를 추가함으로써 이루어집니다.   -- day precision date. 이러한 언어는 DateI18n.tab에서 건너뛰고 기본값으로   -- "default"라는 단어를 저장하는 영어   d포맷 = 해석 형식(T['YMD'], 하루).. ', H:i'   한다면 날짜 코드=='YMDHMS' 그리고나서    d포맷 = d포맷 .. ':s'   끝.  또 다른   d포맷 = 해석 형식(d포맷, 하루)  끝.  돌아가다 d포맷 끝.  --------------------------------------------------------------------------------------- -- {{#time}} 파서 함수에 전달될 올바른 형식 문자열을 검색합니다. -- 입력: -- * month : 월 번호 -- * case : "ins", "loc"와 같은 알파벳 대소문자 생략형 -- * lang : 언어 -- 출력: -- * dFormat : {{#time} 함수에 입력 현지의 기능. Month Case(월간 케이스(, 사례., 언어)  현지의 T = {{},{},{},{},{},{},{},{},{},{},{},{}}  현지의  = .익스텐트.데이터..얻다('I18n/MonthCase.탭', 언어)  위해서 _, 배를 젓다  쌍들(.데이터.) 하다   현지의 m번째, cs, 메시지 = 개봉하다(배를 젓다)   T[m번째][cs] = 메시지  끝.  돌아가다 T[][사례.] 끝.  -- ================================================== -- === 외부 기능 =========================== -- ================================================== 현지의 p = {}  --[[ ======================================================================================== 날짜.   이 함수는 ISOdate 템플릿의 핵심 부분입니다.    사용방법: 로컬 날짜 = 필수('모듈:DateI18n')._날짜 local dateStr = Date ({2020, 12, 30, 12, 20, 11} lang)   파라미터: * {year, month, day, hour, minute, second, tzhour, tzmin: 날짜-시간 구성 요소 문자열 또는 숫자 분해 tzhour, tzmin은 UTC로부터의 타임존 오프셋(시간 및 분)입니다. * 언어:표시할 언어 * 케이스: 일부 언어의 언어 형식(유전자 등) * 클래스: <time> 노드의 CSS 클래스, 메타데이터가 전혀 없는 경우 " 를 사용합니다. ]] 기능. p._날짜(날짜, 언어, 사례., 학급, 트리밍_년)   --입력 형식이 올바른지 확인합니다.  한다면 것은 아니다. 언어 또는 것은 아니다. .언어.isValidCode( 언어 ) 그리고나서   언어 = .get Current Frame(전류 프레임)():callParser 기능( "int", "실패" ) --사용자가 선택한 언어를 가져옵니다.  끝.  한다면 언어 == '타르스크' 그리고나서   언어 = 'X세'  끝.    -- datevec을 처리하여 timeStamp 및 datecode 문자열 및 숫자 데이터 번호 배열 추출  현지의 날짜 코드,  데이터 번호  = parser Datevec(날짜)  현지의 연도, , 하루 = 데이터 번호[1], 데이터 번호[2], 데이터 번호[3]  현지의 타임스탬프, 날짜 코드 = getTimestamp(날짜 코드, 데이터 번호)  한다면 것은 아니다. 타임스탬프 그리고나서 -- parser Datevec에서 문제가 발생했습니다.   돌아가다 ''  끝.  -- Commons [[ 데이터:DateI18n.tab] 페이지에는 다른 기본 포맷이 저장됩니다.  -- 언어 및 날짜 코드(연월일 또는 연월일 지정 등)  -- {{#time}} 함수에 대한 국가별 형식 입력 조회  현지의 d포맷 = get Date Format(날짜 형식)(날짜 코드, 하루, 언어)   -- 기본적으로는 대소문자는 지정되지 않습니다(case=="). 형식을 지정할 수 있습니다.  --[데이터:DateI18n.tab] ] 。이 달의 기본 문법 대소문자를 다음과 같이 덮어쓸 수 있습니다.  -- "case" 변수를 지정합니다.이것은 슬라브어족 언어들이 보다 복잡한 것을 만들기 위해 주로 필요하다.  -- [c:Module]의 문구를 사용합니다.복잡한 날짜]]  사례. = 사례. 또는 ''  한다면 (언어=='큐' 또는 언어=='큐') 그리고. (사례.=='nom') 그리고나서   케추아어, 키차어 관련 특례.I18n의 폼은   -- {#time}에서 제공하는 월 이름에 접미사 "pi"가 추가된 일반 대소문자   -- "pi"를 삭제해야 하는 주격의 경우   -- 2014년부터 https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua를 참조해 주세요.   d포맷 = d포맷:서브('F' pi', 'F')  그렇지 않으면 (사례.=='gen') 그리고나서   d포맷 = strReplace(d포맷, 'F', "xg")  그렇지 않으면 (사례.=='nom') 그리고나서   d포맷 = strReplace(d포맷, "xg", 'F')  그렇지 않으면 (사례. ~= '') 그리고나서   -- 참조는 페이지 [[Data:Commons의 I18n/MonthCases.tab]에는 달의 이름이 있습니다.   -- 원하는 언어로 된 특정 문자/문자/문자/문자/문자/문자/문자/문자.교환이 아니라 가지고 있는 경우   -- dFormat의 "F" 및 xg"   현지의 월 메시지 = Month Case(월간 케이스(, 사례., 언어)   한다면  월 메시지 그리고. 월 메시지 ~= '' 그리고나서 -- 존재하는지 확인합니다.    d포맷 = strReplace(d포맷, 'F',  '"'..월 메시지..'"') -- 기본 월을 이미 검색한 월 이름으로 바꿉니다.    d포맷 = strReplace(d포맷, 'xg', '"'..월 메시지..'"')   끝.  끝.      -- 지정된 형식을 사용하여 날짜 번역합니다.  -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate 및  -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions # # # time (영어)  현지의 데이터 = .언어.신규(언어):포맷 날짜( d포맷, 타임스탬프) -- {{#time}} 파서 기능을 사용하는 것과 같습니다.    --태양력과 관련된 특별한 경우: 1940년 이전에는 새해가 달랐다.  -- 1년 중 시기, 그러니까 그냥 년(datecode==')Y')는 모호하며 "YYYY 또는 YYY" 문구로 대체됩니다.  한다면 언어=='th' 그리고. 날짜 코드=='Y' 그리고. 연도<=>1940 그리고나서   데이터 = string.format('%04i', 연도+542, 연도+543 )   끝.    -- 연도가 1000 미만인 경우 날짜를 4자리 길이로 패딩하거나 트리밍합니다.  -- 연도가 0으로 채워질지 여부를 결정합니다(0~999년 범위의 연도).  한다면 연도 그리고. 연도< >1000 그리고나서   한다면 유형(트리밍_년)=='실패' 그리고나서     트리밍_년 = '100-999'   끝.   현지의 다듬다 = 네, 아니요(트리밍_년,제로) -- 부울로 변환합니다.   한다면 다듬다==제로 그리고. 유형(트리밍_년)=='문자열 그리고나서    -- "trim_year"가 단순한 True/False가 아닌 경우 날짜 범위보다 커집니다.    -- 예를 들어 '100-999'는 1자리 및 2자리 연도를 4자리 길이로 패딩하고 3자리 연도를 그대로 유지하는 것을 의미합니다.    현지의 YMin, YMax = 트리밍_년:경기( '(%d+)'-(%d+)' )    다듬다 = (YMin~=제로 그리고. 연도>=톤수(YMin) 그리고. 연도<=>톤수(YMax))    끝.   한다면 다듬다==진실의 그리고나서    데이터 = 트림 연도(데이터, 연도, 언어) -- datestr에서는 long year를 trimed year로 바꿉니다.   끝.  끝.   -- 타임존이 있는 경우 추가  한다면 데이터 번호[7] 그리고. (날짜 코드 == 'YMDHMS' 또는 날짜 코드 == 'YMDHM') 그리고나서   -- {{#time}} 파서 함수를 사용하여 타임존 문자열을 만들고 올바른 문자 집합을 사용합니다.   현지의 서명하다 = (데이터 번호[7]< >0) 그리고. '−' 또는 '+'   타임스탬프 = string.format("2000-01-01 %02i: %02i:00", math.abs(데이터 번호[7]), 데이터 번호[8] 또는 0)   현지의 시간대 = .언어.신규(언어):포맷 날짜( 'H:i', 타임스탬프) -- {{#time}} 파서 기능을 사용하는 것과 같습니다.   데이터 = string.format(%s %s %s, 데이터, 서명하다, 시간대 )  끝.   -- html 날짜 문자열의 형식 및 태그 지정  한다면 학급 그리고. 학급 ~= '' 그리고. 날짜 코드~='M' 그리고. 날짜 코드~='MD'그리고나서   현지의 날짜 Html 태그 = '<span style="white-space:nowrap"> <time class=s" datetime=s"> %s </time> </span>'   데이터 = 날짜 Html 태그:포맷(학급, 타임스탬프, 데이터)  끝.  돌아가다 데이터 끝.  --[[ ======================================================================================== 날짜.   이 함수는 ISOdate 템플릿의 핵심 부분입니다.    사용방법: {{#제외:DateI18n 날짜 연도=월=일=시간=분=초=tzhour=tzmin=lang=en}   파라미터: * 년, 월, 일, 시, 분, 초: 날짜-시간 구성 요소 문자열 분해 * tzhour, tzmin: UTC로부터의 시간대 오프셋(시간 및 분) * 언어:표시할 언어 * 케이스: 일부 언어의 언어 형식(유전자 등) * 클래스: <time> 노드의 CSS 클래스, 메타데이터가 전혀 없는 경우 " 를 사용합니다. ]] 기능. p.날짜.()  현지의 args = {}  위해서 이름., 가치  쌍들( .args ) 하다    이름. = string.gsub( string.lower(이름.), ' ', '_')   args[이름.] = 가치  끝.  돌아가다 p._날짜(    { args.연도, args., args.하루, args.한 시간, args.극히 작은, args.둘째, args.시간, args.쯔민 },   args.언어,                  --언어   args.사례.,                  -- 해당 언어를 사용하는 언어의 해당 달의 문법 대소문자를 지정합니다.   args.학급 또는 '시작하지 않음,    -- 날짜가 포함된 시간 노드의 html 클래스를 설정합니다.이것은 마이크로포맷에 유용합니다.   args.트리밍_년 또는 '100-999' -- 디폴트로는 1 및2 자리수의 연수는 4 자리수의 길이이며, 3 자리수의 연수는 그대로입니다.  )  끝.  돌아가다 p