위키낱말사전
kowiktionary
https://ko.wiktionary.org/wiki/%EC%9C%84%ED%82%A4%EB%82%B1%EB%A7%90%EC%82%AC%EC%A0%84:%EB%8C%80%EB%AC%B8
MediaWiki 1.47.0-wmf.3
case-sensitive
미디어
특수
토론
사용자
사용자토론
위키낱말사전
위키낱말사전토론
파일
파일토론
미디어위키
미디어위키토론
틀
틀토론
도움말
도움말토론
분류
분류토론
부록
부록 토론
TimedText
TimedText talk
모듈
모듈토론
행사
행사토론
눈
0
1147
4484145
4145326
2026-05-23T21:37:27Z
Jeebeen
13056
/* 명사 2 */
4484145
wikitext
text/x-wiki
== 한국어 ==
{{발음 듣기|Ko-눈.ogg}}
{{ko-IPA}}
=== 명사 ===
==== 명사 1 ====
[[파일:Eyesection.svg|섬네일|180픽셀|눈의 구조]]
# 무엇을 보는 기능을 하는 몸의 감각 기관.
:* '''눈'''을 똑바로 뜨고 글을 써라.
:* '''눈'''을 두었다 어디에 쓰려고 하니?
:* '''눈'''이 어둡다.
*동사: [[눈감다]], [[눈뜨다]], [[눈멀다]], [[눈여기다]]
*형용사: [[눈꼴틀리다]], [[눈꼴사납다]], [[눈꼴시다]], [[눈부시다]]
===== 관련 어휘 =====
*파생어: [[겹눈]], [[눈매]], [[눈치레]], [[맨눈]], [[실눈]], [[외눈]], [[짝눈]], [[홑눈]]
{{합성어 상자|눈가|눈가죽|눈깔|눈꺼풀|눈꼬리|눈꼴|눈꼽|눈구멍|눈길|눈대중|눈동자|눈두덩|눈망울|눈맵시|눈모|눈물|눈병|눈부처|눈비음|눈웃음|눈빛|눈썰미|눈썹|눈시울|눈알|눈앞|눈언저리|눈요기|눈인사|눈자위|눈짓|눈초리|눈총|눈코|눈화장}}
{{합성어 상자|가자미눈|갈고리눈|개구리눈|까막눈|거적눈|곁눈|길눈|나비눈|낚시눈|딱부리눈|도끼눈|독사눈|동태눈|두꺼비눈|머루눈|반달눈|방울눈|뱀눈|뱁새눈|봉의눈|붕어눈|사팔눈|샛눈|송곳눈|애꾸눈|옆눈|옴팡눈|움펑눈|옹이눈|자웅눈|족제비눈|좁쌀눈|쥐눈|찔꺽눈|첫눈|퉁방울눈|한눈}}
{{외국어|
* 갈리시아어(gl): [[ollo]]
* 고대 교회 슬라브어(cu): [[око]](키릴)/[[ⰑⰍⰑ]](글라골 문자)(oko)
* 고대 노르드어(non): [[øgha]](동부 방언), [[auga]](서부 방언)
* 고대 아일랜드어(sga): [[súil]]
* 고대 영어(ang): [[eage|ēaġe]]
* 구자라트어(gu): [[આંખ]]
* 과라니어(gn): [[resa]], [[tesa]]
* 그리스어(el):
* 그린란드어(kl): [[isi]]
* 남부알타이어(alt): [[кӧс]]
* 네네츠어(yrk): [[сэв]]
* 네덜란드어(nl): [[oog]], [[kijker]]
* 노가이어(nog): [[коьз]]
* 노르웨이어(no): [[øye]]
* 덴마크어(da): [[øje]]
* 독일어(de): [[Auge]]
* 돌간어(dlg): [[карак]]
* 라오어(lo): [[ຕາ]](taa)
* 라틴어(la): [[oculus]]
* 러시아어(ru): [[глаз]](glaz)
* 로마니어(rom): [[jakh]]
* 로힝야어(rhm): [[suk]]
* 루마니아어(ro): [[ochi]]
* 루신어(rue): [[око]]
* 루야어(luy): [[chimoni]], [[emoni]]
* 루툴어(rut): [[ул]]
* 리보니아어(fiu-liv): [[sīlma]]
* 리투아니아어(lt): [[akis]]
* 마라티어(mr): [[डोळा]](dolā), [[नयन]](nayan)
* 마리어(chm): [[шинча]]
* 마오리어(mi): [[mata]]
* 마케도니아어(mk): [[око]](óko)
* 마푸체어(arn): [[nge]]
* 만딩카어(mnk): [[ñaa]]
* 말라얄람어(ml): [[കണ്ണ്]](kaNNu), [[നേത്രം]](nethram)
* 말레이어(ms): [[mata]]
* 맨어(gv): [[sooill]]
* 몰타어(mt): [[għajn]]
* 몽골어(mn): [[нүд]]
* 미얀마어(my): [[မျက်စိ]](myetsi.)
* 바스크어(eu): [[begi]]
* 발루치어(bal): [[چھم]], [[چم]]
* 베네토어(vec): [[ocio]]
* 벨라루스어(be): [[вока]]
* 벱스어(vep): [[sil'm]]
* 보스니아어(bs): [[oko]]
* 보트어(fiu-vot): [[silmä]]
* 북부사미어(se): [[čalbmi]]
* 불가리아어(bg): [[око]](oko)
* 브르타뉴어(br): [[lagad]]
* 사모기트어(bat-smg): [[akis]]
* 샨어(shn): [[တႃ]](tǎa)
* 산스크리트어(sa): [[अक्षि]](ákṣi), [[नेत्र]](netra), [[नयनम]](nayana)
* 산탈어(sat): [[ᱢᱮᱫ]](met')
* 상소르브어(hsb): [[woko]]
* 세르비아어(sr): [[око]](키릴)/[[oko]](라틴)
* 서프리지아어(fy): [[each]]
* 소토어(st): [[leihlo]]
* 수메르어(sux): [[𒅆]](IGI)
* 순다어(su): [[panon]]
* 스와힐리어(sw): [[jicho]]
* 스웨덴어(sv): [[öga]]
* 스코틀랜드 게일어(gd): [[sùil]]
* 스페인어(es): [[ojo]]
* 슬로바키아어(sk): [[oko]]
* 슬로베니아어(sl): [[oko]]
* 시칠리아어(scn): [[occhiu]]
* 아라곤어(an): [[güello]]
* 아람어(arc): [[ܥܝܢܐ]](시리아)/[[עינא]](히브리 문자)(ʕaynā’)
* 아랍어(ar): [[عين|عَين]](ʕain)
* 아르메니아어(hy): [[աչք]](ačk’), (고대); [[ակն]](akn)
* 아르치어(aqc): [[лур]](lur)
* 아미어(ami): [[mata]]
* 아이누어(ain): [[シク]](sik)
* 비슬라마(bi): [[ae]]
|
* 아이슬란드어(is): [[auga]]
* 아일랜드어(ga): [[súil]]
* 아제르바이잔어(az): [[göz]]
* 아카드어(akk): [[𒅆]](īnu)
* 아프리칸스어(af): [[oog]]
* 알루토르어(alr): [[лылялгын]]
* 알류트어(ale): [[dax̂]]
* 알바니아어(sq): [[sy]]
* 암하라어(am): [[ዐይን]](ayn), [[አይን]]
* 야쿠트어(sah): [[харах]]
* 에르자어(myv): [[сельме]](selme)
* 에블라이트어(xeb): [[𒀀𒈾𒈾]](anana)
* 에스토니아어(et): [[silm]]
* 에스페란토(eo): [[okulo]]
* 영어(en): [[eye]]
* 오로첸어(orh): [[yɛ:ʃa]]
* 오크어(oc): [[uèlh]]
* 우가리트어(uga): [[𐎀𐎐]](ʿn)
* 우르두어(ur): [[آنکھ]](ā.nkh), [[نین]](nayan)
* 우크라이나어(uk): [[око]](óko)
* 웨일스어(cy): [[llygad]]
* 위구르어(ug): [[كۆز]](köz)
* 응가나산어(nio): [[сеймы]]
* 이그보어(ig): [[anya]]
* 이누이트어(iu): [[ᐃᔨ]](이누이트 문자)/[[iji]](라틴), (이누피아크어); [[iri]]
* 이도(io): [[okulo]]
* 이디시어(yi): [[אױג]](oyg)
* 이탈리아어(it): [[occhio]]
* 인도네시아어(id): [[mata]]
* 인터링구아(ia): [[oculo]]
* 일로카노어(ilo): [[mata]]
* 일본어(ja): {{lang|ja|[[目]]([[め]])}}(me)
* 자와어(jv): [[mata]]
* 조지아어(ka): [[თვალი]](t'vali)
* 중국어(zh): [[眼睛]](yǎnjīng)
* 차미쿠로어(ccc): [[ojki]]
* 체로키어(chr): [[ᎠᎦᏙᎵ]](agadoli)
* 체코어(cs): [[oko]]
* 축치어(ckt): [[лылялгын]]
* 카슈미르어(ks): [[کن]](kan)
* 카자흐어(kk): [[көз]]
* 카탈루냐어(ca): [[ull]]
* 칸나다어(kn): [[ಕಣ್ಣು]](kaṇṇu)
* 칼렌진어(kln): [[konyak]]
* 칼미크어(xal): [[нүдн]]
* 케추아어(qu): [[ñawi]]
* 코랴크어(kpy): [[лылалӈын]]
* 콥트어(cop): [[ⲉⲓⲁ]](eia), [[ⲃⲁⲗ]](bal)
* 쿠르드어(ku): [[چاو]]
* 크로아티아어(hr): [[oko]]
* 키르기스어(ky): [[көз]]
* 키리바시어(gil): [[mata]]
* 키쿠유어(ki): [[maitho]]
* 타갈로그어(tl): [[mata]]
* 타로코어(trv): [[dowriq]]
* 타오스어(twf): [[cínemą]]
* 타이어(th): [[ตา]](taa)
* 타지크어(tg): [[чашм]](čašm)
* 텔루구어(te): [[కన్ను]](kannu), [[నేత్రం]](netram)
* 터키어(tr): [[göz]]
* 톡피신(tpi): [[ai]]
* 통가어(to): [[mata]]
* 투피남바어(tpn): [[esá]] (t-)
* 티베트어(bo): [[མིག་]](mig), [[སྤྱན་]](spyan)
* 파이완어(pwn): [[maca]]
* 페니키아어(phn): [[𐤀𐤍]](ʕn), [[𐤍𐤉𐤀]](ʕyn)
* 페로어(fo): [[eyga]]
* 페르시아어(fa): [[چشم]](čašm)
* 포르투갈어(pt): [[olho]] (남성)
* 폴란드어(pl): [[oko]]
* 프랑스어(fr): [[œil]] (복수: [[yeux]])
* 핀란드어(fi): [[silmä]]
* 하소르브어(dsb): [[woko]]
* 하와이어(haw): [[maka]]
* 헝가리어(hu): [[szem]]
* 히브리어(he): [[עין|עַיִן]](ʕayin)
* 힌디어(hi): [[आँख]](ā.nkh), [[नयन]](nayan)
}}
# '[[시력]]'.
*합성어: [[밤눈]]
{{보기|시력}}
# 사람들의 눈길.
{{외국어|
* 영어(en):
* 일본어(ja): {{lang|ja| }}
|
* 중국어(zh):
* 프랑스어(fr):
}}
==== 명사 ====
[[파일:LhotseMountain.jos.500pix.jpg|섬네일|200픽셀|{{l|ko|설산(雪山)}}]]
{{한국어 명사}}
# {{senseid|ko|Q7561}} 지표면이나 해상에서 증발된 물이 기후의 변화에 따라 응고되어 하늘에서 내리는 것.
#: {{ux|ko|지난 겨울에는 '''눈'''이 많이 내렸다.}}
#: {{ux|ko|문밖에 '''눈'''을 치우다.}}
#: {{ux|ko|아, 아버지가 '''눈'''을 헤치고 따 오신 {{따옴|김종길,(성탄제)}}}}
===== 파생어 =====
{{col|ko|눈발|눈가루|눈기운|눈길|눈덩이|눈물|눈바람|눈밭|눈벌판|눈보라|눈비|눈사람|눈사태|눈싸움|눈산|눈송이|눈얼음|눈웅덩이|눈집|가랑눈|가루눈|도둑눈|도적눈|마른눈|싸라기눈|숫눈|얼음눈|자국눈|함박눈}}
===== 번역 =====
{{외국어|
* 가가우스어(gag): [[kaar]]
* 갈리시아어(gl): [[neve]] (여성)
* 고대 교회 슬라브어(cu): [[снѣгъ]](sněgŭ) (남성)
* 고트어(got): [[snaiws]]
* 구자라트어(gu): [[બરફ]](barpʰ)
* 과라니어(gn): [[yrypy’a]]
* 그리스어(el): (고대); [[χιών]](khion) (여성), (현대); [[χιόνι]](khióni) (중성)
* 그린란드어(kl): [[aput]]
* 나나이어(gld): [[симата]]; [[симана]]
* 나바호어(nv): [[zas]]
* 나와틀어(nah): [[cehpayahuitl]]
* 나폴리어(nap): [[néva]]
* 남소토어(sot): [[lehlwa]]
* 네네츠어(yrk): [[сыра]]; [[идебя]]; [[хаб’луй]]; [[иӈгаем’]]; [[хав’]]; [[нара]]; [[сырад]]; [[маромбэй]]
* 네덜란드어(nl): [[sneeuw]] (남성)
* 네팔어(ne): [[हिउँ]]
* 노르웨이어(no): [[snø]] (남성), [[sne]] (남성)
* 노비알(nov): [[nive]]
* 다르긴어(dar): [[дяхӀи]]
* 다리어(prs): [[برف]](barf)
* 덴마크어(da): [[sne]]
* 독일어(de): [[Schnee]] (남성)
* 돌간어(dlg): [[каар]]
* 디베히어(dv): [[ސްނޯ]](snō)
* 라디노어(lad): [[inyeve]](라틴)/[[אינייב'י]](히브리 문자), [[naiv]]
* 라오어(lo): [[ຫິມະ]](hima)
* 라크어(lbe): [[марххала]]
* 라트비아어(lv): [[sniegs]] (남성)
* 라틴어(la): [[nix]] (여성)
* 레즈긴어(lez): [[жив]]
* 러시아어(ru): [[снег]](sneg) (남성)
* 로망슈어(rm): [[naiv]]
* 로지반(jbo): [[carvi]] [[snime]]([[tanru]])
* 롬바르드어(lmo): [[neu]]
* 루마니아어(ro): [[zăpadă]] (여성), [[nea]] (여성), [[omăt]] (중성)
* 룩셈부르크어(lb): [[Schnéi]]
* 리투아니아어(lt): [[sniegas]] (남성)
* 림뷔르흐어(li): [[snieë]]; [[sjnie]]
* 마라티어(mr): [[बर्फ]](barpʰ)
* 마리어(chm): [[лум]]
* 마사이어(mas): [[isoitok lenjan]]
* 마오리어(mi): [[hukarere]]; [[huka]]
* 마케도니아어(mk): [[снег]](sneg) (남성)
* 마푸체어(arn): [[ñapüz]]
* 말라가시어(mg): [[oram-panala]]
* 말라얄람어(ml): [[ഹിമം]], [[മഞ്ഞ്]](maññ)
* 말레이어(ms): [[salji]], [[salju]]
* 맨어(gv): [[sniaghtey]]
* 모크샤어(mdf): [[лов]]
* 몰도바어(mo): [[зэпадэ]]; [[ня]]
* 몰타어(mt): [[silġ]]
* 몽골어(mn): [[цас]]
* 밍그렐리야어(xmf): [[თირი]]
* 바슈키르어(ba): [[ҡар]]
* 바스크어(eu): [[elur]]
* 베트남어(vi): [[tuyết]]
* 벨라루스어(be): [[снег]]; [[сьнег]](타라셴카) (남성)
* 벱스어(vep): [[lumi]]
* 벵골어(bn): [[বরফ]](baraph)
* 보로어(fiu-vro): [[lumi]]
* 보스니아어(bs): [[snijeg]] (남성)
* 볼라퓌크(vo): [[nif]]
* 부랴트어(bua): [[саһан]]
* 북부사미어(se): [[muohta]]
* 불가리아어(bg): [[сняг]](snjag) (남성)
* 브르타뉴어(br): [[erc'h]] (남성)
* 사르데냐어(sc): [[ni]]
* 사모기트어(bat-smg): [[snėigs]]
* 사모아어(sm): [[kiona]]
* 산스크리트어(sa): [[हिमः]](himaḥ)
* 상소르브어(hsb): [[sněh]]
* 산탈어(sat): [[ᱦᱤᱢ]](him)
* 세르보크로아트어(sh): [[снијег|сније̑г]](키릴)/[[snijeg|snijȇg]](라틴) (남성), [[снег|сне̑г]](키릴)/[[sneg|snȇg]](라틴) (남성), (차카비아/이카비아 방언); [[snig]] (남성)
* 세르비아어(sr): [[снег]](키릴)/[[sneg]](라틴) (남성)
* 셰르파어(xsr): [[खा]](kʰā)
* 서프리지아어(fy): [[snie]]
* 소토어(st): [[lehlwa]]
* 쇼르어(cjs): [[текпер]]; [[қар]]
* 순다어(su): [[salju]]
* 스와힐리어(sw): [[theluji]]
* 스웨덴어(sv): [[snö]]
* 스코트어(sco): [[snaw]]
* 스코틀랜드 게일어(gd): [[sneachda]] (남성), [[sneachd]] (남성)
* 스페인어(es): [[nieve]] (여성)
* 슬로바키아어(sk): [[sneh]] (남성)
* 슬로베니아어(sl): [[sneg]] (남성)
* 시칠리아어(scn): [[nivi]] (여성)
* 신드어(sd): [[برف]](barfa)
* 실레지아어(szl): [[śniyg]] (남성) ([[śńyg]])
* 아라곤어(an): [[nieu]]
* 아디게이어(ady): [[осы]]
* 아라곤어(an): [[neu]] (여성); [[nieu]]
* 아람어(arc): [[ܬܠܓܐ]](시리아)/[[תלגא]](히브리 문자)(talgā’) (남성)
* 아랍어(ar): [[ثلج]](θalj) (남성)
* 아로마니아어(rup): [[neao]]
* 아르메니아어(hy): [[ձյուն]](jyun), (고대); [[ձիւն]](jiwn)
* 아바르어(av): [[гӀазу]]
* 아바자어(abq): [[сы]]
* 아삼어(asm): [[বৰফ]](bôrôpʰ)
* 아스투리아스어(ast): [[ñeve]]
* 아이누어(ain): [[upas]](라틴)/[[ウパス]](가타카나)
* 아이마라어(ay): [[khunu]]
* 아이슬란드어(is): [[snjór]] (남성), [[snær]] (남성), [[fönn]] (여성)
* 아이티크레올어(ht): [[lanèj]]
* 아일랜드어(ga): [[sneachta]] (남성)
* 아제르바이잔어(az): [[qar]]
* 아프리칸스어(af): [[sneeu]]
* 알루토르어(alr): [[г'ылг'ыл]]
* 알류트어(ale): [[qaniigix]]
* 알바니아어(sq): [[borë]] (여성)
* 알타이어(alt): [[кар]]; [[чарак]]
* 암하라어(am): [[የበረዶ ብናኝ]](yäbärädo bnany)
* 압하스어(ab): [[асы]]
* 앨라배마어(akz): [[hipli]]
* 야쿠트어(sah): [[хаар]]
* 에르자어(myv): [[лов]]
* 에벤어(eve): [[еманра]]
* 에벤키어(evn): [[сиӈилгэн]]; [[иманна]]
* 에스토니아어(et): [[lumi]]
* 에스페란토(eo): [[neĝo]]
|
* 영어(en): [[snow]]
* 오로첸어(orh): [[ɪmana]]
* 오세티야어(os): [[мит]](mit)
* 오크어(oc): [[nèu]] (여성)
* 요루바어(yo): [[ìrì dídìòjò dídì]]
* 우가리트어(uga): [[𐎂𐎍𐎘]](glṯ)
* 우드무르트어(udm): [[лымы]]
* 우르두어(ur): [[برف]](barf)
* 우즈베크어(uz): [[qor]]
* 우크라이나어(uk): [[сніг]] (남성)
* 와라이어(war): [[niyebe]]([[nyebe]])
* 왈론어(wa): [[nive]]; [[nîvaye]]
* 웨일스어(cy): [[eira]]
* 월로프어(wo): [[donju galaas]]
* 위구르어(ug): [[k̡ar]]/[[qar]](라틴)/[[قار]](아랍 문자)
* 응가나산어(nio): [[сирү]]
* 이누이트어(iu): [[ᐊᐳᑦ]](이누이트 문자)/[[aput]](라틴)
* 이누피아크어(ik): [[apun]]; [[aniu]]
* 이도(io): [[nivo]]
* 이디시어(yi): [[שניי]](šney)
* 이어(ii): [[ꃰ]]
* 이탈리아어(it): [[neve]] (여성)
* 이텔멘어(itl): [[ӄәллал]]
* 인도네시아어(id): [[salju]]
* 인터링구아(ia): [[nive]]
* 일본어(ja): {{lang|ja|[[雪]]([[ゆき]])}}(yuki)
* 잉구쉬어(inh): [[лоа]]
* 잉그리아어(izh): [[lumi]]
* 자자키어(zza): [[vewre]]
* 저지색슨어(nds): [[Snee]]
* 조지아어(ka): [[თოვლი]](t’ovli)
* 줄루어(zu): [[khithika]]
* 중국어(zh): [[雪]](xuě)
* 중부아틀라스타마지트어(tzm): [[ⴰⴷⴼⴻⵍ]](adfel) (남성)
* 체로키어(chr): [[ᎤᎾᏥ]]
* 체첸어(ce): [[ло]]
* 체코어(cs): [[sníh]] (남성)
* 추바슈어(cv): [[юр]]
* 축치어(ckt): [[ы'льыл]]
* 카라차이발카르어(krc): [[къар]](qar)
* 카라칼파크어(kaa): [[qar]]
* 카렐리야어(krl): [[lumi]]
* 카바르딘어(kbd): [[уэс]]
* 카바일어(kab): [[adfel]] (남성)
* 카슈브어(csb): [[snieg]]
* 카자흐어(kk): [[қар]](키릴)/[[قار]](아랍 문자)(qar)
* 카탈루냐어(ca): [[neu]] (여성)
* 칸나다어(kn): [[ಹಿಮ]](hima)
* 칼미크어(xal): [[цасн]]
* 케추아어(qu): [[rit’i]]
* 코르시카어(co): [[neve]]
* 코미지리안어(kom): [[лым]]
* 코미페르먀크어(koi): [[лым]]
* 콘월어(kw): [[ergh]] (남성)
* 콘카니어(kok): [[दोउ]](dou)
* 쿠르드어(ku): [[berf]], (소라니어); [[بەفر]](befr)
* 크로아티아어(hr): [[snijeg]] (남성)
* 크림타타르어(crh): [[qar]]
* 쿠미크어(kum): [[къар]]
* 키르기스어(ky): [[кар]]
* 킬딘사미어(sjd): [[вэ̄дз]]
* 타갈로그어(tl): [[niyebe]]; [[busilak]]
* 타밀어(ta): [[உறைபனிக்கட்டி]](uṛaipaṉikkaṭṭi); [[பனித்தூவி]]
* 타바사란어(tab): [[йиф]]
* 타이어(th): [[หิมะ]](hima)
* 타지크어(tg): [[барф]]
* 타타르어(tt): [[кар]](키릴)/[[qar]](라틴)
* 타트어(ttt): [[вэрф]]
* 타히티어(ty): [[hiona]]
* 텔루구어(te): [[మంచు]](maMchu); [[హిమము]](himamu)
* 터키어(tr): [[kar]]
* 투르크멘어(tk): [[gar]]
* 투바어(tyv): [[хар]]
* 트라키아어(txh): [[niva]]
* 티베트어(bo): [[གངས]](gangs)
* 파슈토어(ps): [[واوره]](wāwrâ)
* 파피아멘토어(pap): [[sneu]]
* 페로어(fo): [[kavi]] (남성)
* 페르시아어(fa): [[برف]](barf)
* 펀자브어(pa): [[ਬਰਫ਼]](barf)
* 포르투갈어(pt): [[neve]] (여성)
* 폴란드어(pl): [[śnieg]] (남성)
* 프랑스어(fr): [[neige]] (여성)
* 프리울리아어(fur): [[nêf]]
* 피에몬테어(pms): [[fiòca]]
* 핀란드어(fi): [[lumi]]
* 하소르브어(dsb): [[sněg]]
* 하와이어(haw): [[hau]]
* 하카스어(kjh): [[хар]]
* 헝가리어(hu): [[hó]]
* 히브리어(he): [[שלג]](šeleg)
* 힌디어(hi): [[हिमपात]](himpāt)
}}
==== 명사 3 ====
[[파일:Flower Buds.jpeg|섬네일|200픽셀|[[꽃눈]]]]
# 새로 막 터져 돋아나려는 식물의 싹.
===== 관련 어휘 =====
*파생어: [[겹눈]], [[곁눈]], [[막눈]], [[홑눈]]
*합성어: [[꽃눈]], [[끝눈]], [[잎눈]], [[잣눈]]
{{외국어|
* 영어(en):
* 일본어(ja): {{lang|ja| }}
|
* 중국어(zh):
* 프랑스어(fr):
}}
==== 명사 4 ====
[[파일:Folding Rules 2.jpg|섬네일|170픽셀|눈이 새겨진 자]]
# '[[눈금]]'.
{{위키프로젝트|이름=백과}}
[[분류:표준어 단일어명사]]
[[분류:표준어 자립명사]]
[[분류:한국어 고유어]]
[[분류:한국어 해부학]]
[[분류:한국어 날씨]]
[[분류:한국어 식물]]
lmn0w31d6rgcf3z2p39brlm7ijzg6px
눈물
0
12931
4484144
4484049
2026-05-23T21:30:44Z
Jeebeen
13056
/* 명사 */
4484144
wikitext
text/x-wiki
== 한국어 ==
=== 어원 ===
[[파일:Crying-girl.jpg|thumb|눈물 (1)]]
* {{inh|ko|okm|누ᇈ믈}}, {{surf|ko|눈|-ㅅ-|물}}
=== 발음 ===
{{발음 듣기|}}
{{ko-IPA}}
=== 명사 ===
{{한국어 명사}}
# 슬프거나 또는 너무 기뻐서 혹은 다른 장애로 인하여 [[눈]]에 고이는 [[물]].
#: {{uxi|ko|아이가 엄마를 길거리에서 잃고는 눈물을 글썽이는 것이 처량하다.}}
#: {{uxi|ko|슬픈 영화를 보고 눈물을 흘리다.}}
{{C|ko|체액|생리학}}
==== 파생어 ====
{{col|ko|눈물을 머금다|t1=슬픔을 억누르다|pos1=주로 연결형으로|눈물이 헤프다|t2=눈물을 자주 흘리다|눈물짓다|눈물바다|눈물뼈|눈물샘|피눈물}}
==== 번역 ====
{{외국어|
* 구자라트어(gu): [[આંસૂં]](ā.nsū.n)
* 그리스어(el):
* 나와틀어(nah): [[ixayotl]]
* 네덜란드어(nl): [[traan]] ''de''
* 노르웨이어(no):
* 덴마크어(da): {{t+|da|tåre|c}}
* 독일어(de): {{t+|de|Träne|f}}
* 라틴어(la): {{t+|la|lacrima|f}}
* 러시아어(ru): {{t+|ru|слеза́|f}}
* 로망슈어(rm): [[larma]] (여성)
* 루마니아어(ro): {{t+|ro|lacrimă|f}}
* 리투아니아어(lt): [[ašara]] (여성)
* 몽골어(mn):
* 보스니아어(bs): [[suza]] (여성)
* 불가리아어(bg):
* 브르타뉴어(br):
* 산스크리트어(sa):
* 세르비아어(sr): [[суза]](키릴)/[[suza]](라틴) (여성)
* 스와힐리어(sw): [[machozi]]
* 스웨덴어(sv): {{t+|sv|tår|c}}
* 스코틀랜드게일어(gd): [[deur]] (남성)
* 스콜트사미어(sms): [[kõõnjâl]]
* 스페인어(es): {{t+|es|lágrima|f}}
* 슬로바키아어(sk): {{t|sk|slza|f}}
* 슬로베니아어(sl): {{t+|sl|solza|f}}
* 아랍어(ar): [[دمع]](dam') (남성), [[دموع]](dumú', 복수형)
* 아로마니아어(rup): [[lacãrmã]] (여성)
* 아르메니아어(hy): [[արցունք]](arc'unk'), [[արտասուք]](artasuk')
* 아이슬란드어(is): {{t+|is|tár|n}}
* 아일랜드어(ga): {{t|ga|deoir|f}}
* 알바니아어(sq): [[lot]] (여성)
|
* 에스토니아어(et): {{t+|et|pisar}}
* 에스페란토(eo): {{t+|eo|larmo}}
* 영어(en): {{t+|en|tear}}
* 우르두어(ur): [[انسو|آنسو]](ānsū), [[آنسو]] (남성)
* 이도(io):
* 이탈리아어(it): {{t+|it|lacrima|f}}
* 인도네시아어(id): [[air]] [[mata]]
* 인터링구아(ia):
* 일본어(ja): {{t+|ja|涙|tr=namida}}
* 중국어(zh): [[眼泪]]
* 체코어(cs): {{t+|cs|slza|f}}
* 카자흐어(kk): {{t+|kk|жас}}
* 카탈루냐어(ca): {{t+|ca|llàgrima|f}}
* 쿠르드어(ku): [[فرمێسک]]
* 크로아티아어(hr): [[suza]] (여성)
* 타지크어(tg): [[ашк]]
* 텔루구어(te): [[కన్నీటి బొట్టు]](kanneeTi boTTu)
* 튀르키예어(tr): {{t+|tr|gözyaşı}}
* 페르시아어(fa): [[اشک]](ashk)
* 포르투갈어(pt): {{t+|pt|lágrima|f}}
* 폴란드어(pl): {{t+|pl|łza|f}}
* 프랑스어(fr): {{t+|fr|larme|f}}
* 핀란드어(fi): {{t+|fi|kyynel}}
* 헝가리어(hu): {{t+|hu|könny}}
* 히브리어(he):
* 힌디어(hi): [[आँसू]](ā.nsū) (남성)
}}
==== 명사 2 ====
*어원: [[눈]] + [[물]]
# 눈이 녹은 물.
{{외국어|
* 영어(en):
* 일본어(ja): {{lang|ja|[[雪水]]([[ゆきみず]])}}(yukimizu)
* 프랑스어(fr):
}}
cz8cra75c8k0jk21m0zvrz4hbdrzo1g
duck
0
61908
4484153
4484136
2026-05-24T09:16:32Z
Apisite
21408
/* 영어 */ + en-noun
4484153
wikitext
text/x-wiki
== 영어 ==
[[파일:Mallard drake.jpg|섬네일|오리]]
=== 발음 ===
{{발음 듣기|en-us-{{PAGENAME}}.ogg|미국}}
{{IPA|dʌk}}
=== 명사 ===
{{en-noun|~|s|duck}}
# {{라벨|en|조류}} [[오리]]
#: {{예문|en|She saw a '''duck''' swimming in the pond and took a picture.|그녀는 연못에서 헤엄치는 오리를 보고 사진을 찍었다.}}
[[분류:영어 조류]]
3bc69ffsosg48xlci5jd18xf1a7vvgl
오륜
0
122441
4484147
4281420
2026-05-24T06:45:11Z
YeBoy371
10964
/* 같이 보기 */
4484147
wikitext
text/x-wiki
== 한국어 ==
{{ko-IPA}}
=== 명사 ===
==== 명사 1 ====
{{표제어}}
# 정통 유교의 근본.
{{어원|五倫|오륜|언어=한국어|형태=한자어 독음}}
===== 같이 보기 =====
* [[삼강]]
* [[부자유친]], [[군신유의]], [[부부유별]], [[장유유서]], [[붕우유신]]
==== 명사 2 ====
# {{이철자|오대|언어=한국어}}
{{어원|五大|오대|언어=한국어|형태=한자어 독음}}
{{보기|오대}}
==== 명사 3 ====
{{표제어}}
# 왼쪽으로부터 파랑, 노랑, 검정, 녹색, 빨강 순으로 W자 모양으로 겹쳐 연결된 올림픽을 상징하는 5개의 고리.
{{어원|五輪|오륜|언어=한국어|형태=한자어 독음}}
[[분류:한국어 단일어명사]]
[[분류:한국어 자립명사]]
[[분류:한국어 유교]]
2hqln6fg2kjfnddjauncgn7wb16blsj
삼강
0
183996
4484148
4172145
2026-05-24T06:45:13Z
YeBoy371
10964
/* 같이 보기 */
4484148
wikitext
text/x-wiki
== 한국어 ==
{{ko-IPA}}
=== 명사 ===
==== 명사 1 ====
{{표제어}}
# 오륜 후에 정치적 목적으로 마련된 것.
{{어원|三綱|삼강|언어=한국어|형태=한자어 독음}}
===== 같이 보기 =====
* [[오륜]]
* [[군위신강]], [[부위자강]], [[부위부강]]
==== 명사 2 ====
# 한강의 세 부분을 통틀어 이르는 말.
{{어원|三江|삼강|언어=한국어|형태=한자어 독음}}
[[분류:한국어 단일어명사]]
[[분류:한국어 자립명사]]
[[분류:한국어 유교]]
4osutc9v3d6osje2ksldoe3vgqsh9ha
ᠴᠠᠪᠴᠠᠯ ᠰᡞᠪᡝ ᠪᡝᠶᡝ ᡩᠠᠰᠠᠩᡤᠠ ᠰᡞᠶᠠᠨ
0
203798
4484141
2543824
2026-05-23T16:28:29Z
Braveattack
12591
4484141
wikitext
text/x-wiki
== 시버어 ==
=== 명사 ===
[[분류:시버어 명사]][[분류:시버어 지명]]
{{발음 듣기|}}
{{IPA|cabcal sibe beje dasaŋga sijan}}
*'''1.''' [[차부차얼 시버족 자치현]].
7i45exwr5tb46wsmk9g89ocpc434ekj
4484142
4484141
2026-05-23T21:15:22Z
Jeebeen
13056
4484142
wikitext
text/x-wiki
== 시버어 ==
=== 발음 ===
* {{IPA-uni|sjo|/cabcal sibe beje dasaŋɡa sijan/}}
=== 명사 ===
{{head|sjo|명사}}
# [[차부차얼 시버족 자치현]].
{{C|sjo|지명}}
g993p33ohcu06yfc622yx6s8fbaqwqg
Google
0
225072
4484146
4484062
2026-05-24T06:36:26Z
Jeebeen
13056
4484146
wikitext
text/x-wiki
[[파일:Google 2026 logo.svg|250px|섬네일|오른쪽|구글 로고]]
== 영어 ==
{{위키백과}}
=== 발음 ===
* {{IPA-uni|en|/ˈɡuːɡəl/}}
==== 고유명사 ====
{{영어 고유명사}}
# [[구글]]; 미국의 인터넷 회사.
# 같은 이름을 가진 인터넷 회사에서 운영중인 검색 엔진.
==== 동사 ====
{{영어 동사}}
# {{alternative case form of|en|google}}.
moqh7xs7f2jxd17sznzymmp70hwmemd
모듈:languages/data/3/s
828
445945
4484143
4484056
2026-05-23T21:16:13Z
Jeebeen
13056
4484143
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["saa"] = {
"Saba",
3914885,
"cdc-est",
"Latn",
}
m["sab"] = {
"Buglere",
3368506,
"cba",
"Latn",
}
m["sac"] = {
"Fox",
12714767,
"alg-sfk",
"Latn",
}
m["sad"] = {
"Sandawe",
34016,
"qfa-iso",
"Latn",
}
m["sae"] = {
"Sabanê",
3460478,
"sai-nmk",
"Latn",
}
m["saf"] = {
"Safaliba",
36432,
"nic-mre",
"Latn",
}
m["sah"] = {
"야쿠트어",
34299,
"trk-nsb",
"Cyrl",
translit = "sah-translit",
override_translit = true,
}
m["saj"] = {
"Sahu",
7399757,
"paa-nha",
"Latn",
}
m["sak"] = {
"Sake",
36425,
"bnt-kel",
"Latn",
}
m["sam"] = {
"Samaritan Aramaic",
56612,
"sem-arw",
"Samr",
translit = "Samr-translit",
entry_name = s["Samr-entryname"],
sort_key = s["Samr-sortkey"],
}
m["sao"] = {
"Sause",
4409155,
"paa-tkw",
"Latn",
}
m["saq"] = {
"Samburu",
56536,
"sdv-lma",
}
m["sar"] = {
"Saraveca",
3450556,
"awd",
"Latn",
}
m["sas"] = {
"Sasak",
1294047,
"poz-bss",
"Latn, Bali, Java",
}
m["sat"] = {
"Santali",
33965,
"mun",
"Olck",
translit = "Olck-translit",
override_translit = true,
}
m["sau"] = {
"Saleman",
7404262,
"poz-cet",
}
m["sav"] = {
"Saafi-Saafi",
36308,
"alv-cng",
"Arab, Latn",
}
m["saw"] = {
"Sawi",
677064,
"ngf",
"Latn",
}
m["sax"] = {
"Sa",
3460352,
"poz-vnn",
"Latn",
}
m["say"] = {
"Saya",
3914431,
"cdc-wst",
"Latn",
}
m["saz"] = {
"Saurashtra",
13292,
"inc-wes",
"Saur, Latn, Taml, Deva",
translit = "saz-translit",
ancestors = "inc-ogu",
}
m["sba"] = {
"Ngambay",
2372207,
"csu-sar",
"Latn",
}
m["sbb"] = {
"Simbo",
3484101,
"poz-ocw",
}
m["sbc"] = {
"Gele'",
3194847,
"poz-aay",
"Latn",
}
m["sbd"] = {
"Southern Samo",
33122730,
"dmn-sam",
"Latn",
}
m["sbe"] = {
"Saliba (New Guinea)",
3469737,
"poz-ocw",
}
m["sbf"] = {
"Shabo",
36342,
"ssa",
"Latn",
}
m["sbg"] = {
"Seget",
7446237,
}
m["sbh"] = {
"Sori-Harengan",
36515,
"poz-aay",
"Latn",
}
m["sbi"] = {
"Seti",
7456682,
"qfa-tor",
"Latn",
}
m["sbj"] = {
"Surbakhal",
759995,
}
m["sbk"] = {
"Safwa",
4121160,
"bnt-mby",
"Latn",
}
m["sbl"] = {
"Botolan Sambal",
4095195,
"phi",
"Latn",
}
m["sbm"] = {
"Sagala",
11732610,
"bnt-ruv",
"Latn",
}
m["sbn"] = {
"Sindhi Bhil",
25559289,
"inc-snd",
"Arab, Deva, Sind, Guru",
ancestors = "sd",
}
m["sbo"] = {
"Sabüm",
7396535,
"mkh-asl",
}
m["sbp"] = {
"Sangu (Tanzania)",
7418149,
"bnt-bki",
"Latn",
}
m["sbq"] = {
"Sileibi",
7514337,
"ngf-mad",
}
m["sbr"] = {
"Sembakung Murut",
7449148,
"poz-san",
}
m["sbs"] = {
"Subiya",
6442073,
"bnt-bot",
"Latn",
}
m["sbt"] = {
"Kimki",
6410160,
"paa-pau",
}
m["sbu"] = {
"Stod Bhoti",
15622700,
"sit-las",
}
m["sbv"] = {
"Sabine",
65455885,
"itc-sbl",
"Latn",
display_text = s["itc-Latn-displaytext"],
entry_name = s["itc-Latn-entryname"],
sort_key = s["itc-Latn-sortkey"],
}
m["sbw"] = {
"Simba",
36430,
"bnt-tso",
"Latn",
}
m["sbx"] = {
"Seberuang",
12473470,
"poz-mly",
}
m["sby"] = {
"Soli",
7557754,
"bnt-bot",
"Latn",
}
m["sbz"] = {
"Sara Kaba",
25559318,
"csu-kab",
"Latn",
}
m["scb"] = {
"Chut",
2967709,
"mkh-vie",
"Latn",
}
m["sce"] = {
"Dongxiang",
32947,
"xgn-shr",
"Arab, Latn",
}
m["scf"] = {
"San Miguel Creole French",
12953094,
"crp",
"Latn",
ancestors = "gcf",
sort_key = s["roa-oil-sortkey"],
}
m["scg"] = {
"Sanggau",
12473466,
"day",
}
m["sch"] = {
"Sakachep",
37054,
"tbq-kuk",
}
m["sci"] = {
"Sri Lankan Creole Malay",
1089151,
"crp",
"Latn",
ancestors = "ms",
}
m["sck"] = {
"Sadri",
765922,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "hi-translit",
Kthi = "bho-Kthi-translit",
},
}
m["scl"] = {
"Shina",
1353320,
"inc-shn",
"ur-Arab, Deva",
}
m["scn"] = {
"Sicilian",
33973,
"roa-itr",
"Latn",
}
m["sco"] = {
"스코트어",
14549,
"gmw-ang",
"Latn",
ancestors = "gmw-msc",
}
m["scp"] = {
"Yolmo",
22662107,
"sit-kyk",
"Deva",
}
m["scq"] = {
"Sa'och",
6583617,
"mkh-pea",
}
m["scs"] = {
"North Slavey",
20628,
"den",
"Latn",
}
m["scu"] = {
"Shumcho",
22077739,
"sit-kin",
}
m["scv"] = {
"Sheni",
11015820,
"nic-jer",
"Latn",
ancestors = "zir",
}
m["scw"] = {
"Sha",
3438816,
"cdc-wst",
"Latn",
}
m["scx"] = {
"Sicel",
36667,
"itc",
"Polyt",
translit = "grc-translit",
display_text = s["Polyt-displaytext"],
entry_name = s["Polyt-entryname"],
sort_key = s["Polyt-sortkey"],
}
m["sda"] = {
"Toraja-Sa'dan",
36673,
"poz-ssw",
"Latn",
}
m["sdb"] = {
"Shabak",
3289596,
"ira-zgr",
ancestors = "hac",
}
m["sdc"] = {
"Sassarese",
845441,
"roa-itr",
"Latn",
}
m["sde"] = {
"Surubu",
3913336,
"nic-kau",
"Latn",
}
m["sdf"] = {
"Sarli",
7424256,
"ira-zgr",
ancestors = "hac",
}
m["sdg"] = {
"Savi",
3474654,
"inc-shn",
}
m["sdh"] = {
"Southern Kurdish",
1496597,
"ku",
"ku-Arab",
translit = "sdh-translit",
entry_name = {remove_diacritics = c.kasra .. c.sukun},
}
m["sdj"] = {
"Suundi",
7650407,
"bnt-kng",
"Latn",
}
m["sdk"] = {
"Sos Kundi",
7563811,
"paa-spk",
"Latn",
}
m["sdl"] = {
"Saudi Arabian Sign Language",
3504160,
"sgn",
}
m["sdm"] = {
"Semandang",
7449012,
"day",
}
m["sdn"] = {
"Gallurese",
612220,
"roa-itr",
"Latn",
ancestors = "co",
}
m["sdo"] = {
"Bukar-Sadung Bidayuh",
2927799,
"day",
"Latn",
}
m["sdp"] = {
"Sherdukpen",
7494785,
"sit-khm",
}
m["sdr"] = {
"Oraon Sadri",
12953860,
"inc-bih",
}
m["sds"] = {
"Tunisian Berber",
5329732,
"ber",
}
m["sdu"] = {
"Sarudu",
7424700,
"poz-cet",
}
m["sdx"] = {
"Sibu Melanau",
18642842,
"poz-bnn",
}
m["sea"] = {
"Semai",
3135426,
"mkh-asl",
"Latn",
}
-- seb is a duplicate code of spp
m["sec"] = {
"Sechelt",
7442898,
"sal",
"Latn",
}
m["sed"] = {
"써당어",
56448,
"mkh-nbn",
"Latn",
}
m["see"] = {
"Seneca",
1185133,
"iro-nor",
"Latn",
}
m["sef"] = {
"Cebaara Senoufo",
10975121,
"alv-snr",
"Latn",
}
m["seg"] = {
"Segeju",
17584599,
"bnt-mij",
"Latn",
}
m["seh"] = {
"Sena",
2964008,
"bnt-sna",
"Latn",
}
m["sei"] = {
"Seri",
36583,
"qfa-iso",
"Latn",
}
m["sej"] = {
"Sene",
7450252,
}
m["sek"] = {
"Sekani",
28562,
"ath-nor",
"Latn",
}
m["sen"] = {
"Nanerigé Sénoufo",
36002,
"alv-sma",
}
m["seo"] = {
"Suarmin",
7630513,
"paa",
}
m["sep"] = {
"Sìcìté Sénoufo",
56787,
"alv-sma",
}
m["seq"] = {
"Senara Sénoufo",
35210,
"alv-snr",
}
m["ser"] = {
"Serrano",
3479942,
"azc-tak",
"Latn",
}
m["ses"] = {
"Koyraboro Senni",
35655,
"son",
"Latn",
}
m["set"] = {
"Sentani",
3441672,
"paa-sen",
"Latn",
}
m["seu"] = {
"Serui-Laut",
7455503,
"poz-hce",
"Latn",
}
m["sev"] = {
"Nyarafolo Senoufo",
36306,
"alv-snr",
}
m["sew"] = {
"Sewa Bay",
7458126,
"poz-ocw",
}
m["sey"] = {
"Secoya",
3477218,
"sai-tuc",
"Latn",
}
m["sez"] = {
"Senthang Chin",
7451223,
"tbq-kuk",
}
m["sfb"] = {
"French Belgian Sign Language",
3217332,
"sgn",
}
m["sfe"] = {
"Eastern Subanun",
63311321,
"phi",
"Latn",
}
m["sfm"] = {
"Small Flowery Miao",
7542773,
"hmn",
}
m["sfs"] = {
"South African Sign Language",
3322093,
"sgn",
}
m["sfw"] = {
"Sehwi",
36593,
"alv-ctn",
"Latn",
}
m["sga"] = {
"Old Irish",
35308,
"cel-gae",
"Latn, Ogam",
entry_name = {remove_diacritics = c.dotabove .. c.diaer .. "·"},
sort_key = "sga-sortkey",
standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚú0123456789ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔ" .. c.punc,
}
m["sgb"] = {
"Mag-Anchi Ayta",
4356243,
"phi",
"Latn",
}
m["sgc"] = {
"Kipsigis",
56339,
"sdv-nma",
}
m["sgd"] = {
"Surigaonon",
34140,
"phi",
"Latn",
}
m["sge"] = {
"Segai",
7446180,
}
m["sgg"] = {
"Swiss-German Sign Language",
35150,
"sgn",
}
m["sgh"] = {
"Shughni",
34053,
"ira-shr",
"Latn, Cyrl",
translit = "sgh-translit",
override_translit = true,
}
m["sgi"] = {
"Suga",
36475,
"nic-mmb",
"Latn",
}
m["sgk"] = {
"Sangkong",
2945610,
"tbq-bis",
}
m["sgm"] = {
"Singa",
7522797,
"bnt-lok",
"Latn",
}
m["sgp"] = {
"Singpho",
7524158,
"sit-jnp",
"Latn",
}
m["sgr"] = {
"Sangisari",
3394363,
"ira-kms",
"Arab",
}
m["sgs"] = {
"사모기트어",
213434,
"bat-eas",
"Latn",
wikimedia_codes = "bat-smg",
ancestors = "olt",
display_text = "lt-common",
entry_name = "lt-common",
sort_key = "lt-common",
}
m["sgt"] = {
"Brokpake",
56603,
"sit-tib",
"Tibt",
translit = "Tibt-translit",
override_translit = true,
display_text = s["Tibt-displaytext"],
entry_name = s["Tibt-entryname"],
sort_key = "Tibt-sortkey",
}
m["sgu"] = {
"Salas",
7403694,
"poz-cma",
}
m["sgw"] = {
"Sebat Bet Gurage",
2707343,
"sem-eth",
"Ethi",
}
m["sgx"] = {
"Sierra Leone Sign Language",
7511448,
"sgn",
}
m["sgy"] = {
"Sanglechi",
3472220,
"ira-sgi",
}
m["sgz"] = {
"Sursurunga",
36511,
"poz-ocw",
"Latn",
}
m["sha"] = {
"Shall-Zwall",
3915355,
"nic-beo",
}
m["shb"] = {
"Ninam",
3436586,
"sai-ynm",
"Latn",
}
m["shc"] = {
"Sonde",
7560881,
"bnt-pen",
"Latn",
}
m["shd"] = {
"Kundal Shahi",
6444265,
"inc-shn",
"Arab",
}
m["she"] = {
"Sheko",
3183355,
"omv-diz",
}
m["shg"] = {
"Shua",
3501092,
"khi-kal",
"Latn",
}
m["shh"] = {
"Shoshone",
33811,
"azc-num",
"Latn",
}
m["shi"] = {
"Tashelhit",
34152,
"ber",
"Latn, Arab, Tfng, Hebr",
ancestors = "shi-med",
translit = {
Tfng = "Tfng-translit",
},
display_text = {
Hebr = "Hebr-common",
},
entry_name = {
Arab = "ar-entryname",
Hebr = "Hebr-common",
},
sort_key = {
Hebr = "Hebr-common",
},
}
m["shj"] = {
"Shatt",
56344,
"sdv-daj",
}
m["shk"] = {
"Shilluk",
36486,
"sdv-lon",
"Latn",
}
m["shl"] = {
"Shendu",
22074616,
"tbq-kuk",
}
m["shm"] = {
"Shahrudi",
7462280,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-cen",
}
m["shn"] = {
"샨어",
56482,
"tai-swe",
"Mymr",
translit = "shn-translit",
sort_key = {
from = {"[ၢႃ]", "ဵ", "ႅ", "ႇ", "ႈ", "း", "ႉ", "ႊ"},
to = {"ာ", "ေ", "ႄ", "႒", "႓", "႔", "႕", "႖"}
},
}
m["sho"] = {
"Shanga",
3913931,
"dmn-bbu",
"Latn",
}
m["shp"] = {
"Shipibo-Conibo",
2671988,
"sai-pan",
"Latn",
}
m["shq"] = {
"Sala",
10961665,
"bnt-bot",
"Latn",
}
m["shr"] = {
"Shi",
3481999,
"bnt-shh",
"Latn",
}
m["shs"] = {
"Shuswap",
3482685,
"sal",
"Latn",
}
m["sht"] = {
"Shasta",
56396,
"nai-shs",
"Latn",
}
m["shu"] = {
"Chadian Arabic",
56497,
"sem-arb",
"Arab",
entry_name = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {u(0x0671)},
to = {u(0x0627)}
},
}
m["shv"] = {
"Shehri",
33445,
"sem-sar",
"Arab, Latn",
}
m["shw"] = {
"Shwai",
36527,
"alv-hei",
}
m["shx"] = {
"She",
2605689,
"hmn",
}
m["shy"] = {
"Tachawit",
33274,
"ber",
"Tfng, Arab, Latn",
translit = "Tfng-translit",
}
m["shz"] = {
"Syenara Senoufo",
36316,
"alv-snr",
}
m["sia"] = {
"Akkala Sami",
35241,
"smi",
"Cyrl, Latn",
translit = "sia-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = "'ˈ"},
}
m["sib"] = {
"Sebop",
7442799,
"poz-swa",
"Latn",
}
m["sid"] = {
"시다마어",
33786,
"cus-hec",
"Latn, Ethi",
}
m["sie"] = {
"Simaa",
7517329,
"bnt-kav",
"Latn",
}
m["sif"] = {
"Siamou",
36252,
}
m["sig"] = {
"Paasaal",
36426,
"nic-sis",
"Latn",
}
m["sih"] = {
"Sîshëë",
8072753,
"poz-cln",
"Latn",
}
m["sii"] = {
"Shom Peng",
1039346,
"aav",
}
m["sij"] = {
"Numbami",
3346277,
"poz-ocw",
"Latn",
}
m["sik"] = {
"Sikiana",
3443734,
"sai-prk",
"Latn",
}
m["sil"] = {
"Tumulung Sisaala",
25383006,
"nic-sis",
"Latn",
}
m["sim"] = {
"Seim",
7446815,
"paa-spk",
}
m["sip"] = {
"Sikkimese",
35285,
"sit-tib",
"Tibt",
ancestors = "xct",
translit = "Tibt-translit",
override_translit = true,
display_text = s["Tibt-displaytext"],
entry_name = s["Tibt-entryname"],
sort_key = "Tibt-sortkey",
}
m["siq"] = {
"Sonia",
7561770,
}
m["sir"] = {
"Siri",
3438729,
"cdc-wst",
"Latn",
}
m["sis"] = {
"Siuslaw",
2315424,
}
m["siu"] = {
"Sinagen",
7521655,
"qfa-tor",
"Latn",
}
m["siv"] = {
"Sumariup",
7636966,
"paa-spk",
"Latn",
}
m["siw"] = {
"Siwai",
7532519,
"paa-sbo",
}
m["six"] = {
"Sumau",
7637021,
"ngf-mad",
"Latn",
}
m["siy"] = {
"Sivandi",
13269,
"xme",
"fa-Arab, Latn",
ancestors = "xme-mid",
}
m["siz"] = {
"Siwi",
36814,
"ber",
"Tfng, Arab, Latn",
}
m["sja"] = {
"Epena",
3055682,
"sai-chc",
"Latn",
}
m["sjb"] = {
"Sajau Basap",
4684353,
"poz-bnn",
}
m["sjc"] = {
"Shaojiang Min",
3431451,
"zhx-inm",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["sjd"] = {
"Kildin Sami",
33656,
"smi",
"Cyrl",
translit = "sjd-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = "'ˈ"},
}
m["sje"] = {
"Pite Sami",
56314,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "sje-sortkey",
}
m["sjg"] = {
"Assangori",
3502255,
"sdv-tmn",
}
m["sjk"] = {
"Kemi Sami",
35871,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = "'ˈ"},
}
m["sjl"] = {
"Miji",
6845470,
"sit-hrs",
}
m["sjm"] = {
"Mapun",
3287253,
"poz-sbj",
"Latn",
}
m["sjn"] = {
"Sindarin",
56437,
"art",
"Latn, Teng",
type = "appendix-constructed",
}
m["sjo"] = {
"시버어",
13223,
"tuw-jrc",
"sjo-Mong",
ancestors = "mnc",
}
m["sjp"] = {
"Surjapuri",
7645351,
"inc-krd",
"Deva, as-Beng, Kthi",
}
m["sjr"] = {
"Siar-Lak",
3482907,
"poz-ocw",
}
m["sjs"] = {
"Senhaja De Srair",
56744,
"ber",
}
m["sjt"] = {
"Ter Sami",
36656,
"smi",
"Cyrl, Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = "'ˈ"},
translit = "sjt-translit",
}
m["sju"] = {
"Ume Sami",
56415,
"smi",
"Latn",
entry_name = {remove_diacritics = c.macron .. "'ˈ"},
display_text = {
from = {"'"},
to = {"ˈ"}
},
sort_key = "sju-sortkey",
}
m["sjw"] = {
"Shawnee",
2669206,
"alg",
"Latn",
}
m["ska"] = {
"Skagit",
25559652,
"sal",
"Latn",
}
m["skb"] = {
"Saek",
36437,
"tai-nor",
"Thai",
sort_key = "Thai-sortkey",
}
m["skc"] = {
"Ma Manda",
6720783,
"ngf-fin",
}
m["skd"] = {
"Southern Sierra Miwok",
3492334,
"nai-utn",
"Latn",
}
m["ske"] = {
"Ske",
7534244,
"poz-vnn",
"Latn",
}
m["skf"] = {
"Mekéns",
3304806,
"tup",
"Latn",
}
m["skh"] = {
"Sikule",
3121081,
"poz-nws",
}
m["ski"] = {
"Sika",
33960,
"poz-cet",
"Latn",
}
m["skj"] = { -- compare 'ths'
"Seke",
30226846,
"sit-tam",
}
m["skk"] = {
"Sok",
12953887,
"mkh-ban",
}
m["skm"] = {
"Sakam",
6448517,
"ngf-fin",
}
m["skn"] = {
"Kolibugan Subanon",
18755617,
"phi",
"Latn",
}
m["sko"] = {
"Seko Tengah",
15613270,
"poz",
}
m["skp"] = {
"Sekapan",
7447132,
"poz-bnn",
}
m["skq"] = {
"Sininkere",
3914896,
"dmn-man",
"Latn",
}
m["skr"] = {
"Saraiki",
33902,
"inc-pan",
"pa-Arab, Mult, Deva",
ancestors = "lah",
entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna},
translit = {
["pa-Arab"] = "pa-Arab-translit",
Deva = "hi-translit",
Mult = "Mult-translit",
},
}
m["sks"] = {
"Maia",
12952760,
"ngf-mad",
"Latn",
}
m["skt"] = {
"Sakata",
36691,
"bnt-bnm",
"Latn",
}
m["sku"] = {
"Sakao",
3298421,
"poz-vnn",
"Latn",
}
m["skv"] = {
"Skou",
3915200,
"paa-msk",
"Latn",
}
m["skw"] = {
"Skepi Creole Dutch",
2522153,
"crp",
"Latn",
ancestors = "nl",
}
m["skx"] = {
"Seko Padang",
15613282,
"poz-ssw",
"Latn",
}
m["sky"] = {
"Sikaiana",
7439242,
"poz-pnp",
"Latn",
}
m["skz"] = {
"Sekar",
7447136,
"poz-cet",
}
m["slc"] = {
"Saliba (Colombia)",
3441097,
nil,
"Latn",
}
m["sld"] = {
"Sissala",
11020264,
"nic-sis",
"Latn",
}
m["sle"] = {
"Sholaga",
7500203,
"dra-kan",
"Knda",
translit = "kn-translit"
}
m["slf"] = {
"Swiss-Italian Sign Language",
12953479,
"sgn",
}
m["slg"] = {
"Selungai Murut",
7448844,
"poz-san",
}
m["slh"] = {
"Southern Puget Sound Salish",
12642471,
"sal",
"Latn",
}
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
"Salumá",
7406296,
"sai-prk",
"Latn",
}
m["sll"] = {
"Salt-Yui",
7405785,
}
m["slm"] = {
"Pangutaran Sama",
3362086,
"poz-sbj",
"Latn",
}
m["sln"] = {
"Salinan",
1568938,
"qfa-iso",
"Latn",
}
m["slp"] = {
"Lamaholot",
6480777,
"poz-cet",
"Latn",
}
m["slq"] = {
"Salchuq",
56752,
"trk",
}
m["slr"] = {
"Salar",
33963,
"trk-ogz",
"Arab, Latn",
ancestors = "trk-eog",
}
m["sls"] = {
"Singapore Sign Language",
7512563,
"sgn",
}
m["slt"] = {
"Sila",
7514021,
"tbq-sil",
}
m["slu"] = {
"Selaru",
7447500,
"poz-cet",
"Latn",
}
m["slw"] = {
"Sialum",
7506694,
"ngf",
}
m["slx"] = {
"Salampasu",
7403607,
"bnt-lun",
"Latn",
}
m["sly"] = {
"셀라야어",
7447520,
"poz-ssw",
}
m["slz"] = {
"Ma'ya",
2291492,
"poz-hce",
"Latn",
}
m["sma"] = {
"남부 사미어",
13293,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = "'ˈ"},
sort_key = "sma-sortkey",
}
m["smb"] = {
"Simbari",
7517427,
"ngf",
"Latn",
}
m["smc"] = {
"Som",
7559081,
"ngf-fin",
"Latn",
}
m["smd"] = {
"Sama",
6407456,
"bnt-kmb",
"Latn",
}
m["smf"] = {
"Auwe",
3502072,
"paa-brd",
ancestors = "dnd",
}
m["smg"] = {
"Simbali",
56692,
"paa-bng",
"Latn",
}
m["smh"] = {
"Samei",
7409269,
"tbq-axi",
}
m["smj"] = {
"Lule Sami",
56322,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "smj-sortkey",
}
m["smk"] = {
"Bolinao",
2669235,
"phi",
"Latn, Tglg",
}
m["sml"] = {
"Central Sama",
3470593,
"poz-sbj",
"Latn",
}
m["smm"] = {
"Musasa",
6940122,
"inc-eas",
ancestors = "bh",
}
m["smn"] = {
"Inari Sami",
33462,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "smn-sortkey",
}
m["smp"] = {
"Samaritan Hebrew",
56502,
"sem-can",
"Samr",
translit = "Samr-translit",
entry_name = s["Samr-entryname"],
sort_key = s["Samr-sortkey"],
ancestors = "hbo",
}
m["smq"] = {
"Samo",
7409884,
"ngf",
"Latn",
}
m["smr"] = {
"Simeulue",
2992833,
"poz-nws",
"Latn",
}
m["sms"] = {
"Skolt Sami",
13271,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "sms-sortkey",
}
m["smt"] = {
"Simte",
7521268,
"tbq-kuk",
}
m["smu"] = {
"Somray",
6583612,
"mkh-pea",
}
m["smv"] = {
"Samvedi",
6345632,
"inc-sou",
}
m["smw"] = {
"Sumbawa",
3182585,
"poz-bss",
"Latn",
}
m["smx"] = {
"Samba",
11120157,
"bnt-pen",
"Latn",
}
m["smy"] = {
"Semnani",
14531212,
"xme",
"fa-Arab, Latn",
}
m["smz"] = {
"Simeku",
7517534,
"paa-sbo",
}
m["snb"] = {
"Sebuyau",
7442836,
"poz-mly",
}
m["snc"] = {
"Sinaugoro",
4170719,
"poz-ocw",
"Latn",
}
m["sne"] = {
"Bau Bidayuh",
2891938,
"day",
"Latn",
}
m["snf"] = {
"Noon",
36304,
"alv-cng",
"Latn",
}
m["sng"] = {
"Sanga (Congo)",
3438316,
"bnt-lub",
"Latn",
}
m["sni"] = {
"Sensi",
7451029,
"sai-pan",
"Latn",
}
m["snj"] = {
"Riverain Sango",
25559751,
"crp",
"Latn",
ancestors = "ngb",
}
m["snk"] = {
"Soninke",
36660,
"dmn-snb",
"Latn",
}
m["snl"] = {
"Sangil",
3472206,
"phi",
"Latn",
}
m["snm"] = {
"Southern Ma'di",
15637273,
"csu-mma",
}
m["snn"] = {
"Siona",
3485116,
"sai-tuc",
"Latn",
}
m["sno"] = {
"Snohomish",
25559662,
"sal",
"Latn",
}
m["snp"] = {
"Siane",
7506812,
"paa-kag",
"Latn",
}
m["snq"] = {
"Sangu (Gabon)",
36609,
"bnt-sir",
"Latn",
}
m["snr"] = {
"Sihan",
7513400,
"ngf-mad",
}
m["sns"] = {
"Nahavaq",
2160435,
"poz-vnc",
"Latn",
}
m["snu"] = {
"Senggi",
7929052,
"paa-brd"
}
m["snv"] = {
"Sa'ban",
3474891,
"poz-swa",
"Latn",
}
m["snw"] = {
"Selee",
36272,
"alv-ntg",
"Latn",
}
m["snx"] = {
"Sam",
7408387,
}
m["sny"] = {
"Saniyo-Hiyewe",
7418302,
"paa-spk",
"Latn",
}
m["snz"] = {
"Kou",
7525035, -- also 4803639
"ngf-mad",
"Latn",
}
m["soa"] = {
"Thai Song",
7709159,
"tai-swe",
"Tavt, Thai",
--translit = "Tavt-translit",
sort_key = {
from = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])", "([เแโใไ])([ก-ฮ])"},
to = {"%2%1", "%2%1"}
},
}
m["sob"] = {
"Sobei",
3121035,
"poz-ocw",
"Latn",
}
m["soc"] = {
"Soko",
7555138,
"bnt-ske",
"Latn",
}
m["sod"] = {
"Songoora",
7561296,
"bnt-lgb",
"Latn",
}
m["soe"] = {
"Songomeno",
5713543,
"bnt-bsh",
"Latn",
}
m["sog"] = {
"Sogdian",
205979,
"ira-sgc",
"Sogd, Mani, Syrc, Sogo",
translit = {
Sogd = "Sogd-translit",
Mani = "Mani-translit",
Sogo = "Sogo-translit",
},
}
m["soh"] = {
"Aka (Sudan)",
3450949,
"sdv-eje",
"Latn",
}
m["soi"] = {
"Sonha",
12953890,
"inc-eas",
}
m["sok"] = {
"Sokoro",
3441303,
"cdc-est",
"Latn",
}
m["sol"] = {
"Solos",
3489591,
"poz-ocw",
}
m["soo"] = {
"Nsong",
12953148,
"bnt-bdz",
"Latn",
}
m["sop"] = {
"Songe",
3130911,
"bnt-lbn",
"Latn",
}
m["soq"] = {
"Kanasi",
11732656,
}
m["sor"] = {
"Somrai",
3123566,
"cdc-est",
"Latn",
}
m["sos"] = {
"Seenku",
36274,
"dmn-smg",
}
m["sou"] = {
"Southern Thai",
56508,
"tai-swe",
"Thai",
sort_key = "Thai-sortkey",
}
m["sov"] = {
"Sonsorolese",
13281,
"poz-mic",
"Latn",
}
m["sow"] = {
"Sowanda",
7571845,
"paa-brd"
}
m["sox"] = {
"Swo",
36604,
"bnt-mka",
"Latn",
}
m["soy"] = {
"Miyobe",
35913,
"alv-sav",
"Latn",
}
m["soz"] = {
"Temi",
13278,
"bnt-kka",
"Latn",
}
m["spb"] = {
"Sepa (Indonesia)",
18603687,
"poz-cma",
"Latn",
}
m["spc"] = {
"Sapé",
2888158,
nil,
"Latn",
}
m["spd"] = {
"Saep",
7398312,
"ngf-mad",
}
m["spe"] = {
"Sepa (New Guinea)",
7451725,
"poz-ocw",
"Latn",
}
m["spg"] = {
"Sian",
7506806,
"poz-bnn",
}
m["spi"] = {
"Saponi",
3915418,
"paa",
}
m["spk"] = {
"Sengo",
7450584,
"paa-spk",
"Latn",
}
m["spl"] = {
"Selepet",
7447917,
"ngf",
}
m["spm"] = {
"Sepen",
4701931,
"paa",
"Latn",
}
m["spn"] = {
"Sanapaná",
3033556,
"sai-mas",
"Latn",
}
m["spo"] = {
"Spokane",
3493704,
"sal",
}
m["spp"] = {
"Supyire",
56284,
"alv-sma",
"Latn",
}
m["spr"] = {
"Saparua",
7420921,
"poz-cma",
"Latn",
}
m["sps"] = {
"Saposa",
3473187,
"poz-ocw",
}
m["spt"] = {
"Spiti Bhoti",
22080879,
"sit-las",
}
m["spu"] = {
"Sapuan",
7421168,
"mkh-ban",
}
m["spv"] = {
"Sambalpuri",
6433240,
"inc-eas",
"Orya",
translit = "or-translit",
ancestors = "or",
}
m["spx"] = {
"South Picene",
36688,
"itc-sbl",
"Ital, Latn",
translit = {
Ital = "Ital-translit",
},
display_text = {
Latn = s["itc-Latn-displaytext"]
},
entry_name = {
Latn = s["itc-Latn-entryname"],
},
sort_key = {
Latn = s["itc-Latn-sortkey"],
},
}
m["spy"] = {
"Sabaot",
7395896,
"sdv-kln",
}
m["sqa"] = {
"Shama-Sambuga",
3914392,
"nic-kmk",
"Latn",
}
m["sqh"] = {
"Shau",
3913925,
"nic-jer",
"Latn",
}
m["sqk"] = {
"Albanian Sign Language",
4709168,
"sgn",
}
m["sqm"] = {
"Suma",
11008431,
"gba-wes",
}
m["sqn"] = {
"Susquehannock",
3505736,
"iro-nor",
}
m["sqo"] = {
"Sorkhei",
3491964,
"ira-kms",
}
m["sqq"] = {
"Sou",
16979751,
"mkh-ban",
}
m["sqr"] = {
"Siculo-Arabic",
1069489,
"sem-arb",
"Arab",
}
m["sqs"] = {
"Sri Lankan Sign Language",
3915466,
"sgn",
}
m["sqt"] = {
"Soqotri",
13283,
"sem-sar",
"Arab, Latn",
}
m["squ"] = {
"Squamish",
2484579,
"sal",
"Latn",
}
m["sra"] = {
"Saruga",
7424699,
"ngf-mad",
"Latn",
}
m["srb"] = {
"Sora",
13284,
"mun",
"Sora, Latn, Orya",
}
m["sre"] = {
"Sara",
33957,
"day",
}
m["srf"] = {
"Nafi",
6958174,
"poz-ocw",
}
m["srg"] = {
"Sulod",
7636489,
"phi",
}
m["srh"] = {
"Sarikoli",
33873,
"ira-shr",
"Latn, ug-Arab, Cyrl",
}
m["sri"] = {
"Siriano",
3485264,
"sai-tuc",
"Latn",
}
m["srk"] = {
"Serudung Murut",
7455497,
"poz-san",
}
m["srl"] = {
"Isirawa",
4203802,
"paa-tkw",
}
m["srm"] = {
"Saramaccan",
33779,
"crp",
"Latn",
ancestors = "en, pt",
}
m["srn"] = {
"Sranan Tongo",
33989,
"crp",
"Latn",
ancestors = "en",
}
m["srq"] = {
"Sirionó",
3027953,
"tup-gua",
"Latn",
}
m["srr"] = {
"Serer",
36284,
"alv-fwo",
"Latn",
}
m["srs"] = {
"Tsuut'ina",
20825,
"ath-nor",
"Latn",
}
m["srt"] = {
"Sauri",
7427547,
"paa-egb",
}
m["sru"] = {
"Suruí",
7646993,
"tup",
"Latn",
}
m["srv"] = {
"Waray Sorsogon",
18755610,
"phi",
"Latn",
}
m["srw"] = {
"Serua",
14916905,
"poz-cet",
}
m["srx"] = {
"Sirmauri",
7530505,
"him",
}
m["sry"] = {
"Sera",
7452602,
"poz-ocw",
"Latn",
}
m["srz"] = {
"Shahmirzadi",
12953126,
"ira-msh",
"fa-Arab",
}
m["ssb"] = {
"Southern Sama",
3470594,
"poz-sbj",
"Latn",
}
m["ssc"] = {
"Suba-Simbiti",
7630687,
"bnt-lok",
"Latn",
}
m["ssd"] = {
"Siroi",
10771067,
"ngf-mad",
"Latn",
}
m["sse"] = {
"Balangingi",
2880535,
"poz-sbj",
"Latn",
}
m["ssf"] = {
"Thao",
676492,
"map",
"Latn",
}
m["ssg"] = {
"Seimat",
3182581,
"poz-aay",
"Latn",
}
m["ssh"] = {
"Shihhi Arabic",
56571,
"sem-arb",
"Arab",
entry_name = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {u(0x0671)},
to = {u(0x0627)}
},
}
m["ssi"] = {
"Sansi",
3309366,
"inc-nwe",
}
m["ssj"] = {
"Sausi",
7427605,
"ngf-mad",
"Latn",
}
m["ssk"] = {
"Sunam",
11002210,
"sit-kin",
}
m["ssl"] = {
"Western Sisaala",
11154776,
"nic-sis",
"Latn",
}
m["ssm"] = {
"Semnam",
7449713,
"mkh-asl",
"Latn",
}
m["sso"] = {
"Sissano",
7530937,
"poz-ocw",
"Latn",
}
m["ssp"] = {
"Spanish Sign Language",
3100814,
"sgn",
}
m["ssq"] = {
"So'a",
7572120,
"poz-cet",
"Latn",
}
m["ssr"] = {
"Swiss-French Sign Language",
12953483,
"sgn",
}
m["sss"] = {
"Sô",
3082037,
"mkh-kat",
}
m["sst"] = {
"Sinasina",
7521813,
"ngf",
"Latn",
}
m["ssu"] = {
"Susuami",
7649752,
"ngf",
"Latn",
}
m["ssv"] = {
"Shark Bay",
7489783,
"poz-vnn",
"Latn",
}
m["ssx"] = {
"Samberigi",
7409020,
"paa-eng",
"Latn",
}
m["ssy"] = {
"사호어",
36353,
"cus-eas",
"Latn, Ethi, Arab",
}
m["ssz"] = {
"Sengseng",
7450601,
"poz-ocw",
"Latn",
}
m["stb"] = {
"Northern Subanen",
12953892,
"phi",
"Latn",
}
m["std"] = {
"Sentinelese",
568377,
}
m["ste"] = {
"Liana-Seti",
6539924,
"poz-cma",
}
m["stf"] = {
"Seta",
7456326,
"qfa-tor",
"Latn",
}
m["stg"] = {
"Trieng",
22694648,
"mkh-ban",
}
m["sth"] = {
"Shelta",
36705,
"qfa-mix",
"Latn",
ancestors = "ga, en",
}
m["sti"] = {
"Bulo Stieng",
15771431,
"mkh-ban",
"Khmr, Latn",
}
m["stj"] = {
"Matya Samo",
10974879,
"dmn-sam",
"Latn",
}
m["stk"] = {
"Arammba",
3502094,
"ngf",
"Latn",
}
m["stm"] = {
"Setaman",
7456333,
"ngf-okk",
"Latn",
}
m["stn"] = {
"Owa",
1324132,
"poz-sls",
"Latn",
}
m["sto"] = {
"Stoney",
3033570,
"sio-dkt",
"Latn",
}
m["stp"] = {
"Southeastern Tepehuan",
12953917,
"azc-pim",
"Latn",
}
m["stq"] = {
"Saterland Frisian",
27154,
"gmw-fri",
"Latn",
}
m["str"] = {
"Saanich",
36444,
"sal",
"Latn",
}
m["sts"] = {
"Shumashti",
33777,
"inc-kun",
"Arab",
}
m["stt"] = {
"Budeh Stieng",
12953891,
"mkh-ban",
}
m["stu"] = {
"Samtao",
25559550,
"mkh-pal",
}
m["stv"] = {
"Silt'e",
33880,
"sem-eth",
"Ethi",
}
m["stw"] = {
"Satawalese",
28477,
"poz-mic",
"Latn",
}
m["sty"] = {
"Siberian Tatar",
4418344,
"trk-kno",
"Cyrl",
}
m["sua"] = {
"Sulka",
7636341,
"paa",
}
m["sub"] = {
"Suku",
12953160,
"bnt-yak",
"Latn",
}
m["suc"] = {
"Western Subanon",
16113894,
"phi",
"Latn",
}
m["sue"] = {
"Suena",
7634386,
"ngf",
"Latn",
}
m["sug"] = {
"Suganga",
7634706,
"ngf-okk",
"Latn",
}
m["sui"] = {
"Suki",
2089984,
"ngf",
"Latn",
}
m["suk"] = {
"Sukuma",
2638144,
"bnt-tkm",
"Latn",
}
m["suq"] = {
"Suri",
5364172,
"sdv",
}
m["sur"] = {
"Mwaghavul",
3440486,
"cdc-wst",
"Latn",
}
m["sus"] = {
"Susu",
33990,
"dmn-sya",
"Latn",
}
m["sut"] = {
"Subtiaba",
3915405,
"omq",
"Latn",
}
m["suv"] = {
"Puroik",
56408,
"sit-khb",
"Beng, Deva, Latn",
ancestors = "sit-khp-pro",
}
m["suw"] = {
"Sumbwa",
7637055,
"bnt-glb",
"Latn",
}
m["sux"] = {
"Sumerian",
36790,
"qfa-iso",
"Xsux, Latn",
}
m["suy"] = {
"Suyá",
3505859,
"sai-nje",
"Latn",
}
m["suz"] = {
"Sunwar",
56549,
"sit-kiw",
"Deva, Sunu"
}
m["sva"] = {
"Svan",
34067,
"ccs",
"Geor, Cyrl",
translit = "sva-translit",
override_translit = true,
}
m["svb"] = {
"Ulau-Suain",
7878769,
"poz-ocw",
"Latn",
}
m["svc"] = {
"Vincentian Creole English",
3501785,
"crp",
"Latn",
ancestors = "en",
}
m["sve"] = {
"Serili",
7454834,
"poz-tim",
}
m["svk"] = {
"Slovakian Sign Language",
7541557,
"sgn",
}
m["svm"] = {
"Slavomolisano",
36254,
"zls",
"Latn",
ancestors = "sh",
}
m["svs"] = {
"Savosavo",
3130296,
"paa",
"Latn",
}
m["svx"] = {
"Skalvian",
3486125,
"bat-wes",
"Latn",
}
m["swb"] = {
"Maore Comorian",
34075,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["swf"] = {
"Sere",
7453056,
"nic-ser",
"Latn",
}
m["swg"] = {
"Swabian",
327274,
"gmw-hgm",
"Latn",
ancestors = "gsw",
}
m["swi"] = {
"Sui",
3112388,
"qfa-kms",
"Latn, Shui, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["swj"] = {
"Sira",
36599,
"bnt-sir",
"Latn",
}
m["swl"] = {
"Swedish Sign Language",
36558,
"sgn",
}
m["swm"] = {
"Samosa",
7410037,
"ngf-mad",
"Latn",
}
m["swn"] = {
"Sokna",
2988323,
"ber",
}
m["swo"] = {
"Shanenawa",
61974839,
"sai-pan",
"Latn",
}
m["swp"] = {
"Suau",
3502368,
"poz-ocw",
}
m["swq"] = {
"Sharwa",
56791,
"cdc-cbm",
"Latn",
}
m["swr"] = {
"Saweru",
3474649,
}
m["sws"] = {
"Seluwasan",
7448845,
"poz-cet",
}
m["swt"] = {
"Sawila",
7428639,
}
m["swu"] = {
"Suwawa",
7650588,
"phi",
}
m["sww"] = {
"Sowa",
7571843,
"poz-vnn",
"Latn",
}
m["swx"] = {
"Suruahá",
3114402,
"auf",
}
m["swy"] = {
"Sarua",
56261,
"cdc-est",
"Latn",
}
m["sxb"] = {
"Suba",
33916,
"bnt-lok",
"Latn",
}
m["sxc"] = {
"Sicanian",
36335,
}
m["sxe"] = {
"Sighu",
36431,
"bnt-kel",
"Latn",
}
m["sxg"] = {
"Shixing",
56337,
"sit-nax",
"Latn",
}
m["sxk"] = {
"Southern Kalapuya",
3192122,
"nai-klp",
}
m["sxl"] = {
"Selonian",
36491,
"bat-eas",
"Latn",
}
m["sxm"] = {
"Samre",
6583615,
"mkh-pea",
}
m["sxn"] = {
"Sangir",
25714758,
"phi",
"Latn",
}
m["sxo"] = {
"Sorothaptic",
2762254,
}
m["sxr"] = {
"Saaroa",
716599,
"map",
"Latn",
}
m["sxs"] = {
"Sasaru",
3913384,
"alv-yek",
"Latn",
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
"Saxwe Gbe",
7428892,
"alv-pph",
"Latn",
}
m["sya"] = {
"Siang",
3482903,
}
m["syb"] = {
"Central Subanen",
12953893,
"phi",
"Latn",
}
m["syc"] = {
"Classical Syriac",
33538,
"sem-are",
"Syrc",
entry_name = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)},
}
m["syi"] = {
"Seki",
36547,
"bnt-kel",
"Latn",
}
m["syk"] = {
"Sukur",
56292,
"cdc-cbm",
"Latn",
}
m["syl"] = {
"Sylheti",
2044560,
"inc-bas",
"Sylo, Beng",
ancestors = "inc-obn",
translit = "syl-translit",
}
m["sym"] = {
"Maya Samo",
10950421,
"dmn-sam",
"Latn",
}
m["syn"] = {
"Senaya",
33914,
"sem-nna",
}
m["syo"] = {
"Suoy",
7641864,
"mkh-pea",
}
m["sys"] = {
"Sinyar",
56840,
"csu",
"Latn",
}
m["syw"] = {
"Kagate",
12952538,
"sit-kyk",
"Deva",
}
m["syx"] = {
"Osamayi",
7408415,
"bnt-kel",
"Latn",
}
m["syy"] = {
"Al-Sayyid Bedouin Sign Language",
2915457,
"sgn",
}
m["sza"] = {
"Semelai",
3111827,
"mkh-asl",
"Latn",
}
m["szb"] = {
"Ngalum",
11732516,
"ngf-okk",
"Latn",
}
m["szc"] = {
"Semaq Beri",
7449119,
"mkh-asl",
}
m["szd"] = {
"Seru",
7455488,
"poz-bnn",
"Latn",
}
m["sze"] = {
"Seze",
373683,
"omv-mao",
"Latn",
}
m["szg"] = {
"Sengele",
7450555,
"bnt-mon",
"Latn",
}
m["szl"] = {
"Silesian",
30319,
"zlw-lch",
"Latn",
ancestors = "zlw-opl",
}
m["szn"] = {
"Sula",
3503403,
"poz-cma",
"Latn",
}
m["szp"] = {
"Suabo",
7630429,
"ngf-sbh",
"Latn",
}
m["szv"] = {
"Isubu",
35431,
"bnt-saw",
"Latn",
}
m["szw"] = {
"Sawai",
3447258,
"poz-hce",
"Latn",
}
m["szy"] = {
"Sakizaya",
718269,
"map",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
cfgw46575w1r453wt4ydji6fa5dlj7d
모듈:etymon/data
828
496351
4484149
2026-05-24T08:41:53Z
Jeebeen
13056
새 문서: local export = {} export.STATUS = { OK = "ok", INLINE = "inline", MISSING = "missing", REDLINK = "redlink", AMBIGUOUS = "ambiguous", } export.TRANSITIVE = { ALWAYS = "always", -- always recurse into children NEVER = "never", -- never recurse into children CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos...
4484149
Scribunto
text/plain
local export = {}
export.STATUS = {
OK = "ok",
INLINE = "inline",
MISSING = "missing",
REDLINK = "redlink",
AMBIGUOUS = "ambiguous",
}
export.TRANSITIVE = {
ALWAYS = "always", -- always recurse into children
NEVER = "never", -- never recurse into children
CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos chain continues)
CROSS_LANG_NO_INTERNAL_SOURCE = "cross_lang_no_internal_source", -- like CROSS_LANG, but source breaks for internal derivations in the same language context
}
-- Deep merge tables (nested tables are merged recursively, later values override earlier)
local function deep_merge(...)
local result = {}
for _, t in ipairs({ ... }) do
for k, v in pairs(t) do
if type(v) == "table" and type(result[k]) == "table" then
result[k] = deep_merge(result[k], v)
else
result[k] = v
end
end
end
return result
end
local function make_glossary_link(term, display_text)
if not term then return display_text end
return "[[Appendix:Glossary#" .. term:gsub(" ", "_") .. "|" .. display_text .. "]]"
end
-- Extract base word and connector from text like "Borrowed from" or "calque of"
local function split_glossary_text(text)
for _, pattern in ipairs({ "^(.-)(%s+[Oo][Ff])$", "^(.-)(%s+[Ff][Rr][Oo][Mm])$" }) do
local base, rest = text:match(pattern)
if base then return base, rest end
end
return text, ""
end
local TRANSITIVE = export.TRANSITIVE
local function create_keyword(opts)
local entry = {
is_group = opts.is_group or false,
abbrev = opts.abbrev,
glossary = opts.glossary,
transitive = opts.transitive or TRANSITIVE.ALWAYS, -- default "always"
inherited_chain = opts.inherited_chain or false,
affix_categories = opts.affix_categories or false,
borrowing_type = opts.borrowing_type,
specialized_borrowing = opts.specialized_borrowing,
toplevel_category = opts.toplevel_category,
no_child_categories = opts.no_child_categories or false,
source_category_type = opts.source_category_type,
invisible = (opts.invisible == true and "all") or opts.invisible or false,
pos_override = opts.pos_override,
new_sentence = opts.new_sentence or false,
separate_clause = opts.separate_clause or false,
aliases = opts.aliases,
}
-- Only set text/phrase when visible in text (invisible ~= "all" and ~= "text")
local inv = entry.invisible
if inv ~= "all" and inv ~= "text" then
entry.phrase = opts.phrase
if opts.text then
if opts.glossary then
local base_word, rest = split_glossary_text(opts.text)
entry.text = make_glossary_link(opts.glossary, base_word) .. rest
else
entry.text = opts.text
end
end
end
return entry
end
-- Shared defaults for keyword groups
local DEFAULTS = {
-- Keywords that pass through inheritance chain
inheritance = {
transitive = TRANSITIVE.ALWAYS,
inherited_chain = true,
},
-- Standard transitive derivation
transitive = {
transitive = TRANSITIVE.ALWAYS,
},
-- Standard for internal derivations: transitive across languages, but not within them
internal_derivation = {
transitive = TRANSITIVE.CROSS_LANG,
},
-- Borrowing keywords
borrowing = {
transitive = TRANSITIVE.ALWAYS,
},
-- Affix group keywords (compound words, blends, etc.)
affix_group = {
is_group = true,
transitive = TRANSITIVE.CROSS_LANG,
affix_categories = true,
},
-- Calque-like keywords (calque, partial calque, semantic loan)
calque_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
new_sentence = true,
},
-- Non-transitive influence
influence_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
},
}
export.keywords = {
--
-- Inheritance keywords
--
["from"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "From", phrase = "from",
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "Inherited from",
phrase = "from",
glossary = "inherited",
aliases = { "inh" },
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "From",
phrase = "from",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Derived from",
phrase = "from",
abbrev = "der.",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
aliases = { "af" },
})),
["surf"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "By surface analysis,",
phrase = "by surface analysis,",
abbrev = "surf.",
glossary = "surface analysis",
new_sentence = true,
invisible = "tree",
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Blend of",
phrase = "a blend of",
abbrev = "blend",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Univerbation of",
phrase = "univerbation of",
abbrev = "univ.",
glossary = "univerbation",
toplevel_category = "univerbations",
aliases = { "univ" },
})),
["vrd-af"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
toplevel_category = "vrddhi derivatives",
})),
--
-- Borrowing keywords
--
["bor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Borrowed from",
phrase = "borrowed from",
abbrev = "bor.",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Learned borrowing from",
phrase = "a learned borrowing from",
abbrev = "lbor.",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Orthographic borrowing from",
phrase = "an orthographic borrowing from",
abbrev = "obor.",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Semi-learned borrowing from",
phrase = "a semi-learned borrowing from",
abbrev = "slbor.",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Unadapted borrowing from",
phrase = "an unadapted borrowing from",
abbrev = "ubor.",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Calque of",
phrase = "a calque of",
abbrev = "calq.",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Partial calque of",
phrase = "a partial calque of",
abbrev = "pcalq.",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Semantic loan of",
phrase = "a semantic loan of",
abbrev = "sl.",
glossary = "semantic loan",
specialized_borrowing = "semantic-loan",
aliases = { "sl" },
})),
["psm"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Phono-semantic matching of",
phrase = "a phono-semantic matching of",
abbrev = "psm.",
glossary = "phono-semantic matching",
specialized_borrowing = "phono-semantic-matching",
aliases = { "phono-semantic matching" },
})),
--
-- Influence keywords (non-transitive, separate clause)
--
["influence"] = create_keyword(deep_merge(DEFAULTS.influence_like, {
text = "Influenced by",
phrase = "influenced by",
abbrev = "influ.",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Clipping of",
phrase = "clipping of",
abbrev = "clip.",
glossary = "clipping",
toplevel_category = "clippings",
aliases = { "clip" },
})),
["ellipsis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Ellipsis of",
phrase = "ellipsis of",
abbrev = "ellip.",
glossary = "ellipsis",
toplevel_category = "ellipses",
aliases = { "ellip" },
})),
["back-formation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Back-formation from",
phrase = "a back-formation from",
abbrev = "bf.",
glossary = "back-formation",
toplevel_category = "back-formations",
aliases = { "bf" },
})),
["nominalization"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Nominalization of",
phrase = "a nominalization of",
abbrev = "nom.",
glossary = "nominalization",
toplevel_category = "nominalizations",
aliases = { "nom" },
})),
["transliteration"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Transliteration of",
phrase = "borrowed from",
abbrev = "translit.",
glossary = "transliteration",
aliases = { "translit" },
})),
["vrd"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
toplevel_category = "vrddhi derivatives",
})),
["apheretic"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Apheretic form of",
phrase = "an apheretic form of",
abbrev = "aph.",
glossary = "apheresis",
aliases = { "apheresis", "aphetic" },
})),
["denominal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Denominal verb from",
phrase = "denominal verb from",
abbrev = "denom.",
glossary = "denominal",
toplevel_category = "denominal verbs",
aliases = { "denom" },
})),
["deverbal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Deverbal from",
phrase = "deverbal from",
abbrev = "deverb.",
glossary = "deverbal",
toplevel_category = "deverbals",
})),
["reduplication"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Reduplication of",
phrase = "reduplication of",
abbrev = "redup.",
glossary = "reduplication",
toplevel_category = "reduplications",
aliases = { "redup" },
})),
["abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Abbreviation of",
phrase = "abbreviation of",
abbrev = "abbr.",
glossary = "abbreviation",
aliases = { "abbr", "abbrev" },
})),
["syllabic abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Syllabic abbreviation of",
phrase = "syllabic abbreviation of",
abbrev = "syl. abbr.",
glossary = "syllabic abbreviation",
aliases = { "sylabbr", "sylabbrev" },
})),
["acronym"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Acronym of",
phrase = "acronym of",
abbrev = "acronym",
glossary = "acronym",
aliases = { "acro" },
})),
["initialism"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Initialism of",
phrase = "initialism of",
abbrev = "init.",
glossary = "initialism",
aliases = { "init" },
})),
["metathesis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Metathesis of",
phrase = "metathesis of",
abbrev = "meta.",
glossary = "metathesis",
toplevel_category = "words derived through metathesis",
aliases = { "meta" },
})),
--
-- Invisible keywords (no text output)
--
["root"] = create_keyword {
transitive = TRANSITIVE.ALWAYS,
invisible = "all",
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
transitive = TRANSITIVE.NEVER,
invisible = "all",
})),
}
local aliases_to_register = {}
local canonical_aliases = {}
-- Map every keyword (canonical or alias) to its canonical form for consistent checks and tracking.
export.keyword_canonical = {}
for name, keyword_data in pairs(export.keywords) do
export.keyword_canonical[name] = name
if keyword_data.aliases then
canonical_aliases[name] = keyword_data.aliases
for _, alias in ipairs(keyword_data.aliases) do
if export.keywords[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' collides with existing keyword '" .. alias .. "'.")
end
if aliases_to_register[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' is already claimed by another keyword.")
end
aliases_to_register[alias] = keyword_data
export.keyword_canonical[alias] = name
end
keyword_data.aliases = nil
end
end
for alias, data in pairs(aliases_to_register) do
export.keywords[alias] = data
end
--
-- Language exception presets
--
local EXCEPTION_PRESETS = {
-- Fully disallowed: no tree, no text, no categories
disallowed = {
disallow = { tree = true, text = true },
suppress_categories = true,
},
-- Suppress transliteration only
no_translit = {
suppress_tr = true,
},
-- Suppress all categories only
no_categories = {
suppress_categories = true,
},
}
--[=[
Available exception options:
disallow = { Related options for disallowing output:
tree Disallow etymology trees for this language
text Disallow etymology text generation for this language
ref Reference link shown when tree/text is disallowed
}
suppress_tr Suppress transliteration in links
suppress_categories Suppress all category generation
normalize_to Normalize language code to a different code
normalize_from_families Apply normalization to languages in these families
normalize_exclude_families Exclude these families from normalization
keyword_overrides Per-keyword categorisation overrides (e.g. { ["af"] = { transitive = TRANSITIVE.NEVER } })
]=]
local function create_exception(preset, overrides)
local base = preset and EXCEPTION_PRESETS[preset] or {}
return deep_merge(base, overrides or {})
end
export.config = {
lang_exceptions = {
["zh"] = create_exception("disallowed", {
disallow = { ref = "[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]" },
suppress_tr = true,
normalize_to = "zh",
normalize_from_families = { "zhx" },
normalize_exclude_families = { "qfa-cnt" },
}),
},
}
-- Supported codes for the nominalization <g:code> modifier (subset of common gender/number-style codes)
export.nominalization_g_codes = {
["m"] = "masculine",
["f"] = "feminine",
["n"] = "neuter",
["c"] = "common",
["gneut"] = "gender-neutral",
["s"] = "singular",
["p"] = "plural",
["d"] = "dual",
["pauc"] = "paucal",
["mf"] = "masculine or feminine",
["fm"] = "masculine or feminine",
["mfn"] = "masculine, feminine or neuter",
["mnf"] = "masculine, feminine or neuter",
["fmn"] = "masculine, feminine or neuter",
["fnm"] = "masculine, feminine or neuter",
["nmf"] = "masculine, feminine or neuter",
["nfm"] = "masculine, feminine or neuter",
}
--
-- Propagate keyword overrides to aliases
--
if export.config.lang_exceptions then
for lang_code, exception in pairs(export.config.lang_exceptions) do
if exception.keyword_overrides then
for canonical, aliases in pairs(canonical_aliases) do
if exception.keyword_overrides[canonical] then
local override_data = exception.keyword_overrides[canonical]
for _, alias in ipairs(aliases) do
if not exception.keyword_overrides[alias] then
exception.keyword_overrides[alias] = override_data
end
end
end
end
end
end
end
return export
192silgrvixc7wvmk5fi6803k4xcy7d
모듈:etymon/tree
828
496352
4484150
2026-05-24T08:42:43Z
Jeebeen
13056
새 문서: local export = {} local html_create = mw.html.create local max = math.max local function create_vertical_connector() return html_create('span'):addClass('etytree-connector-vertical') end local function create_abbr(text, title, glossary) local abbr = html_create('abbr') :attr('title', title) :wikitext(text) if glossary then abbr = '[[Appendix:Glossary#' .. glossary .. '|' .. tostring(abbr) .. ']]' end return html_create('span'):addClass('etytree-label'):node(abbr)...
4484150
Scribunto
text/plain
local export = {}
local html_create = mw.html.create
local max = math.max
local function create_vertical_connector()
return html_create('span'):addClass('etytree-connector-vertical')
end
local function create_abbr(text, title, glossary)
local abbr = html_create('abbr')
:attr('title', title)
:wikitext(text)
if glossary then
abbr = '[[Appendix:Glossary#' .. glossary .. '|' .. tostring(abbr) .. ']]'
end
return html_create('span'):addClass('etytree-label'):node(abbr)
end
local function create_uncertainty_marker()
return html_create('abbr')
:addClass('etytree-unc')
:attr('title', 'uncertain')
:wikitext('?')
end
local function create_label_container()
return html_create('span'):addClass('etytree-label-container')
end
local function invisible_in_tree(inv)
return inv == "all" or inv == true or inv == "tree"
end
local function render_label(term_block, keyword_info, keyword_modifiers, is_uncertain, is_group_child, term_labels)
-- Skip label when invisible in tree
local has_label = keyword_info and keyword_info.abbrev and not is_group_child and not invisible_in_tree(keyword_info.invisible)
-- For group children, keyword uncertainty is shown on the group label, not on individual terms
local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc and not is_group_child
local show_term_uncertainty = is_uncertain
-- Check if we have term-specific labels
local has_term_labels = term_labels and #term_labels > 0
if not has_label and not show_term_uncertainty and not keyword_uncertain and not has_term_labels then
return
end
local label_span = create_label_container()
if has_label then
local glossary_title = keyword_info.glossary
and keyword_info.glossary:gsub("_", " ")
or keyword_info.abbrev
label_span:node(create_abbr(
keyword_info.abbrev,
glossary_title,
keyword_info.glossary
))
-- Show uncertainty marker if term or keyword is uncertain
if show_term_uncertainty or keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
else
-- No label, but term or keyword is uncertain
if show_term_uncertainty or keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
end
-- Add term-specific labels
if has_term_labels then
for _, label_info in ipairs(term_labels) do
label_span:node(create_abbr(label_info.abbrev, label_info.title, label_info.glossary))
end
end
term_block:node(label_span)
end
local function render_term_block(node_data, format_term_func, is_toplevel)
local link_content = html_create()
link_content
:tag('span')
:addClass('etyl')
:wikitext(node_data.lang:getCanonicalName())
:done()
local term_text = format_term_func(node_data, is_toplevel)
if term_text then
link_content
:wikitext(' ')
:tag('span')
:addClass('etytree-term')
:wikitext(term_text)
:done()
end
local block = html_create('div'):addClass('etytree-block'):node(link_content)
-- Add duplicate styling if this is a duplicate node
if node_data.is_duplicate then
block:addClass('etytree-duplicate')
end
return block
end
local function create_dotted_connector()
return html_create('span'):addClass('etytree-connector-dotted')
end
-- Create an L-shaped connector for nodes with hidden ancestry (duplicate or no_child_categories)
local function create_duplicate_connector()
local container = html_create('div'):addClass('etytree-duplicate-connector')
local inner_wrapper = container:tag('div')
inner_wrapper:tag('span'):addClass('etytree-dup-right')
inner_wrapper:tag('span'):addClass('etytree-dup-horiz')
inner_wrapper:tag('span'):addClass('etytree-dup-left')
inner_wrapper:tag('span'):addClass('etytree-dup-arrow'):wikitext('▲')
return container
end
local function render_group_label(connecting_line, keyword_info, keyword_modifiers)
local has_abbrev = keyword_info and keyword_info.abbrev
local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc
-- Nothing to show if no abbrev and no uncertainty
if not has_abbrev and not keyword_uncertain then
return
end
local label_span = connecting_line:tag('span'):addClass('etytree-group-label')
if has_abbrev then
local glossary_title = keyword_info.glossary
and keyword_info.glossary:gsub("_", " ")
or keyword_info.abbrev
label_span:node(create_abbr(keyword_info.abbrev, glossary_title, nil))
end
-- Add uncertainty marker if keyword has <unc> modifier
if keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
end
local function add_branch_connector(column, index, total)
if index == 1 then
column:tag('span'):addClass('etytree-branch-left')
elseif index == total then
column:tag('span'):addClass('etytree-branch-right')
else
column:tag('span'):addClass('etytree-connector-vertical-short')
column:tag('span'):addClass('etytree-branch-mid')
end
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local format_term_func = opts.format_term_func
-- Forward declaration
local render_term
-- Render a container (keyword + its terms)
local function render_container(container, is_toplevel)
local keyword_info = container.keyword_info
local keyword_modifiers = container.keyword_modifiers or {}
local is_group = keyword_info and keyword_info.is_group
local terms = container.terms or {}
-- Skip container entirely only when invisible = "all" (or true)
if keyword_info and invisible_in_tree(keyword_info.invisible) then
return nil, 0, 0
end
if #terms == 0 then
return nil, 0, 0
end
-- For no_child_categories keywords (calque, semantic loan, etc.), don't render term's children
local skip_child_rendering = keyword_info and keyword_info.no_child_categories
-- Render each term in the container
local rendered_terms = {}
local container_height = 0
local container_width = 0
for _, term in ipairs(terms) do
-- Collect term-specific labels
local term_labels = {}
if term.bor then
table.insert(term_labels, { abbrev = "bor.", title = "borrowed", glossary = "loanword" })
end
if term.slbor then
table.insert(term_labels, { abbrev = "slbor.", title = "semi-learned borrowing", glossary = "semi-learned_borrowing" })
end
if term.lbor then
table.insert(term_labels, { abbrev = "lbor.", title = "learned borrowing", glossary = "learned_borrowing" })
end
local term_tree, term_height, term_width = render_term(term, keyword_info, keyword_modifiers, is_group, false, skip_child_rendering, term_labels)
table.insert(rendered_terms, {
tree = term_tree,
height = term_height,
width = term_width,
is_uncertain = term.is_uncertain,
})
container_height = max(container_height, term_height)
container_width = container_width + term_width
end
local rendered_html
local has_connector = false
if #rendered_terms == 1 then
-- Single term: just return it directly
rendered_html = rendered_terms[1].tree
container_height = rendered_terms[1].height
container_width = rendered_terms[1].width
else
-- Multiple terms: group them together
local subtree_container = html_create('div'):addClass('etytree-branch-group')
for i, term_data in ipairs(rendered_terms) do
local column = html_create('div'):addClass('etytree-branch')
column:node(term_data.tree)
add_branch_connector(column, i, #rendered_terms)
subtree_container:node(column)
end
local connecting_line = create_vertical_connector()
-- Add group label for group keywords
if is_group and not invisible_in_tree(keyword_info.invisible) then
render_group_label(connecting_line, keyword_info, keyword_modifiers)
end
rendered_html = html_create()
:node(subtree_container)
:node(connecting_line)
has_connector = true
end
return rendered_html, container_height, container_width, has_connector
end
-- Render a term node
render_term = function(term_node, keyword_info, keyword_modifiers, is_group_child, is_toplevel_term, skip_child_rendering, term_labels)
local tree_width, tree_height = 0, 0
local subtrees = {}
-- Process term's children (which are containers)
local has_hidden_children = false
if not term_node.is_duplicate and not skip_child_rendering then
for _, container in ipairs(term_node.children or {}) do
local subtree, sub_height, sub_width, subtree_has_connector = render_container(container, is_toplevel_term)
if subtree then
table.insert(subtrees, {
tree = subtree,
height = sub_height,
width = sub_width,
has_connector = subtree_has_connector,
})
tree_height = max(tree_height, sub_height)
tree_width = tree_width + sub_width
end
end
elseif skip_child_rendering then
-- Check if there are any visible children
-- When stop_recursion is true, children aren't parsed, but has_visible_children flag is set
if term_node.has_visible_children then
has_hidden_children = true
elseif term_node.children and #term_node.children > 0 then
-- Fallback: check parsed children for visibility
for _, container in ipairs(term_node.children) do
local child_keyword_info = container.keyword_info
if not (child_keyword_info and (child_keyword_info.invisible == "all" or child_keyword_info.invisible == true)) then
has_hidden_children = true
break
end
end
end
end
local is_toplevel_node = (keyword_info == nil)
local term_block = render_term_block(term_node, format_term_func, is_toplevel_node)
render_label(term_block, keyword_info, keyword_modifiers, term_node.is_uncertain, is_group_child, term_labels or {})
local term_html = html_create()
if #subtrees == 0 then
local show_connector = (term_node.is_duplicate and term_node.original_has_children) or has_hidden_children
if show_connector then
term_html:node(create_duplicate_connector())
end
term_html:node(term_block)
tree_width = tree_width + 1
elseif #subtrees == 1 then
term_html:node(subtrees[1].tree)
if not subtrees[1].has_connector then
term_html:node(create_vertical_connector())
end
term_html:node(term_block)
else
-- Multiple containers: need to merge them
local subtree_container = html_create('div'):addClass('etytree-branch-group')
for i, subtree_data in ipairs(subtrees) do
local column = html_create('div'):addClass('etytree-branch')
column:node(subtree_data.tree)
add_branch_connector(column, i, #subtrees)
subtree_container:node(column)
end
local connecting_line = create_vertical_connector()
term_html
:node(subtree_container)
:node(connecting_line)
:node(term_block)
end
return term_html, tree_height + 1, tree_width
end
local final_tree, final_height, final_width = render_term(data_tree, nil, nil, false, true)
local container = html_create('div')
:addClass('etytree-body')
:node(final_tree)
return tostring(html_create('div')
:addClass('etytree NavFrame')
:attr('data-etytree-height', final_height)
:attr('data-etytree-width', final_width)
:tag('div')
:addClass('NavHead')
:tag('div')
:wikitext('Etymology tree')
:done()
:done()
:tag('div')
:addClass('NavContent')
:node(container)
:done())
end
return export
ok2w6x96bozaxhyj2cy4qex9anfbtx5
모듈:etymon/text
828
496353
4484151
2026-05-24T08:43:22Z
Jeebeen
13056
새 문서: local export = {} local loader = require("Module:module loader") local M = loader.init({ require = { en_utilities = "Module:en-utilities", references = "Module:references", }, loadData = { data = "Module:etymon/data", }, }) function export.render(opts) opts = opts or {} local data_tree = opts.data_tree local format_term_func = opts.format_term_func local max_depth = opts.max_depth local stop_at_blue_link = opts.stop_at_blue_link local curr_page = opts.curr_pag...
4484151
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
en_utilities = "Module:en-utilities",
references = "Module:references",
},
loadData = {
data = "Module:etymon/data",
},
})
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local format_term_func = opts.format_term_func
local max_depth = opts.max_depth
local stop_at_blue_link = opts.stop_at_blue_link
local curr_page = opts.curr_page
local nodot = opts.nodot
local stop_at_lang = opts.stop_at_lang
local stop_at_lang_or_bluelink = opts.stop_at_lang_or_bluelink
local children = data_tree.children
if not children or #children == 0 then
return ""
end
local top_l2 = data_tree.lang:getFullCode() .. ":" .. curr_page
-- Get refs for a term
local function get_term_refs(term, term_lang, depth)
local term_l2 = term_lang:getFullCode() .. ":" .. curr_page
if term.parsed_ref and (depth == 1 or term_l2 == top_l2) then
return M.references.format_references(term.parsed_ref)
end
return ""
end
-- Build a text part for a single term
local function build_term_part(term, current_lang, depth)
local text = ""
local new_lang = current_lang
local lang_changed = term.lang:getCanonicalName() ~= current_lang:getCanonicalName()
-- Use centralized format_term (handles suppress_term, unknown_term, and regular terms)
local term_text = format_term_func(term)
if lang_changed then
new_lang = term.lang
if term_text then
text = term.lang:makeWikipediaLink() .. " " .. term_text
elseif term.is_family then
text = M.en_utilities.add_indefinite_article(term.lang:makeWikipediaLink() .. " language", false)
else
-- suppress_term with language change: show only language
text = term.lang:makeWikipediaLink()
end
else
text = term_text or ""
end
return {
type = "term",
text = text,
refs = get_term_refs(term, new_lang, depth),
lang = new_lang,
is_uncertain = term.is_uncertain or false,
}
end
-- Build text parts for a container
local function build_container_part(container, node, depth, allow_continuation, fallback_to_bluelink)
local keyword_info = container.keyword_info
local keyword_modifiers = container.keyword_modifiers or {}
local terms = container.terms or {}
if not keyword_info or #terms == 0 then
return nil
end
-- Skip building text part when invisible in text ("all", "text", or true)
local inv = keyword_info.invisible
if inv == "all" or inv == true or inv == "text" then
return nil
end
local is_group = keyword_info.is_group
local keyword_uncertain = keyword_modifiers.unc or false
-- Determine text and phrase (allowing for overrides)
local intro_text = keyword_info.text
local phrase = keyword_info.phrase
if keyword_modifiers.text then
-- User-provided override: assumed to be lowercase
phrase = keyword_modifiers.text
-- Auto-capitalize for intro text (e.g., "derived from" -> "Derived from")
intro_text = mw.ustring.upper(phrase:sub(1, 1)) .. phrase:sub(2)
end
-- Get keyword references
local keyword_refs = ""
if keyword_modifiers.ref then
local parsed_keyword_refs = M.references.parse_references(keyword_modifiers.ref)
if parsed_keyword_refs and parsed_keyword_refs ~= "" then
keyword_refs = M.references.format_references(parsed_keyword_refs)
end
end
-- Build term parts
local term_parts = {}
local current_lang = node.lang
for _, term in ipairs(terms) do
local term_part = build_term_part(term, current_lang, depth)
if term_part.text ~= "" then
table.insert(term_parts, term_part)
current_lang = term_part.lang
end
end
-- Check uncertainty distribution
local uncertain_count = 0
for _, term_part in ipairs(term_parts) do
if term_part.is_uncertain then
uncertain_count = uncertain_count + 1
end
end
-- If keyword itself is uncertain, treat all terms as uncertain
local all_uncertain = keyword_uncertain or (uncertain_count == #term_parts and #term_parts > 0)
local has_mixed_uncertainty = not keyword_uncertain and uncertain_count > 0 and uncertain_count < #term_parts
-- Check if there are more steps (only if continuation is allowed)
local has_more_steps = false
local next_node = nil
local first_term = terms[1]
-- Check if we should stop at this language
local reached_stop_lang = false
if stop_at_lang then
for _, term in ipairs(terms) do
if term.lang and term.lang:getCode() == stop_at_lang then
reached_stop_lang = true
break
end
end
elseif stop_at_lang_or_bluelink then
-- Check if we should stop at this language, or at the first bluelink if it's a redlink
for _, term in ipairs(terms) do
if term.lang and term.lang:getCode() == stop_at_lang_or_bluelink then
if first_term.status == M.data.STATUS.OK then
reached_stop_lang = true
else
fallback_to_bluelink = true
end
break
end
end
if fallback_to_bluelink and first_term.status == M.data.STATUS.OK then
reached_stop_lang = true
end
end
if allow_continuation and not is_group and #terms == 1 and not reached_stop_lang then
local first_term_children = first_term.children
if first_term_children and #first_term_children > 0 and (not max_depth or depth < max_depth) then
local next_container = first_term_children[1]
local next_keyword_info = next_container and next_container.keyword_info
if not (next_keyword_info and next_keyword_info.invisible) then
if stop_at_blue_link then
if first_term.status ~= M.data.STATUS.OK then
has_more_steps = true
next_node = first_term
end
else
has_more_steps = true
next_node = first_term
end
end
end
end
return {
type = "container",
intro_text = intro_text,
phrase = phrase,
is_uncertain = all_uncertain,
has_mixed_uncertainty = has_mixed_uncertainty,
term_parts = term_parts,
is_group = is_group,
has_more_steps = has_more_steps,
next_node = next_node,
new_sentence = keyword_info.new_sentence or false,
separate_clause = keyword_info.separate_clause or false,
conj = keyword_modifiers.conj, -- custom conjunction: "and", "or", "and/or", etc.
lit = keyword_modifiers.lit,
keyword_refs = keyword_refs,
fallback_to_bluelink = fallback_to_bluelink,
}
end
-- Build the full tree of text parts
local function build_text_tree(node, depth, allow_continuation, fallback_to_bluelink)
local containers = node.children
if not containers or #containers == 0 then
return nil
end
local container_parts = {}
-- Count containers that get a text part (invisible in text = "all", "text", or true)
local visible_container_count = 0
for _, container in ipairs(containers) do
local keyword_info = container.keyword_info
local inv = keyword_info and keyword_info.invisible
if not (inv == "all" or inv == true or inv == "text") then
visible_container_count = visible_container_count + 1
end
end
-- If there are multiple visible containers at this level, don't allow continuation for any
local has_multiple_containers = visible_container_count > 1
local should_allow_continuation = allow_continuation and not has_multiple_containers
for _, container in ipairs(containers) do
local part = build_container_part(container, node, depth, should_allow_continuation, fallback_to_bluelink)
if part then
-- Recursively build children if there are more steps
if part.has_more_steps and part.next_node then
part.continuation = build_text_tree(part.next_node, depth + 1, true, part.fallback_to_bluelink)
end
table.insert(container_parts, part)
end
end
if #container_parts == 0 then
return nil
end
return {
type = "tree",
container_parts = container_parts,
depth = depth,
}
end
-- Check if tree has mixed joining types
local function check_complexity(tree)
if not tree then return nil end
local parts = tree.container_parts
if #parts <= 1 then
-- Single container
if parts[1] and parts[1].continuation then
return check_complexity(parts[1].continuation)
end
return nil
end
-- Multiple containers
local has_or_join = false
local has_new_sentence = false
local has_separate_clause = false
for i = 2, #parts do
local part = parts[i]
-- Ignore etydate parts for complexity checks
if part.type ~= "etydate" then
if part.new_sentence then
has_new_sentence = true
elseif part.separate_clause then
has_separate_clause = true
else
has_or_join = true
end
end
end
local join_type_count = 0
if has_or_join then join_type_count = join_type_count + 1 end
if has_new_sentence then join_type_count = join_type_count + 1 end
if has_separate_clause then join_type_count = join_type_count + 1 end
if join_type_count > 1 then
error(
"Cannot generate etymology text: mixed joining styles (e.g., alternatives joined with 'or' cannot be combined with calques or influences in the same list).")
end
return nil
end
-- Analyze tree and assign punctuation
local function analyze_punctuation(tree, is_toplevel)
if not tree then return end
local parts = tree.container_parts
local num_parts = #parts
for i, part in ipairs(parts) do
local is_first = (i == 1)
local is_last = (i == num_parts)
local next_part = parts[i + 1]
-- Analyze term punctuation within container
-- Terms use Oxford comma style: "A, B, or C"
-- Custom conjunction can be specified via conj modifier (e.g., "and/or", "and")
local num_terms = #part.term_parts
local term_conj = part.conj or "or" -- default to "or"
for j, term_part in ipairs(part.term_parts) do
local is_last_term = (j == num_terms)
if part.is_group then
-- Group: terms joined with " + "
term_part.joiner = is_last_term and "" or " + "
elseif num_terms > 1 then
-- Multiple terms not in a group: Oxford comma style
if is_last_term then
term_part.joiner = ""
elseif j == num_terms - 1 then
-- Second to last term
if num_terms == 2 then
term_part.joiner = " " .. term_conj .. " "
else
term_part.joiner = ", " .. term_conj .. " "
end
else
term_part.joiner = ", "
end
else
-- Single term
term_part.joiner = ""
end
end
-- Determine container punctuation based on what comes next
if part.continuation then
-- Has continuation
part.punctuation = ","
-- Recursively analyze continuation
analyze_punctuation(part.continuation, false)
elseif is_last then
-- Last container
part.punctuation = (is_toplevel and nodot) and "" or "."
elseif next_part and next_part.new_sentence then
-- Next container starts a new sentence
part.punctuation = "."
elseif next_part and next_part.separate_clause then
-- Next container is a separate clause
part.punctuation = ","
else
-- Not last, next is joined with "or"
-- Containers use repeated "or" style: "A, or B, or C"
part.punctuation = ","
end
-- Determine joiner to next part
-- Containers use repeated "or" style: ", or" between each
-- Custom conjunction can be specified via conj modifier
local container_conj = part.conj or "or" -- default to "or"
if not is_last then
if next_part and next_part.new_sentence then
-- New sentence
part.joiner = " "
elseif next_part and next_part.separate_clause then
-- Separate clause
part.joiner = " "
else
-- Same sentence: use custom conjunction or default "or"
part.joiner = " " .. container_conj .. " "
end
else
part.joiner = ""
end
-- Determine intro formatting
-- Capitalize if first at top level, OR if this container starts a new sentence
if (is_first and is_toplevel) or part.new_sentence then
part.intro_capitalized = true
part.use_full_intro = true
else
part.intro_capitalized = false
part.use_full_intro = false
end
end
end
-- Assemble text from analyzed tree
local function assemble_text(tree)
if not tree then return "" end
local result = ""
for i, part in ipairs(tree.container_parts) do
if part.type == "etydate" then
result = result .. part.etydate_text
if part.punctuation and part.punctuation ~= "" then
result = result .. part.punctuation
end
if part.etydate_refs and next(part.etydate_refs) then
result = result .. M.references.format_references(part.etydate_refs)
end
if part.joiner and part.joiner ~= "" then
result = result .. part.joiner
end
else
-- Build intro
local intro
if part.use_full_intro then
if part.is_uncertain then
intro = "Possibly " .. part.phrase
else
intro = part.intro_text
end
else
if part.is_uncertain then
intro = "possibly " .. part.phrase
else
intro = part.phrase
end
end
result = result .. intro
-- Build terms
if #part.term_parts > 0 then
result = result .. " "
for j, term_part in ipairs(part.term_parts) do
-- Add "possibly" prefix for uncertain terms when there's mixed uncertainty
if part.has_mixed_uncertainty and term_part.is_uncertain then
result = result .. "possibly "
end
result = result .. term_part.text
-- Add joiner between terms
if term_part.joiner ~= "" then
-- Check if joiner contains comma (punctuation)
local comma_pos = term_part.joiner:find(",")
if comma_pos then
-- Add up to and including comma
result = result .. term_part.joiner:sub(1, comma_pos)
-- Add refs after comma
if term_part.refs ~= "" then
result = result .. term_part.refs
end
-- Add rest of joiner
result = result .. term_part.joiner:sub(comma_pos + 1)
else
-- No comma, add refs before joiner
if term_part.refs ~= "" then
result = result .. term_part.refs
end
result = result .. term_part.joiner
end
end
end
-- For the last term, add punctuation then refs
local last_term = part.term_parts[#part.term_parts]
if last_term and last_term.joiner == "" then
if part.punctuation ~= "" then
-- If we have literal text, punctuation goes AFTER it
if part.lit then
-- Add refs first (attached to term)
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
-- Add literal text
result = result .. ", literally “" .. part.lit .. "”"
-- Add punctuation
result = result .. part.punctuation
else
-- Normal behavior: punctuation then refs
result = result .. part.punctuation
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs after term refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
end
else
-- No punctuation
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
-- Add literal text if present (even without punctuation)
if part.lit then
result = result .. ", literally “" .. part.lit .. "”"
end
end
end
else
-- No terms, just add punctuation and keyword refs
if part.punctuation ~= "" then
result = result .. part.punctuation
end
-- Add keyword refs even when there are no terms
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
end
-- Add continuation
if part.continuation then
result = result .. " " .. assemble_text(part.continuation)
end
-- Add joiner to next container
if part.joiner ~= "" then
result = result .. part.joiner
end
end
end
return result
end
local text_tree = build_text_tree(data_tree, 1, true, false)
if not text_tree then
return ""
end
-- Add etydate container
if data_tree.etydate and data_tree.etydate ~= "" then
table.insert(text_tree.container_parts, {
type = "etydate",
etydate_text = data_tree.etydate,
etydate_refs = data_tree.etydate_refs,
term_parts = {},
new_sentence = true,
})
end
check_complexity(text_tree)
analyze_punctuation(text_tree, true)
return assemble_text(text_tree)
end
return export
apkzd2ykoxaur8xi7e7q6ckn0p4heg1
모듈:etymon/categories
828
496354
4484152
2026-05-24T08:43:50Z
Jeebeen
13056
새 문서: local export = {} local M = require("Module:module loader").init({ require = { etymology = "Module:etymology", affix = "Module:affix", etymology_specialized = "Module:etymology/specialized", utilities = "Module:utilities", }, loadData = { data = "Module:etymon/data", }, }) -- Evaluate whether a keyword is transitive for a given term local function is_transitive(transitive_mode, page_lang, term_lang) if transitive_mode == M.data.TRANSITIVE.ALWAYS then return tr...
4484152
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
etymology = "Module:etymology",
affix = "Module:affix",
etymology_specialized = "Module:etymology/specialized",
utilities = "Module:utilities",
},
loadData = {
data = "Module:etymon/data",
},
})
-- Evaluate whether a keyword is transitive for a given term
local function is_transitive(transitive_mode, page_lang, term_lang)
if transitive_mode == M.data.TRANSITIVE.ALWAYS then
return true
elseif transitive_mode == M.data.TRANSITIVE.NEVER then
return false
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then
return page_lang:getCode() ~= term_lang:getCode()
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
return page_lang:getCode() ~= term_lang:getCode()
end
error("Unknown transitive mode: " .. tostring(transitive_mode))
end
-- Get keyword config with language-specific overrides
local function get_keyword_config(keyword, lang_exc)
local base_config = M.data.keywords[keyword]
if not base_config then
return nil -- Invalid keyword
end
local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword]
if not overrides then
return base_config
end
-- Merge overrides into base config
local merged = {}
for k, v in pairs(base_config) do
merged[k] = v
end
for k, v in pairs(overrides) do
merged[k] = v
end
return merged
end
function export.get_cat_name(source)
local _, cat_name = M.etymology.get_display_and_cat_name(source, true)
return cat_name
end
-- Normalize affix type aliases
local aftype_aliases = {
["pre"] = "prefix",
["suf"] = "suffix",
["in"] = "infix",
["inter"] = "interfix",
["circum"] = "circumfix",
["naf"] = "non-affix",
["root"] = "non-affix",
}
local function add_category(categories, cat_name, sort_key, sort_base)
if categories[cat_name] == nil then
categories[cat_name] = {
sort_key = sort_key,
sort_base = sort_base,
}
return
end
local existing = categories[cat_name]
if existing.sort_key == nil and sort_key ~= nil then
existing.sort_key = sort_key
end
if existing.sort_base == nil and sort_base ~= nil then
existing.sort_base = sort_base
end
end
-- Collect affix categories from top-level group containers
local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
local parts = {}
local part_index = 1
for _, container in ipairs(node.children or {}) do
local config = container.keyword_info
if config and config.affix_categories then
for _, term in ipairs(container.terms or {}) do
if not term.unknown_term then
local part_data = {
term = term.title,
tr = term.tr,
ts = term.ts,
alt = term.alt,
itemno = part_index,
orig_index = part_index
}
-- Determine affix type: explicit aftype > pos=root > auto-detect
local aftype = term.aftype
if aftype then
aftype = aftype_aliases[aftype] or aftype
part_data.type = aftype
elseif term.args and term.args.pos and term.args.pos == "root" then
part_data.type = "non-affix"
end
if term.lang:getCode() ~= page_lang:getCode() then
part_data.lang = term.lang
end
local target_ids = available_etymon_ids[term.target_key]
local has_multiple_ids = target_ids and #target_ids > 1
local id_exists_in_disambiguation = false
local matched_id = nil
-- Count available senseids for the target page
local senseid_count = 0
local target_prefix = term.target_key .. ":"
if senseid_parent_etymon then
for key, _ in pairs(senseid_parent_etymon) do
if key:sub(1, #target_prefix) == target_prefix then
senseid_count = senseid_count + 1
end
end
end
local has_multiple_senseids = senseid_count > 1
if term.id then
-- Check if user provided a valid senseid
local senseid_key = term.target_key .. ":" .. term.id
if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then
if has_multiple_senseids then
-- Ambiguous senseid: use senseid
matched_id = term.id
id_exists_in_disambiguation = true
elseif has_multiple_ids then
-- Unique senseid but ambiguous etymon: use etymon ID
matched_id = term.etymon_id or term.id
id_exists_in_disambiguation = true
end
else
-- Check if user provided a valid etymon ID
if has_multiple_ids and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.id then
-- Ambiguous etymon: use etymon ID
id_exists_in_disambiguation = true
matched_id = term.id
break
end
end
end
-- Fallback: check resolved etymon_id (e.g. from previous steps)
if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.etymon_id then
id_exists_in_disambiguation = true
matched_id = term.etymon_id
break
end
end
end
end
end
-- Use the matched ID if found
if term.override or id_exists_in_disambiguation then
part_data.id = matched_id or term.id
end
table.insert(parts, part_data)
part_index = part_index + 1
end
end
end
end
if #parts == 0 then return {} end
local affix_data = {
lang = page_lang,
parts = parts,
pos = "term",
sort_key = nil,
}
if #parts == 1 then
affix_data.allow_no_affixes_or_compounds = true
end
local affix_categories = M.affix.get_affix_categories_only(affix_data)
local result = {}
for _, cat in ipairs(affix_categories) do
if type(cat) == "table" then
table.insert(result, { cat = cat.cat, sort_key = cat.sort_key, sort_base = cat.sort_base })
else
table.insert(result, { cat = cat })
end
end
return result
end
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config)
if config.borrowing_type == "borrowed" then
local temp_categories = {}
M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang)
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
if config.specialized_borrowing then
local result = M.etymology_specialized.specialized_borrowing {
bortype = config.specialized_borrowing,
lang = page_lang,
sources = { term.lang },
terms = { { lang = term.lang, term = "-" } },
notext = true,
nocat = false,
}
for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do
add_category(categories, cat_name)
end
end
end
-- Add source-based derivation categories (top-level only)
local function collect_source_derivation_categories(categories, page_lang, term, config)
if not config.source_category_type then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = config.source_category_type,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
-- Add source language categories
local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func)
if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
if chain.inherited then
temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = "terms inherited",
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
end
-- Add root/word categories
local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain,
get_norm_lang_func, lang_exc, keyword)
local pos_types = { root = "root", word = "word" }
-- Determine pos: from term's postype, keyword's pos_override, or args.pos
local pos
local config = get_keyword_config(keyword, lang_exc)
if term.postype then
-- Term-level postype modifier takes highest priority
pos = term.postype
elseif config and config.pos_override then
pos = config.pos_override
elseif type(term.args) == "table" and term.args.pos then
pos = term.args.pos
end
local pos_type = pos_types[pos]
if not pos_type or term.unknown_term then
return
end
-- Skip root/word categories for descendants of affix groups
-- if pos_type then
-- return
-- end
local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode()
-- Skip self-references
if same_language and root_title == term.title then
return
end
-- Use makeEntryName to strip diacritics for category names
local entry_name = term.lang:makeEntryName(term.title)
local lang_name = page_lang:getCanonicalName()
local cat_name
if chain.passed_through then
local etymon_lang_name = export.get_cat_name(term.lang)
cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name
else
cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name
end
-- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id)
local target_ids = available_etymon_ids[term.target_key]
local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id
if target_ids and effective_id then
local same_pos_count = 0
for _, id_data in ipairs(target_ids) do
if type(id_data) == "table" and id_data.pos == pos then
same_pos_count = same_pos_count + 1
end
end
if same_pos_count > 1 then
cat_name = cat_name .. " (" .. effective_id .. ")"
end
end
add_category(categories, cat_name)
end
-- Compute chain state for a term based on parent chain and keyword config
-- Hyphen patterns for affix detection (regular hyphen + script-specific)
local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen
-- Check if a term is an actual affix (not a non-affix member of an affix group)
local function is_actual_affix(term)
-- Check explicit aftype modifier
if term.aftype then
local normalized = aftype_aliases[term.aftype] or term.aftype
return normalized ~= "non-affix"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and term.args.pos == "root" then
return false
end
-- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc.
if term.title then
local title = term.title
-- Strip leading * for reconstructed terms before checking hyphens
title = title:gsub("^%*", "")
-- Check for hyphens at start or end (handles script-specific hyphens too)
if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then
return true
end
end
-- Default: not an affix
return false
end
local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term)
-- Track if we're inside an actual affix (for suppressing root categories on descendants)
-- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member
local inside_affix = parent_chain.inside_affix
if config.affix_categories and term and is_actual_affix(term) then
inside_affix = true
end
-- If no_child_categories is set, disable everything
if config.no_child_categories then
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = false,
source = false,
pos = false,
recurse = false,
inside_affix = inside_affix,
}
end
local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang)
local new_source = parent_chain.source and term_is_transitive
-- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context
-- Check if this term is internal relative to parent term's language (if parent_term_lang provided)
-- or relative to page language (if no parent_term_lang)
local internal_lang = parent_chain.internal_lang
local is_internal_in_context = false
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
local check_lang = parent_term_lang or page_lang
local term_lang_code = get_norm_lang_func(term_lang):getCode()
local check_lang_code = get_norm_lang_func(check_lang):getCode()
if internal_lang then
-- Already in an internal derivation context: check if this term is also internal
is_internal_in_context = term_lang_code == internal_lang
else
-- Check if this term is internal relative to parent term (or page if no parent)
is_internal_in_context = term_lang_code == check_lang_code
end
end
-- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
if is_internal_in_context then
-- Internal derivation
new_source = false
internal_lang = get_norm_lang_func(term_lang):getCode()
else
-- Cross-language
new_source = parent_chain.source and term_is_transitive
internal_lang = nil
end
end
local new_pos = parent_chain.pos
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = parent_chain.inherited and config.inherited_chain,
source = new_source,
pos = new_pos,
internal_lang = internal_lang,
recurse = new_source or new_pos,
inside_affix = inside_affix,
}
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local page_lang = opts.page_lang
local available_etymon_ids = opts.available_etymon_ids
local senseid_parent_etymon = opts.senseid_parent_etymon
local get_norm_lang_func = opts.get_norm_lang_func
local lang_exc = opts.lang_exc
local categories = {}
local seen = {}
local lang_name = page_lang:getCanonicalName()
local root_title = data_tree.title
-- Collect the tree recursively
local function collect(node, parent_chain, is_toplevel)
-- Avoid processing same node twice
if not node.unknown_term and node.title then
local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "")
if seen[key] then return end
seen[key] = true
end
-- Collect affix categories at top level only
if is_toplevel then
local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
for _, cat in ipairs(affix_cats) do
add_category(categories, lang_name .. " " .. cat.cat, cat.sort_key, cat.sort_base)
end
end
-- Process each container
for _, container in ipairs(node.children or {}) do
local keyword = container.keyword
local config = get_keyword_config(keyword, lang_exc)
-- Skip invalid keywords
if config then
-- Process each term in the container
for _, term in ipairs(container.terms or {}) do
local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term)
local no_child_categories = config.no_child_categories == true
local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang)
-- Top-level only processing
if is_toplevel then
-- Missing/ambiguous etymon tracking
if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then
add_category(categories, lang_name .. " entries referencing missing etymons")
end
if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then
add_category(categories, lang_name .. " entries referencing ambiguous etymons")
end
if term.missing_descendants_header then
add_category(categories, lang_name .. " entries referencing etymons without Descendants sections")
end
if term.missing_descendants_entry then
add_category(categories, lang_name .. " entries referencing etymons without this term in Descendants sections")
end
-- Top-level category (e.g., "undefined derivations")
if config.toplevel_category then
add_category(categories, lang_name .. " " .. config.toplevel_category)
end
-- Borrowing categories (bor, lbor, slbor, ubor, obor)
if config.borrowing_type or config.specialized_borrowing then
collect_borrowing_categories(categories, page_lang, term, config)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af/:surf terms
if keyword == "affix" or keyword == "surf" then
if term.bor then
local bor_config = { borrowing_type = "borrowed" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
end
end
-- Source-based derivation categories (sl, calque, pcal)
if config.source_category_type then
collect_source_derivation_categories(categories, page_lang, term, config)
end
-- Skip all child categorisation if no_child_categories is set
if not no_child_categories then
-- Source categories only if transitive
if term_is_transitive then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
-- Pos categories always (unless no_child_categories)
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
else
-- Below top level, respect the parent chain
if parent_chain.source then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
if parent_chain.pos then
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
end
-- Recurse into term's children if needed and status allows
if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then
collect(term, term_chain, false)
end
end
end
end
end
-- Initial chain state
local initial_chain = {
passed_through = false,
inherited = true,
source = true,
pos = true,
internal_lang = nil,
recurse = true,
inside_affix = false,
}
collect(data_tree, initial_chain, true)
local cat_list = {}
for cat_name, sort_data in pairs(categories) do
if sort_data.sort_key ~= nil or sort_data.sort_base ~= nil then
table.insert(cat_list, {
name = cat_name,
sort_key = sort_data.sort_key,
sort_base = sort_data.sort_base,
})
else
table.insert(cat_list, cat_name)
end
end
return cat_list
end
function export.format(entries, lang)
if type(entries) ~= "table" or #entries == 0 then
return ""
end
local parts = {}
for _, category in ipairs(entries) do
if type(category) == "table" and type(category.name) == "string" then
table.insert(parts, M.utilities.format_categories({ category.name }, lang, category.sort_key, category.sort_base))
elseif type(category) == "string" then
table.insert(parts, M.utilities.format_categories({ category }, lang))
end
end
return table.concat(parts)
end
return export
qaazt3r5h8qyyj6gn4rl4zbmoaycwgt
ເປັດ
0
496355
4484154
2026-05-24T09:18:33Z
Apisite
21408
새 문서: {{참고|ເປີດ}} == 라오어 == === 어원 === {{inh|lo|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥|비엔티안}} {{IPA|pet̚˩˨|루앙프라방}} === 명사 === {{head|lo|명사}} # [[오리]] [[분류:라오어 동물]]
4484154
wikitext
text/x-wiki
{{참고|ເປີດ}}
== 라오어 ==
=== 어원 ===
{{inh|lo|tai-pro|*pitᴰ}}
=== 발음 ===
{{IPA|pet̚˧˥|비엔티안}}
{{IPA|pet̚˩˨|루앙프라방}}
=== 명사 ===
{{head|lo|명사}}
# [[오리]]
[[분류:라오어 동물]]
nzawmdlu9j0idn2odel636o3ayod5nd
ᥙᥥᥖᥱ
0
496356
4484155
2026-05-24T09:59:15Z
Apisite
21408
새 문서: == 따이느아어 == === 어원 === {{inh|tdd|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet˩˩}} === 명사 === {{head|tdd|명사}} # [[오리]] [[분류:따이느아어 동물]]
4484155
wikitext
text/x-wiki
== 따이느아어 ==
=== 어원 ===
{{inh|tdd|tai-pro|*pitᴰ}}
=== 발음 ===
{{IPA|pet˩˩}}
=== 명사 ===
{{head|tdd|명사}}
# [[오리]]
[[분류:따이느아어 동물]]
cw19uyrjovsj1d9w841ukww8zj28267
ᦵᦔᧆ
0
496357
4484156
2026-05-24T10:00:48Z
Apisite
21408
새 문서: == 따이르어 == === 어원 === {{inh|khb|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥}} === 명사 === {{head|khb|명사}} # [[오리]] [[분류:따이르어 동물]]
4484156
wikitext
text/x-wiki
== 따이르어 ==
=== 어원 ===
{{inh|khb|tai-pro|*pitᴰ}}
=== 발음 ===
{{IPA|pet̚˧˥}}
=== 명사 ===
{{head|khb|명사}}
# [[오리]]
[[분류:따이르어 동물]]
tcwr2cpvs4f8gs4uuaed2f7a3nl5ppx
ꪹꪜꪸꪒ
0
496358
4484157
2026-05-24T10:02:08Z
Apisite
21408
새 문서: == 따이담어 == === 어원 === {{inh|blt|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˦˥}} === 명사 === {{head|blt|명사}} # [[오리]] [[분류:따이담어 동물]]
4484157
wikitext
text/x-wiki
== 따이담어 ==
=== 어원 ===
{{inh|blt|tai-pro|*pitᴰ}}
=== 발음 ===
{{IPA|pet̚˦˥}}
=== 명사 ===
{{head|blt|명사}}
# [[오리]]
[[분류:따이담어 동물]]
ke2l95z73ktc9bi78xc01dqcjxgyqv6
ပဵတ်း
0
496359
4484158
2026-05-24T10:03:29Z
Apisite
21408
새 문서: == 샨어 == === 어원 === {{inh|shn|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˥}} === 명사 === {{head|shn|명사}} # [[오리]] [[분류:샨어 동물]]
4484158
wikitext
text/x-wiki
== 샨어 ==
=== 어원 ===
{{inh|shn|tai-pro|*pitᴰ}}
=== 발음 ===
{{IPA|pet̚˥}}
=== 명사 ===
{{head|shn|명사}}
# [[오리]]
[[분류:샨어 동물]]
cyacwshj9n38m3urlx34q5ksn362xfp