ვიკიპედია
xmfwiki
https://xmf.wikipedia.org/wiki/%E1%83%93%E1%83%A3%E1%83%93%E1%83%AE%E1%83%90%E1%83%A1%E1%83%B7%E1%83%9A%E1%83%90
MediaWiki 1.45.0-wmf.3
first-letter
მედია
სპეციალური
განხილვა
მომხმარებელი
მომხმარებლის განხილვა
ვიკიპედია
ვიკიპედია სხუნუა
ფაილი
ფაილის განხილვა
მედიავიკი
მედიავიკის განხილვა
თარგი
თარგის განხილვა
დახმარება
დახმარების განხილვა
კატეგორია
კატეგორიის განხილვა
TimedText
TimedText talk
მოდული
მოდულის განხილვა
ლაზური ნინა
0
502
240058
234090
2025-06-09T04:53:35Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240058
wikitext
text/x-wiki
{{ინფოდაფა ნინა
| ჯოხო = ლაზური ნინა
| მუშითჯოხოდვალა = ლაზური ნენა
| მუდანობა = 130 000<ref>[http://www.sorosoro.org/en/laz Laz]. {{en}}</ref>
| ქიანეფი =[[საქორთუო]], [[თურქეთი]]
| კლასიფიკაცია =[[ქართველური ნინეფი]]
*[[ქორთ-ზანური ნინეფი]]
**[[ზანური ნინეფი]]
***'''ლაზური ნინა'''
| ჭარალუა = [[ქორთული ჭარალუა]] [[ლათინური ჭარალუა]]
| სტატუსი =
| კოდეფი = ISO/FDIS 639-3: lzz
| რუკა =Kartvelian_languages.svg
| ეჭარუა =
| კოდი =lzz
}}
[[File:Mcita murutsxi.jpg|thumb|მჭითა მურუცხი - მარგ. ჭითა მურიცხი]]
'''ლაზური ნინა''' (ლაზ. ლაზური ნენა) — [[უჩა ზუღა|უჩა ზუღაშ]] ობჟათე-ბჟაეიოლ პიჯიშ მანგო მახორუ (თეჟამს თურქეთის [[რიზე|რიზე]]შ დო [[ართვინი|ართვინ]]იშ პროვინციეფი) კინ თე ჯოხოდვალაშ ქართველური ეთნიკური ბუნაშ ([[ლაზეფი|ლაზეფი]]) ოჩიებელი ნინა. ოეგებიეთ თე ნინაშა მეხოლ. 130 000 ადამიერი იჩიებუ [[თურქეთი|თურქეთის]], რეგიონს, ნამუსჷთ კოლოქვიალურო „ლაზისტანს“ უძახჷნა, დო მეხოლაფირო 3 000 [[საქორთუო]]ს.
== გეოგრაფიული არეალი ==
[[კოლხეთიშ ომაფე|კოლხეფიშ]] უჯვეშაში ომაფე იდვალუაფუდუ თი რეგიონს, სოდეთ თეჟამს ლაზურო მაჩიებელი მახორობა ოხორანს, თეშ მანგო თინეფიშ ნინა კოლხეფიშ ართ-ართი გამნარყი ოკო რდას.
თეჟამს ლაზურო მაჩიებელეფიშ უმენტაშობა ოორუე-ბჟაეიოლ თურქეთის ოხორანს, [[უჩა ზუღა|უჩა ზუღაშ]] პიჯის: რიზეს დო ართვინიშ პროვინციეფს. ლაზეფიშ დიდი ნორთიქ [[რუსეთ-თურქეთიშ ლჷმა|რუსეთ-თურქეთიშ ლჷმაშ]] (1877-1878) უკული გეგნიხორჷ ოორუე-ბჟადალ [[ანატოლია|ანატოლიაშა]] (კარამიურსელი, საქარია, ბარტინი დო შხვ.) დო თეჟამს თაშნეშე [[სტამბოლი|სტამბოლს]] დო [[ანკარა|ანკარას]]. ლაზეფიშ მორჩილი ნორთი ოხორანს [[საქორთუო|საქორთუოსჷთ]], უმენტაშო [[აჭარა|აჭარას]] (მეხოლაფირო 3 000)
== ანბანი ==
ლაზური ნინა რგებაფულენს [[ქორთული ჭარალუა|ქორთულს]] დო [[ლათინური ჭარალუა|ლათინურ]] ჭარალუეფს. თენეფშე [[თურქეთი|თურქეთის]] რინელი [[ლაზეფი|ლაზეფშო]] უმოს პოპულარული თურქული ლათინურიშ მეჯინათ დორსხუაფილი თ.გ. (თაშნე გედვალირი) „ლაზური ანბანიე“.
[[File:Okitxuseni Supara.jpg|thumb|Okitxuseni Supara - ოკითხუში სუფარა]]
{| class="wikitable"
|- style="background: #efefef;"
! [[ქორთული ჭარალუა|ქორთული]]
! [[ლათინური ჭარალუა|ლათინური]]
| rowspan="18" style="background: white; border-top: none; border-bottom: none; width: 4em;" |
! [[ქორთული ჭარალუა|ქორთული]]
! [[ლათინური ჭარალუა|ლათინური]]
|---- <!-- row break here -->
| [[ა]]
| [[A]]
<!-- gap here -->
| [[მ]]
| [[M]]
|---- <!-- row break here -->
| [[ბ]]
| [[B]]
<!-- gap here -->
| [[ნ]]
| [[N]]
|---- <!-- row break here -->
| [[ჯ]]
| [[C]]
<!-- gap here -->
| [[ო]]
| [[O]]
|---- <!-- row break here -->
| [[ჩ]]
| [[Ç]]
<!-- gap here -->
| [[ფ]]
| [[P]]
|---- <!-- row break here -->
| [[ჭ]]
| [[Ç̌]]
<!-- gap here -->
| [[პ]]
| [[P̌]]
|---- <!-- row break here -->
| [[დ]]
| [[D]]
<!-- gap here -->
| [[რ]]
| [[R]]
|---- <!-- row break here -->
| [[ე]]
| [[E]]
<!-- gap here -->
| [[ს]]
| [[S]]
|---- <!-- row break here -->
| [[ჶ]]
| [[F]]
<!-- gap here -->
| [[შ]]
| [[Ş]]
|---- <!-- row break here -->
| [[გ]]
| [[G]]
<!-- gap here -->
| [[თ]]
| [[T]]
|---- <!-- row break here -->
| [[ღ]]
| [[Ğ]]
<!-- gap here -->
| [[ტ]]
| [[Ť]]
|---- <!-- row break here -->
| [[ჰ]]
| [[H]]
<!-- gap here -->
| [[უ]]
| [[U]]
|---- <!-- row break here -->
| [[ი]]
| [[İ]]
<!-- gap here -->
| [[ვ]]
| [[V]]
|---- <!-- row break here -->
| [[ჟ]]
| [[J]]
<!-- gap here -->
| [[ჲ]]
| [[Y]]
|---- <!-- row break here -->
| [[ქ]]
| [[K]]
<!-- gap here -->
| [[ზ]]
| [[Z]]
|---- <!-- row break here -->
| [[კ]]
| [[Ǩ]]
<!-- gap here -->
| [[ძ]]
| [[Ž]]
|---- <!-- row break here -->
| [[ყ]]
| [[Q]]
<!-- gap here -->
| [[ც]]
| Ʒ
|---- <!-- row break here -->
| [[ლ]]
| [[L]]
<!-- gap here -->
| [[წ]]
| Ǯ
|}
== ლექსიკა ==
* გომორძგუა - გეჯგინობა, გომორმჟორა
* ჯგირო ორდა - ჩქვა კაითე (კაობათე/კაინობათე)
* მა/სი/თინა - მა/სი/ეჲა
* იახა, ჰო - ჰო
* ვარი - ვარი
'''რიცხვეფი'''
{| class="prettytable"
|-
| 1 || არ
|-
| 2 || ჟურ
|-
| 3 || სუმ
|-
| 4 || ოთხო
|-
| 5 || ხუთ
|-
| 6 || ანში
|-
| 7 || შქვით
|-
| 8 || ოვრო
|-
| 9 || ჩხორო
|-
| 10 || ვით
|-
|}
== იხილეთ აგრეთვე ==
{{ქძთაშნეშე|მარგალური ნინა|შონური ნინა|ქორთული ნინა|კავკაციური ნინეფი}}
==სქოლიო==
{{სქოლიო}}
== რესურსეფი ინტერნეტის ==
* [http://www.uni-koeln.de/phil-fak/ifl/asw/forschung/projekte/Lasisch/benningwd.pdf ლაზური ნენა - სილვია კუჩნერიშ პროექტი.]
* http://www.kolkhoba.org
* http://www.lazuri.com
* http://www.lazebura.net
* http://www.lazepe.com {{Webarchive|url=https://web.archive.org/web/20110616045257/http://www.lazepe.com/ |date=2011-06-16 }}
* http://www.mjora.com
* http://www.paponi.com {{Webarchive|url=https://web.archive.org/web/20210615085119/http://paponi.com/ |date=2021-06-15 }}
* http://www.sarpuli.tr.tc {{Webarchive|url=https://web.archive.org/web/20201202123700/http://www.sarpuli.tr.tc/ |date=2020-12-02 }}
* http://www.karalahana.com {{Webarchive|url=https://web.archive.org/web/20001018191856/http://www.karalahana.com/ |date=2000-10-18 }}
* http://lazuri.no.sapo.pt/ {{Webarchive|url=https://web.archive.org/web/20080315011038/http://lazuri.no.sapo.pt/ |date=2008-03-15 }}
* http://lazepesi.dosti.free.fr
{{ქართველური ნინეფი}}
[[კატეგორია:ქართველური ნინეფი]]
[[კატეგორია:საქორთუოშ ნინეფი]]
[[კატეგორია:თურქეთიშ ნინეფი]]
fwvin0kxnmhueyc46h4asify4s5ei5d
იუნესკოშ მოსოფელიშ მონძალაშ ობიექტეფი ირანს
0
3802
240040
109440
2025-06-08T17:56:04Z
Ziv
20878
→ File has been renamed on Commons ([[:c:GR]])
240040
wikitext
text/x-wiki
[[2011]] წანაშ მუნაჩემეფით [[ირანი|ირანს]] 16 '''[[მოსოფელიშ მონძალა|იუნესკოშ მოსოფელიშ მონძალაშ ობიექტი რე]]'''.
== სტატისტიკა==
[[იუნესკო]]შ მოსოფელიშ მონძალაშ ობიექტეფიშ ერკებულშა მოსოფელიშ მასშტაბით 981 ობიექტი რე მიშაღალირი, თენეფშე 1,6 % ირანიშ ობიექტეფი რე.
== ერკებული ==
ერკებულშა მიშაღალირი რე ობიექტეფი, იუნესკოშე მოსოფელიშ კულტურული მონძალაშ ერკებულშა მუნეფიშ გეძინაშ მეჯინათ.
{| class="wikitable" style="text-align: center"
|- bgcolor="#cccccc"
! width=3%|#
! width=15%|სურათი
! width=37%|ჯოხოდვალა
! width=19%|აბანდვალა
! width=9%|გოჭყაფაშ თარიღი
! width=5%|ერკებულშა მიშაღალაშ წანა
! width=6%|№
! width=6%|[[მოსოფელიშ მონძალა#კრიტერიუმეფი|კრიტერიუმი]]
|-
| '''1'''
| [[ფაილი:Choghazanbil2.jpg|150px]]
| [[ჩოგხა-ზანბილი]]<br />
| [[ხუზესტანი (ოსტანი)|ხუზესტანი]]
| დოხოლ. ჯვ. წ. 1250 წ.
| [[1979]]
| [http://whc.unesco.org/en/list/113 113]
| iii, iv
|-
| '''2'''
| [[ფაილი:Persepolis001.jpg|150px]]
| [[პერსეპოლისი]]
| [[ფარსი (ოსტანი)|ფარსი]]
| ჯვ. წ.518 წ.
| [[1979]]
| [http://whc.unesco.org/en/list/114 114]
| i, iii, vi
|-
| '''3'''
| [[ფაილი:Naghshe Jahan Square Isfahan modified.jpg|150px]]
| [[იმამიშ მოედანი]] <br />
| [[ისპაანი]]
| [[XVI ოშწანურა|XVI]]—[[XVII ოშწანურა|XVII]] სს.
| [[1979]]
| [http://whc.unesco.org/en/list/115 115]
| i, v, vi
|-
| '''4'''
| [[ფაილი:Takht-e-soleiman-1.jpg|150px]]
| [[ტახტ-ი სულეიმანი]] <br />
| [[ბჟადალი აზერბაიჯანი (ოსტანი)|ბჟადალი აზერბაიჯანი]]
|
| [[2003]]
| [http://whc.unesco.org/en/list/1077 1077]
| i, ii, iii, iv, vi
|-
| '''5'''
| [[ფაილი:Cyrus tomb.jpg|150px]]
| [[ფასარგადი]] <br />
| [[ფარსი (ოსტანი)|ფარსი]]
| ჯვ. წ. 546 წ.
| [[2004]]
| [http://whc.unesco.org/en/list/1106 1106]
| i, ii, iii, iv
|-
| '''6'''
| [[ფაილი:BAM IR2726.JPG|150px]]
| [[ბამი (ნოღა)| ბამი დო მუში კულტურული ლანდშაფტი]] <br />
| [[ქერმანი (ოსტანი)|ქერმანი]]
|
| [[2004]]
| [http://whc.unesco.org/en/list/1208 1208]
| ii, iii, iv, v
|-
| '''7'''
| [[ფაილი:Soltaniyeh exterior.jpg|120px]]
| [[სულთანიე]] <br />
| [[ზენჯანი (ოსტანი)|ზენჯანი]]
| [[1305]]—[[1313]]
| [[2005]]
| [http://whc.unesco.org/en/list/1188 1188]
| ii, iii, iv
|-
| '''8'''
| [[ფაილი:Darius I the Great's inscription.jpg|150px]]
| [[ბეხისტუნიშ მიკნაჭარეფი]]
| [[ქირმანშაჰი (ოსტანი)|ქირმანშაჰი]]
| ჯვ. წ. VI ო.
| [[2006]]
| [http://whc.unesco.org/en/list/1222 1222]
| ii, iii
|-
| '''9'''
|
| სომეხური მონასტერეფი ირანს
|
|
| [[2008]]
| [http://whc.unesco.org/en/list/1262 1262]
| ii, iii, vi
|-
| '''9.1'''
| [[ფაილი:Saint Thaddeus Monastery, Iran, northwestern view.jpg|150px]]
| [[წიმინდე თადეოზიშ მონასტერი]]
| [[ბჟადალ აზერბაიჯანი (ოსტანი)|ბჟადალ აზერბაიჯანი]]
|
|
|
|
|-
| '''9.2'''
| [[ფაილი:St-Stepanous-02.jpg|150px]]
| [[წიმინდე სტეფანეშ მონასტერი]]
| [[ბჟაეიოლი აზერბაიჯანი (ოსტანი)|ბჟაეიოლი აზერბაიჯანი]]
|
|
|
|
|-
| '''9.3'''
| [[ფაილი:Dzor Dzor church.jpg|150px]]
| [[ძორძორი]]
| [[ბჟადალი აზერბაიჯანი (ოსტანი)|ბჟადალი აზერბაიჯანი]]
|
|
|
|
|-
| '''10'''
| [[ფაილი:Sushtar Bridge.jpg|150px]]
| ირიგაციაშ ისტორიული სისტემა [[შუშტარი|შუშტარს]]
| [[ხუზესტანი (ოსტანი)|ხუზესტანი]]
|
| [[2009]]
| [http://whc.unesco.org/en/list/1315 1315]
| i, ii, v
|-
| '''11'''
| [[ფაილი:Sheykh safi01.jpg|150px]]
| [[არდაბილი]]შ ისტორიული მონუმენტეფი
| [[არდაბილი (ოსტანი)|არდაბილი]]
| [[XVI ოშწანურა]]
| [[2010]]
| [http://whc.unesco.org/en/list/1345 1345]
| i, ii, iv
|-
| '''12'''
| [[ფაილი:Carpet Bazaar of Tabriz.JPG|150px]]
| [[თავრიზი]]შ [[თავრიზიშ ბაზარი|ისტორიული ბაზარი]]
| [[ბჟაეიოლი აზერბაიჯანი (ოსტანი)|ბჟაეიოლი აზერბაიჯანი]]
| [[XIII ოშწანურა]]
| [[2010]]
| [http://whc.unesco.org/en/list/1346 1346]
| ii, iii, iv
|-
| '''13'''
| [[ფაილი:Shazdeh Garden Mahan Iran.jpg|150პქ]]
| [[სპარსული ბაღეფი]]
| [[ირანი]]
| [[XVI ოშწანურა]]
| [[2011]]
| [http://whc.unesco.org/en/list/1372 1372]
| i, ii, iii, iv, vi
|}
== რესურსეფი ინტერნეტის ==
{{Commonscat|World Heritage Sites in Iran}}
* [http://whc.unesco.org/en/statesparties/ir იუნესკოშ მოსოფელიშ მონძალაშ ობიექტეფი ირანს]
[[კატეგორია:მოსოფელიშ მონძალაშ ობიექტეფი ირანს]]
[[კატეგორია:იუნესკოშ მოსოფელიშ მონძალა]]
pvjn9564qs29ju09hxud2bu83lpkbx7
ართვინიშ პროვინცია
0
3972
240047
218927
2025-06-09T00:27:12Z
InternetArchiveBot
15194
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240047
wikitext
text/x-wiki
{|border="1" cellpadding="2" cellspacing="1" align="right" style="margin: 2px 2px 2px 1em;"
|-----
! colspan="2" bgcolor=#FF0000 |[[ფაილი:Flag of Turkey.svg|25px|left]] <font size="+0" color=white>ართვინი</font>
|-----
! colspan="2" bgcolor=#FBBBB9| <font size="+0" color=black>ართვინიშ პროვინციაშ <br />ორენი [[თურქეთი|თურქეთის]]</font>
|-----
| colspan="2" align="center" | [[ფაილი:Artvin districts.png|300px]]<br />
|-----
! colspan="2" bgcolor=#FBBBB9 | ინფორმაცია
|-----
|[[თურქეთიშ რეგიონეფი|რეგიონი]]|| [[უჩა ზუღაშ რეგიონი]]
|-----
| [[ფართობი]]: || 7 493 (კმ²)
|-----
| [[მახორობა]]: || 191,934 (2007)
|-----
| [[მახორობაშ მეჭედალა]]: || 25,6 (ად/კმ²)
|-----
| ოავტომობილე ნომერეფი: || 08
|-----
| ოტელეფონე კოდი|| 0466
|-----
| ოფიციალური <br />ვებ-ხასჷლა ||[http://www.artvin.gov.tr/ ოფიციალური საიტი]
|-----
| ტაროსიშ პროგნოზი || [http://www.turkeyforecast.com/ თურქეთიშ<br /> პროგნოზეფიშ საიტი]
|-----
|}
'''ართვინი''' – პროვინცია (ილი) ოორუე–ბჟაეიოლ [[თურქეთი|თურქეთის]], [[უჩა ზუღაშ რეგიონი|უჩა ზუღაშ რეგიონს]]. ადმინისტრაციული ცენტრი – [[ნოღა]] [[ართვინი (ნოღა)|ართვინი]]. ფორუნს 8 რაიონს.
== გეოგრაფია ==
პროვინციას ოორუეშე უხურგანს [[საქორთუო]] ([[აჭარა]]), ბჟაეიოლშე [[არტაანი (პროვინცია)|არტაანიშ]], ობჟათეშე – [[ერზრუმი (პროვინცია)|ერზრუმიშ]] დო ბჟადალუშე [[რიზე (პროვინცია)|რიზეშ]] პროვინციეფი, უღუ 35 კილომეტრამი ოზუღე ონძღო [[უჩა ზუღა|უჩა ზუღას]] (ონიშოლი [[ხოფა]]). პროვინციაშ დიდი ნორთი იდვალუაფჷ [[წყარმალუ]] [[ჭოროხი]]შ [[წყარმალუშ გოჸორი|გოჸორს]].
== მახორობა ==
მახორობა 191,934 ადამიერი ([[2007]]), უდიდაში ნოღეფი რე: [[ართვინი (ნოღა)|ართვინი]] (23 ვითოში ადამიერი, 2000), [[ხოფა]]. თურქეფიშ გალე ოხორანა [[ლაზეფი]] დო [[აჭარალეფი]] (ქორთუ მუსულმანეფი), თაშნეშე [[ჰემშინეფი]] (სომეხი მუსულმანეფი).
== ისტორია ==
პროვინციაშ ტერიტორია წანეფიშ განწხანს გინმიშჷ ხეშე ხეშა. ორხველუდჷ [[საქორთუო]]ს, [[ოსმალეთიშ იმპერია]]ს, [[რუსეთი|რუსეთის]] (1828 წანაშე; პროვინციაშ ტერიტორიას დირცხუ [[ქუთეში|ქუთეშიშ]] გუბერნიაშ, ბათუმიშ ოლქიშ ართვინიშ ოკრუგიქ).
[[1921]] წანას [[ყარსიშ აპიჯაფა 1921|ყარსიშ აპიჯაფაშ]] უკული [[არტაანი (პროვინცია)|არტაანიშ]], [[ყარსი (პროვინცია)|ყარსიშ]] დო [[იგდირი (პროვინცია)|იგდირიშ]] პროვინციეფწკჷმა ართო გეგნაჩჷ თურქეთის.
== ქოძირით თაშნეშე ==
* [[თურქეთიშ პროვინციეფი]]
== რესურსეფი ინტერნეტის ==
* {{tr icon}} [http://www.artvin.gov.tr/ the provincial governorate]
* {{en icon}} [http://www.turkeyforecast.com/weather/artvin/ Artvin Weather Forecast Information]
* {{en icon}}[http://www.karalahana.com/karadeniz/sehir_rehberi/coruh_river_valley.html Çoruh River Valley and future of artvin city] {{Webarchive|url=https://web.archive.org/web/20080412094344/http://www.karalahana.com/karadeniz/sehir_rehberi/coruh_river_valley.html |date=2008-04-12 }}
* {{en icon}} [http://www.armeniapedia.org/index.php?title=Artvin Armenian History and Presence in Artvin]
* თურქული [http://www.artvinansiklopedisi.com/index.php/Ana_Sayfa Artvin has a Wikipedia all of its own] {{Webarchive|url=https://web.archive.org/web/20070407055757/http://www.artvinansiklopedisi.com/index.php/Ana_Sayfa |date=2007-04-07 }} including...
* [http://www.artvinansiklopedisi.com/index.php/Resim_Galerileri photos of Artvin] {{Webarchive|url=https://web.archive.org/web/20070425062000/http://www.artvinansiklopedisi.com/index.php/Resim_Galerileri |date=2007-04-25 }}
* [http://www.karalahana.com/fotograflar/thumbnails.php?album=12 HQ pictures of Artvin] {{Webarchive|url=https://web.archive.org/web/20111022132911/http://www.karalahana.com/fotograflar/thumbnails.php?album=12 |date=2011-10-22 }}
* [http://www.artvinliyiz.com/index.php?option=com_ponygallery&Itemid=146 more photos]
* [http://harita.wwf.org.tr/tr/alan.asp?alang=en&atype=1&aid=60 World Wildlife Fund report on the area] {{Webarchive|url=https://web.archive.org/web/20070317222702/http://harita.wwf.org.tr/tr/alan.asp?alang=en&atype=1&aid=60 |date=2007-03-17 }}
* თურქული [http://artvin.biz/ photos and villages of Artvin] {{Webarchive|url=https://web.archive.org/web/20110706000014/http://artvin.biz/ |date=2011-07-06 }}
{{მერკე}}
{{თურქეთიშ პროვინციეფი}}
[[კატეგორია:თურქეთიშ პროვინციეფი]]
e1iczze2qzzuq1r69i9589n0k8wewym
ბჟაეიოლი ევროპა
0
7715
240052
213917
2025-06-09T01:41:29Z
InternetArchiveBot
15194
Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5
240052
wikitext
text/x-wiki
[[ფაილი:Location-Europe-UNsubregions, Kosovo as part of Serbia.png|მარჯვნივ|მინი|300პქ||<center>'''ევროპაშ რეგიონეფი'''</center>
{{legend|#4080FF|[[ოორუე ევროპა]]}}
{{legend|#00FFFF|[[ბჟადალ ევროპა]]}}
{{legend|#FF8080|ბჟაეიოლ ევროპა}}
{{legend|#00FF00|[[ობჟათე ევროპა]]}}]]
'''ბჟაეიოლ ევროპა''' — [[ევროპა|ევროპაშ]] ართ-ართი გეოგრაფიული რეგიონი. ბჟადალ ევროპაშ მანგურო, ტერმინი ბჟაეიოლ ევროპა შხვადოშხვა კონტექსტის შხვადოშხვა აზჷრით გჷმირინუაფუ. რჩქვანელობურო, თე ტერმინს იგურხონარებუ [[ზსწ]]-შ ევროპული ქიანეფი: [[რუსეთი]], [[ბელარუსი]], [[უკრაინა]], [[მოლდოვა]], [[ყაზახეთი]]. არძოშე შხირას თინეფიშ რიცხუს ურხველუანა ობჟათე კავკაციაშ ქიანეფც - [[საქორთუო|საქორთუოს]], [[სომხეთი|სომხეთის]] დო [[აზერბაიჯანი|აზერბაიჯანს]], მორო თინეფი გეოგრაფიულო აზიას იდვალუაფუნა{{ფაქტი}}.
[[რგილი ლჷმა|რგილი ლჷმაშ]] ფარანს, ბჟაეიოლ ევროპაშა მიშმეშეს [[ვარშავაშ პაქტი|ვარშავაშ პაქტიშ]] ქიანეფი ([[პოლონეთი]], [[გდრ]], [[ჩეხოსლოვაკია]], [[უნგრეთი]], [[რუმინეთი]], [[ბულგარეთი]]), შხირ შვანს [[ალბანეთი]] დო [[იუგოსლავია]], თაშნეშე ბალტიაშ სხუნუეფიშ რესპუბლიკეფი ([[ესტონეთი]], [[ლატვია]], [[ლიეტუვა]]. თეჟამო, შხვადოშხვა პოლიტიკურ დო ეკონომიკურ კონტექსტის თე რეგიონს შილებე მეურხველუან თ.გ. „ვიშეგრადიშ ბუნაშ“ ([[პოლონეთი]], [[ჩეხეთი]], [[სლოვაკეთი]], [[უნგრეთი]]) დო ბალკანეთიშ ჩქონიშ სახენწჷფოეფი (საბერძნეთიშ მოხ).
== ევროპაშ შხვა რეგიონფი ==
* [[ბჟადალი ევროპა]]
* [[ობჟათე ევროპა]]
* [[ოორუე ევროპა]]
* [[ცენტრალური ევროპა]]
== რესურსეფი ინტერნეტის ==
* [http://unstats.un.org/unsd/methods/m49/m49regin.htm#europe ევროპაშ სუბ-რეგიონეფი გოეროშ ალებათ]
* [http://www.socialeast.org SocialEast Forum on the Art and Visual Culture of Eastern Europe]{{Dead link|date=June 2025 |bot=InternetArchiveBot |fix-attempted=yes }}
* [http://www.ecotourism.org.pk Tourism Networking of Eastern Europe] {{Webarchive|url=https://web.archive.org/web/20120502073735/http://ecotourism.org.pk/ |date=2012-05-02 }}
* [http://easterneuropeeconomy.blogspot.com/ Eastern Europe Economy Watch]
[[კატეგორია:ევროპაშ რეგიონეფი]]
brbr93e5cw18zus1ei7zovktamejifg
კარნატაკა
0
17363
240056
207422
2025-06-09T04:19:32Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240056
wikitext
text/x-wiki
{{ინფოდაფა ადმინისტრაციული ართური
|ოდაბადური ჯოხო = {{lang-kn|ಕರ್ನಾಟಕ}}<br />{{lang-en|Karnataka}}
|მარგალური ჯოხო = კარნატაკა
|პანორამა =
|შილა = Flag of the Kannada people.svg
|გერბი = Seal of Karnataka.svg
|ქიანა = ინდოეთი
|ჰიმნი =
|სტატუსი =[[ინდოეთიშ ადმინისტრაციული დორთუალა|შტატი]]
|მიშმურს =
|ფორჷნს =
|ნანანოღა= [[ბანგალორი]]
|შხუ ნოღა = ბანგალორი
|შხუ ნოღეფი= [[ხუბლი]], [[მაისური]], [[მანგალორი]], [[ბელარი]]
|თარიღი =
|მადუდე ='''გუბერნატორი''':<br />ვაჯუბჰაი რუდაბჰაი ვალა<br />'''თარი მინისტრი''':<br />სიდარამაიაჰი
|მადუდე 2 =
|ედპ =
|ედპ წანა=
|ედპ აბანი =
|ედპ აშმ =
|ნინა =[[კანადა (ნინა)|კანადა]]
|ნინეფი =
|მახორობა =61 130 704
|ეჭარუაშ წანა =2011
|აბანი მახორობათ =9-ა
|ერუანული აკოდგინალუა =თარი ეთნიკური ბუნა — [[კანარა]]
|მეჭედალა =318,74
|კონფესია =
|ფართობი =191 791
|აბანი ფართობით =8-ა
|ფართობიშ პროცენტი =
|მაქსიმალური სიმაღალა =
|ოშქაშე სიმაღალა =
|მინიმალური სიმაღალა =
|განედი =
|გრძედი =
|რუკა= Karnataka in India (disputed hatched).svg
|ბორჯიშ ორტყაფუ=
|აბრევიატურა =
|ISO = IN-KA
|FIPS=
|ოტელეფონე კოდი =
|ოფოსტე ინდექსეფი =
|ინტერნეტ-დომენი =
|ოავტომობილე ონომერე შანეფი =
|საიტი =http://www.karnataka.gov.in/
|კატეგორია ვიკიოწკარუეს =Karnataka
|პარამეტრი1 =
|მიკოღანკუა =
}}
'''კარნატაკა''' ({{lang-kn|ಕರ್ನಾಟಕ}}; {{lang-en|Karnataka}}) — შტატი [[ინდოეთი]]შ ობჟათე-ბჟადალშე. შტატიშ ნანანოღა დო უდიდაში ნოღა — [[ბანგალორი]]. მახორობა 61 130 704 ადამიერი (9-ა აბანი შტატეფს შქას; [[2011]]] წ.).
== გეოგრაფია ==
[[ფაილი:Karnataka topo deu.png|190px|left|thumb|რეგიონიშ რუკა]]
[[ფაილი:Chamundi Hills Mysore.jpg|190px|left|thumb|ჩამუინდიშ ქჷნდჷრეფი ნოღა მაისურიშ გოხოლუას]]
შტატიშ ტერიტორიაშ ფართობი 191 791 км² (8-ა აბანი, ქიანაშ ფართობიშ 5,83 %).
კარნატაკა იდვალუაფუ ინდოეთიშ ობჟათე-ბჟადალ ნორთის, ოორუე განედიშ 11°30' დო 18°30' შქას. უხურგანს [[მაჰარაშტრა]]შ დო [[გოა]]შ შტატეფი (ოორუეშე დო ოორუე-ბჟადალშე), [[ტელანგანა]]შ შტატი (ოორუე-ბჟაეიოლშე), [[კერელა]]შ დო [[ტამილნადუ]]შ შტატეფი (ობჟათეშე), [[ანდჰრა-პრადეში]]შ შტატი (ბჟაეიოლშე), ბჟადალშე ომძღჷ [[არაბეთიშ ზუღა]]. შტატი [[დეკანიშ გაბარი]]შ რაიონს იდვალუაფუ, თი აკანს, სოდეთ [[ბჟადალი გჰატი|ბჟადალი]] დო [[ბჟაეიოლი გჰატი|ბჟაეიოლი გჰატეფი]] ეკმისვარუნა გვალამი რეგიონი ნილგირის. კარნატაკაშ უმაღალაში კონკა — გვალა მულაიანაგირი, ნამუშ სიმაღალა ზუღაშ დონეშე 1929 მეტრა რე დო იდვალუაფუ კარნატაკაშ შტატიშ ჩიკამაგალურუშ ოლქის.
== რესურსეფი ინტერნეტის ==
* [http://www.hoysalatourism.com Hoysala Tourism in Hassan] {{Webarchive|url=https://web.archive.org/web/20180308195639/http://www.hoysalatourism.com/ |date=2018-03-08 }}
* [http://www.chooseindia.com/tourism/mkarnataka.html A map of Karnataka]
* [http://kstdc.nic.in/ Karnataka State Tourism Development Corporation] {{Webarchive|url=https://web.archive.org/web/20061205021834/http://kstdc.nic.in/ |date=2006-12-05 }}
* [http://www.karnatakatourism.org/ Karnataka Tourism] {{Webarchive|url=https://web.archive.org/web/20080724155654/http://karnatakatourism.org/ |date=2008-07-24 }}
* [http://www.karnataka.gov.in/ Karnataka State Government]
* [http://www.karnatakainformation.org/ Karnataka Government Information Department]
* [http://www.kamat.com/kalranga/kar/ Topics on Karnataka’s History and Culture]
{{ესკიზი-ინდოეთი}}
{{ინდოეთიშ შტატეფი დო ტერიტორიეფი}}
[[კატეგორია:კარნატაკა|*]]
b8cx9m39agxs878fuk2zg3gaujiuh50
ვააღიარაფილი ქიანეფიშ ერკებული
0
18178
240055
233550
2025-06-09T03:10:39Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240055
wikitext
text/x-wiki
[[ფაილი:Limited recognition.png|მინი|400პქ|
{{legend|#FF0000|აკა ქიანას ვააფუ აღიარაფილი}}
{{legend|#FF8484|ხვალე გოეროშ ვამაკათური ქიანას აფუ აღიარაფილი}}
{{legend|#FF8040|გაეროშ ვამაკათური, აღიარაფილი რე მინიმუმ ართი ქიანაშე}}
{{legend|#808040|გაეროს მაკათური, ვაღიარაფილი მინიმუმ ართი მაკათური ქიანაშე}}]]
მოსოფელს, მუსხირენ გეოპოლიტიკურ ართაულს ვა უღჷ ერეფოშქაშე აღიარაფა, მარა თინეფი [[დე ფაქტო]] ზოხორინელი მართუალაშ ართაულეფი ვარდა სახენწჷფოეფი რენა.
თინეფიშ უმენტაშობა რე სუბნაციონალური რეგიონი მუში ეთნო-ნაციონალური მუშჸოფათ, ნამუთ გეგშერთეს (გეგმიქიმინეს) მუნეფიშ ჯინჯიერ/ოდაბადე ქიანას დო თეშ გეშა თინეფშა სეპარატისტულ სახენწჷფოეფი უჯოხონა.
== ნორთობურო აღიარაფილი სახენწჷფოეფი დე ფაქტო კონტროლით მუშ ტერიტორიას ==
[[გოერო|გოეროს]] მაკათური ქიანეფი, ნამუთ ნორთობურო რე აღიარაფილი გოეროშ შხვა მაკათური ქიანაშე თაქ მოჸონაფილი ვარე (სამანგ. 39 ქიანა ვააღიარენს [[ისრაელი|ისრაელს]] მუჭოთ სახენწჷფოს).
* '''{{flag|აფხაზეთი}}''' დო '''{{flag|ობჟათე ოსეთი}}''' ნორთობურო აღიარაფილი რესპუბლიკეფი რე (აღიარაფილი რე [[გოერო]]შ [[ოერეფოშქაშე რეაქცია აფხაზეთიშ დო ობჟათე ოსეთიშ ზოხორინალაშე|ხუთი მაკათურიშე]] : [[რუსეთი]], [[ნიკარაგუა]], [[ვენესუელა]], [[ნაურუ]] დო [[სირია]]). [[საქორთუოშ კონსტიტუცია]]შ მეჯინათ, აფხაზეთი რე ავტონომიური რესპუბლიკა, ობჟათე ოსეთი - ობორჯე ადმინისტრაციული ერთული. ფაქტობურო ვეკონტროლებუაფუ [[საქორთუო]]შ თარობაშე.<ref name="NKRrecognition">{{ru icon}} [http://ararat-online.ru/news/984-2025-vice-spiker-parlamenta-abxazii-vybory-v-nkr-sootvetstvuyut-vsem-mezhdunarodnym-standartam.html Вице-спикер парламента Абхазии: Выборы в НКР соответствуют всем международным стандартам] {{Webarchive|url=https://web.archive.org/web/20110811164310/http://ararat-online.ru/news/984-2025-vice-spiker-parlamenta-abxazii-vybory-v-nkr-sootvetstvuyut-vsem-mezhdunarodnym-standartam.html |date=2011-08-11 }}: "Абхазия, Южная Осетия, НКР и Приднестровье уже давно признали независимость друг друга и очень тесно сотрудничают между собой", - сказал вице-спикер парламента Абхазии. ... "...Абхазия признала независимость Нагорно-Карабахской Республики..." - сказал он." [http://www.microsofttranslator.com/bv.aspx?from=&to=en&a=http%3A%2F%2Fararat-online.ru%2Fnews%2F984-2025-vice-spiker-parlamenta-abxazii-vybory-v-nkr-sootvetstvuyut-vsem-mezhdunarodnym-standartam.html English language translation] {{Webarchive|url=http://web.archive.bibalex.org/web/20111208153727/http://www.microsofttranslator.com/bv.aspx?from=&to=en&a=http://ararat-online.ru/news/984-2025-vice-spiker-parlamenta-abxazii-vybory-v-nkr-sootvetstvuyut-vsem-mezhdunarodnym-standartam.html |date=2011-12-08 }} from Microsoft Translator</ref><ref name="tiraspoltimes.com">[http://www.tiraspoltimes.com/news/south_ossetia_opens_embassy_in_abkhazia.html "South Ossetia opens embassy in Abkhazia" ''The Tiraspol Times''] {{Webarchive|url=https://web.archive.org/web/20080422030914/http://www.tiraspoltimes.com/news/south_ossetia_opens_embassy_in_abkhazia.html |date=2008-04-22 }}</ref><ref>{{Cite web|author=Government of Tuvalu|title=On the establishment of diplomatic relations between Republic of Abkhazia and Tuvalu|url=http://www.mfaabkhazia.net/en/node/1082|date=20 September 2011|publisher=Ministry of Foreign Affairs|accessdate=2011-09-24}}</ref><ref>{{Cite web|author=Government of Vanuatu|title=Vanuatu’s recognition to the Republic of Abkhazia|url=http://www.governmentofvanuatu.gov.vu/index.php?option=com_content&view=article&id=95&Itemid=65|date=17 June 2011|accessdate=2011-09-24}}</ref><ref>Vanuatu's initial recognition was invalidated after the Sato Kilman government was annulled by the Supreme Court. Kilman was subsequently re-elected and its recognition was re-confirmed by its Foreign Minister in July 2011: [http://www.dailypost.vu/content/natapei-withdraws-recognition-abkhazia Natapei withdraws recognition of Abkhazia, Vanuatu Daily Post, June 19, 2011] {{Webarchive|url=https://web.archive.org/web/20130927214430/http://www.dailypost.vu/content/natapei-withdraws-recognition-abkhazia |date=September 27, 2013 }}</ref><ref>[http://www.solomonstarnews.com/news/regional/11030-vanuatu-official-denies-abkhazia-recognition Vanuatu official denies Abkhazia recognition, Solomon Star newspaper, 06 JUNE 2011] {{Webarchive|url=https://web.archive.org/web/20110611021201/http://www.solomonstarnews.com/news/regional/11030-vanuatu-official-denies-abkhazia-recognition |date=11 June 2011 }}</ref><ref>[http://transparency.ge/en/post/general-announcement/transparency-international-vanuatu-press-release-recognition-abkhazia Transparency International Vanuatu press release on recognition of Abkhazia, 08 August 2011]</ref><ref name="RNZI_61283">{{cite news |url=http://www.rnzi.com/pages/news.php?op=read&id=61283 |title=Vanuatu annuls recognition of Abkhazia - report |date=19 June 2011 |work=Radio New Zealand International |accessdate=15 October 2011}}</ref>
* '''კოსოვო''' ნორთობურო აღირაფილი სახენწჷფო ჸოფილი [[იუგოსლავია|იუგოსლავიაშ]] ტერიტორიას. [[სერბეთი]]შ კონსტიტუცაშ მეჯინათ [[სერბეთი]]შ რესპუბლიკაშ ნორთი რე. კოსოვოშ ზოხორინალა [[ოერეფოშქაშე რეაქცია კოსოვოშ ზოხორინალაშე|აღიარჷ]] [[გოერო]]შ 62 მაკათური ქიანაქ.<ref>{{cite news|accessdate=2008-02-28|url=http://news.bbc.co.uk/1/hi/world/europe/7249034.stm|date=2008-02-17|title=Kosovo MPs proclaim independence|publisher=BBC News }}</ref><ref>{{cite web|url=http://www.unmikonline.org/press/reports/N9917289.pdf |title=Kosovo |format=PDF |date= |accessdate=2010-06-25}}</ref>
* '''{{შილა|პალესტინა}}''', [[პალესტინაშ გოდუდიშულაფაშ ორგანიზაცია]]ქ პალესტინაშ სახენწჷფოშ ზოხორინალა [[1988]] წანაშ 15 გერგობათუთას, [[ალჟირი|ალჟირს]] [[პალესტინაშ ერუანული სხუნუ|ერუანული სხუნუშ]] აკოხუნას გჷმაცხადჷ. ორგანიზაცია ოკათჷ გოეროშ აკოხუნეფს დჷმაკვირაფალიშ სტატუსით დო მიშინუაფუ მუჭოთ ''პალესტინა''.<ref>{{Cite web|url=http://www.thejerusalemfund.org/www.thejerusalemfund.org/carryover/documents/resolution3237.html |title=UN General Assembly Resolution 3237|publisher=Thejerusalemfund.org |date= |accessdate=2010-12-05}}</ref><ref>[http://www.un.org/en/members/nonmembers.shtml UN observers: Non-member States and Entities]</ref><ref>[https://web.archive.org/web/20060404211437/http://www.pna.gov.ps/Government/gov/recognition_of_the_State_of_Palestine.asp Official website of the Palestinian National Authority].</ref><ref>[http://www.venezuelanalysis.com/news/4962 Venezuela Pledges Support for Palestinian Statehood during Abbas Visit], November 2009.</ref><ref>[http://www.turkishweekly.net/news/52867/costa-rica-recognizes-palestine-.html "Costa Rica Recognizes 'Palestine'"] {{Webarchive|url=https://web.archive.org/web/20120919161419/http://www.turkishweekly.net/news/52867/costa-rica-recognizes-palestine-.html |date=2012-09-19 }}, ''The Journal of Turkish Weekly'' 26 February 2008 Retrieved 2011-02-07</ref><ref>{{cite web|url=http://www.sarep.org/ |title=South African Representative Office to the Palestinian National Authority |publisher=Sarep.org |date= |accessdate=2010-06-25}}</ref><ref>{{cite web|url=http://palestineuzbek.com/english.php?action=4 |title=Embassy of the State of Palestine to the Republic of Uzbekistan, Central Asia and Azerbaijan |publisher=Palestineuzbek.com |date= |accessdate=2010-06-25}}</ref><ref>{{cite web|url=http://www.webgaza.net/resources/Embassies_of_Palestine.htm |title=Embassies of Palestine |publisher=Webgaza.net |date= |accessdate=2010-06-25}}</ref><ref>{{cite web|url=http://www.palestine.sk/about.html |title=Embassy of the State of Palestine in Bratislava |publisher=Palestine.sk |date= |accessdate=2010-06-25}}</ref>
* {{შილა|საჰარაშ არაბეფიშ დემოკრატიული რესპუბლიკა}}, საჰარაშ არაბეფიშ დემოკრატიული რესპუბლიკაქ ზოხორინალა გჷმაცხადჷ [[1976]] წანას, თე რესპუბლიკა აღიარაფილჷ აფუ გოეროშ 84 მაკათურ ქიანას.<ref>{{cite web|accessdate=2008-02-28|url=http://www.wsahara.net/sadr.html|date=1976-02-27|author=Sahrawi Arab Democratic Republic|title=Sahrawi Arab Democratic Republic|publisher=Western Sahara Online }}</ref>
* {{flagicon|ROC}} '''[[ჩინეთიშ რესპუბლიკა]]''' ('''R.O.C'''), ნამუთ [[1949]] წანას [[ჩინეთიშ ომენმაღალი ლჷმა|ჩინეთიშ ომენმაღალი ლჷმაშ]] წაგებაშ უკული აკონტროლენს ხვალო [[ტაივანი|ტაივანს]] დო მუსხირენ შხვა მორჩილ კოკის დო ასე აღიარაფილი რე 25 ქიანაშე. დე ფაქტო რსხუეფს შხვა ქიანეფწკჷმა ასრულენს თიჯგურა ინსტიტუტეფით, მუჭოთი რე ტაიპეიშ ეკონომიკური დო კულტურული წჷმორინალობაშ ოფისი.<ref>[http://www.nytimes.com/2007/06/07/world/asia/07iht-costa.1.6036203.html Taiwan cuts ties with Costa Rica over recognition for China]</ref><ref>Bush III, Richard C. "The Role of the United States in Taiwan-PRC Relations", ''Taiwan: Beyond the Economic Miracle'' M.E. Sharpe, Inc. ISBN 0-87332-879-5 p. 358 [http://books.google.com/books?id=xRjBbmgyc8AC&pg=PA358&dq=liberia+%22two+chinas%22&hl=es&ei=zjd5TdyhM4vz4Qb-6aCHBg&sa=X&oi=book_result&ct=result&resnum=9&ved=0CFUQ6AEwCA#v=onepage&q=liberia%20%22two%20chinas%22&f=false Online version] available at Google Books</ref>
* '''[[ოორუე კვიპროსიშ თურქული რესპუბლიკა]]''' (TRNC) აკიქიმინჷ ოორუე [[კვიპროსი|კვიპროსის]] [[1975]] წანას, თე კოკის [[თურქეთი|თურქეთიშ]] არმიიაშ მიშაჭკირუაშ უკული ბერძენი კვიპროსალეფიშე [[ხუნტა|ხუნტაშ]] მონწყუალაშ საგამეთ. ხუნტაშ ღანკი რდ კოკიშ [[საბერძნეთი|საბერძნეთწკმა]] მერსხუაფა. ფორმალურო ზოხორინალა გმაცხადჷ [[1983]] წანას დო ამდრარშახ ხვალო თურქეთიქ აღიარჷ. [[2004]] წანას გოეროშ ეგიდით ჩეტარჷ რეფერენდუმქ კვიპროსიშ ჟირ ნორთიშ გოართიანაფაშე. გოართიანაფას მეურდეს თურქი კვიპროსალეფი,მარა თეს წიმი ეწუდირთეს ბერძენეფქ. თიშ უკული დიპლომატიური ცადეფი თე საკითხიშ გჷნაჭყვიდირალო ვასრულებე. კვიპროსიშ ბერძენული ნორთიქ თიმ წანას[[ევროპაშ რსხუ|ევროპაშ სრხუშ]] მაკათურო გჷნირთჷ, მუქჷთ გოეროშ გენერალური მელამოსეშ მოსაზრაფათ ხოლო უმოსო გართულჷ ვითარაფა ღე რეგიონს.<ref>{{cite web|url=http://www.un.int/cyprus/scr541.htm |title=Security Council resolution 220 (1966) on Cyprus |publisher=Un.int |date= |accessdate=2010-06-25}}</ref>
==ხვალო გოეროშ ვამაკათური ქიანეფიშე აღიარაფილი გოეროშ ვამაკათური დე ფაქტო ქიანეფი==
*'''[[დნესტრიშპიჯეთი]]''', დნესტრიშპიჯეთიქ ზოხორინალა [[1990]] წანას გმაცხადჷ, ალმახანაშო აღიარაფილი რე გოეროშ ვამაკათური ჟირი დე ფაქტო ქიანაშ [[აფხაზეთი]]შე დო [[ობჟათე ოსეთი]]შე.<ref>{{cite web|accessdate=2008-06-16|url=http://video.acasa.ro/view_video/1cbc0583298a23831612/transnistria-europe-s-black-hole-2-4.html|title=Abkhazia: Ten Years On |publisher=BBC 2|year=2001}}</ref>
*{{flag|სომალილენდი}}, [[სომალი|სომალქ]] ზოხორინალა [[1960]] წანას [[ბრიტანეთი]]შე მიღჷ. დეკოლონიზაციაშ უკული [[ბრიტანული სომალილენდი|ბრიტანული]] დო [[იტალიური სომალილენდი|იტალიური]] სომალილანდეფიშ აკოართაფათ აკოქიმინჷ [[სომალი|სომალ]]ქ. სომალილენდიქ ზოხორინალა [[1991]] წანას გჷმაცხადჷ, თინა ალმახანაშახ აკა სახენწჷფოს ვაუღიარებჷ.<ref>[http://news.bbc.co.uk/1/hi/world/africa/country_profiles/3794847.stm BBC Country Profiles: Regions and territories: Somaliland]. Retrieved 2009-09-14.</ref>
==სქოლიო==
{{სქოლიო}}
[[კატეგორია:ქიანეფი|*]]
[[კატეგორია:ვააღიარაფილი ქიანეფი]]
tmk09zxl2cfrg7kyqmma8ca1cjktua9
ერეფოშქაშე ტრიბუნალი ჸოფილი იუგოსლავიაშ ოკითხეფშე
0
19724
240054
238823
2025-06-09T02:57:57Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240054
wikitext
text/x-wiki
[[ფაილი:ICTY.JPG|მინი|ტრიბუნალიშ დგმილი ჰააგას, ნიდერლანდი.]]
'''[[1991]] წანაშე ჸოფილი [[იუგოსლავია]]შ ტერიტორიას ერეფოშქაშე ჰუმანიტარული სამართალიშ დორღვიას გამამინჯე პიჯეფიშ სამართალებური თხოზინიშ გჷნმახორციალაფარი ერეფოშქაშე ტრიბუნალი''', უმოს ფართოთ ჩინებული რე მუჭოთ '''ერეფოშქაშე ტრიბუნალი ჸოფილი იუგოსლავიაშ ოკითხირეფშე''' ვარდა უბრალოთ '''ჰააგაშ ტრიბუნალი''' - [[გოერო|გოართოიანაფილი ერეფიშ ორგანიზაციაშ]] სტრუქტურა, ნამუშ ღანკი რე სასამართალოს გეგნაჩას ჸოფილი იუგოსლავიაშ ტერიტორიას [[1991]] წანაშე ერეფოშქაშე ჰუმანიტარული სამართალიშ დორღვიაშა ეჭვმეღალირ პიჯეფქ, ახალი დჷნოშურეფიშ ვადოშქუმალა, ხე ქეშუნწყუას ჸოფილ იუგოსლავიას გარიგაშ შარათ შვიდობაშ მოღალას.
==რესურსეფი ინტერნეტის==
{{Commons category}}
* [http://www.icty.org/ Official website of ICTY]
* [[International Progress Organization]]: [http://i-p-o.org/yu-tribunal.htm Monitoring of the ICTY]
* Del Ponte, Carla (2003). ''[http://eprints.lse.ac.uk/23448/ The role of international criminal prosecutions in reconstructing divided communities] {{Webarchive|url=https://web.archive.org/web/20160304000713/http://eprints.lse.ac.uk/23448/ |date=2016-03-04 }}'', public lecture by Carla Del Ponte, Prosecutor, International Criminal Tribunal for the Former Yugoslavia, given at the London School of Economics, 20 October 2003.
* [http://hrw.org/reports/2004/ij/digest.pdf Topical digests of the case law of ICTR and ICTY, Human Rights Watch, 2004]
* [http://www.haguejusticeportal.net/ Hague Justice Portal] {{Webarchive|url=https://web.archive.org/web/20090213221314/http://www.haguejusticeportal.net/eCache/DEF/10/019.html |date=2009-02-13 }}: Academic gateway to The Hague organisations concerning international peace, justice and security.
[[კატეგორია:იუგოსლავია]]
9rlphhgzaz00lmmz4okewr0tuvchl5p
პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა
0
21255
240042
231227
2025-06-08T22:02:45Z
Narazeni
826
/* აკოდგინალუა */
240042
wikitext
text/x-wiki
'''პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა''' – წჷმარინუანს [[პორტუგალია]]ს საირქიანო ოკუჩხბურთე დო მაჸალური ტურნირეფს. პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაქ მოსოფელიშ ჩემპიონატის მაართათ აკათჷ [[1966]] წანას დო ოშქაშეფინალს წაგჷ მუმალი ჩემპიონწკჷმა [[ინგლისიშ ერუანული ოკუჩხბურთე ნაკრორობა|ინგლისწკჷმა]]. პორტუგალიარეფქ მასუმა აბანი დეკინეს.
==აკოდგინალუა==
ნაკორობაშ ეკოდგინალაუაშა გეჸვენჯი 27 მობურთე რდჷ გიშაჸონაფილი 2025 წანაშ [[უეფაშ ერეფიშ ლიგაშ ფინალი 2025|უეფაშ ერეფიშ ლიგაშ ფინალშა]], 2025 წანაშ 4 დო 8 მანგის [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაშ]] დო [[ესპანეთიშ ერუანული ოკუჩხბურთე ნაკორობა|ესპანეთიშ]] მეხ.<ref>{{cite news|title=Convocatória para Liga das Nações divulgada|url=https://www.fpf.pt/pt/News/Todas-as-not%C3%ADcias/Not%C3%ADcia/news/50645|publisher=Portuguese Football Federation|date=20 May 2025|language=pt}}</ref>
: ''ლაჸაფეფი დო გოლეფი მოჸონაფილი რე 2024 წანაშ 11 მანგიშ დგომარობათ:''
{{nat fs g start|background=#900020|color=gold}}
{{nat fs g player|no=1|pos=GK|name=[[რუი პატრისიუ]]|age={{birth date and age|1988|2|15|df=y}}|caps=108|goals=0|club=[[რომა (ოკუჩხბურთე კლუბი)|რომა]]|clubnat=ITA}}
{{nat fs g player|no=12|pos=GK|name=[[ჟოზე სა]]|age={{birth date and age|1993|1|17|df=y}}|caps=2|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=22|pos=GK|name=[[დიოგუ კოშტა]]|age={{birth date and age|1999|9|19|df=y}}|caps=35|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=2|pos=DF|name=[[ნელსონ სემედუ]]|age={{birth date and age|1993|11|16|df=y}}|caps=30|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=3|pos=DF|name=[[კეპლერ რაველან ლიმა ფერეირა|პეპე]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1983|2|26|df=y}}|caps=137|goals=8|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=4|pos=DF|name=[[რუბენ დიასი]]|age={{birth date and age|1997|5|14|df=y}}|caps=56|goals=3|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=5|pos=DF|name=[[დიოგუ დალოტი]]|age={{birth date and age|1999|3|18|df=y}}|caps=20|goals=2|club=[[მანჩესრერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=13|pos=DF|name=[[დანილუ პერეირა]]|age={{birth date and age|1991|9|9|df=y}}|caps=73|goals=2|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=14|pos=DF|name=[[გონსალუ ინასიუ]]|age={{birth date and age|2001|8|25|df=y}}|caps=9|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=19|pos=DF|name=[[ნუნო მენდესი]]|age={{birth date and age|2002|6|19|df=y}}|caps=23|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=20|pos=DF|name=[[ჟოაუ კანცელუ]]|age={{birth date and age|1994|5|27|df=y}}|caps=54|goals=10|club=[[ბარსელონა (ოკუჩხბურთე კლუბი)|ბარსელონა]]|clubnat=ESP}}
{{nat fs g player|no=24|pos=DF|name=[[ანტონიუ სილვა]]|age={{birth date and age|2003|10|30|df=y}}|caps=11|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=6|pos=MF|name=[[ჟუაუ პალინია]]|age={{birth date and age|1995|7|9|df=y}}|caps=27|goals=2|club=[[ფულჰემი (ოკუჩხბურთე კლუბი)|ფულჰემი]]|clubnat=ENG}}
{{nat fs g player|no=8|pos=MF|name=[[ბრუნო ფერნანდესი]]|age={{birth date and age|1994|9|8|df=y}}|caps=67|goals=22|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=10|pos=MF|name=[[ბერნარდუ სილვა]]|age={{birth date and age|1994|8|10|df=y}}|caps=89|goals=11|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=15|pos=MF|name=[[ჟუაუ ნევესი]]|age={{birth date and age|2004|9|27|df=y}}|caps=7|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs g player|no=16|pos=MF|name=[[მათეუს ნუნესი]]|age={{birth date and age|1998|8|27|df=y}}|caps=14|goals=2|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=18|pos=MF|name=[[რუბენ ნევესი]]|age={{birth date and age|1997|3|13|df=y}}|caps=47|goals=0|club=[[ალ-ჰილალი (ოკუჩხბურთე კლუბი)|ალ-ჰილალი]]|clubnat=KSA}}
{{nat fs g player|no=23|pos=MF|name=[[ვიტორ მაჩადუ პერეირა|ვიტინია]]|age={{birth date and age|2000|2|13|df=y}}|caps=17|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=7|pos=FW|name=[[კრიშტიანუ რონალდუ]]|other={{კაპიტანი}}|age={{birth date and age|1985|2|5|df=y}}|caps=207|goals=[[კრიშტიანუ რონალდუშით ერეფოშქაშე მითნაღელი გოლეფიშ ერკებული|130]]|club=[[ალ-ნასრი (ოკუჩხბურთე კლუბი)|ალ-ნასრი]]|clubnat=KSA}}
{{nat fs g player|no=9|pos=FW|name=[[გონსალუ რამოსი]]|age={{birth date and age|2001|6|20|df=y}}|caps=13|goals=8|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=11|pos=FW|name=[[ჟოაუ ფელიქსი]]|vice-captain]]|age={{birth date and age|1999|11|10|df=y}}|caps=39|goals=|club=[[ბარსელონა (ოკუჩხბურთე კლუბი)|ბარსელონა]]|clubnat=ESP}}
{{nat fs g player|no=17|pos=FW|name=[[რაფაელ ლეაუ]]|age={{birth date and age|1999|6|10|df=y}}|caps=27|goals=4|club=[[მილანი (ოკუჩხბურთე კლუბი)|მილანი]]|clubnat=ITA}}
{{nat fs g player|no=21|pos=FW|name=[[დიოგუ ჟოტა]]|age={{birth date and age|1996|12|4|df=y}}|caps=39|goals=14|club=[[ლივერპული (ოკუჩხბურთე კლუბი)|ლივერპული]]|clubnat=ENG}}
{{nat fs g player|no=25|pos=FW|name=[[პედრუ ნეტუ]]|age={{birth date and age|2000|3|9|df=y}}|caps=7|goals=1|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=26|pos=FW|name=[[ფრანსკისკუ კონსეისაუ]]|age={{birth date and age|2002|12|14|df=y}}|caps=2|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs end|background=#900020}}
==რესურსეფი ინტერნეტის==
{{commonscat|Portugal national football team}}
*[http://www.portugoal.net Portugoal.net Portuguese football site (English)]
*[http://www.fpf.pt Portuguese Football Federation official website] {{pt icon}}
*[http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ Portuguese National Football Team] {{Webarchive|url=https://web.archive.org/web/20120403010945/http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ |date=2012-04-03 }} {{pt icon}}
*[http://www.pfutebol.com Portuguesefutebol.com Source for Portuguese football] {{Webarchive|url=https://web.archive.org/web/20150416063412/http://www.pfutebol.com/ |date=2015-04-16 }}
*[http://www.soccerpulse.com/forum/index.php?showforum=27 Portuguese football info and discussion forum]
*[http://soccernet.espn.go.com/team?id=482&cc=5739 Portugal on ESPN Soccernet] {{Webarchive|url=https://web.archive.org/web/20121021071222/http://soccernet.espn.go.com/team?id=482&cc=5739 |date=2012-10-21 }}
*[http://www.rsssf.com/tablesp/port-intres.html RSSSF archive of results 1921-2003]
*[http://www.rsssf.com/miscellaneous/port-recintlp.html RSSSF archive of most capped players and highest goalscorers]
*[http://www.rsssf.com/miscellaneous/port-coach-triv.html RSSSF archive of coaches 1921-]
*[http://thestar.com.my/sports/story.asp?file=/2008/5/22/sports/21322719&sec=sports Portugal international players]
*[http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp Portugal international players] {{Webarchive|url=https://web.archive.org/web/20081024163041/http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp |date=2008-10-24 }} {{pt icon}}
*{{twitter|@selecaoportugal}}
{{მერკე}}
[[კატეგორია:ევროპაშ ერუანული ოკუჩხბურთე ნაკორობეფი]]
[[კატეგორია:პორტუგალიაშ კუჩხბურთი]]
jsicp3uvx18cvq91vn85wylvn8v4owv
240043
240042
2025-06-08T22:09:06Z
Narazeni
826
/* აკოდგინალუა */
240043
wikitext
text/x-wiki
'''პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა''' – წჷმარინუანს [[პორტუგალია]]ს საირქიანო ოკუჩხბურთე დო მაჸალური ტურნირეფს. პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაქ მოსოფელიშ ჩემპიონატის მაართათ აკათჷ [[1966]] წანას დო ოშქაშეფინალს წაგჷ მუმალი ჩემპიონწკჷმა [[ინგლისიშ ერუანული ოკუჩხბურთე ნაკრორობა|ინგლისწკჷმა]]. პორტუგალიარეფქ მასუმა აბანი დეკინეს.
==აკოდგინალუა==
ნაკორობაშ ეკოდგინალაუაშა გეჸვენჯი 27 მობურთე რდჷ გიშაჸონაფილი 2025 წანაშ [[უეფაშ ერეფიშ ლიგაშ ფინალი 2025|უეფაშ ერეფიშ ლიგაშ ფინალშა]], 2025 წანაშ 4 დო 8 მანგის [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაშ]] დო [[ესპანეთიშ ერუანული ოკუჩხბურთე ნაკორობა|ესპანეთიშ]] მეხ.<ref>{{cite news|title=Convocatória para Liga das Nações divulgada|url=https://www.fpf.pt/pt/News/Todas-as-not%C3%ADcias/Not%C3%ADcia/news/50645|publisher=Portuguese Football Federation|date=20 May 2025|language=pt}}</ref>
* '''მატჩეფიშ დო გოლეფიშ მუნაჩემეფი მოჩამილი რე გეჸვენი თარიღით''': 2025 წანაშ 4 მანგი, [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაწჷმა]] მატჩიშ უკული.
: ''ლაჸაფეფი დო გოლეფი მოჸონაფილი რე 2024 წანაშ 11 მანგიშ დგომარობათ:''
{{nat fs g start|background=#900020|color=gold}}
{{nat fs g player|no=1|pos=GK|name=[[დიოგუ კოშტა]]|age={{birth date and age|1999|9|19|df=y}}|caps=35|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=12|pos=GK|name=[[ჟოზე სა]]|age={{birth date and age|1993|1|17|df=y}}|caps=2|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=22|pos=GK|name=[[რუი სილვა]]|age={{birth date and age|1994|2|7|df=y}}|caps=1|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|რომა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=2|pos=DF|name=[[ნელსონ სემედუ]]|age={{birth date and age|1993|11|16|df=y}}|caps=30|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=3|pos=DF|name=[[კეპლერ რაველან ლიმა ფერეირა|პეპე]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1983|2|26|df=y}}|caps=137|goals=8|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=4|pos=DF|name=[[რუბენ დიასი]]|age={{birth date and age|1997|5|14|df=y}}|caps=56|goals=3|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=5|pos=DF|name=[[დიოგუ დალოტი]]|age={{birth date and age|1999|3|18|df=y}}|caps=20|goals=2|club=[[მანჩესრერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=13|pos=DF|name=[[დანილუ პერეირა]]|age={{birth date and age|1991|9|9|df=y}}|caps=73|goals=2|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=14|pos=DF|name=[[გონსალუ ინასიუ]]|age={{birth date and age|2001|8|25|df=y}}|caps=9|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=19|pos=DF|name=[[ნუნო მენდესი]]|age={{birth date and age|2002|6|19|df=y}}|caps=23|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=20|pos=DF|name=[[ჟოაუ კანცელუ]]|age={{birth date and age|1994|5|27|df=y}}|caps=54|goals=10|club=[[ბარსელონა (ოკუჩხბურთე კლუბი)|ბარსელონა]]|clubnat=ESP}}
{{nat fs g player|no=24|pos=DF|name=[[ანტონიუ სილვა]]|age={{birth date and age|2003|10|30|df=y}}|caps=11|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=6|pos=MF|name=[[ჟუაუ პალინია]]|age={{birth date and age|1995|7|9|df=y}}|caps=27|goals=2|club=[[ფულჰემი (ოკუჩხბურთე კლუბი)|ფულჰემი]]|clubnat=ENG}}
{{nat fs g player|no=8|pos=MF|name=[[ბრუნო ფერნანდესი]]|age={{birth date and age|1994|9|8|df=y}}|caps=67|goals=22|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=10|pos=MF|name=[[ბერნარდუ სილვა]]|age={{birth date and age|1994|8|10|df=y}}|caps=89|goals=11|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=15|pos=MF|name=[[ჟუაუ ნევესი]]|age={{birth date and age|2004|9|27|df=y}}|caps=7|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs g player|no=16|pos=MF|name=[[მათეუს ნუნესი]]|age={{birth date and age|1998|8|27|df=y}}|caps=14|goals=2|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=18|pos=MF|name=[[რუბენ ნევესი]]|age={{birth date and age|1997|3|13|df=y}}|caps=47|goals=0|club=[[ალ-ჰილალი (ოკუჩხბურთე კლუბი)|ალ-ჰილალი]]|clubnat=KSA}}
{{nat fs g player|no=23|pos=MF|name=[[ვიტორ მაჩადუ პერეირა|ვიტინია]]|age={{birth date and age|2000|2|13|df=y}}|caps=17|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=7|pos=FW|name=[[კრიშტიანუ რონალდუ]]|other={{კაპიტანი}}|age={{birth date and age|1985|2|5|df=y}}|caps=207|goals=[[კრიშტიანუ რონალდუშით ერეფოშქაშე მითნაღელი გოლეფიშ ერკებული|130]]|club=[[ალ-ნასრი (ოკუჩხბურთე კლუბი)|ალ-ნასრი]]|clubnat=KSA}}
{{nat fs g player|no=9|pos=FW|name=[[გონსალუ რამოსი]]|age={{birth date and age|2001|6|20|df=y}}|caps=13|goals=8|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=11|pos=FW|name=[[ჟოაუ ფელიქსი]]|vice-captain]]|age={{birth date and age|1999|11|10|df=y}}|caps=39|goals=|club=[[ბარსელონა (ოკუჩხბურთე კლუბი)|ბარსელონა]]|clubnat=ESP}}
{{nat fs g player|no=17|pos=FW|name=[[რაფაელ ლეაუ]]|age={{birth date and age|1999|6|10|df=y}}|caps=27|goals=4|club=[[მილანი (ოკუჩხბურთე კლუბი)|მილანი]]|clubnat=ITA}}
{{nat fs g player|no=21|pos=FW|name=[[დიოგუ ჟოტა]]|age={{birth date and age|1996|12|4|df=y}}|caps=39|goals=14|club=[[ლივერპული (ოკუჩხბურთე კლუბი)|ლივერპული]]|clubnat=ENG}}
{{nat fs g player|no=25|pos=FW|name=[[პედრუ ნეტუ]]|age={{birth date and age|2000|3|9|df=y}}|caps=7|goals=1|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=26|pos=FW|name=[[ფრანსკისკუ კონსეისაუ]]|age={{birth date and age|2002|12|14|df=y}}|caps=2|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs end|background=#900020}}
==რესურსეფი ინტერნეტის==
{{commonscat|Portugal national football team}}
*[http://www.portugoal.net Portugoal.net Portuguese football site (English)]
*[http://www.fpf.pt Portuguese Football Federation official website] {{pt icon}}
*[http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ Portuguese National Football Team] {{Webarchive|url=https://web.archive.org/web/20120403010945/http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ |date=2012-04-03 }} {{pt icon}}
*[http://www.pfutebol.com Portuguesefutebol.com Source for Portuguese football] {{Webarchive|url=https://web.archive.org/web/20150416063412/http://www.pfutebol.com/ |date=2015-04-16 }}
*[http://www.soccerpulse.com/forum/index.php?showforum=27 Portuguese football info and discussion forum]
*[http://soccernet.espn.go.com/team?id=482&cc=5739 Portugal on ESPN Soccernet] {{Webarchive|url=https://web.archive.org/web/20121021071222/http://soccernet.espn.go.com/team?id=482&cc=5739 |date=2012-10-21 }}
*[http://www.rsssf.com/tablesp/port-intres.html RSSSF archive of results 1921-2003]
*[http://www.rsssf.com/miscellaneous/port-recintlp.html RSSSF archive of most capped players and highest goalscorers]
*[http://www.rsssf.com/miscellaneous/port-coach-triv.html RSSSF archive of coaches 1921-]
*[http://thestar.com.my/sports/story.asp?file=/2008/5/22/sports/21322719&sec=sports Portugal international players]
*[http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp Portugal international players] {{Webarchive|url=https://web.archive.org/web/20081024163041/http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp |date=2008-10-24 }} {{pt icon}}
*{{twitter|@selecaoportugal}}
{{მერკე}}
[[კატეგორია:ევროპაშ ერუანული ოკუჩხბურთე ნაკორობეფი]]
[[კატეგორია:პორტუგალიაშ კუჩხბურთი]]
5bxcvzka2wenfdw720zfwqn5ugsis21
240044
240043
2025-06-08T22:40:02Z
Narazeni
826
/* აკოდგინალუა */
240044
wikitext
text/x-wiki
'''პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა''' – წჷმარინუანს [[პორტუგალია]]ს საირქიანო ოკუჩხბურთე დო მაჸალური ტურნირეფს. პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაქ მოსოფელიშ ჩემპიონატის მაართათ აკათჷ [[1966]] წანას დო ოშქაშეფინალს წაგჷ მუმალი ჩემპიონწკჷმა [[ინგლისიშ ერუანული ოკუჩხბურთე ნაკრორობა|ინგლისწკჷმა]]. პორტუგალიარეფქ მასუმა აბანი დეკინეს.
==აკოდგინალუა==
ნაკორობაშ ეკოდგინალაუაშა გეჸვენჯი 27 მობურთე რდჷ გიშაჸონაფილი 2025 წანაშ [[უეფაშ ერეფიშ ლიგაშ ფინალი 2025|უეფაშ ერეფიშ ლიგაშ ფინალშა]], 2025 წანაშ 4 დო 8 მანგის [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაშ]] დო [[ესპანეთიშ ერუანული ოკუჩხბურთე ნაკორობა|ესპანეთიშ]] მეხ.<ref>{{cite news|title=Convocatória para Liga das Nações divulgada|url=https://www.fpf.pt/pt/News/Todas-as-not%C3%ADcias/Not%C3%ADcia/news/50645|publisher=Portuguese Football Federation|date=20 May 2025|language=pt}}</ref>
* '''მატჩეფიშ დო გოლეფიშ მუნაჩემეფი მოჩამილი რე გეჸვენი თარიღით''': 2025 წანაშ 4 მანგი, [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაწჷმა]] მატჩიშ უკული.
: ''ლაჸაფეფი დო გოლეფი მოჸონაფილი რე 2024 წანაშ 11 მანგიშ დგომარობათ:''
{{nat fs g start|background=#900020|color=gold}}
{{nat fs g player|no=1|pos=GK|name=[[დიოგუ კოშტა]]|age={{birth date and age|1999|9|19|df=y}}|caps=35|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=12|pos=GK|name=[[ჟოზე სა]]|age={{birth date and age|1993|1|17|df=y}}|caps=2|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=22|pos=GK|name=[[რუი სილვა]]|age={{birth date and age|1994|2|7|df=y}}|caps=1|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|რომა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=2|pos=DF|name=[[ნელსონ სემედუ]]|age={{birth date and age|1993|11|16|df=y}}|caps=43|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=3|pos=DF|name=[[რუბენ დიასი]]|age={{birth date and age|1997|5|14|df=y}}|caps=67|goals=3|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=4|pos=DF|name=[[ანტონიუ სილვა]]|age={{birth date and age|2003|10|30|df=y}}|caps=17|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs g player|no=3|pos=DF|name=[[კეპლერ რაველან ლიმა ფერეირა|პეპე]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1983|2|26|df=y}}|caps=137|goals=8|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=5|pos=DF|name=[[დიოგუ დალოტი]]|age={{birth date and age|1999|3|18|df=y}}|caps=29|goals=3|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=13|pos=DF|name=[[რენატუ ვეიგა]]|age={{birth date and age|2003|7|29|df=y}}|caps=4|goals=0|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=14|pos=DF|name=[[გონსალუ ინასიუ]]|age={{birth date and age|2001|8|25|df=y}}|caps=15|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=25|pos=DF|name=[[ნუნო მენდესი]]|age={{birth date and age|2002|6|19|df=y}}|caps=36|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=27|pos=DF|name=[[ნუნუ ტავარეში]]|age={{birth date and age|2000|1|26|df=y}}|caps=1|goals=0|club=[[ლაციო (ოკუჩხბურთე კლუბი)|ლაციო]]|clubnat=ITA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=6|pos=MF|name=[[ჟუაუ პალინია]]|age={{birth date and age|1995|7|9|df=y}}|caps=34|goals=2|club=[[ბაიერნი (ოკუჩხბურთე კლუბი)|ბაიერნი]]|clubnat=GER}}
{{nat fs g player|no=8|pos=MF|name=[[ბრუნუ ფერნანდეში]]|age={{birth date and age|1994|9|8|df=y}}|caps=79|goals=25|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=10|pos=MF|name=[[ბერნარდუ სილვა]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1994|8|10|df=y}}|caps=101|goals=13|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=15|pos=MF|name=[[ჟუაუ ნევეში]]|age={{birth date and age|2004|9|27|df=y}}|caps=15|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=18|pos=MF|name=[[რუბენ ნევეში]]|age={{birth date and age|1997|3|13|df=y}}|caps=57|goals=0|club=[[ალ-ჰილალი (ოკუჩხბურთე კლუბი)|ალ-ჰილალი]]|clubnat=KSA}}
{{nat fs g player|no=19|pos=MF|name=[[პედრუ გონსალვეში]]|age={{birth date and age|1998|6|28|df=y}}|caps=3|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=23|pos=MF|name=[[ვიტორ მაჩადუ პერეირა|ვიტინია]]|age={{birth date and age|2000|2|13|df=y}}|caps=28|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=7|pos=FW|name=[[კრიშტიანუ რონალდუ]]|other={{კაპიტანი}}|age={{birth date and age|1985|2|5|df=y}}|caps=220|goals=[[კრიშტიანუ რონალდუშით ერეფოშქაშე მითნაღელი გოლეფიშ ერკებული|137]]|club=[[ალ-ნასრი (ოკუჩხბურთე კლუბი)|ალ-ნასრი]]|clubnat=KSA}}
{{nat fs g player|no=9|pos=FW|name=[[გონსალუ რამოსი]]|age={{birth date and age|2001|6|20|df=y}}|caps=15|goals=9|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=11|pos=FW|name=[[ჟოაუ ფელიქსი]]|age={{birth date and age|1999|11|10|df=y}}|caps=45|goals=9|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=16|pos=FW|name=[[ფრანსიშკუ ტრინკანი]]|age={{birth date and age|1999|12|29|df=y}}|caps=11|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=17|pos=FW|name=[[რაფაელ ლეაუ]]|age={{birth date and age|1999|6|10|df=y}}|caps=39|goals=5|club=[[მილანი (ოკუჩხბურთე კლუბი)|მილანი]]|clubnat=ITA}}
{{nat fs g player|no=20|pos=FW|name=[[პედრუ ნეტუ]]|age={{birth date and age|2000|3|9|df=y}}|caps=16|goals=2|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=21|pos=FW|name=[[დიოგუ ჟოტა]]|age={{birth date and age|1996|12|4|df=y}}|caps=48|goals=14|club=[[ლივერპული (ოკუჩხბურთე კლუბი)|ლივერპული]]|clubnat=ENG}}
{{nat fs g player|no=24|pos=FW|name=[[როდრიგუ მორა]]|age={{birth date and age|2007|5|5|df=y}}|caps=0|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=26|pos=FW|name=[[ფრანსიშკუ კონსეისაუ]]|age={{birth date and age|2002|12|14|df=y}}|caps=10|goals=2|club=[[იუვენტუსი (ოკუჩხბურთე კლუბი)|იუვენტუსი]]|clubnat=ITA}}
{{nat fs end|background=#900020}}
==რესურსეფი ინტერნეტის==
{{commonscat|Portugal national football team}}
*[http://www.portugoal.net Portugoal.net Portuguese football site (English)]
*[http://www.fpf.pt Portuguese Football Federation official website] {{pt icon}}
*[http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ Portuguese National Football Team] {{Webarchive|url=https://web.archive.org/web/20120403010945/http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ |date=2012-04-03 }} {{pt icon}}
*[http://www.pfutebol.com Portuguesefutebol.com Source for Portuguese football] {{Webarchive|url=https://web.archive.org/web/20150416063412/http://www.pfutebol.com/ |date=2015-04-16 }}
*[http://www.soccerpulse.com/forum/index.php?showforum=27 Portuguese football info and discussion forum]
*[http://soccernet.espn.go.com/team?id=482&cc=5739 Portugal on ESPN Soccernet] {{Webarchive|url=https://web.archive.org/web/20121021071222/http://soccernet.espn.go.com/team?id=482&cc=5739 |date=2012-10-21 }}
*[http://www.rsssf.com/tablesp/port-intres.html RSSSF archive of results 1921-2003]
*[http://www.rsssf.com/miscellaneous/port-recintlp.html RSSSF archive of most capped players and highest goalscorers]
*[http://www.rsssf.com/miscellaneous/port-coach-triv.html RSSSF archive of coaches 1921-]
*[http://thestar.com.my/sports/story.asp?file=/2008/5/22/sports/21322719&sec=sports Portugal international players]
*[http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp Portugal international players] {{Webarchive|url=https://web.archive.org/web/20081024163041/http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp |date=2008-10-24 }} {{pt icon}}
*{{twitter|@selecaoportugal}}
{{მერკე}}
[[კატეგორია:ევროპაშ ერუანული ოკუჩხბურთე ნაკორობეფი]]
[[კატეგორია:პორტუგალიაშ კუჩხბურთი]]
6atfl0b2oma8v66nflxhwvcv8tk2aqs
240045
240044
2025-06-08T22:44:12Z
Narazeni
826
/* აკოდგინალუა */
240045
wikitext
text/x-wiki
'''პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა''' – წჷმარინუანს [[პორტუგალია]]ს საირქიანო ოკუჩხბურთე დო მაჸალური ტურნირეფს. პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაქ მოსოფელიშ ჩემპიონატის მაართათ აკათჷ [[1966]] წანას დო ოშქაშეფინალს წაგჷ მუმალი ჩემპიონწკჷმა [[ინგლისიშ ერუანული ოკუჩხბურთე ნაკრორობა|ინგლისწკჷმა]]. პორტუგალიარეფქ მასუმა აბანი დეკინეს.
==აკოდგინალუა==
ნაკორობაშ ეკოდგინალაუაშა გეჸვენჯი 27 მობურთე რდჷ გიშაჸონაფილი 2025 წანაშ [[უეფაშ ერეფიშ ლიგაშ ფინალი 2025|უეფაშ ერეფიშ ლიგაშ ფინალშა]], 2025 წანაშ 4 დო 8 მანგის [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაშ]] დო [[ესპანეთიშ ერუანული ოკუჩხბურთე ნაკორობა|ესპანეთიშ]] მეხ.<ref>{{cite news|title=Convocatória para Liga das Nações divulgada|url=https://www.fpf.pt/pt/News/Todas-as-not%C3%ADcias/Not%C3%ADcia/news/50645|publisher=Portuguese Football Federation|date=20 May 2025|language=pt}}</ref>
* '''მატჩეფიშ დო გოლეფიშ მუნაჩემეფი მოჩამილი რე გეჸვენი თარიღით''': 2025 წანაშ 4 მანგი, [[გერმანიაშ ერუანული ოკუჩხბურთე ნაკორობა|გერმანიაწჷმა]] მატჩიშ უკული.
: ''ლაჸაფეფი დო გოლეფი მოჸონაფილი რე 2024 წანაშ 11 მანგიშ დგომარობათ:''
{{nat fs g start|background=#900020|color=gold}}
{{nat fs g player|no=1|pos=GK|name=[[დიოგუ კოშტა]]|age={{birth date and age|1999|9|19|df=y}}|caps=35|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=12|pos=GK|name=[[ჟოზე სა]]|age={{birth date and age|1993|1|17|df=y}}|caps=2|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=22|pos=GK|name=[[რუი სილვა]]|age={{birth date and age|1994|2|7|df=y}}|caps=1|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|რომა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=2|pos=DF|name=[[ნელსონ სემედუ]]|age={{birth date and age|1993|11|16|df=y}}|caps=43|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=3|pos=DF|name=[[რუბენ დიასი]]|age={{birth date and age|1997|5|14|df=y}}|caps=67|goals=3|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=4|pos=DF|name=[[ანტონიუ სილვა]]|age={{birth date and age|2003|10|30|df=y}}|caps=17|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs g player|no=5|pos=DF|name=[[დიოგუ დალოტი]]|age={{birth date and age|1999|3|18|df=y}}|caps=29|goals=3|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=13|pos=DF|name=[[რენატუ ვეიგა]]|age={{birth date and age|2003|7|29|df=y}}|caps=4|goals=0|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=14|pos=DF|name=[[გონსალუ ინასიუ]]|age={{birth date and age|2001|8|25|df=y}}|caps=15|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=25|pos=DF|name=[[ნუნო მენდესი]]|age={{birth date and age|2002|6|19|df=y}}|caps=36|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=27|pos=DF|name=[[ნუნუ ტავარეში]]|age={{birth date and age|2000|1|26|df=y}}|caps=1|goals=0|club=[[ლაციო (ოკუჩხბურთე კლუბი)|ლაციო]]|clubnat=ITA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=6|pos=MF|name=[[ჟუაუ პალინია]]|age={{birth date and age|1995|7|9|df=y}}|caps=34|goals=2|club=[[ბაიერნი (ოკუჩხბურთე კლუბი)|ბაიერნი]]|clubnat=GER}}
{{nat fs g player|no=8|pos=MF|name=[[ბრუნუ ფერნანდეში]]|age={{birth date and age|1994|9|8|df=y}}|caps=79|goals=25|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=10|pos=MF|name=[[ბერნარდუ სილვა]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1994|8|10|df=y}}|caps=101|goals=13|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=15|pos=MF|name=[[ჟუაუ ნევეში]]|age={{birth date and age|2004|9|27|df=y}}|caps=15|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=18|pos=MF|name=[[რუბენ ნევეში]]|age={{birth date and age|1997|3|13|df=y}}|caps=57|goals=0|club=[[ალ-ჰილალი (ოკუჩხბურთე კლუბი)|ალ-ჰილალი]]|clubnat=KSA}}
{{nat fs g player|no=19|pos=MF|name=[[პედრუ გონსალვეში]]|age={{birth date and age|1998|6|28|df=y}}|caps=3|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=23|pos=MF|name=[[ვიტორ მაჩადუ პერეირა|ვიტინია]]|age={{birth date and age|2000|2|13|df=y}}|caps=28|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=7|pos=FW|name=[[კრიშტიანუ რონალდუ]]|other={{კაპიტანი}}|age={{birth date and age|1985|2|5|df=y}}|caps=220|goals=[[კრიშტიანუ რონალდუშით ერეფოშქაშე მითნაღელი გოლეფიშ ერკებული|137]]|club=[[ალ-ნასრი (ოკუჩხბურთე კლუბი)|ალ-ნასრი]]|clubnat=KSA}}
{{nat fs g player|no=9|pos=FW|name=[[გონსალუ რამოსი]]|age={{birth date and age|2001|6|20|df=y}}|caps=15|goals=9|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=11|pos=FW|name=[[ჟოაუ ფელიქსი]]|age={{birth date and age|1999|11|10|df=y}}|caps=45|goals=9|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=16|pos=FW|name=[[ფრანსიშკუ ტრინკანი]]|age={{birth date and age|1999|12|29|df=y}}|caps=11|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=17|pos=FW|name=[[რაფაელ ლეაუ]]|age={{birth date and age|1999|6|10|df=y}}|caps=39|goals=5|club=[[მილანი (ოკუჩხბურთე კლუბი)|მილანი]]|clubnat=ITA}}
{{nat fs g player|no=20|pos=FW|name=[[პედრუ ნეტუ]]|age={{birth date and age|2000|3|9|df=y}}|caps=16|goals=2|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=21|pos=FW|name=[[დიოგუ ჟოტა]]|age={{birth date and age|1996|12|4|df=y}}|caps=48|goals=14|club=[[ლივერპული (ოკუჩხბურთე კლუბი)|ლივერპული]]|clubnat=ENG}}
{{nat fs g player|no=24|pos=FW|name=[[როდრიგუ მორა]]|age={{birth date and age|2007|5|5|df=y}}|caps=0|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=26|pos=FW|name=[[ფრანსიშკუ კონსეისაუ]]|age={{birth date and age|2002|12|14|df=y}}|caps=10|goals=2|club=[[იუვენტუსი (ოკუჩხბურთე კლუბი)|იუვენტუსი]]|clubnat=ITA}}
{{nat fs end|background=#900020}}
==რესურსეფი ინტერნეტის==
{{commonscat|Portugal national football team}}
*[http://www.portugoal.net Portugoal.net Portuguese football site (English)]
*[http://www.fpf.pt Portuguese Football Federation official website] {{pt icon}}
*[http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ Portuguese National Football Team] {{Webarchive|url=https://web.archive.org/web/20120403010945/http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ |date=2012-04-03 }} {{pt icon}}
*[http://www.pfutebol.com Portuguesefutebol.com Source for Portuguese football] {{Webarchive|url=https://web.archive.org/web/20150416063412/http://www.pfutebol.com/ |date=2015-04-16 }}
*[http://www.soccerpulse.com/forum/index.php?showforum=27 Portuguese football info and discussion forum]
*[http://soccernet.espn.go.com/team?id=482&cc=5739 Portugal on ESPN Soccernet] {{Webarchive|url=https://web.archive.org/web/20121021071222/http://soccernet.espn.go.com/team?id=482&cc=5739 |date=2012-10-21 }}
*[http://www.rsssf.com/tablesp/port-intres.html RSSSF archive of results 1921-2003]
*[http://www.rsssf.com/miscellaneous/port-recintlp.html RSSSF archive of most capped players and highest goalscorers]
*[http://www.rsssf.com/miscellaneous/port-coach-triv.html RSSSF archive of coaches 1921-]
*[http://thestar.com.my/sports/story.asp?file=/2008/5/22/sports/21322719&sec=sports Portugal international players]
*[http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp Portugal international players] {{Webarchive|url=https://web.archive.org/web/20081024163041/http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp |date=2008-10-24 }} {{pt icon}}
*{{twitter|@selecaoportugal}}
{{მერკე}}
[[კატეგორია:ევროპაშ ერუანული ოკუჩხბურთე ნაკორობეფი]]
[[კატეგორია:პორტუგალიაშ კუჩხბურთი]]
sscj73pyk9300uattlsaar1pcaukr9e
240061
240045
2025-06-09T09:47:44Z
Narazeni
826
/* აკოდგინალუა */
240061
wikitext
text/x-wiki
'''პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა''' – წჷმარინუანს [[პორტუგალია]]ს საირქიანო ოკუჩხბურთე დო მაჸალური ტურნირეფს. პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაქ მოსოფელიშ ჩემპიონატის მაართათ აკათჷ [[1966]] წანას დო ოშქაშეფინალს წაგჷ მუმალი ჩემპიონწკჷმა [[ინგლისიშ ერუანული ოკუჩხბურთე ნაკრორობა|ინგლისწკჷმა]]. პორტუგალიარეფქ მასუმა აბანი დეკინეს.
==აკოდგინალუა==
ნაკორობაშ ეკოდგინალაუაშა გეჸვენჯი მობურთეეფი რდჷ გიშაჸონაფილი 2025 წანაშ [[უეფაშ ერეფიშ ლიგაშ ფინალი 2025|უეფაშ ერეფიშ ლიგაშ ფინალშა]].<ref>{{cite news|title=Convocatória para Liga das Nações divulgada|url=https://www.fpf.pt/pt/News/Todas-as-not%C3%ADcias/Not%C3%ADcia/news/50645|publisher=Portuguese Football Federation|date=20 May 2025|language=pt}}</ref>
* '''მატჩეფიშ დო გოლეფიშ მუნაჩემეფი მოჩამილი რე გეჸვენი თარიღით''': 2025 წანაშ 8 მანგი, [[ესპანეთიშ ერუანული ოკუჩხბურთე ნაკორობა|ესპანეთწჷმა]] მატჩიშ უკული.
: ''ლაჸაფეფი დო გოლეფი მოჸონაფილი რე 2024 წანაშ 11 მანგიშ დგომარობათ:''
{{nat fs g start|background=#900020|color=gold}}
{{nat fs g player|no=1|pos=GK|name=[[დიოგუ კოშტა]]|age={{birth date and age|1999|9|19|df=y}}|caps=36|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=12|pos=GK|name=[[ჟოზე სა]]|age={{birth date and age|1993|1|17|df=y}}|caps=3|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=22|pos=GK|name=[[რუი სილვა]]|age={{birth date and age|1994|2|7|df=y}}|caps=1|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|რომა]]|clubnat=POR}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=2|pos=DF|name=[[ნელსონ სემედუ]]|age={{birth date and age|1993|11|16|df=y}}|caps=44|goals=0|club=[[ვულვერჰემპტონ უონდერერსი]]|clubnat=ENG}}
{{nat fs g player|no=3|pos=DF|name=[[რუბენ დიასი]]|age={{birth date and age|1997|5|14|df=y}}|caps=68|goals=3|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=4|pos=DF|name=[[ანტონიუ სილვა]]|age={{birth date and age|2003|10|30|df=y}}|caps=17|goals=0|club=[[ბენფიკა (ოკუჩხბურთე კლუბი)|ბენფიკა]]|clubnat=POR}}
{{nat fs g player|no=5|pos=DF|name=[[დიოგუ დალოტი]]|age={{birth date and age|1999|3|18|df=y}}|caps=29|goals=3|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=13|pos=DF|name=[[რენატუ ვეიგა]]|age={{birth date and age|2003|7|29|df=y}}|caps=5|goals=0|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=14|pos=DF|name=[[გონსალუ ინასიუ]]|age={{birth date and age|2001|8|25|df=y}}|caps=16|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=25|pos=DF|name=[[ნუნუ მენდეში]]|age={{birth date and age|2002|6|19|df=y}}|caps=37|goals=1|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=6|pos=MF|name=[[ჟუაუ პალინია]]|age={{birth date and age|1995|7|9|df=y}}|caps=34|goals=2|club=[[ბაიერნი (ოკუჩხბურთე კლუბი)|ბაიერნი]]|clubnat=GER}}
{{nat fs g player|no=8|pos=MF|name=[[ბრუნუ ფერნანდეში]]|age={{birth date and age|1994|9|8|df=y}}|caps=80|goals=25|club=[[მანჩესტერ იუნაიტედი (ოკუჩხბურთე კლუბი)|მანჩესტერ იუნაიტედი]]|clubnat=ENG}}
{{nat fs g player|no=10|pos=MF|name=[[ბერნარდუ სილვა]]|other=<small>ვიცე-კაპიტანი</small>|age={{birth date and age|1994|8|10|df=y}}|caps=102|goals=13|club=[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]|clubnat=ENG}}
{{nat fs g player|no=15|pos=MF|name=[[ჟუაუ ნევეში]]|age={{birth date and age|2004|9|27|df=y}}|caps=16|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=18|pos=MF|name=[[რუბენ ნევეში]]|age={{birth date and age|1997|3|13|df=y}}|caps=58|goals=0|club=[[ალ-ჰილალი (ოკუჩხბურთე კლუბი)|ალ-ჰილალი]]|clubnat=KSA}}
{{nat fs g player|no=19|pos=MF|name=[[პედრუ გონსალვეში]]|age={{birth date and age|1998|6|28|df=y}}|caps=3|goals=0|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=23|pos=MF|name=[[ვიტორ მაჩადუ პერეირა|ვიტინია]]|age={{birth date and age|2000|2|13|df=y}}|caps=29|goals=0|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs break|background=#900020}}
{{nat fs g player|no=7|pos=FW|name=[[კრიშტიანუ რონალდუ]]|other={{კაპიტანი}}|age={{birth date and age|1985|2|5|df=y}}|caps=221|goals=[[კრიშტიანუ რონალდუშით ერეფოშქაშე მითნაღელი გოლეფიშ ერკებული|138]]|club=[[ალ-ნასრი (ოკუჩხბურთე კლუბი)|ალ-ნასრი]]|clubnat=KSA}}
{{nat fs g player|no=9|pos=FW|name=[[გონსალუ რამოსი]]|age={{birth date and age|2001|6|20|df=y}}|caps=16|goals=9|club=[[პარი სენ-ჟერმენი]]|clubnat=FRA}}
{{nat fs g player|no=11|pos=FW|name=[[ჟოაუ ფელიქსი]]|age={{birth date and age|1999|11|10|df=y}}|caps=45|goals=9|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=16|pos=FW|name=[[ფრანსიშკუ ტრინკანი]]|age={{birth date and age|1999|12|29|df=y}}|caps=11|goals=2|club=[[სპორტინგი (ოკუჩხბურთე კლუბი, ლისაბონი)|სპორტინგი]]|clubnat=POR}}
{{nat fs g player|no=17|pos=FW|name=[[რაფაელ ლეაუ]]|age={{birth date and age|1999|6|10|df=y}}|caps=40|goals=5|club=[[მილანი (ოკუჩხბურთე კლუბი)|მილანი]]|clubnat=ITA}}
{{nat fs g player|no=20|pos=FW|name=[[პედრუ ნეტუ]]|age={{birth date and age|2000|3|9|df=y}}|caps=17|goals=2|club=[[ჩელსი (ოკუჩხბურთე კლუბი)|ჩელსი]]|clubnat=ENG}}
{{nat fs g player|no=21|pos=FW|name=[[დიოგუ ჟოტა]]|age={{birth date and age|1996|12|4|df=y}}|caps=49|goals=14|club=[[ლივერპული (ოკუჩხბურთე კლუბი)|ლივერპული]]|clubnat=ENG}}
{{nat fs g player|no=24|pos=FW|name=[[როდრიგუ მორა]]|age={{birth date and age|2007|5|5|df=y}}|caps=0|goals=0|club=[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]|clubnat=POR}}
{{nat fs g player|no=26|pos=FW|name=[[ფრანსიშკუ კონსეისაუ]]|age={{birth date and age|2002|12|14|df=y}}|caps=11|goals=2|club=[[იუვენტუსი (ოკუჩხბურთე კლუბი)|იუვენტუსი]]|clubnat=ITA}}
{{nat fs end|background=#900020}}
==რესურსეფი ინტერნეტის==
{{commonscat|Portugal national football team}}
*[http://www.portugoal.net Portugoal.net Portuguese football site (English)]
*[http://www.fpf.pt Portuguese Football Federation official website] {{pt icon}}
*[http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ Portuguese National Football Team] {{Webarchive|url=https://web.archive.org/web/20120403010945/http://www.fpf.pt/portal/page/portal/PORTAL_FUTEBOL/SELECCOES/CLUBE_PORTUGAL/ |date=2012-04-03 }} {{pt icon}}
*[http://www.pfutebol.com Portuguesefutebol.com Source for Portuguese football] {{Webarchive|url=https://web.archive.org/web/20150416063412/http://www.pfutebol.com/ |date=2015-04-16 }}
*[http://www.soccerpulse.com/forum/index.php?showforum=27 Portuguese football info and discussion forum]
*[http://soccernet.espn.go.com/team?id=482&cc=5739 Portugal on ESPN Soccernet] {{Webarchive|url=https://web.archive.org/web/20121021071222/http://soccernet.espn.go.com/team?id=482&cc=5739 |date=2012-10-21 }}
*[http://www.rsssf.com/tablesp/port-intres.html RSSSF archive of results 1921-2003]
*[http://www.rsssf.com/miscellaneous/port-recintlp.html RSSSF archive of most capped players and highest goalscorers]
*[http://www.rsssf.com/miscellaneous/port-coach-triv.html RSSSF archive of coaches 1921-]
*[http://thestar.com.my/sports/story.asp?file=/2008/5/22/sports/21322719&sec=sports Portugal international players]
*[http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp Portugal international players] {{Webarchive|url=https://web.archive.org/web/20081024163041/http://infordesporto.sapo.pt/Comunidades/SeleccaoNacional/seleccaonacional_internacionalizacoes.asp |date=2008-10-24 }} {{pt icon}}
*{{twitter|@selecaoportugal}}
{{მერკე}}
[[კატეგორია:ევროპაშ ერუანული ოკუჩხბურთე ნაკორობეფი]]
[[კატეგორია:პორტუგალიაშ კუჩხბურთი]]
5hl8cbhfldtmrezkqbhh29a9j98b6fn
აფხაზეფი
0
22227
240048
236075
2025-06-09T00:35:49Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240048
wikitext
text/x-wiki
[[ფაილი:Abchaz people ka.svg|{{ფაქტი|აფხაზური მახორობა [[კავკაცია|კავკაციაშ]] რეგიონიშ ქიანეფს (2003)}}|მინიატიურა|250პქ]]
'''აფხაზეფი''' ({{lang-ab|аҧсуаа}}, ''აფსუა'') — ოორუე-ბჟადალ [[საქორთუო]]ს, [[აფხაზეთი]]შ ისტორიულ რეგიონს მახორუ აბორიგენული მახორობა. რაგადანა [[აფხაზური ნინა|აფხაზურ ნინაშა]]. [[1989]] წანაშ ეჭარუათ, [[საქორთუო]]ს 95,9 ვითოში აფხაზი ოხორანდჷ, [[აფხაზეთიშ ავტონომიური სხუნუეფიშ სოციალისტური რესპუბლიკა|აფხაზეთის ასსრ]]-ს — 93,3 ვითოში, ედომუშამო [[სხუნუეფიშ რსხუ]]ს - 105 ვითოში.
აფხაზეფი ეთნიკურო ომოჯგირჷნა [[ოორუე კავკაცია|ოორუეკავკაციური]] წჷმოულობაშ ადიღეფს დო [[უბიხეფი|უბიხეფს]]. თეშ მოხ, აფხაზეფს კულტურულ დო საჸოფარინე მუშობურობეფს უმოსი საართო უღჷნა [[ქორთუეფი|ქორთუეფწკჷმა]]. თინეფწკჷმა ოშწანურეფიშ გოძვენას ართობურ წორორინაქ დო მეჭედელ ურთიართობაქ გოლინა იღვენუ მუჭოთ [[აფხაზური ნინა|ნინაშა]], თეშ აფხაზეფიშ [[ანთროპოლოგია]]შა ხოლო.
== ლიტერატურა ==
* მარიამ ლორთქიფანიძე, აფხაზები და აფხაზეთი, [[თბილისი]], [[1990]]
* გერონტი გასვიანი, აფხაზეთი: ძველი და ახალი აფხაზები, [[თბილისი]], [[1998]]
* გერონტი გასვიანი, ქართველი მეცნიერები პავლე ინგოროყვას შეხედულებებზე აფხაზეთისა და აფხაზების შესახებ, ივ. ჯავახიშვილის სახ. ისტ. და ეთნოლოგ. ინ-ტი, სულხან-საბა ორბელიანის პედაგოგ უნ-ტი, [[თბილისი]], [[2003]]
* ეთნოსები საქართველოში, აფხაზები, სტატიის ავტორი გ. ანჩაბაძე, [[თბილისი]], ( სტატია „აფსუა“)
* როლანდ თოფჩიშვილი, კავკასიის ხალხთა ეთნოგრაფია ეთნიკური ისტორია, ეთნიკური კულტურა, აფხაზები, [[თბილისი]], [[2007]]
* კახა კვაშილავა, ისტორიული სამურზაყანო (XVII-XVIII სს. მიჯნა – 1840 წ.). საკვალიფიკაციო ნაშრომი ისტორიის დოქტორის /Ph.D/ აკადემიური ხარისხის მოსაპოვებლად, [[თბილისი]], [[2009]]
* ნუგზარ ანთელავა , აფხაზური მითები , რიტუალები , სიმბოლოები .( სტატია „აფსუა“) გვერდი 80 - 81 [[თბილისი]],[[2006]]
* {{ru icon}} Ш. Нал-Ипа, Апхазы, [[სოხუმი|Сухуми]], [[1960]]
* {{ru icon}} З. В. Анчабадзе, Очерк энической истории абхазкого народа, [[სოხუმი|Сухуми]], [[1976]]
* {{ru icon}} И. Г. Антелава. Очерки истории Абхазии XVII – XVIII вв., [[სოხუმი|Сухуми]], [[1951]]
== რესურსეფი ინტერნეტის ==
* [http://www.qwelly.com/group/ebooks/forum/topics/afxazebi მ. ლორთქიფანიძე, აფხაზეფი დო აფხაზეთი, ქართი, 1990]
* [http://www.nplg.gov.ge/dlibrary/collect/0001/000725/00-Tituli.pdf ეთნოსეფი საქორთუოს, აფხაზეფი, სტატიაშ ავტორი გ. ანჩაბაძე, ქართი, 2008] {{Webarchive|url=https://web.archive.org/web/20120128210231/http://www.nplg.gov.ge/dlibrary/collect/0001/000725/00-Tituli.pdf |date=2012-01-28 }}
* [http://www.nplg.gov.ge/dlibrary/collect/0001/000273/kavkaciic%20xalx.pdf როლანდ თოფჩიშვილი, კავკაციაშ კათეფიშ ეთნოგრაფია ეთნიკური ისტორია, ეთნიკური კულტურა, აფხაზეფი, ქართი, 2007, ხს. 213]{{Dead link|date=September 2023 |bot=InternetArchiveBot |fix-attempted=yes }}
* [http://abkhazia.gov.ge/?lg=1&EM=&defmenuid=tm00201&sitedoc=13 აფხაზეთიშ ავტონომიური რესპუბლიკაშ თარობა, ოფიციალური საიტი, ისტორია]
* [http://geogen.ge/index.php?id_menu_up=4&lang=&id_menu=23&abc=0 ქორთული გენეალოგია, აფხაზეფი] {{Webarchive|url=https://web.archive.org/web/20160306032902/http://geogen.ge/index.php?abc=0&id_menu=23&id_menu_up=4&lang= |date=2016-03-06 }}
* [http://www.scribd.com/doc/2273647/Conflict-in-Abkhazia-Cases-of-Cooperation-in-Favour-of-Caucasus-or-again-Confederation-of-Caucasus პროფ. ტარიელ ფუტკარაძე: კონფლიქტი აფხაზეთის, მუჭო იხორციელებუდჷ „წორომალობა კავკაციაშ საჯგიროთ“ დო კინ კავკაციაშ ფედერაცია?!]
* [http://www.presa.ge/new/?m=news&NID=3495 ბათუმს აფხაზეფიშ მაართა ფორუმქ გინწყუ 26.12.2010 // Presa.ge] {{Webarchive|url=https://web.archive.org/web/20150930063136/http://www.presa.ge/new/?m=news&NID=3495 |date=2015-09-30 }}
* [http://nobility.pro/ge/statia/120-anchabadzeta-gvaris-istoria ანჩაბაძეფიშ გვარიშ ისტორია]{{Dead link|date=February 2025 |bot=InternetArchiveBot |fix-attempted=yes }}
{{გიშნაგორა}}
[[კატეგორია:მოსოფელიშ კათეფი]]
[[კატეგორია:კავკაციაშ კათეფი]]
[[კატეგორია:აფხაზეფი]]
hd6jsv0ggw9la4n1os3y76v256ikyaa
ოსმალეთიშ იმპერია
0
22802
240060
218235
2025-06-09T06:39:54Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240060
wikitext
text/x-wiki
{{ინფოდაფა ჸოფილი ქიანა
|ჯოხო =ოსმალეთიშ იმპერია
|ოდაბადური ჯოხო ={{lang-ota|„دَوْلَتِ عَلِيّهٔ عُثمَانِیّهί“}}<br />{{lang-tr|Osmanlı İmparatorluğu}}
|სტატუსი =[[იმპერია]]
|ჰიმნი =[[ოსმალეთიშ იმპერიაშ ჰიმნი]]
|შილა =Flag of the Ottoman Empire (Thicker Crescent).svg
|შილაშ ეჭარუა =[[ოსმალეთიშ იმპერიაშ შილა|შილა]]
|გერბი =Osmanli-nisani.svg
|გერბიშ ეჭარუა =[[ოსმალეთიშ იმპერიაშ გერბი|გერბი]]
|რუკა =OttomanEmpireIn1683.png
|ეჭარუა = ოსმალეთიშ იმპერია 1683
|p1 =
|flag_p1 =
|p2 =
|flag_p2 =
|p3 =
|flag_p3 =
|p4 =
|flag_p4 =
|დორსხუაფილი რე =1299
|ლიკვიდირაფილი რე =1922
|s1 =
|flag_s1 =
|s2 =
|flag_s2 =
|s3 =
|flag_s3 =
|s4 =
|flag_s4 =
|დევიზი =دولت ابد مدت<br />დევლეთ-ი ებედ-მიუდდეთ<ref>{{cite web|url=http://www.newworldencyclopedia.org/entry/Ottoman_Empire|title=Ottoman Empire general information|date=2014-07-30}}</ref><br />„იროიანი სახენწჷფო”
|ნანანოღა =[[სოღუთი]] ([[1299]]-[[1326]])<br />[[ბურსა (ნოღა)|ბურსა]] ([[1326]]-[[1365]])<br />[[ედირნე (ნოღა)|ედირნე]]<ref>„1363 წანას ოსმალეთიშ ნანანოღაქ გჷნოღალირქ იჸუ ბურსაშე ედირნეშა, თეშ უკუჯინალო, ბურსაქ ქისქილიდჷ შურიელი დო ეკონომიკური შანულობა.“[http://www.kultur.gov.tr/–EN,33810/ottoman-capital-bursa.html ''ოსმალეთიშ ნანანოღა ბურსა'']. თურქეთიშ რესპუბლიკაშ კულტურაშ დო ტურიზმიშ სამინისტროშ ოფიციალური საიტი. Retrieved 26 June 2013.</ref> ([[1365]]-[[1453]])<br />[[კონსტანტინოპოლი]]<ref>[http://www.ambioni.ge/stamboli დაპყრობამდე თურქები ქალაქს სტამბოლს უწოდებედნენ. სახელი წარმოიშვა ბერძნული ფრაზიდან (ისტიმ ბოლინ), ეგურ დიალექტზე (ისტამ ბოლინ), რაც ნიშნავს „ქალაქში“, „ქალაქისკენ“, ან „ქალაქის ცენტრში“, მორო ოფიციალურად სახელი „ქუსტანტანია“ გამოიყენებოდა, რაც არაბულად „კონსტანტინეს ქალაქს“ ნიშნავს. ქალაქს ოფიციალურად სტამბოლი მხოლოდ 1930 წლის 28 მარტს ეწოდა.]</ref>([[1453]]-[[1922]])
|ნოღეფი =
|ნინა =[[ოსმალეფიშ თურქული ნინა|ოსმალური]], [[ქორთული ნინა|ქორთული]], [[სპარსული ნინა|სპარსული]], [[ბოსნიური ნინა|ბოსნიური]], [[ურიული ნინა|ურიული]] [[ოსმალეთიშ იმპერიაშ ნინეფი|დო შხვა]]
|რელიგია =[[სუნიზმი|ისლამი: სუნიზმი]]
|ვალუტა =[[აკჩე]], [[პარა (ვალუტა)|პარა]], [[სულთანი (ვალუტა)|სულთანი]], [[ქურუში]], [[ლირა (ოტომანეფიშ ვალუტა)|ლირა]]
|გეძინელი პარამეტრი =
|პარამეტრიშ შქაგური =
|ფართობი =
|მახორობა =
|დუდალაშ ფორმა =[[აბსოლუტური მონარქია]]<br />(1299–1876)<br />(1878–1908)<br />(1920–1922)<br />[[კონსტიტუციური მონარქია]]<br />(1876–1878)<br />(1908–1920)
|დინასტია =
|მადუდეშ ტიტული = [[ოსმალეთიშ სულთანეფიშ ერკებული|სულთანი]]
|მადუდე1 = [[ოსმან I]] <small>(მაართა)</small>
|მადუდე1 წანა = 1299–1326
|მადუდეშ ტიტული2 = <!--გჷმორინაფა მადუდეშ ტიტულიშ თირუაშ შვანს-->
|მადუდე2 = [[მეჰმედ VI]] <small>(ეკონია)</small>
|მადუდე2 წანა = 1918–1922
|მადუდეშ ტიტული3 =
|მადუდე3 =
|მადუდე3 წანა =
|მადუდეშ ტიტული4 =
|მადუდე4 =
|მადუდე4 წანა =
|მადუდეშ ტიტული5 =
|მადუდე5 =
|მადუდე5 წანა =
|მადუდეშ ტიტული6 =
|მადუდე6 =
|მადუდე6 წანა =
|გეძინელი პარამეტრი1 =
|პარამეტრიშ შქაგური1 =
|ეტაპი1 =
|თარიღი1 =
|წანა1 =
|ეტაპი2 =
|თარიღი2 =
|წანა2 =
|ეტაპი3 =
|თარიღი3 =
|წანა3 =
|ეტაპი4 =
|თარიღი4 =
|წანა4 =
|ეტაპი5 =
|თარიღი5 =
|წანა5 =
|ეტაპი6 =
|თარიღი6 =
|წანა6 =
|გეძინელი პარამეტრი2 =
|პარამეტრიშ შქაგური2 =
|წოხოლენი =
|წიმოხონი1 =
|წიმოხონი2 =
|წიმოხონი3 =
|წიმოხონი4 =
|წიმოხონი5 =
|წიმოხონი6 =
|წიმოხონი7 =
|გეჸვენჯი =
|მონძე1 =
|მონძე2 =
|მონძე3 =
|მონძე4 =
|მონძე5 =
|მონძე6 =
|მონძე7 =
|მონძე8 =
|მონძე9 =
|მონძე10 =
|მონძე11 =
|მონძე12 =
|მონძე13 =
|მონძე14 =
|მონძე15 =
|სქოლიო =
}}
'''ოსმალეთიშ იმპერია''' ({{lang-ota|„دَوْلَتِ عَلِيّهٔ عُثمَانِیّهί“}}, ''Devlet-i Âliye-i Osmâniyye''; {{lang-tr|Osmanlı İmparatorluğu}}), თაშნეშე ისტორიულო მიშინუაფუდჷ, მუჭოთ '''თურქეთიშ იმპერია''' ვარდა '''თურქეთი''' — [[სუნიზმი|სუნიტურ-ისლამური]] სახენწჷფო, დირსხუ ოღუზი თურქეფიშით [[ოსმან I]]-აშ დუდალათ ოორუე-ბჟადალ [[ანატოლია]]ს, [[1299]] წანას.<ref>{{cite web
|url=http://www.britannica.com/EBchecked/topic/434996/Ottoman-Empire |title=Ottoman Empire |publisher=Britannica Online Encyclopedia
|accessdate=11 February 2013}}</ref> [[მურად I]]-აშით [[ბალკანეთიშ ჩქონი|ბალკანეთის]] წარმაფილი დოჸუნაფონი ლჷმეფიშ დო [[მეჰმედ II]]-შით [[კონსტანტინოპოლი]]შ ხეშა ეშაჸოთამაშ შედეგო ოსმალეთიშ სასულთანოქ იმპერიათ გეგმიქიმინჷ.<ref>The A to Z of the Ottoman Empire, by Selcuk Aksin Somel,
2010, p.179</ref><ref>The Ottoman Empire, 1700–1922, Donald Quataert,
2005, p.4</ref><ref>The Grove Encyclopedia of Islamic Art and Architecture: Delhi to Mosque, Jonathan M. Bloom, Sheila Blair,
2009. p.82</ref>
[[XVI ოშწანურა|XVI]]-[[XVII ოშწანურა|XVII]] ოშწანურეფს, მუში სინძალიერეშ კონკას, სულთან [[სულეიმან I|სულეიმან კანონმადვალუშ]] მართუალაშ ბორჯის, ოსმალეთიშ იმპერია რდჷ ჭყანიერი მიარეეთნიკური დო მიარენინამი იმპერია, ნამუთ აკონტროლენდჷ [[ობჟათე-ბჟაეიოლი ევროპა|ობჟათე-ბჟაეიოლ ევროპაშ]], [[ბჟადალი აზია|ბჟადალ აზიაშ]], [[კავკაცია|კავკაციაშ]], [[ოორუე აფრიკა|ოორუე აფრიკაშ]] დო [[სომალიშ ჩქონი]]შ უმენტაშ ნორთის.<ref>{{cite web|url=http://www.oxfordislamicstudies.com/article/opr/t125/e1801?_hi=41&_pos=3 |title=Ottoman Empire |publisher=Oxford Islamic Studies Online |date=6 May 2008 |accessdate=26 August 2010}}</ref> [[XVII ოშწანურა|XVII ოშწანურაშ]] დაჭყაფუს, იმპერია იკათუანდჷ 32 პროვინციას დო მიარე ვასალურ სახენწჷფოს. თინეფშე კანკალექ მოგვიანაფათ იმპერიაშ აკოდგინალუაშა გემშართჷ, დოსქილადირეფქ ოშწანურეფიშ მალობაშ ბორჯის შხვადოშხვა სახეშ ავტონომია მიღეს.
== რესურსეფი ინტერნეტის ==
* [http://courses.washington.edu/otap/ ოსმალეფიშ ტექსტეფიშ პროექტი - ვაშინგტონიშ უნივერსიტეტი]
* [http://www.oxfordislamicstudies.com/article/opr/t125/e1801?_hi=0&_pos=3 ოსმალეთიშ იმპერია ოქსფორდიშ ისლამიშ ლექსიკონს] {{Webarchive|url=https://web.archive.org/web/20101206170311/http://www.oxfordislamicstudies.com/article/opr/t125/e1801?_hi=0&_pos=3 |date=2010-12-06 }}
* [http://www.umich.edu/~turkish/ottemp.html ოსმალეთიშ იმპერია: - მიჩიგანიშ უნივერსიტეტი]
* [http://www.turizm.net/turkey/history/ottoman.html ოსმალეთიშ იმპერია: ქრონოლოგირი მუნაჩემეფი]
* [http://www.wsu.edu/~dee/OTTOMAN/OTTOMAN1.HTM მოსოფელიშ ცივილიზაცია: ოსმალეფი] {{Webarchive|url=https://web.archive.org/web/19991008042702/http://www.wsu.edu/~dee/OTTOMAN/OTTOMAN1.HTM |date=1999-10-08 }}
* [http://aton.ttu.edu Turkish Oral Narrative]
* [http://www.ottomanliterature.com/ ოსმალეფიშ თურქული ლიტერატურაშ ინტერნეტ ბიბლიოგრაფია] ჟირნინამი (თურქულ, ინგლისური) საიტი.
* [http://www.theottomans.org ინფორმაცია ოსმალეფიშ გეშა]
* [http://www.unm.edu/~phooper/thesis_condensed.pdf აძვილებითი გჷნოხორინეფი ოსმალეთიშ იმპერია ორდოშიან ხანს] 1300–1600 წანეფი
* [http://muze.sabanciuniv.edu/collection/collection.php?lngCollectionID=11&bytLanguageID=2 ოსმალეფიშ კალიგრაფიაშ კოლექცია] {{Webarchive|url=https://web.archive.org/web/20080423225331/http://muze.sabanciuniv.edu/collection/collection.php?lngCollectionID=11&bytLanguageID=2 |date=2008-04-23 }}
* [http://ottomanblog.wordpress.com ოსმალეფიშ ისტორიაშ ბლოგი]
* [http://www.turkeyswar.com თურქეთი მაართა მოსოფელიშ ლჷმას]
* [http://www.ottomanpalestine.com პალესტინა ოსმალეფიშ მართუალაშ გიმე]
* [http://www.karalahana.com/fotograflar/thumbnails.php?album=35 ოსმალეთიშ იმპერიაშ გრავიურეფი - HQ ხარისხიშ სურათეფიშ გალერეა] {{Webarchive|url=https://web.archive.org/web/20111105010433/http://www.karalahana.com/fotograflar/thumbnails.php?album=35 |date=2011-11-05 }}
* [http://www.dilbilimi.net/osmanli_arastirmalari.htm ოსმალეფიშ რკუალაშ რესურსეფი ინტერნეტის]
== სქოლიო ==
{{სქოლიო}}
{{მერკე}}
{{იმპერიეფი}}
[[კატეგორია:ისტორიული სახენწჷფოეფი]]
[[კატეგორია:თურქეთიხ ისტორია]]
[[კატეგორია:არხო ბჟაეიოლიშ ისტორია]]
[[კატეგორია:ოსმალეთიშ იმპერია]]
[[კატეგორია:ჸოფილი იმპერიეფი]]
9u3nhxpnrug7fifot00wwpbmqzl3b8j
ბურეფი
0
24693
240053
206623
2025-06-09T01:49:01Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240053
wikitext
text/x-wiki
[[ფაილი:Boerfamily1886.jpg|მინი|ბურეფიშ ფანია, 1886]]
'''ბურეფი''', თაშნეშე ჩინებული მუჭოთ '''აფრიკანარეფი''' — [[ჰოლანდიარეფი|ჰოლანდიარი]] გინოხორაფილეფიშ გამნარყეფი [[ობჟათე აფრიკა]]ს. ჯვეშჰოლანდიურ ნინაშა ზიტყვა ''ბურ'' შანენდჷ ყაზახის. ბურეფიშ ნინას ჯოხო [[აფრიკაანსი]]. <ref name="burskrug"> [http://www.krugosvet.ru/enc/istoriya/BURI.html ენციკლოპედია "მოსოფელიშელახ"], ბურეფი,<small> გჷნიმორსჷ 2010 წანაშ 14 გჷმათუთას.</small></ref>
[[XVII ოშწანურა]]ს, ჰოლანდიურ ოსტ-ინდურ კომპანიაქ დიჭყჷ [[კეთილი იმენდიშ კოდმე]]შ გჷმორინაფა ოჭკომალიშ დო წყარიშ ხაზირეფიშ გაფშაფალო ბჟაეიოლშე შარალუაშ ბორჯის. [[1652]] წანას, კომპანიაშ 60 მოხელექ [[იან ვან რიბეკი]]შ დუდალათ ქჷდარსხუეს მაართა ჰოლანდიური ოხორუე. გინოხორაფილეფს შქას ჩინებული პიჯი რდჷ საიმონ ვან დერ სტელი, სტელენბოშიშ დჷმარსხუაფალი. [[XVII ოშწანურა]]შ ბოლოს, [[ლუი XIV (საფრანგეთი)|ლუდოვიკო XIV]]-იშით [[ნანტიშ ედიქტი]]შ გოუქვაფაშ უკული აფრიკაშ ობჟათეშე დუდმიოფორუ ქოძირეს ფრანგი ჰუგენოტეფიშ ფანიეფქ. ჰოლანდიარეფს დო ფრანგეფს შქას მოხვალამირი დაკეფიშ გეშა ჰოლანდიურ ოსტ-ინდურ კომპანიაქ გოხურგუ იმიგრაცია.
[[XVIII ოშწანურა]]ს, ოორუეშე ბურეფქ მიოჭირინეს წყარმალუ [[ორანჟი]]ს. თე წყარმალუშ წყარპიჯის ბურეფს ქჷდოხვადჷ ბანტუნინამ მახორობაქ, ნამუეფქჷთ ბურეფს ოურდუმე აწმარენჯობა გუწიეს.
[[საქორთუო]]შ სახენწჷფო მინისტრი დიასპორეფიშ ოკითხირეფს, მირზა (პაპუნა) დავითაიაქ აფრიკას ვიზიტით რინაშ ბორჯის, ბურ ფერმერეფწკჷმა გოფორმაფილი მემორანდუმი ქჷმიღჷ.<ref>[http://www.youtube.com/watch?v=RWuCiTpC00w ტელეკომპანია რუსთავი 2], "პოსტ-სკრიპტუმი". </ref> მემორანდუმიშ არძაშე შანულამი ბირგული რე მერძიაფა, ნამუთ ოხუ ბური ფერმერეფიშ ბიზნესიშ გინოღალას [[საქორთუო]]შა. 40 000 ბური ფერმერიშ ჯოხოთ [[საქორთუო]]შა ქჷმორთჷ ბურ ფერმერეფიშ დელეგაციაქ, ნამუსჷთ [[საქორთუო]]შ პოლიციაშ ეფექტურალა პიჯულო დინოხოლენ საქვარეფიშ მინისტრიქ გაჩინებაფუ. ბური ფერმერეფიშ შილებუამი საქორთუოს დოხორაფაქ გჷმიჭანუ სერიოზული დება ქორთულ ჯარალუას<ref>[http://www.newsgeorgia.ru/politics/20101014/213543306.html Грузинские лейбористы не хотят "переселения в Грузию южно-африканских буров"] {{Webarchive|url=https://web.archive.org/web/20101016100749/http://www.newsgeorgia.ru/politics/20101014/213543306.html |date=2010-10-16 }}; newsgeorgia.ru.</ref>დო ინტერნეტ ოფირჩას.
== თაშნეშე ქოძირით ==
* [[აფრიკანარეფი]]
== სქოლიო ==
{{სქოლიო}}
== რესურსეფი ინტერნეტის ==
* [http://www.presa.ge/new/?m=news&NID=5404 BBC - საქორთუოშა მულაქ ბურეფს იმენდეფქ ვაგუმართჷ // Presa.ge, 03.03.2011] {{Webarchive|url=https://web.archive.org/web/20151018041345/http://www.presa.ge/new/?m=news&NID=5404 |date=2015-10-18 }}
[[კატეგორია:აფრიკაშ კათეფი]]
[[კატეგორია:მოსოფელიშ კათეფი]]
46ft69eotldym8g8ojlwwmm70l41up0
ჰოკაიდოშ პრეფექტურა
0
25111
240065
127033
2025-06-09T10:37:57Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240065
wikitext
text/x-wiki
{{ინფოდაფა ადმინისტრაციული ართული
|ოდაბადური ჯოხო = {{lang-ja|北海道}}
|მარგალური ჯოხო = ჰოკაიდოშ პრეფექტურა
|პანორამა = Large map of Hokkaido within Japan.png
|შილა = Flag of Hokkaido Prefecture.svg
|გერბი = Emblem of Hokkaido Prefecture.svg
|ქიანა = იაპონია
|ჰიმნი =
|სტატუსი =პრეფექტურა
|მიშმურს = ჰოკაიდოშ რეგიონშა
|ფორჷნს = კოკი [[ჰოკაიდო]]ს
|ნანანოღა= [[საპორო]]
|შხუ ნოღა =
|შხუ ნოღეფი=
|თარიღი =
|მადუდე =გუბერნატორი
|მადუდე 2 =
|ედპ =
|ედპ წანა=
|ედპ აბანი =
|ედპ აშმ =
|ნინა =
|ნინეფი =
|მახორობა =5 520 883
|ეჭარუაშ წანა =2010
|აბანი მახორობათ =7
|ერუანული აკოდგინალუა =
|მეჭედალა =66,2
|კონფესია =
|ფართობი =83 456,64
|აბანი ფართობით =1
|ფართობიშ პროცენტი = 22%
|მაქსიმალური სიმაღალა =
|ოშქაშე სიმაღალა =
|მინიმალური სიმაღალა =
|განედი =
|გრძედი =
|რუკა= Map of Japan with highlight on 02edit Hokkaido prefecture.svg
|ბორჯიშ ორტყაფუ=
|აბრევიატურა =
|ISO = JP-01
|FIPS=
|ოტელეფონე კოდი =
|ოფოსტე ინდექსეფი =
|ინტერნეტ-დომენი =
|ოავტომობილე ონომერე შანეფი =
|საიტი =http://www.pref.hokkaido.lg.jp/
|კატეგორია ვიკიოწკარუეს =
|პარამეტრი1 =
|მიკოღანკუა =
{{coord|43|4|N|141|54|E|type:adm1st_region:JP_scale:500000}}
}}
{{nihongo|'''ჰოკაიდო'''|北海道|ჰოკაიდო:|}} — [[იაპონია]]შ [[იაპონიაშ პრეფექტურეფი|პრეფექტურა]], იდვალუაფუ კინ თე ჯოხოშ კოკი [[ჰოკაიდო]]ს, იაპონიაშ სიდიდაშ მეჯინათ მაჟირა კოკი, თაშნეშე მორჩილი არხოს მადვალუ კოკეფს შქას. 47 პრეფექტურაშე არძაშე ოორუეშე მადვალუ. [[სანგარიშ საროტი|ცუგარუშ საროტი]] ჰოკაიდოს გიშმართუნს [[ჰონსიუ]]შე, მორო თე ჟირი კოკი ართიანშა რე მერსხილი რკინაშარაშ [[სეიკენი|სეიკენიშ გვირაბით]]. პრეფექტურაშ ადმინისტრაციული ცენტრი — ნოღა [[საპორო]].
== რესურსეფი ინტერნეტის ==
* [http://www.pref.hokkaido.lg.jp/foreign/russian.htm ოფიციალური ხასჷლა]
* [http://www.pref-hokkaido.ru/ ჰოკაიდოშ პრეფექტურაშ წჷმმარინალობა სახალინს] {{Webarchive|url=https://web.archive.org/web/20170516091847/http://pref-hokkaido.ru/ |date=2017-05-16 }}
{{მერკე-იაპონია}}
[[კატეგორია:ჰოკაიდოშ პრეფექტურა|*]]
[[კატეგორია:იაპონიაშ პრეფექტურეფი]]
0tpk74xnnyp0wajsuxbn3p98iyerr68
ბაღანა
0
26557
240049
227888
2025-06-09T00:49:56Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240049
wikitext
text/x-wiki
[[ფაილი:Children in a Primary Education School.JPG|მინი]]
'''ბაღანა''' — [[ადამიერი]]შ რინაშ თი პერიოდი, მუჟამსჷთ თინა [[ჩქჷჩქი]] ვარენ დო ძინაშ თება დიო ვაუთებუნ. ადამიერიშ ბაღანობა თის დოჸუნს, თუ ნამ ჯარალუას ოხორანს თინან. [[გოერო]]შ ადამიერიშ ნებეფიშ თხილუაშ კომისია 18 წანაშახ ხანიშ ადამიერს ბაღანათ კოროცხუნს.
== თაშნეშე ქოძირით ==
*[[ართი ბაღანაშ პოლიტიკა]]
*[[გოეროშ ბაღანეფიშ ფონდი]]
== რესურსეფი ინტერნეტის ==
{{Commons category|Children}}
* [http://www.wikiprogress.org/index.php/Child_well-being Child well-being on wikiprogress.org] {{Webarchive|url=https://web.archive.org/web/20110729011047/http://www.wikiprogress.org/index.php/Child_well-being |date=2011-07-29 }}
* [http://www.unicef.org United Nations Children's Fund (UNICEF)]
* [http://www.oecd.org/social/family/database Family database, OECD]
* [http://www.theguardian.com/society/children Society (The Guardian)]
{{მერკე}}
[[კატეგორია:ადამიერი]]
tn6hbv6sjglv2wxc0o9mitkq6gdennn
ბოისე
0
29795
240051
206556
2025-06-09T01:26:05Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240051
wikitext
text/x-wiki
{{ინფოდაფა დოხორინი
|სტატუსი = ნოღა
|მარგალური ჯოხო = ბოისე
|ოდაბადური ჯოხო =Boise
|ქიანა = ააშ
|დუდალაშ თუდო =
|პანორამა =Clearwater Analytics Boise.jpg
|პანორამაშ სიგანა =
|მუკნაჭარა =
|შილა = Flag of Boise, Idaho.svg
|შილმუკნაჭ =
|გერბი =Boise Idaho City Seal.PNG
|გერბმუკნაჭ =
|გერბიშ სიგანა =
|შილაშ სიგანა =
|ჩარჩო =
|ქიანაშ რუკა2 =
|ქიანაშ რუკაშ ზჷმა2 =
|მუკნაჭარა2=
|lat_dir =N |lat_deg =43 |lat_min =37 |lat_sec =
|lon_dir =W |lon_deg =116 |lon_min =12 |lon_sec =
|CoordAddon = type:city(40361)_region:US-ID
|CoordScale =
|ქიანაშ რუკაშ ზჷმა =
|ქიანაშ რუკა=
|რეგიონიშ რუკაშ ზჷმა =
|რეგიონიშ რუკა=
|რაიონიშ რუკაშ ზჷმა =
|რეგიონიშ ტიპი = ააშ-იშ ადმინისტრაციული დორთუალა{{!}}შტატი
|რეგიონი = აიდაჰო
|რეგიონი ცხირს =
|დინოხოლენი დორთუალა =
|რაიონიშ ტიპი =
|რაიონი =
|მადუდეშ ტიპი = ნოღაშ მერი{{!}}მერი
|მადუდე = დეივ ბიტერი
|დორსხუაფაშ თარიღი = 1863
|მაართა შინუა =
|წოხოლენი ჯოხოეფი =
|სტატუსი-შე =
|ფართობი = 165,8
|სიმაღალაშ ტიპი=
|დოხორინიშ ცენტრიშ სიმაღალა=830
|კლიმატი=
|ოფიციალური ნინა=
|მახორობა = 226,570
|ეჭარუაშ წანა = 2017
|მეჭედალა = 1,049.64
|აგლომერაცია = 709,845
|ერუანული აკოდგინალუა =
|ორწუმობური აკოდგინალუა =
|ეთნოქორონიმი =
|ბორჯიშ ორტყაფუ =-7
|DST =ქო
|ოტელეფონე კოდი = +1 208 / 986
|ოფოსტე ინდექსი = 83701–83799
|ოავტომობილე კოდი=
|საიტი = www.cityofboise.org
|კატეგორია ვიკიოწკარუეს =Boise, Idaho
|add1n=
|add1=
}}
'''ბოისე''' ({{lang-en|Boise}}) — [[ნოღა]] [[ააშ]]-ს. [[აიდაჰო]]შ შტატიშ [[ნანანოღა]] დო უდიდაში ნოღა.
ბოისე იდვალუაფუ აიდაჰოშ შტატიშ ობჟათე-ბჟადალშე, [[ზუღაშ დონე]]შე 820 მეტრის. ნოღაშ ფართობი რე 165,8 კმ², 0,5 კმ² — წყარს უკებჷ.
== უდიდაში დჷმასარჯებელი ==
ბოისეშ ირწანური ფინანსური რეპორტიშ მეჯინათ, [[2011]] წანას, ნოღაშ უშხუაში დჷმასარჯებელეფი რდეს:
{| class="wikitable"
|-
! #
! დჷმასარჯებელეფი
! დასარჯებულეფი
|-
|1
| [[აიდაჰო|აიდაჰოშ შტატი]]
|14,300
|-
|2
| წმ. ლუკაშ ჯოხოდვალაშ სინთელუანობაშ სისტემა
|8,000
|-
|3
| [[უოლ-მარტი]]
|7,136
|-
|4
| [[Micron Technology]]
|5,000
|-
|5
| [[Simplot]]
|3,400
|}
== პანორამეფი ==
{{wide image|Boise Panorama from Camelsback Park.jpg|900px|<center>ბოისე, ქამელსბაქიშ პარკიშე.}}
{{wide image|Boise Aspen.jpg|800px|<center>ბოისეშ ბიზნეს ცენტრი.}}
== ლიტერატურა ==
* {{Cite book|author=MacGibbon, Elma|title=Leaves of knowledge|publisher=Shaw & Borden Co|year=1904}}
== რესურსეფი ინტერნეტის ==
{{Commons|Boise|Boise}}
* {{official website|http://www.cityofboise.org/}}
* [http://www.boise.org/ Boise Convention and Visitors Bureau]
* [http://www.boisechamber.org/ Boise Area Chamber of Commerce]
* [http://web1.boisestate.edu/research/history/teachingidaho/boise/Visions2050.pdf Boise, the City of Trees] {{Webarchive|url=https://web.archive.org/web/20140629094055/http://web1.boisestate.edu/research/history/teachingidaho/boise/Visions2050.pdf |date=2014-06-29 }}
* [http://www.boiseartsandhistory.org/ Boise City Department of Arts & History]
* [http://www.boiseschools.org/ Boise School District]
* [http://issuu.com/uidahodigital/docs/gem1933/349 University of Idaho yearbook, 1933] {{Webarchive|url=https://web.archive.org/web/20150925152946/http://issuu.com/uidahodigital/docs/gem1933/349 |date=2015-09-25 }}
== სქოლიო ==
{{სქოლიო}}
{{მერკე-ააშ}}
{{ააშ-იშ შტატეფიშ ნანანოღეფი}}
[[კატეგორია:ააშ-იშ შტატეფიშ ნანანოღეფი]]
[[კატეგორია:აიდაჰოშ ნოღეფი]]
[[კატეგორია:ააშ-იშ ნოღეფი]]
0d8tlrvtsb96h3hs2c7o8eb60axcj2e
აიბღა
0
31404
240046
206216
2025-06-08T23:51:12Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240046
wikitext
text/x-wiki
{{ინფოდაფა დოხორინი
|სტატუსი = ოფუტე
|მარგალური ჯოხო = აიბღა
|ოდაბადური ჯოხო ={{lang-ab|Аибӷа}}
|ქიანა = საქორთუო
|დუდალაშ თუდო =
|პანორამა =
|პანორამაშ სიგანა =
|მუკნაჭარა =
|შილა =
|შილმუკნაჭ =
|გერბი =
|გერბმუკნაჭ =
|გერბიშ სიგანა =
|შილაშ სიგანა =
|ჩარჩო =
|ქიანაშ რუკა2 =GEO-AB-GG.svg
|ქიანაშ რუკაშ ზჷმა2 =
|მუკნაჭარა2=
|lat_deg = 43 |lat_min = 34 |lat_sec = 18
|lon_deg = 40 |lon_min = 12 |lon_sec = 42
|CoordAddon = type:city(40361)_region:GE
|CoordScale =
|ქიანაშ რუკაშ ზჷმა =
|ქიანაშ რუკა=
|რეგიონიშ რუკაშ ზჷმა =
|რეგიონიშ რუკა=
|რაიონიშ რუკაშ ზჷმა =
|რეგიონიშ ტიპი = ავტონომიური რესპუბლიკა
|რეგიონი = აფხაზეთიშ არ
|რეგიონი ცხირს = აფხაზეთიშ არ
|დინოხოლენი დორთუალა =
|რაიონიშ ტიპი =მუნიციპალიტეტი
|რაიონი = გაგრაშ მუნიციპალიტეტი
|მადუდეშ ტიპი =
|მადუდე =
|დორსხუაფაშ თარიღი =
|მაართა შინუა =
|წოხოლენი ჯოხოეფი =
|სტატუსი-შე =
|ფართობი =
|სიმაღალაშ ტიპი=
|დოხორინიშ ცენტრიშ სიმაღალა=840
|კლიმატი=
|ოფიციალური ნინა=
|მახორობა =
|ეჭარუაშ წანა =
|მეჭედალა =
|აგლომერაცია =
|ერუანული აკოდგინალუა =
|ორწუმობური აკოდგინალუა =
|ეთნოქორონიმი =
|ბორჯიშ ორტყაფუ = +4
|DST =
|ოტელეფონე კოდი =
|ოფოსტე ინდექსი =
|ოავტომობილე კოდი=
|საიტი =
|კატეგორია ვიკიოწკარუეს =Aibgha (village)
|add1n=
|add1=
}}
'''აიბღა''' ({{lang-ab|Аибӷа}}) — ჟირო გორთილი [[ოფუტე]] [[საქორთუო]]შ [[აფხაზეთიშ ავტონომიური რესპუბლიკა|აფხაზეთიშ ავტონომიური რესპუბლიკაშ]] [[გაგრაშ მუნიციპალიტეტი|გაგრაშ მუნიციპალიტეტიშ]] დო [[რუსეთი|რუსეთიშ ფედერაციაშ]] [[კრასნოდარიშ აკანი|კრასნოდარიშ აკანიშ]] [[სოჭი|სოჭიშ რაიონს]].
== გეოგრაფია ==
ოფუტე აიბღა წყარმალუ [[ფსოუ]]შ ჟირხოლო წყარპიჯის დვალუაფჷ, [[ზუღაშ დონე]]შე 840 მ სიმაღალას დო სახენწჷფო ხურგით ჟირ ნორთო ირთჷ, მარძგვანი ნორთი [[რუსეთი|რუსეთის]] ორხველჷ, კვარჩხანი — [[საქორთუო]]ს.
== ოდებელი ტერიტორია ==
აიბღა ასეშა რუსეთ-საქორთუოშ ოდებელ ტერიტორიას წჷმარინუანს, მუშ ბორჯის ხურგიშ დელიმიტაციაშ რუსულ-ქორთული კომისიაშ ხუნას ოკითხირეთ რდჷ დოხუნელი წყარმალუ ფსოუშ კვარჩხანი წყარპიჯის მადვალი თე ოფუტეშ განობაშ რუსეთიშო მერხველაფაშ გეშა. თე ბორჯის ქორთულ კუნთხუქ გჷმირჩქინჷ კატეგორიული პოზიცია დო ოფუტეშ თე ნორთის კინ საქორთუოშ (აფხაზეთიშ) ნორთო მიარზენდჷ. საქორთუოშ თე პოზიციაშ გეშა აფხაზეთიშ დე-ფაქტო ადმინისტრაციაქ ვარაოფიციალური ფორმათ მარდი გჷნუგჷ ქორთულ კუნთხუს.
[[2011]] წანაშ მანგის, რუსეთიშ ფედერაციაშ ადლერის რაიონიშ სამართალმათხილეეფი ოფუტე აიბღას რდეს, თექ რუსული სამართალმათხილე დო ადმინისტრაციული სტრუქტურეფიშ დჷმაკვირაფალეფიშ ღანკით, კერზოთ, რუსეთიშ ფედერაციაშ ღანკი საქორთუოშ ტერიტორიას განობაშ ინსპექტორობაშ ინსტიტუტიშ მიშაღალა რე. ეშანილი ქიმინუა იფასებჷ, მუჭოთ ოერეფოშქაშე სამართალით ჩინებული საქორთუოშ სახენწჷფო ტერიტორიაშ ოკუპირაფილი ნორთიშ ბონი ანექსია. რუსეთიშ კუნთხუ თეს „სოჭიშ ოლიმპიადაშ უშქურანჯობაშ გამანგარებაშ“ სამანჯელით ეთმენწჷყუნდჷ. <ref>[http://armada.ge/?p=9361 სოფელი აიბღა რუსეთის აქილევსის ქუსლად უნდა იქცეს // armada.ge]{{Dead link|date=September 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
[[2011]] წანაშ გჷმათუთას, [[გაგრაშ მუნიციპალიტეტი]]შ დაბა [[განთიადი (დაბა)|განთიადის]] რუსი „მეხურგეეფშო“ აკოგაფილი ნოღაშ ექსპლუატაციაშა მიშულაშ ოხიოლე ცერემონიაქ იმანჯჷ. „ექსპერტეფიშ კლუბიშ“ წჷმმარინაფალეფიშ არზით რუსი „მეხურგეეფი“ აკოანჯარაფილი აფხაზი „პატრიოტეფიშჸურე“ ოფუტე აიბღაშ ოთხილარო ხაზირენეს.<ref>[http://pirweli.com.ge/index.php?option=com_content&task=view&id=79692&Itemid=1 "ექსპერტთა კლუბის" აზრით, რუსი "მესაზღვრეები" შეიარაღებული აფხაზი "პატრიოტების" მხრიდან სოფელ აიბღას დასაცავად ემზადებიან // Information Agency 'PirWeli']{{Dead link|date=September 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
ოურდუმე ხარხუაშ მოხ, რუსეთიშ ინტერესეფი ოფუტე აიბღას თით რე გოპიჯაფილი, ნამჷ-და თინა დინდარი რე ტყათ დო სარგებელი დინოხურიშით, კერზოთ, მარმალით.<ref>[http://pirweli.com.ge/index.php?option=com_content&task=view&id=80420&Itemid=1 აფხაზეთის, როგორც საკურორტო ზონის მიმართ რუსეთის ინტერესი სოჭის საკურორტო ზოლის მშენებლობასთან ერთად დასრულდება // Information Agency 'PirWeli']{{Dead link|date=September 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
== მახორობა ==
აფხაზეთიშ სეპარატისტული პარლამენტიშ „დეპუტატიშ“ ვალერი კვარჭიაშ გჷნაცხადით „ზარხულს ოფუტეს 26-შახ ადამიერი ოხორანს, ზოთონჯის — თექ მუსხირენი - არძაშე გურამი დო ჭყანიერი ადამიერი სქიდჷ“.<ref>[http://www.pirweli.com.ge/index.php?option=com_content&task=view&id=81809 რუსეთსა და აფხაზეთს შორის სადავო სოფელ აიგბას მოსახლეობა თვლის, რომ „ღმერთისა და ადამიანებისგან დავიწყებულია“ // Information Agency 'PirWeli']{{Dead link|date=September 2023 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
== რესურსეფი ინტერნეტის ==
* [http://presa.ge/new/?m=politics&AID=7527 ოფუტე აიბღა – რუსულ–აფხაზური „აკორთაშ უშქური“ // Presa.ge] {{Webarchive|url=https://web.archive.org/web/20211026115616/https://presa.ge/new/?m=politics&AID=7527 |date=2021-10-26 }}
* [http://www.youtube.com/watch?v=mrW-zmKhAg0 აიბღა. რუსულ-აფხაზური დებაშ გეშა] (ვიდეო)
== სქოლიო ==
{{სქოლიო}}
{{გაგრაშ მუნიციპალიტეტი}}
[[კატეგორია:გაგრაშ მუნიციპალიტეტიშ ნაოფუტარეფი]]
[[კატეგორია:ევროპაშ ოდებელი ტერიტორიეფი]]
mhjbc2s7hcefj2o0du75lr5irnjk7kp
კიმ ირ სენი
0
31556
240057
212495
2025-06-09T04:32:38Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240057
wikitext
text/x-wiki
{{კორეული ჯოხო|კიმი|ირ სენი}}
{{ინფოდაფა ლიდერი
| ჯოხო = კიმ ირ სენი<br>{{lang-ko|김일성}}
| სურათი= Kim Il-sung in 1950.jpg
| სურათიშ ზჷმა =250პქ
| მუკნაჭარა სურათიშ თუდო=
| ხეშმოჭარუა = Kim Il Sung Signature.svg
| რანწკი = [[ფაილი:Flag of North Korea.svg|25პქ]] [[ოორუე კორეა]]შ [[ოორუე კორეაშ იროიანი პრეზიდენტი|იორიანი პრეზიდენტი]] [[ფაილი:Coat of Arms of North Korea.svg|25პქ]]
| პოსტი დეკინჷ = [[5 ეკენია]], [[1998]]<ref>[[დე-ფაქტო]] კიმ ირ სენიშ არძა გოქუნელობაქ თიშ ღურაშ ბორჯის ითუ, 1994 წანაშ 8 კვირკვეს. [[დე-იურე]] თინა ხეშულობას რე 1972 წანაშ 28 ქირსეთუთაშე</ref>
| პოსტი დიტუ =~
| ვიცე-პრეზიდენტი =
| მონარქი =
| პრეზიდენტი =
| კანცლერი =
| პრემიერ-მინისტრი =
| დუდმახვენჯი=
| წიმოხონი=
| მონძე =
| დაბადებაშ თარიღი = {{დაბადებაშ თარიღი|15|4|1912}}
| დაბადებაშ აბანი= [[მანგიონდე|მანქეიდაი]], [[ფხენიან-ნამდო|ჰეიან-ნანდო]], {{s|[[კორეა იაპონაიშ მართუალაშ გიმე|კორეაშ გენერალ-ოგუბერნატორე]],}} <br> [[იაპონაიშ იმპერია]]
| ღურაშ თარიღი = {{ღურაშ თარიღი დო ხანი|1994|7|8|1912|4|15}}
| ღურაშ აბანი=[[ფხენიანი]], [[ოორუე კორეა]]
| ღურაშ ბაძაძი =
| ნთხორუ აბანი =[[კიმსუსანიშ ბჟაშ მემორიალური დოხორე]]
| მენოღალობა =
| ერუანობა =[[კორეალეფი|კორეალი]]
| ოგიშაგორაშე ოლქი =
| მუმა =[[კიმ ჰენ ჩჟიკი]]
| ნანა =[[კან ბან სოკი]]
| ალმასქუ =1) [[კიმ ჩენ სუკი]]<br> 2) [[კიმ სონ ე]]
| სქუალეფი='''ქომოლსქუალეფი:''' [[კიმ ჩენ ირი]], [[კიმ ფხენ ილი]] <br>'''ცირასქუა:''' [[კიმ გიონ ჰი]]
| გონათაფა =
| ომენცარე ხარისხი =
| პროფესია =
| საქვარუა =
| რელიგია =[[ათეიზმი|ათეისტი]]
| ჯილდოეფი =
| პარტია = [[კორეაშ ხანდაშ პარტია]]
| ვებ-საიტი=
| მიკოღანკუა=
| რანწკი2 = [[ფაილი:Flag of North Korea.svg|25პქ]] [[ოორუე კორეა]]შ [[ოორუე კორეაშ იროიანი პრეზიდენტი|პრეზიდენტი]] [[ფაილი:Coat of Arms of North Korea.svg|25პქ]]
| პოსტი დეკინჷ2 = [[28 ქირსეთუთა]], [[1972]]
| პოსტი დიტუ2=[[8 კვირკვე]], [[1994]]
| წიმოხონი2 = პოსტიქ გიჭყჷ
| მონძე2 = პოსტიქ გეუქვჷ<br>იორიან პრეზიდენტო რე გჷმოცხადაფილი
| პრეზიდენტი2=
| მონარქი2 =
| კანცლერი2 =
| ვიცე-პრეზიდენტი2 =
| პრემიერ-მინისტრი2=
| დუდმახვენჯი2=
| რანწკი3 = [[ფაილი:Flag of North Korea.svg|25პქ]] [[ოორუე კორეა]]შ [[ოორუე კორეაშ თარობა|თარობაშ]] მადუდე [[ფაილი:Coat of Arms of North Korea.svg|25პქ]]
| პოსტი დეკინჷ3 = [[9 ეკენია]], [[1948]]
| პოსტი დიტუ3 =[[28 ქირსეთუთა]], [[1972]]
| წიმოხონი3 = პოსტიქ გიჭყჷ
| მონძე3 = პოსტიქ გეუქვჷ
| პრეზიდენტი3 =
| მონარქი3=
| კანცლერი3 =
| პრემიერ-მინისტრი3=
| დუდმახვენჯი3=
| რანწკი4 =
| პოსტი დეკინჷ4 =
| პოსტი დიტუ4 =
| წიმოხონი4 =
| მონძე4 =
| პრეზიდენტი4 =
| მონარქი4 =
| კანცლერი4 =
| პრემიერ-მინისტრი4=
| დუდმახვენჯი4=
| რანწკი5 =
| პოსტი დეკინჷ5 =
| პოსტი დიტუ5 =
| წიმოხონი5 =
| მონძე5 =
| პრეზიდენტი5 =
| მონარქი5 =
| კანცლერი5 =
| პრემიერ-მინისტრი5=
| დუდმახვენჯი5=
}}
'''კიმ ირ სენი''' (დაბადებაშ ჯოხო კიმ სონ ჩუ) ([[ჰანგული]] 김일성, [[ჰანჯა]] 金日成) (დ. [[15 პირელი]], [[1912]] — ღ. [[8 კვირკვე]], [[1994]]) — [[ოორუე კორეა|ოორუე კორეაშ კომუნისტური სახენწჷფოშ]] დჷმარსხუაფალი დო თიში მაართა ლიდერი [[1948]] წანაშე [[1994]] წანაშახ. კორეული [[მარქსიზმი]]შ [[ჩუჩხე]]შ გჷმმაქიმინალი. ღურაშ უკული [[ოორუე კორეაშ იროიანი პრეზიდენტი|კორეაშ იროიან პრეზიდენტო]] რე გჷმოხცადაფილი, ნამუთ თიქიანობაშე მართჷნსჷნ.
== რესურსეფი ინტერნეტის ==
{{Commons cat|Kim Il Sung}}
* [http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GRid=8241723 კიმიშ ონთხორუე]
* [http://bbs.keyhole.com/ubb/ubbthreads.php?ubb=showflat&Number=165472#Post165472 ოორუე კორეა] {{Webarchive|url=https://web.archive.org/web/20120114214343/http://bbs.keyhole.com/ubb/ubbthreads.php?ubb=showflat&Number=165472#Post165472 |date=2012-01-14 }}
* [http://koreanunification.net კორეაშ უნიფიცირაფილი დოგურაფა] {{Webarchive|url=https://web.archive.org/web/20071209162911/http://koreanunification.net/ |date=2007-12-09 }}
* [http://www.wilsoncenter.org/index.cfm?fuseaction=topics.home&topic_id=230972 ოორუე კორეაშ ოერეფოშქაშე დოკუმენტეფიშ პროექტი (NKIDP)] {{Webarchive|url=https://web.archive.org/web/20110701103815/http://www.wilsoncenter.org/index.cfm?topic_id=230972&fuseaction=topics.home |date=2011-07-01 }}
* [http://www.imdb.com/title/tt0456012/ შვენაშ ქიანა, დანიელ გორდონიშ დოკუმენტური ფილმი], ოორუე კორეაშ ირდღარი რინაშ ქრონიკეფი, [[2003]] წანას.
* [http://nothingtoenvy.com/ Nothing to Envy: რჩქვანელობური რინა ოორუე კორეას], [[ბარბარა დემიკი]]შ წინგი.
{{მერკე-ბიოგრაფია}}
{{მარქსიზმი}}
[[კატეგორია:ოორუე კორეაშ პოლიტიკოსეფი]]
[[კატეგორია:რგილი ლჷმაშ ლიდერეფი]]
[[კატეგორია:დიქტატორეფი]]
[[კატეგორია:გენერალისიმუსეფი]]
sdekrdga652z7d73ivegloo6vo8q122
მოდული:Age
828
31832
240034
240028
2025-06-08T16:39:55Z
Narazeni
826
240034
Scribunto
text/plain
-- Implement various "age of" and other date-related templates.
local mtext = {
-- Message and other text that should be localized.
-- Also need to localize text in table names in function dateDifference.
['mt-bad-param2'] = 'Parameter $1=$2 is invalid',
['mt-bad-show'] = 'Parameter show=$1 is not supported here',
['mt-cannot-add'] = 'Cannot add "$1"',
['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2',
['mt-date-wrong-order'] = 'The second date must be later in time than the first date',
['mt-dd-future'] = 'Death date (first date) must not be in the future',
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)',
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age',
['mt-invalid-dates-age'] = 'Invalid dates for calculating age',
['mt-invalid-end'] = 'Invalid end date in second parameter',
['mt-invalid-start'] = 'Invalid start date in first parameter',
['mt-need-jdn'] = 'Need valid Julian date number',
['mt-need-valid-bd'] = 'Need valid birth date: year, month, day',
['mt-need-valid-bd2'] = 'Need valid birth date (second date): year, month, day',
['mt-need-valid-date'] = 'Need valid date',
['mt-need-valid-dd'] = 'Need valid death date (first date): year, month, day',
['mt-need-valid-ymd'] = 'Need valid year, month, day',
['mt-need-valid-ymd-current'] = 'Need valid year|month|day or "currentdate"',
['mt-need-valid-ymd2'] = 'Second date should be year, month, day',
['mt-template-bad-name'] = 'The specified template name is not valid',
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation',
['mt-warn-param1'] = 'Invalid parameter $1',
['mt-warn-param2'] = 'Parameter $1=$2 is invalid',
['txt-affirmative'] = { y = true, yes = true, Y = true, Yes = true, YES = true }, -- valid values for df + mf parameters
['txt-yes'] = { y = true, yes = true, on = true }, -- valid values for parameters introduced with this module
['txt-and'] = ' and ',
['txt-or'] = ' or ',
['txt-category'] = 'Category:Age error',
['txt-comma-and'] = ', and ',
['txt-error'] = 'Error: ',
['txt-format-default'] = 'mf', -- 'df' (day first = dmy) or 'mf' (month first = mdy)
['txt-module-convertnumeric'] = 'Module:ConvertNumeric',
['txt-module-date'] = 'Module:Date',
['txt-sandbox'] = 'sandbox',
['txt-bda'] = '<span style="display:none"> (<span class="bday">$1</span>) </span>$2<span class="noprint ForceAgeToShow"> (age $3)</span>',
['txt-dda'] = '$2<span style="display:none">($1)</span> (aged $3)',
['txt-bda-disp'] = 'disp_raw', -- disp_raw → age is a number only; disp_age → age is a number and unit (normally years but months or days if very young)
['txt-dda-disp'] = 'disp_raw',
['txt-dmy'] = '%-d %B %-Y',
['txt-mdy'] = '%B %-d, %-Y',
}
local isWarning = {
['mt-warn-param1'] = true,
['mt-warn-param2'] = true,
}
-- yes[parameter] is true if parameter should be interpreted as "yes".
-- Do not want to accept mixed upper/lowercase unless done by previously used templates.
-- Need to accept "on" because "round=on" is wanted.
local yes = mtext['txt-yes']
local translate, from_en, to_en, isZero
if translate then
-- Functions to translate from en to local language and reverse go here.
-- See example at [[:bn:Module:বয়স]].
else
from_en = function (text)
return text
end
isZero = function (text)
return tonumber(text) == 0
end
end
local _Date, _currentDate
local function getExports(frame)
-- Return objects exported from the date module or its sandbox.
if not _Date then
local sandbox = frame:getTitle():find(mtext['txt-sandbox'], 1, true) and ('/' .. mtext['txt-sandbox']) or ''
local datemod = require(mtext['txt-module-date'] .. sandbox)
local realDate = datemod._Date
_currentDate = datemod._current
if to_en then
_Date = function (...)
local args = {}
for i, v in ipairs({...}) do
args[i] = to_en(v)
end
return realDate(unpack(args))
end
else
_Date = realDate
end
end
return _Date, _currentDate
end
local Collection -- a table to hold items
Collection = {
add = function (self, item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end,
join = function (self, sep)
return table.concat(self, sep)
end,
remove = function (self, pos)
if self.n > 0 and (pos == nil or (0 < pos and pos <= self.n)) then
self.n = self.n - 1
return table.remove(self, pos)
end
end,
sort = function (self, comp)
table.sort(self, comp)
end,
new = function ()
return setmetatable({n = 0}, Collection)
end
}
Collection.__index = Collection
local function stripToNil(text)
-- If text is a string, return its trimmed content, or nil if empty.
-- Otherwise return text (which may, for example, be nil).
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function substituteParameters(text, ...)
-- Return text after substituting any given parameters for $1, $2, etc.
return mw.message.newRawMessage(text, ...):plain()
end
local function message(msg, ...)
-- Return formatted message text for an error or warning.
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local categories = {
error = mtext['txt-category'],
warning = mtext['txt-category'],
}
local a, b, k, category
local text = substituteParameters(getText(msg), ...)
if isWarning[msg] then
a = '<sup>[<i>'
b = '</i>]</sup>'
k = 'warning'
else
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
k = 'error'
end
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
category = '[[' .. categories[k] .. ']]'
end
return
a ..
mw.text.nowiki(text) ..
b ..
(category or '')
end
local function dateFormat(args)
-- Return
-- nil, f if parameter is valid
-- m, f otherwise
-- where
-- m = string for warning message with category
-- f = string for wanted date format
local problem
local wanted = mtext['txt-format-default']
local other = wanted == 'df' and 'mf' or 'df'
local parm = args[other] or ''
if mtext['txt-affirmative'][parm] then
wanted = other
elseif parm ~= '' then
problem = message('mt-warn-param2', other, parm)
end
return problem, wanted == 'df' and mtext['txt-dmy'] or mtext['txt-mdy']
end
local function formatNumber(number)
-- Return the given number formatted with commas as group separators,
-- given that the number is an integer.
local numstr = tostring(number)
local length = #numstr
local places = Collection.new()
local pos = 0
repeat
places:add(pos)
pos = pos + 3
until pos >= length
places:add(length)
local groups = Collection.new()
for i = places.n, 2, -1 do
local p1 = length - places[i] + 1
local p2 = length - places[i - 1]
groups:add(numstr:sub(p1, p2))
end
return groups:join(',')
end
local function spellNumber(number, options, i)
-- Return result of spelling number, or
-- return number (as a string) if cannot spell it.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
return require(mtext['txt-module-convertnumeric']).spell_number(
number,
nil, -- fraction numerator
nil, -- fraction denominator
i == 1 and options.upper, -- true: 'One' instead of 'one'
not options.us, -- true: use 'and' between tens/ones etc
options.adj, -- true: hyphenated
options.ordinal -- true: 'first' instead of 'one'
) or number
end
local function makeExtra(args, flagCurrent)
-- Return extra text that will be inserted before the visible result
-- but after any sort key.
local extra = args.prefix or ''
if mw.ustring.len(extra) > 1 then
-- Parameter "~" gives "~3" whereas "over" gives "over 3".
if extra:sub(-6, -1) ~= ' ' then
extra = extra .. ' '
end
end
if flagCurrent then
extra = '<span class="currentage"></span>' .. extra
end
return extra
end
local function makeSort(value, sortable)
-- Return a sort key if requested.
-- Assume value is a valid number which has not overflowed.
if sortable == 'sortable_table' or sortable == 'sortable_on' or sortable == 'sortable_debug' then
local sortKey
if value == 0 then
sortKey = '5000000000000000000'
else
local mag = math.floor(math.log10(math.abs(value)) + 1e-14)
if value > 0 then
sortKey = 7000 + mag
else
sortKey = 2999 - mag
value = value + 10^(mag+1)
end
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag)))
end
local result
if sortable == 'sortable_table' then
result = 'data-sort-value="_SORTKEY_"|'
elseif sortable == 'sortable_debug' then
result = '<span data-sort-value="_SORTKEY_♠"><span style="border:1px solid">_SORTKEY_♠</span></span>'
else
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
return (result:gsub('_SORTKEY_', sortKey))
end
end
local translateParameters = {
abbr = {
off = 'abbr_off',
on = 'abbr_on',
},
disp = {
age = 'disp_age',
raw = 'disp_raw',
},
format = {
raw = 'format_raw',
commas = 'format_commas',
},
round = {
on = 'on',
yes = 'on',
months = 'ym',
weeks = 'ymw',
days = 'ymd',
hours = 'ymdh',
},
sep = {
comma = 'sep_comma',
[','] = 'sep_comma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
},
show = {
hide = { id = 'hide' },
y = { 'y', id = 'y' },
ym = { 'y', 'm', id = 'ym' },
ymd = { 'y', 'm', 'd', id = 'ymd' },
ymw = { 'y', 'm', 'w', id = 'ymw' },
ymwd = { 'y', 'm', 'w', 'd', id = 'ymwd' },
yd = { 'y', 'd', id = 'yd', keepZero = true },
m = { 'm', id = 'm' },
md = { 'm', 'd', id = 'md' },
w = { 'w', id = 'w' },
wd = { 'w', 'd', id = 'wd' },
h = { 'H', id = 'h' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
M = { 'M', id = 'M' },
s = { 'S', id = 's' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dhm = { 'd', 'H', 'M', id = 'dhm' },
dhms = { 'd', 'H', 'M', 'S', id = 'dhms' },
ymdh = { 'y', 'm', 'd', 'H', id = 'ymdh' },
ymdhm = { 'y', 'm', 'd', 'H', 'M', id = 'ymdhm' },
ymwdh = { 'y', 'm', 'w', 'd', 'H', id = 'ymwdh' },
ymwdhm = { 'y', 'm', 'w', 'd', 'H', 'M', id = 'ymwdhm' },
},
sortable = {
off = false,
on = 'sortable_on',
table = 'sortable_table',
debug = 'sortable_debug',
},
}
local spellOptions = {
cardinal = {},
Cardinal = { upper = true },
cardinal_us = { us = true },
Cardinal_us = { us = true, upper = true },
ordinal = { ordinal = true },
Ordinal = { ordinal = true, upper = true },
ordinal_us = { ordinal = true, us = true },
Ordinal_us = { ordinal = true, us = true, upper = true },
}
local function dateExtract(frame)
-- Return part of a date after performing an optional operation.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {}
for i, v in ipairs(args) do
parms[i] = v
end
if yes[args.fix] then
table.insert(parms, 'fix')
end
if yes[args.partial] then
table.insert(parms, 'partial')
end
local show = stripToNil(args.show) or 'dmy'
local date = Date(unpack(parms))
if not date then
if show == 'format' then
return 'error'
end
return message('mt-need-valid-date')
end
local add = stripToNil(args.add)
if add then
for item in add:gmatch('%S+') do
date = date + item
if not date then
return message('mt-cannot-add', item)
end
end
end
local sortKey, result
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date.partial and date.partial.first or date).jdz
sortKey = makeSort(value, sortable)
end
if show ~= 'hide' then
result = date[show]
if result == nil then
result = from_en(date:text(show))
elseif type(result) == 'boolean' then
result = result and '1' or '0'
else
result = from_en(tostring(result))
end
end
return (sortKey or '') .. makeExtra(args) .. (result or '')
end
local function rangeJoin(range)
-- Return text to be used between a range of ages.
return range == 'dash' and '–' or mtext['txt-or']
end
local function makeText(values, components, names, options, noUpper)
-- Return wikitext representing an age or duration.
local text = Collection.new()
local count = #values
local sep = names.sep or ''
for i, v in ipairs(values) do
-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).
local islist = type(v) == 'table'
if (islist or v > 0) or (text.n == 0 and i == count) or (text.n > 0 and components.keepZero) then
local fmt, vstr
if options.spell then
fmt = function(number)
return spellNumber(number, options.spell, noUpper or i)
end
elseif i == 1 and options.format == 'format_commas' then
-- Numbers after the first should be small and not need formatting.
fmt = formatNumber
else
fmt = tostring
end
if islist then
vstr = fmt(v[1]) .. rangeJoin(options.range)
noUpper = true
vstr = vstr .. fmt(v[2])
else
vstr = fmt(v)
end
local name = names[components[i]]
if name then
if type(name) == 'table' then
name = mw.getContentLanguage():plural(islist and v[2] or v, name)
end
text:add(vstr .. sep .. name)
else
text:add(vstr)
end
end
end
local first, last
if options.join == 'sep_space' then
first = ' '
last = ' '
elseif options.join == 'sep_comma' then
first = ', '
last = ', '
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
last = mtext['txt-comma-and']
else
first = ', '
last = mtext['txt-and']
end
for i, v in ipairs(text) do
if i < text.n then
text[i] = v .. (i + 1 < text.n and first or last)
end
end
local sign = ''
if options.isnegative then
-- Do not display negative zero.
if text.n > 1 or (text.n == 1 and text[1]:sub(1, 1) ~= '0' ) then
if options.format == 'format_raw' then
sign = '-' -- plain hyphen so result can be used in a calculation
else
sign = '−' -- Unicode U+2212 MINUS SIGN
end
end
end
return
(options.sortKey or '') ..
(options.extra or '') ..
sign ..
text:join() ..
(options.suffix or '')
end
local function dateDifference(parms)
-- Return a formatted date difference using the given parameters
-- which have been validated.
local names = {
-- Each name is:
-- * a string if no plural form of the name is used; or
-- * a table of strings, one of which is selected using the rules at
-- https://translatewiki.net/wiki/Plural/Mediawiki_plural_rules
abbr_off = {
sep = ' ',
y = {'year', 'years'},
m = {'month', 'months'},
w = {'week', 'weeks'},
d = {'day', 'days'},
H = {'hour', 'hours'},
M = {'minute', 'minutes'},
S = {'second', 'seconds'},
},
abbr_on = {
y = 'y',
m = 'm',
w = 'w',
d = 'd',
H = 'h',
M = 'm',
S = 's',
},
abbr_infant = { -- for {{age for infant}}
sep = ' ',
y = {'yr', 'yrs'},
m = {'mo', 'mos'},
w = {'wk', 'wks'},
d = {'day', 'days'},
H = {'hr', 'hrs'},
M = {'min', 'mins'},
S = {'sec', 'secs'},
},
abbr_raw = {},
}
local diff = parms.diff -- must be a valid date difference
local show = parms.show -- may be nil; default is set below
local abbr = parms.abbr or 'abbr_off'
local defaultJoin
if abbr ~= 'abbr_off' then
defaultJoin = 'sep_space'
end
if not show then
show = 'ymd'
if parms.disp == 'disp_age' then
if diff.years < 3 then
defaultJoin = 'sep_space'
if diff.years >= 1 then
show = 'ym'
else
show = 'md'
end
else
show = 'y'
end
end
end
if type(show) ~= 'table' then
show = translateParameters.show[show]
end
if parms.disp == 'disp_raw' then
defaultJoin = 'sep_space'
abbr = 'abbr_raw'
elseif parms.wantSc then
defaultJoin = 'sep_serialcomma'
end
local diffOptions = {
round = parms.round,
duration = parms.wantDuration,
range = parms.range and true or nil,
}
local sortKey
if parms.sortable then
local value = diff.age_days + (parms.wantDuration and 1 or 0) -- days and fraction of a day
if diff.isnegative then
value = -value
end
sortKey = makeSort(value, parms.sortable)
end
local textOptions = {
extra = parms.extra,
format = parms.format,
join = parms.sep or defaultJoin,
isnegative = diff.isnegative,
range = parms.range,
sortKey = sortKey,
spell = parms.spell,
suffix = parms.suffix, -- not currently used
}
if show.id == 'hide' then
return sortKey or ''
end
local values = { diff:age(show.id, diffOptions) }
if values[1] then
return makeText(values, show, names[abbr], textOptions)
end
if diff.partial then
-- Handle a more complex range such as
-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days
local opt = {
format = textOptions.format,
join = textOptions.join,
isnegative = textOptions.isnegative,
spell = textOptions.spell,
}
return
(textOptions.sortKey or '') ..
makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..
rangeJoin(textOptions.range) ..
makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..
(textOptions.suffix or '')
end
return message('mt-bad-show', show.id)
end
local function getDates(frame, getopt)
-- Parse template parameters and return one of:
-- * date (a date table, if single)
-- * date1, date2 (two date tables, if not single)
-- * text (a string error message)
-- A missing date is optionally replaced with the current date.
-- If wantMixture is true, a missing date component is replaced
-- from the current date, so can get a bizarre mixture of
-- specified/current y/m/d as has been done by some "age" templates.
-- Some results may be placed in table getopt.
local Date, currentDate = getExports(frame)
getopt = getopt or {}
local function flagCurrent(text)
-- This allows the calling template to detect if the current date has been used,
-- that is, whether both dates have been entered in a template expecting two.
-- For example, an infobox may want the age when an event occurred, not the current age.
-- Don't bother detecting if wantMixture is used because not needed and it is a poor option.
if not text then
if getopt.noMissing then
return nil -- this gives a nil date which gives an error
end
text = 'currentdate'
if getopt.flag == 'usesCurrent' then
getopt.usesCurrent = true
end
end
return text
end
local args = frame:getParent().args
local fields = {}
local isNamed = args.year or args.year1 or args.year2 or
args.month or args.month1 or args.month2 or
args.day or args.day1 or args.day2
if isNamed then
fields[1] = args.year1 or args.year
fields[2] = args.month1 or args.month
fields[3] = args.day1 or args.day
fields[4] = args.year2
fields[5] = args.month2
fields[6] = args.day2
else
for i = 1, 6 do
fields[i] = args[i]
end
end
local imax = 0
for i = 1, 6 do
fields[i] = stripToNil(fields[i])
if fields[i] then
imax = i
end
if getopt.omitZero and i % 3 ~= 1 then -- omit zero months and days as unknown values but keep year 0 which is 1 BCE
if isZero(fields[i]) then
fields[i] = nil
getopt.partial = true
end
end
end
local fix = getopt.fix and 'fix' or ''
local partialText = getopt.partial and 'partial' or ''
local dates = {}
if isNamed or imax >= 3 then
local nrDates = getopt.single and 1 or 2
if getopt.wantMixture then
-- Cannot be partial since empty fields are set from current.
local components = { 'year', 'month', 'day' }
for i = 1, nrDates * 3 do
fields[i] = fields[i] or currentDate[components[i > 3 and i - 3 or i]]
end
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
else
-- If partial dates are allowed, accept
-- year only, or
-- year and month only
-- Do not accept year and day without a month because that makes no sense
-- (and because, for example, Date('partial', 2001, nil, 12) sets day = nil, not 12).
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (getopt.partial and y and (m or not d)) or (y and m and d) then
dates[i] = Date(fix, partialText, y, m, d)
elseif not y and not m and not d then
dates[i] = Date(flagCurrent())
end
end
end
else
getopt.textdates = true -- have parsed each date from a single text field
dates[1] = Date(fix, partialText, flagCurrent(fields[1]))
if not getopt.single then
dates[2] = Date(fix, partialText, flagCurrent(fields[2]))
end
end
if not dates[1] then
return message(getopt.missing1 or 'mt-need-valid-ymd')
end
if getopt.single then
return dates[1]
end
if not dates[2] then
return message(getopt.missing2 or 'mt-need-valid-ymd2')
end
return dates[1], dates[2]
end
local function ageGeneric(frame)
-- Return the result required by the specified template.
-- Can use sortable=x where x = on/table/off/debug in any supported template.
-- Some templates default to sortable=on but can be overridden.
local name = frame.args.template
if not name then
return message('mt-template-x')
end
local args = frame:getParent().args
local specs = {
age_days = { -- {{age in days}}
show = 'd',
disp = 'disp_raw',
},
age_days_nts = { -- {{age in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
},
duration_days = { -- {{duration in days}}
show = 'd',
disp = 'disp_raw',
duration = true,
},
duration_days_nts = { -- {{duration in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
duration = true,
},
age_full_years = { -- {{age}}
show = 'y',
abbr = 'abbr_raw',
flag = 'usesCurrent',
omitZero = true,
range = 'dash',
},
age_full_years_nts = { -- {{age nts}}
show = 'y',
abbr = 'abbr_raw',
format = 'format_commas',
sortable = 'on',
},
age_in_years = { -- {{age in years}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
},
age_in_years_nts = { -- {{age in years nts}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
format = 'format_commas',
sortable = 'on',
},
age_infant = { -- {{age for infant}}
-- Do not set show because special processing is done later.
abbr = yes[args.abbr] and 'abbr_infant' or 'abbr_off',
disp = 'disp_age',
sep = 'sep_space',
sortable = 'on',
},
age_m = { -- {{age in months}}
show = 'm',
disp = 'disp_raw',
},
age_w = { -- {{age in weeks}}
show = 'w',
disp = 'disp_raw',
},
age_wd = { -- {{age in weeks and days}}
show = 'wd',
},
age_yd = { -- {{age in years and days}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
},
age_yd_nts = { -- {{age in years and days nts}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
sortable = 'on',
},
age_ym = { -- {{age in years and months}}
show = 'ym',
sep = 'sep_comma',
},
age_ymd = { -- {{age in years, months and days}}
show = 'ymd',
range = true,
},
age_ymwd = { -- {{age in years, months, weeks and days}}
show = 'ymwd',
wantMixture = true,
},
}
local spec = specs[name]
if not spec then
return message('mt-template-bad-name')
end
if name == 'age_days' then
local su = stripToNil(args['show unit'])
if su then
if su == 'abbr' or su == 'full' then
spec.disp = nil
spec.abbr = su == 'abbr' and 'abbr_on' or nil
end
end
end
local partial, autofill
local range = stripToNil(args.range) or spec.range
if range then
-- Suppose partial dates are used and age could be 11 or 12 years.
-- "|range=" (empty value) has no effect (spec is used).
-- "|range=yes" or spec.range == true sets range = true (gives "11 or 12")
-- "|range=dash" or spec.range == 'dash' sets range = 'dash' (gives "11–12").
-- "|range=no" or spec.range == 'no' sets range = nil and fills each date in the diff (gives "12").
-- ("on" is equivalent to "yes", and "off" is equivalent to "no").
-- "|range=OTHER" sets range = nil and rejects partial dates.
range = ({ dash = 'dash', off = 'no', no = 'no', [true] = true })[range] or yes[range]
if range then
partial = true -- accept partial dates with a possible age range for the result
if range == 'no' then
autofill = true -- missing month/day in first or second date are filled from other date or 1
range = nil
end
end
end
local getopt = {
fix = yes[args.fix],
flag = stripToNil(args.flag) or spec.flag,
omitZero = spec.omitZero,
partial = partial,
wantMixture = spec.wantMixture,
}
local date1, date2 = getDates(frame, getopt)
if type(date1) == 'string' then
return date1
end
local format = stripToNil(args.format)
local spell = spellOptions[format]
if format then
format = 'format_' .. format
elseif name == 'age_days' and getopt.textdates then
format = 'format_commas'
end
local parms = {
diff = date2:subtract(date1, { fill = autofill }),
wantDuration = spec.duration or yes[args.duration],
range = range,
wantSc = yes[args.sc],
show = args.show == 'hide' and 'hide' or spec.show,
abbr = spec.abbr,
disp = spec.disp,
extra = makeExtra(args, getopt.usesCurrent and format ~= 'format_raw'),
format = format or spec.format,
round = yes[args.round],
sep = spec.sep,
sortable = translateParameters.sortable[args.sortable or spec.sortable],
spell = spell,
}
if (spec.negative or frame.args.negative) == 'error' and parms.diff.isnegative then
return message('mt-date-wrong-order')
end
return from_en(dateDifference(parms))
end
local function isFake(args)
-- Some templates have TemplateData with an auto value like "{{Birth date and age|YYYY|MM|DD}}".
-- Return true if that appears to be the case so the caller can output nothing rather than an error.
return args[1] == 'YYYY'
end
local function bda(frame)
-- Implement [[Template:Birth date and age]].
local args = frame:getParent().args
if isFake(args) then
return ''
end
local options = {
missing1 = 'mt-need-valid-bd',
noMissing = true,
single = true,
}
local date = getDates(frame, options)
if type(date) == 'string' then
return date -- error text
end
local Date = getExports(frame)
local diff = Date('currentdate') - date
if diff.isnegative or diff.years > 150 then
return message('mt-invalid-bd-age')
end
local disp = mtext['txt-bda-disp']
local show = 'y'
if diff.years < 2 then
disp = 'disp_age'
if diff.years == 0 and diff.months == 0 then
show = 'd'
else
show = 'm'
end
end
local problem, format = dateFormat(args)
local result = substituteParameters(
mtext['txt-bda'],
date:text('%-Y-%m-%d'),
from_en(date:text(format)),
from_en(dateDifference({
diff = diff,
show = show,
abbr = 'abbr_off',
disp = disp,
sep = 'sep_space',
}))
) .. (problem or '')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
day = true,
day1 = true,
month = true,
month1 = true,
year = true,
year1 = true,
}
local invalid
local imax = options.textdates and 1 or 3
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message('mt-warn-param1', invalid)
end
end
return result
end
local function dda(frame)
-- Implement [[Template:Death date and age]].
local args = frame:getParent().args
if isFake(args) then
return ''
end
local options = {
missing1 = 'mt-need-valid-dd',
missing2 = 'mt-need-valid-bd2',
noMissing = true,
partial = true,
}
local date1, date2 = getDates(frame, options)
if type(date1) == 'string' then
return date1
end
local diff = date1 - date2
if diff.isnegative then
return message('mt-dd-wrong-order')
end
local Date = getExports(frame)
local today = Date('currentdate') + 1 -- one day in future allows for timezones
if date1 > today then
return message('mt-dd-future')
end
local years
if diff.partial then
years = diff.partial.years
years = type(years) == 'table' and years[2] or years
else
years = diff.years
end
if years > 150 then
return message('mt-invalid-dates-age')
end
local fmt_date, fmt_ymd, problem
if date1.day then -- y, m, d known
problem, fmt_date = dateFormat(args)
fmt_ymd = '%-Y-%m-%d'
elseif date1.month then -- y, m known; d unknown
fmt_date = '%B %-Y'
fmt_ymd = '%-Y-%m-00'
else -- y known; m, d unknown
fmt_date = '%-Y'
fmt_ymd = '%-Y-00-00'
end
local sortKey
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date1.partial and date1.partial.first or date1).jdz
sortKey = makeSort(value, sortable)
end
local result = (sortKey or '') .. substituteParameters(
mtext['txt-dda'],
date1:text(fmt_ymd),
from_en(date1:text(fmt_date)),
from_en(dateDifference({
diff = diff,
show = 'y',
abbr = 'abbr_off',
disp = mtext['txt-dda-disp'],
range = 'dash',
sep = 'sep_space',
}))
) .. (problem or '')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
}
local invalid
local imax = options.textdates and 2 or 6
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message('mt-warn-param1', invalid)
end
end
return result
end
local function dateToGsd(frame)
-- Implement [[Template:Gregorian serial date]].
-- Return Gregorian serial date of the given date, or the current date.
-- The returned value is negative for dates before 1 January 1 AD
-- despite the fact that GSD is not defined for such dates.
local date = getDates(frame, { wantMixture=true, single=true })
if type(date) == 'string' then
return date
end
return tostring(date.gsd)
end
local function jdToDate(frame)
-- Return formatted date from a Julian date.
-- The result includes a time if the input includes a fraction.
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date('juliandate', args[1], args[2])
if date then
return from_en(date:text())
end
return message('mt-need-jdn')
end
local function dateToJd(frame)
-- Return Julian date (a number) from a date which may include a time,
-- or the current date ('currentdate') or current date and time ('currentdatetime').
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])
if date then
return tostring(date.jd)
end
return message('mt-need-valid-ymd-current')
end
local function timeInterval(frame)
-- Implement [[Template:Time interval]].
-- There are two positional arguments: date1, date2.
-- The default for each is the current date and time.
-- Result is date2 - date1 formatted.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {
extra = makeExtra(args),
wantDuration = yes[args.duration],
range = yes[args.range] or (args.range == 'dash' and 'dash' or nil),
wantSc = yes[args.sc],
}
local fix = yes[args.fix] and 'fix' or ''
local date1 = Date(fix, 'partial', stripToNil(args[1]) or 'currentdatetime')
if not date1 then
return message('mt-invalid-start')
end
local date2 = Date(fix, 'partial', stripToNil(args[2]) or 'currentdatetime')
if not date2 then
return message('mt-invalid-end')
end
parms.diff = date2 - date1
for argname, translate in pairs(translateParameters) do
local parm = stripToNil(args[argname])
if parm then
parm = translate[parm]
if parm == nil then -- test for nil because false is a valid setting
return message('mt-bad-param2', argname, args[argname])
end
parms[argname] = parm
end
end
if parms.round then
local round = parms.round
local show = parms.show
if round ~= 'on' then
if show then
if show.id ~= round then
return message('mt-conflicting-show', args.show, args.round)
end
else
parms.show = translateParameters.show[round]
end
end
parms.round = true
end
return from_en(dateDifference(parms))
end
local function templateGeneric(frame)
local name = frame.args.template
if not name then
return message('mt-template-x')
end
return ageGeneric(frame:newChild{title = mw.title.new(name, 10), args = frame.args})
end
return {
age_generic = ageGeneric, -- can emulate several age templates
birth_date_and_age = bda, -- Template:Birth_date_and_age
death_date_and_age = dda, -- Template:Death_date_and_age
gsd = dateToGsd, -- Template:Gregorian_serial_date
extract = dateExtract, -- Template:Extract
jd_to_date = jdToDate, -- Template:?
JULIANDAY = dateToJd, -- Template:JULIANDAY
time_interval = timeInterval, -- Template:Time_interval
[''] = templateGeneric, -- same as age_generic, but can be invoked directly
}
qlkaap82oo8xun0m94f9ot3dz98pxmm
240035
240034
2025-06-08T16:42:58Z
Narazeni
826
240035
Scribunto
text/plain
-- Implement various "age of" and other date-related templates.
local mtext = {
-- Message and other text that should be localized.
-- Also need to localize text in table names in function dateDifference.
['mt-bad-param2'] = 'პარამეტრი $1=$2 რე ჩილათერი',
['mt-bad-show'] = 'პარამეტრი show=$1 თაქ ვა რე ხუჯდოკინელი',
['mt-cannot-add'] = '"$1 ვეგიძინინე"',
['mt-conflicting-show'] = 'პარამეტრი show=$1 round=$2-წკჷმა კონფლიქტის რე',
['mt-date-wrong-order'] = 'The second date must be later in time than the first date',
['mt-dd-future'] = 'Death date (first date) must not be in the future',
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)',
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age',
['mt-invalid-dates-age'] = 'Invalid dates for calculating age',
['mt-invalid-end'] = 'Invalid end date in second parameter',
['mt-invalid-start'] = 'Invalid start date in first parameter',
['mt-need-jdn'] = 'Need valid Julian date number',
['mt-need-valid-bd'] = 'Need valid birth date: year, month, day',
['mt-need-valid-bd2'] = 'Need valid birth date (second date): year, month, day',
['mt-need-valid-date'] = 'Need valid date',
['mt-need-valid-dd'] = 'Need valid death date (first date): year, month, day',
['mt-need-valid-ymd'] = 'Need valid year, month, day',
['mt-need-valid-ymd-current'] = 'Need valid year|month|day or "currentdate"',
['mt-need-valid-ymd2'] = 'Second date should be year, month, day',
['mt-template-bad-name'] = 'The specified template name is not valid',
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation',
['mt-warn-param1'] = 'Invalid parameter $1',
['mt-warn-param2'] = 'Parameter $1=$2 is invalid',
['txt-affirmative'] = { y = true, yes = true, Y = true, Yes = true, YES = true }, -- valid values for df + mf parameters
['txt-yes'] = { y = true, yes = true, on = true }, -- valid values for parameters introduced with this module
['txt-and'] = ' and ',
['txt-or'] = ' or ',
['txt-category'] = 'Category:Age error',
['txt-comma-and'] = ', and ',
['txt-error'] = 'Error: ',
['txt-format-default'] = 'mf', -- 'df' (day first = dmy) or 'mf' (month first = mdy)
['txt-module-convertnumeric'] = 'Module:ConvertNumeric',
['txt-module-date'] = 'Module:Date',
['txt-sandbox'] = 'sandbox',
['txt-bda'] = '<span style="display:none"> (<span class="bday">$1</span>) </span>$2<span class="noprint ForceAgeToShow"> ($3 წანერი)</span>',
['txt-dda'] = '$2<span style="display:none">($1)</span> ($3 წანერი)',
['txt-bda-disp'] = 'disp_raw', -- disp_raw → age is a number only; disp_age → age is a number and unit (normally years but months or days if very young)
['txt-dda-disp'] = 'disp_raw',
['txt-dmy'] = '%-d %B %-Y',
['txt-mdy'] = '%B %-d, %-Y',
}
local isWarning = {
['mt-warn-param1'] = true,
['mt-warn-param2'] = true,
}
-- yes[parameter] is true if parameter should be interpreted as "yes".
-- Do not want to accept mixed upper/lowercase unless done by previously used templates.
-- Need to accept "on" because "round=on" is wanted.
local yes = mtext['txt-yes']
local translate, from_en, to_en, isZero
if translate then
-- Functions to translate from en to local language and reverse go here.
-- See example at [[:bn:Module:বয়স]].
else
from_en = function (text)
return text
end
isZero = function (text)
return tonumber(text) == 0
end
end
local _Date, _currentDate
local function getExports(frame)
-- Return objects exported from the date module or its sandbox.
if not _Date then
local sandbox = frame:getTitle():find(mtext['txt-sandbox'], 1, true) and ('/' .. mtext['txt-sandbox']) or ''
local datemod = require(mtext['txt-module-date'] .. sandbox)
local realDate = datemod._Date
_currentDate = datemod._current
if to_en then
_Date = function (...)
local args = {}
for i, v in ipairs({...}) do
args[i] = to_en(v)
end
return realDate(unpack(args))
end
else
_Date = realDate
end
end
return _Date, _currentDate
end
local Collection -- a table to hold items
Collection = {
add = function (self, item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end,
join = function (self, sep)
return table.concat(self, sep)
end,
remove = function (self, pos)
if self.n > 0 and (pos == nil or (0 < pos and pos <= self.n)) then
self.n = self.n - 1
return table.remove(self, pos)
end
end,
sort = function (self, comp)
table.sort(self, comp)
end,
new = function ()
return setmetatable({n = 0}, Collection)
end
}
Collection.__index = Collection
local function stripToNil(text)
-- If text is a string, return its trimmed content, or nil if empty.
-- Otherwise return text (which may, for example, be nil).
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function substituteParameters(text, ...)
-- Return text after substituting any given parameters for $1, $2, etc.
return mw.message.newRawMessage(text, ...):plain()
end
local function message(msg, ...)
-- Return formatted message text for an error or warning.
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local categories = {
error = mtext['txt-category'],
warning = mtext['txt-category'],
}
local a, b, k, category
local text = substituteParameters(getText(msg), ...)
if isWarning[msg] then
a = '<sup>[<i>'
b = '</i>]</sup>'
k = 'warning'
else
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
k = 'error'
end
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
category = '[[' .. categories[k] .. ']]'
end
return
a ..
mw.text.nowiki(text) ..
b ..
(category or '')
end
local function dateFormat(args)
-- Return
-- nil, f if parameter is valid
-- m, f otherwise
-- where
-- m = string for warning message with category
-- f = string for wanted date format
local problem
local wanted = mtext['txt-format-default']
local other = wanted == 'df' and 'mf' or 'df'
local parm = args[other] or ''
if mtext['txt-affirmative'][parm] then
wanted = other
elseif parm ~= '' then
problem = message('mt-warn-param2', other, parm)
end
return problem, wanted == 'df' and mtext['txt-dmy'] or mtext['txt-mdy']
end
local function formatNumber(number)
-- Return the given number formatted with commas as group separators,
-- given that the number is an integer.
local numstr = tostring(number)
local length = #numstr
local places = Collection.new()
local pos = 0
repeat
places:add(pos)
pos = pos + 3
until pos >= length
places:add(length)
local groups = Collection.new()
for i = places.n, 2, -1 do
local p1 = length - places[i] + 1
local p2 = length - places[i - 1]
groups:add(numstr:sub(p1, p2))
end
return groups:join(',')
end
local function spellNumber(number, options, i)
-- Return result of spelling number, or
-- return number (as a string) if cannot spell it.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
return require(mtext['txt-module-convertnumeric']).spell_number(
number,
nil, -- fraction numerator
nil, -- fraction denominator
i == 1 and options.upper, -- true: 'One' instead of 'one'
not options.us, -- true: use 'and' between tens/ones etc
options.adj, -- true: hyphenated
options.ordinal -- true: 'first' instead of 'one'
) or number
end
local function makeExtra(args, flagCurrent)
-- Return extra text that will be inserted before the visible result
-- but after any sort key.
local extra = args.prefix or ''
if mw.ustring.len(extra) > 1 then
-- Parameter "~" gives "~3" whereas "over" gives "over 3".
if extra:sub(-6, -1) ~= ' ' then
extra = extra .. ' '
end
end
if flagCurrent then
extra = '<span class="currentage"></span>' .. extra
end
return extra
end
local function makeSort(value, sortable)
-- Return a sort key if requested.
-- Assume value is a valid number which has not overflowed.
if sortable == 'sortable_table' or sortable == 'sortable_on' or sortable == 'sortable_debug' then
local sortKey
if value == 0 then
sortKey = '5000000000000000000'
else
local mag = math.floor(math.log10(math.abs(value)) + 1e-14)
if value > 0 then
sortKey = 7000 + mag
else
sortKey = 2999 - mag
value = value + 10^(mag+1)
end
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag)))
end
local result
if sortable == 'sortable_table' then
result = 'data-sort-value="_SORTKEY_"|'
elseif sortable == 'sortable_debug' then
result = '<span data-sort-value="_SORTKEY_♠"><span style="border:1px solid">_SORTKEY_♠</span></span>'
else
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
return (result:gsub('_SORTKEY_', sortKey))
end
end
local translateParameters = {
abbr = {
off = 'abbr_off',
on = 'abbr_on',
},
disp = {
age = 'disp_age',
raw = 'disp_raw',
},
format = {
raw = 'format_raw',
commas = 'format_commas',
},
round = {
on = 'on',
yes = 'on',
months = 'ym',
weeks = 'ymw',
days = 'ymd',
hours = 'ymdh',
},
sep = {
comma = 'sep_comma',
[','] = 'sep_comma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
},
show = {
hide = { id = 'hide' },
y = { 'y', id = 'y' },
ym = { 'y', 'm', id = 'ym' },
ymd = { 'y', 'm', 'd', id = 'ymd' },
ymw = { 'y', 'm', 'w', id = 'ymw' },
ymwd = { 'y', 'm', 'w', 'd', id = 'ymwd' },
yd = { 'y', 'd', id = 'yd', keepZero = true },
m = { 'm', id = 'm' },
md = { 'm', 'd', id = 'md' },
w = { 'w', id = 'w' },
wd = { 'w', 'd', id = 'wd' },
h = { 'H', id = 'h' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
M = { 'M', id = 'M' },
s = { 'S', id = 's' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dhm = { 'd', 'H', 'M', id = 'dhm' },
dhms = { 'd', 'H', 'M', 'S', id = 'dhms' },
ymdh = { 'y', 'm', 'd', 'H', id = 'ymdh' },
ymdhm = { 'y', 'm', 'd', 'H', 'M', id = 'ymdhm' },
ymwdh = { 'y', 'm', 'w', 'd', 'H', id = 'ymwdh' },
ymwdhm = { 'y', 'm', 'w', 'd', 'H', 'M', id = 'ymwdhm' },
},
sortable = {
off = false,
on = 'sortable_on',
table = 'sortable_table',
debug = 'sortable_debug',
},
}
local spellOptions = {
cardinal = {},
Cardinal = { upper = true },
cardinal_us = { us = true },
Cardinal_us = { us = true, upper = true },
ordinal = { ordinal = true },
Ordinal = { ordinal = true, upper = true },
ordinal_us = { ordinal = true, us = true },
Ordinal_us = { ordinal = true, us = true, upper = true },
}
local function dateExtract(frame)
-- Return part of a date after performing an optional operation.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {}
for i, v in ipairs(args) do
parms[i] = v
end
if yes[args.fix] then
table.insert(parms, 'fix')
end
if yes[args.partial] then
table.insert(parms, 'partial')
end
local show = stripToNil(args.show) or 'dmy'
local date = Date(unpack(parms))
if not date then
if show == 'format' then
return 'error'
end
return message('mt-need-valid-date')
end
local add = stripToNil(args.add)
if add then
for item in add:gmatch('%S+') do
date = date + item
if not date then
return message('mt-cannot-add', item)
end
end
end
local sortKey, result
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date.partial and date.partial.first or date).jdz
sortKey = makeSort(value, sortable)
end
if show ~= 'hide' then
result = date[show]
if result == nil then
result = from_en(date:text(show))
elseif type(result) == 'boolean' then
result = result and '1' or '0'
else
result = from_en(tostring(result))
end
end
return (sortKey or '') .. makeExtra(args) .. (result or '')
end
local function rangeJoin(range)
-- Return text to be used between a range of ages.
return range == 'dash' and '–' or mtext['txt-or']
end
local function makeText(values, components, names, options, noUpper)
-- Return wikitext representing an age or duration.
local text = Collection.new()
local count = #values
local sep = names.sep or ''
for i, v in ipairs(values) do
-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).
local islist = type(v) == 'table'
if (islist or v > 0) or (text.n == 0 and i == count) or (text.n > 0 and components.keepZero) then
local fmt, vstr
if options.spell then
fmt = function(number)
return spellNumber(number, options.spell, noUpper or i)
end
elseif i == 1 and options.format == 'format_commas' then
-- Numbers after the first should be small and not need formatting.
fmt = formatNumber
else
fmt = tostring
end
if islist then
vstr = fmt(v[1]) .. rangeJoin(options.range)
noUpper = true
vstr = vstr .. fmt(v[2])
else
vstr = fmt(v)
end
local name = names[components[i]]
if name then
if type(name) == 'table' then
name = mw.getContentLanguage():plural(islist and v[2] or v, name)
end
text:add(vstr .. sep .. name)
else
text:add(vstr)
end
end
end
local first, last
if options.join == 'sep_space' then
first = ' '
last = ' '
elseif options.join == 'sep_comma' then
first = ', '
last = ', '
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
last = mtext['txt-comma-and']
else
first = ', '
last = mtext['txt-and']
end
for i, v in ipairs(text) do
if i < text.n then
text[i] = v .. (i + 1 < text.n and first or last)
end
end
local sign = ''
if options.isnegative then
-- Do not display negative zero.
if text.n > 1 or (text.n == 1 and text[1]:sub(1, 1) ~= '0' ) then
if options.format == 'format_raw' then
sign = '-' -- plain hyphen so result can be used in a calculation
else
sign = '−' -- Unicode U+2212 MINUS SIGN
end
end
end
return
(options.sortKey or '') ..
(options.extra or '') ..
sign ..
text:join() ..
(options.suffix or '')
end
local function dateDifference(parms)
-- Return a formatted date difference using the given parameters
-- which have been validated.
local names = {
-- Each name is:
-- * a string if no plural form of the name is used; or
-- * a table of strings, one of which is selected using the rules at
-- https://translatewiki.net/wiki/Plural/Mediawiki_plural_rules
abbr_off = {
sep = ' ',
y = {'year', 'years'},
m = {'month', 'months'},
w = {'week', 'weeks'},
d = {'day', 'days'},
H = {'hour', 'hours'},
M = {'minute', 'minutes'},
S = {'second', 'seconds'},
},
abbr_on = {
y = 'y',
m = 'm',
w = 'w',
d = 'd',
H = 'h',
M = 'm',
S = 's',
},
abbr_infant = { -- for {{age for infant}}
sep = ' ',
y = {'yr', 'yrs'},
m = {'mo', 'mos'},
w = {'wk', 'wks'},
d = {'day', 'days'},
H = {'hr', 'hrs'},
M = {'min', 'mins'},
S = {'sec', 'secs'},
},
abbr_raw = {},
}
local diff = parms.diff -- must be a valid date difference
local show = parms.show -- may be nil; default is set below
local abbr = parms.abbr or 'abbr_off'
local defaultJoin
if abbr ~= 'abbr_off' then
defaultJoin = 'sep_space'
end
if not show then
show = 'ymd'
if parms.disp == 'disp_age' then
if diff.years < 3 then
defaultJoin = 'sep_space'
if diff.years >= 1 then
show = 'ym'
else
show = 'md'
end
else
show = 'y'
end
end
end
if type(show) ~= 'table' then
show = translateParameters.show[show]
end
if parms.disp == 'disp_raw' then
defaultJoin = 'sep_space'
abbr = 'abbr_raw'
elseif parms.wantSc then
defaultJoin = 'sep_serialcomma'
end
local diffOptions = {
round = parms.round,
duration = parms.wantDuration,
range = parms.range and true or nil,
}
local sortKey
if parms.sortable then
local value = diff.age_days + (parms.wantDuration and 1 or 0) -- days and fraction of a day
if diff.isnegative then
value = -value
end
sortKey = makeSort(value, parms.sortable)
end
local textOptions = {
extra = parms.extra,
format = parms.format,
join = parms.sep or defaultJoin,
isnegative = diff.isnegative,
range = parms.range,
sortKey = sortKey,
spell = parms.spell,
suffix = parms.suffix, -- not currently used
}
if show.id == 'hide' then
return sortKey or ''
end
local values = { diff:age(show.id, diffOptions) }
if values[1] then
return makeText(values, show, names[abbr], textOptions)
end
if diff.partial then
-- Handle a more complex range such as
-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days
local opt = {
format = textOptions.format,
join = textOptions.join,
isnegative = textOptions.isnegative,
spell = textOptions.spell,
}
return
(textOptions.sortKey or '') ..
makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..
rangeJoin(textOptions.range) ..
makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..
(textOptions.suffix or '')
end
return message('mt-bad-show', show.id)
end
local function getDates(frame, getopt)
-- Parse template parameters and return one of:
-- * date (a date table, if single)
-- * date1, date2 (two date tables, if not single)
-- * text (a string error message)
-- A missing date is optionally replaced with the current date.
-- If wantMixture is true, a missing date component is replaced
-- from the current date, so can get a bizarre mixture of
-- specified/current y/m/d as has been done by some "age" templates.
-- Some results may be placed in table getopt.
local Date, currentDate = getExports(frame)
getopt = getopt or {}
local function flagCurrent(text)
-- This allows the calling template to detect if the current date has been used,
-- that is, whether both dates have been entered in a template expecting two.
-- For example, an infobox may want the age when an event occurred, not the current age.
-- Don't bother detecting if wantMixture is used because not needed and it is a poor option.
if not text then
if getopt.noMissing then
return nil -- this gives a nil date which gives an error
end
text = 'currentdate'
if getopt.flag == 'usesCurrent' then
getopt.usesCurrent = true
end
end
return text
end
local args = frame:getParent().args
local fields = {}
local isNamed = args.year or args.year1 or args.year2 or
args.month or args.month1 or args.month2 or
args.day or args.day1 or args.day2
if isNamed then
fields[1] = args.year1 or args.year
fields[2] = args.month1 or args.month
fields[3] = args.day1 or args.day
fields[4] = args.year2
fields[5] = args.month2
fields[6] = args.day2
else
for i = 1, 6 do
fields[i] = args[i]
end
end
local imax = 0
for i = 1, 6 do
fields[i] = stripToNil(fields[i])
if fields[i] then
imax = i
end
if getopt.omitZero and i % 3 ~= 1 then -- omit zero months and days as unknown values but keep year 0 which is 1 BCE
if isZero(fields[i]) then
fields[i] = nil
getopt.partial = true
end
end
end
local fix = getopt.fix and 'fix' or ''
local partialText = getopt.partial and 'partial' or ''
local dates = {}
if isNamed or imax >= 3 then
local nrDates = getopt.single and 1 or 2
if getopt.wantMixture then
-- Cannot be partial since empty fields are set from current.
local components = { 'year', 'month', 'day' }
for i = 1, nrDates * 3 do
fields[i] = fields[i] or currentDate[components[i > 3 and i - 3 or i]]
end
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
else
-- If partial dates are allowed, accept
-- year only, or
-- year and month only
-- Do not accept year and day without a month because that makes no sense
-- (and because, for example, Date('partial', 2001, nil, 12) sets day = nil, not 12).
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (getopt.partial and y and (m or not d)) or (y and m and d) then
dates[i] = Date(fix, partialText, y, m, d)
elseif not y and not m and not d then
dates[i] = Date(flagCurrent())
end
end
end
else
getopt.textdates = true -- have parsed each date from a single text field
dates[1] = Date(fix, partialText, flagCurrent(fields[1]))
if not getopt.single then
dates[2] = Date(fix, partialText, flagCurrent(fields[2]))
end
end
if not dates[1] then
return message(getopt.missing1 or 'mt-need-valid-ymd')
end
if getopt.single then
return dates[1]
end
if not dates[2] then
return message(getopt.missing2 or 'mt-need-valid-ymd2')
end
return dates[1], dates[2]
end
local function ageGeneric(frame)
-- Return the result required by the specified template.
-- Can use sortable=x where x = on/table/off/debug in any supported template.
-- Some templates default to sortable=on but can be overridden.
local name = frame.args.template
if not name then
return message('mt-template-x')
end
local args = frame:getParent().args
local specs = {
age_days = { -- {{age in days}}
show = 'd',
disp = 'disp_raw',
},
age_days_nts = { -- {{age in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
},
duration_days = { -- {{duration in days}}
show = 'd',
disp = 'disp_raw',
duration = true,
},
duration_days_nts = { -- {{duration in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
duration = true,
},
age_full_years = { -- {{age}}
show = 'y',
abbr = 'abbr_raw',
flag = 'usesCurrent',
omitZero = true,
range = 'dash',
},
age_full_years_nts = { -- {{age nts}}
show = 'y',
abbr = 'abbr_raw',
format = 'format_commas',
sortable = 'on',
},
age_in_years = { -- {{age in years}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
},
age_in_years_nts = { -- {{age in years nts}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
format = 'format_commas',
sortable = 'on',
},
age_infant = { -- {{age for infant}}
-- Do not set show because special processing is done later.
abbr = yes[args.abbr] and 'abbr_infant' or 'abbr_off',
disp = 'disp_age',
sep = 'sep_space',
sortable = 'on',
},
age_m = { -- {{age in months}}
show = 'm',
disp = 'disp_raw',
},
age_w = { -- {{age in weeks}}
show = 'w',
disp = 'disp_raw',
},
age_wd = { -- {{age in weeks and days}}
show = 'wd',
},
age_yd = { -- {{age in years and days}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
},
age_yd_nts = { -- {{age in years and days nts}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
sortable = 'on',
},
age_ym = { -- {{age in years and months}}
show = 'ym',
sep = 'sep_comma',
},
age_ymd = { -- {{age in years, months and days}}
show = 'ymd',
range = true,
},
age_ymwd = { -- {{age in years, months, weeks and days}}
show = 'ymwd',
wantMixture = true,
},
}
local spec = specs[name]
if not spec then
return message('mt-template-bad-name')
end
if name == 'age_days' then
local su = stripToNil(args['show unit'])
if su then
if su == 'abbr' or su == 'full' then
spec.disp = nil
spec.abbr = su == 'abbr' and 'abbr_on' or nil
end
end
end
local partial, autofill
local range = stripToNil(args.range) or spec.range
if range then
-- Suppose partial dates are used and age could be 11 or 12 years.
-- "|range=" (empty value) has no effect (spec is used).
-- "|range=yes" or spec.range == true sets range = true (gives "11 or 12")
-- "|range=dash" or spec.range == 'dash' sets range = 'dash' (gives "11–12").
-- "|range=no" or spec.range == 'no' sets range = nil and fills each date in the diff (gives "12").
-- ("on" is equivalent to "yes", and "off" is equivalent to "no").
-- "|range=OTHER" sets range = nil and rejects partial dates.
range = ({ dash = 'dash', off = 'no', no = 'no', [true] = true })[range] or yes[range]
if range then
partial = true -- accept partial dates with a possible age range for the result
if range == 'no' then
autofill = true -- missing month/day in first or second date are filled from other date or 1
range = nil
end
end
end
local getopt = {
fix = yes[args.fix],
flag = stripToNil(args.flag) or spec.flag,
omitZero = spec.omitZero,
partial = partial,
wantMixture = spec.wantMixture,
}
local date1, date2 = getDates(frame, getopt)
if type(date1) == 'string' then
return date1
end
local format = stripToNil(args.format)
local spell = spellOptions[format]
if format then
format = 'format_' .. format
elseif name == 'age_days' and getopt.textdates then
format = 'format_commas'
end
local parms = {
diff = date2:subtract(date1, { fill = autofill }),
wantDuration = spec.duration or yes[args.duration],
range = range,
wantSc = yes[args.sc],
show = args.show == 'hide' and 'hide' or spec.show,
abbr = spec.abbr,
disp = spec.disp,
extra = makeExtra(args, getopt.usesCurrent and format ~= 'format_raw'),
format = format or spec.format,
round = yes[args.round],
sep = spec.sep,
sortable = translateParameters.sortable[args.sortable or spec.sortable],
spell = spell,
}
if (spec.negative or frame.args.negative) == 'error' and parms.diff.isnegative then
return message('mt-date-wrong-order')
end
return from_en(dateDifference(parms))
end
local function isFake(args)
-- Some templates have TemplateData with an auto value like "{{Birth date and age|YYYY|MM|DD}}".
-- Return true if that appears to be the case so the caller can output nothing rather than an error.
return args[1] == 'YYYY'
end
local function bda(frame)
-- Implement [[Template:Birth date and age]].
local args = frame:getParent().args
if isFake(args) then
return ''
end
local options = {
missing1 = 'mt-need-valid-bd',
noMissing = true,
single = true,
}
local date = getDates(frame, options)
if type(date) == 'string' then
return date -- error text
end
local Date = getExports(frame)
local diff = Date('currentdate') - date
if diff.isnegative or diff.years > 150 then
return message('mt-invalid-bd-age')
end
local disp = mtext['txt-bda-disp']
local show = 'y'
if diff.years < 2 then
disp = 'disp_age'
if diff.years == 0 and diff.months == 0 then
show = 'd'
else
show = 'm'
end
end
local problem, format = dateFormat(args)
local result = substituteParameters(
mtext['txt-bda'],
date:text('%-Y-%m-%d'),
from_en(date:text(format)),
from_en(dateDifference({
diff = diff,
show = show,
abbr = 'abbr_off',
disp = disp,
sep = 'sep_space',
}))
) .. (problem or '')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
day = true,
day1 = true,
month = true,
month1 = true,
year = true,
year1 = true,
}
local invalid
local imax = options.textdates and 1 or 3
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message('mt-warn-param1', invalid)
end
end
return result
end
local function dda(frame)
-- Implement [[Template:Death date and age]].
local args = frame:getParent().args
if isFake(args) then
return ''
end
local options = {
missing1 = 'mt-need-valid-dd',
missing2 = 'mt-need-valid-bd2',
noMissing = true,
partial = true,
}
local date1, date2 = getDates(frame, options)
if type(date1) == 'string' then
return date1
end
local diff = date1 - date2
if diff.isnegative then
return message('mt-dd-wrong-order')
end
local Date = getExports(frame)
local today = Date('currentdate') + 1 -- one day in future allows for timezones
if date1 > today then
return message('mt-dd-future')
end
local years
if diff.partial then
years = diff.partial.years
years = type(years) == 'table' and years[2] or years
else
years = diff.years
end
if years > 150 then
return message('mt-invalid-dates-age')
end
local fmt_date, fmt_ymd, problem
if date1.day then -- y, m, d known
problem, fmt_date = dateFormat(args)
fmt_ymd = '%-Y-%m-%d'
elseif date1.month then -- y, m known; d unknown
fmt_date = '%B %-Y'
fmt_ymd = '%-Y-%m-00'
else -- y known; m, d unknown
fmt_date = '%-Y'
fmt_ymd = '%-Y-00-00'
end
local sortKey
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date1.partial and date1.partial.first or date1).jdz
sortKey = makeSort(value, sortable)
end
local result = (sortKey or '') .. substituteParameters(
mtext['txt-dda'],
date1:text(fmt_ymd),
from_en(date1:text(fmt_date)),
from_en(dateDifference({
diff = diff,
show = 'y',
abbr = 'abbr_off',
disp = mtext['txt-dda-disp'],
range = 'dash',
sep = 'sep_space',
}))
) .. (problem or '')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
}
local invalid
local imax = options.textdates and 2 or 6
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message('mt-warn-param1', invalid)
end
end
return result
end
local function dateToGsd(frame)
-- Implement [[Template:Gregorian serial date]].
-- Return Gregorian serial date of the given date, or the current date.
-- The returned value is negative for dates before 1 January 1 AD
-- despite the fact that GSD is not defined for such dates.
local date = getDates(frame, { wantMixture=true, single=true })
if type(date) == 'string' then
return date
end
return tostring(date.gsd)
end
local function jdToDate(frame)
-- Return formatted date from a Julian date.
-- The result includes a time if the input includes a fraction.
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date('juliandate', args[1], args[2])
if date then
return from_en(date:text())
end
return message('mt-need-jdn')
end
local function dateToJd(frame)
-- Return Julian date (a number) from a date which may include a time,
-- or the current date ('currentdate') or current date and time ('currentdatetime').
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])
if date then
return tostring(date.jd)
end
return message('mt-need-valid-ymd-current')
end
local function timeInterval(frame)
-- Implement [[Template:Time interval]].
-- There are two positional arguments: date1, date2.
-- The default for each is the current date and time.
-- Result is date2 - date1 formatted.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {
extra = makeExtra(args),
wantDuration = yes[args.duration],
range = yes[args.range] or (args.range == 'dash' and 'dash' or nil),
wantSc = yes[args.sc],
}
local fix = yes[args.fix] and 'fix' or ''
local date1 = Date(fix, 'partial', stripToNil(args[1]) or 'currentdatetime')
if not date1 then
return message('mt-invalid-start')
end
local date2 = Date(fix, 'partial', stripToNil(args[2]) or 'currentdatetime')
if not date2 then
return message('mt-invalid-end')
end
parms.diff = date2 - date1
for argname, translate in pairs(translateParameters) do
local parm = stripToNil(args[argname])
if parm then
parm = translate[parm]
if parm == nil then -- test for nil because false is a valid setting
return message('mt-bad-param2', argname, args[argname])
end
parms[argname] = parm
end
end
if parms.round then
local round = parms.round
local show = parms.show
if round ~= 'on' then
if show then
if show.id ~= round then
return message('mt-conflicting-show', args.show, args.round)
end
else
parms.show = translateParameters.show[round]
end
end
parms.round = true
end
return from_en(dateDifference(parms))
end
local function templateGeneric(frame)
local name = frame.args.template
if not name then
return message('mt-template-x')
end
return ageGeneric(frame:newChild{title = mw.title.new(name, 10), args = frame.args})
end
return {
age_generic = ageGeneric, -- can emulate several age templates
birth_date_and_age = bda, -- Template:Birth_date_and_age
death_date_and_age = dda, -- Template:Death_date_and_age
gsd = dateToGsd, -- Template:Gregorian_serial_date
extract = dateExtract, -- Template:Extract
jd_to_date = jdToDate, -- Template:?
JULIANDAY = dateToJd, -- Template:JULIANDAY
time_interval = timeInterval, -- Template:Time_interval
[''] = templateGeneric, -- same as age_generic, but can be invoked directly
}
420vtkfjeu3kmo0331ckmwe6blvyh90
240036
240035
2025-06-08T16:52:00Z
Narazeni
826
240036
Scribunto
text/plain
-- Implement various "age of" and other date-related templates.
local mtext = {
-- Message and other text that should be localized.
['mt-bad-param1'] = 'Invalid parameter $1',
['mt-bad-param2'] = 'Parameter $1=$2 is invalid',
['mt-bad-show'] = 'Parameter show=$1 is not supported here',
['mt-cannot-add'] = 'Cannot add "$1"',
['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2',
['mt-date-wrong-order'] = 'The second date must be later in time than the first date',
['mt-dd-future'] = 'Death date (first date) must not be in the future',
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)',
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age',
['mt-invalid-dates-age'] = 'Invalid dates for calculating age',
['mt-invalid-end'] = 'Invalid end date in second parameter',
['mt-invalid-start'] = 'Invalid start date in first parameter',
['mt-need-jdn'] = 'Need valid Julian date number',
['mt-need-valid-bd'] = 'Need valid birth date: year, month, day',
['mt-need-valid-bd2'] = 'Need valid birth date (second date): year, month, day',
['mt-need-valid-date'] = 'Need valid date',
['mt-need-valid-dd'] = 'Need valid death date (first date): year, month, day',
['mt-need-valid-ymd'] = 'Need valid year, month, day',
['mt-need-valid-ymd-current'] = 'Need valid year|month|day or "currentdate"',
['mt-need-valid-ymd2'] = 'Second date should be year, month, day',
['mt-template-bad-name'] = 'The specified template name is not valid',
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation',
['txt-age'] = '(age ',
['txt-aged'] = ' (aged ',
['txt-and'] = ' и ',
['txt-comma-and'] = ', и ',
['txt-error'] = 'Ошибка: ',
['txt-or'] = ' или ',
}
local translate, from_en, to_en, isZero
if translate then
-- Functions to translate from en to local language and reverse go here.
-- See example at [[:bn:Module:বয়স]].
else
from_en = function (text)
return text
end
isZero = function (text)
return tonumber(text) == 0
end
end
local _Date, _currentDate
local function getExports(frame)
-- Return objects exported from the date module or its sandbox.
if not _Date then
local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''
local datemod = require('Module:Date' .. sandbox)
local realDate = datemod._Date
_currentDate = datemod._current
if to_en then
_Date = function (...)
local args = {}
for i, v in ipairs({...}) do
args[i] = to_en(v)
end
return realDate(unpack(args))
end
else
_Date = realDate
end
end
return _Date, _currentDate
end
local Collection -- a table to hold items
Collection = {
add = function (self, item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end,
join = function (self, sep)
return table.concat(self, sep)
end,
remove = function (self, pos)
if self.n > 0 and (pos == nil or (0 < pos and pos <= self.n)) then
self.n = self.n - 1
return table.remove(self, pos)
end
end,
sort = function (self, comp)
table.sort(self, comp)
end,
new = function ()
return setmetatable({n = 0}, Collection)
end
}
Collection.__index = Collection
local function stripToNil(text)
-- If text is a string, return its trimmed content, or nil if empty.
-- Otherwise return text (which may, for example, be nil).
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function yes(parameter)
-- Return true if parameter should be interpreted as "yes".
-- Do not want to accept mixed upper/lowercase unless done by current templates.
-- Need to accept "on" because "round=on" is wanted.
return ({ y = true, yes = true, on = true })[parameter]
end
local function message(msg, id)
-- Return formatted message text for an error or warning.
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local text
if type(msg) == 'table' then
text = getText(msg[1])
local rep = {}
for i, v in ipairs(msg) do
if i > 1 then
rep['$' .. (i - 1)] = v
end
end
text = text:gsub('$%d+', rep)
else
text = getText(msg)
end
local categories = {
error = '[[Category:Age error]]',
warning = '[[Category:Age error]]', -- same as error until determine whether 'Age warning' would be worthwhile
}
local a, b, category
if id == 'warning' then
a = '<sup>[<i>'
b = '</i>]</sup>'
else
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
end
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
category = categories[id or 'error']
end
return
a ..
mw.text.nowiki(text) ..
b ..
(category or '')
end
local function formatNumber(number)
-- Return the given number formatted with commas as group separators,
-- given that the number is an integer.
local numstr = tostring(number)
local length = #numstr
local places = Collection.new()
local pos = 0
repeat
places:add(pos)
pos = pos + 3
until pos >= length
places:add(length)
local groups = Collection.new()
for i = places.n, 2, -1 do
local p1 = length - places[i] + 1
local p2 = length - places[i - 1]
groups:add(numstr:sub(p1, p2))
end
return groups:join(',')
end
local function spellNumber(number, options, i)
-- Return result of spelling number, or
-- return number (as a string) if cannot spell it.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
return require('Module:ConvertNumeric').spell_number(
number,
nil, -- fraction numerator
nil, -- fraction denominator
i == 1 and options.upper, -- true: 'One' instead of 'one'
not options.us, -- true: use 'and' between tens/ones etc
options.adj, -- true: hyphenated
options.ordinal -- true: 'first' instead of 'one'
) or number
end
local function makeExtra(args, flagCurrent)
-- Return extra text that will be inserted before the visible result
-- but after any sort key.
local extra = args.prefix or ''
if mw.ustring.len(extra) > 1 then
-- Parameter "~" gives "~3" whereas "over" gives "over 3".
if extra:sub(-6, -1) ~= ' ' then
extra = extra .. ' '
end
end
if flagCurrent then
extra = '<span class="currentage"></span>' .. extra
end
return extra
end
local function makeSort(value, sortable)
-- Return a sort key if requested.
-- Assume value is a valid number which has not overflowed.
if sortable == 'sortable_table' or sortable == 'sortable_on' or sortable == 'sortable_debug' then
local sortKey
if value == 0 then
sortKey = '5000000000000000000'
else
local mag = math.floor(math.log10(math.abs(value)) + 1e-14)
if value > 0 then
sortKey = 7000 + mag
else
sortKey = 2999 - mag
value = value + 10^(mag+1)
end
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag)))
end
local result
if sortable == 'sortable_table' then
result = 'data-sort-value="_SORTKEY_"|'
elseif sortable == 'sortable_debug' then
result = '<span data-sort-value="_SORTKEY_♠"><span style="border:1px solid">_SORTKEY_♠</span></span>'
else
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
return result:gsub('_SORTKEY_', sortKey)
end
end
local translateParameters = {
abbr = {
off = 'abbr_off',
on = 'abbr_on',
},
disp = {
age = 'disp_age',
raw = 'disp_raw',
},
format = {
raw = 'format_raw',
commas = 'format_commas',
},
round = {
on = 'on',
yes = 'on',
months = 'ym',
weeks = 'ymw',
days = 'ymd',
hours = 'ymdh',
},
sep = {
comma = 'sep_comma',
[','] = 'sep_comma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
},
show = {
hide = { id = 'hide' },
y = { 'y', id = 'y' },
ym = { 'y', 'm', id = 'ym' },
ymd = { 'y', 'm', 'd', id = 'ymd' },
ymw = { 'y', 'm', 'w', id = 'ymw' },
ymwd = { 'y', 'm', 'w', 'd', id = 'ymwd' },
yd = { 'y', 'd', id = 'yd', keepZero = true },
m = { 'm', id = 'm' },
md = { 'm', 'd', id = 'md' },
w = { 'w', id = 'w' },
wd = { 'w', 'd', id = 'wd' },
h = { 'H', id = 'h' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dhm = { 'd', 'H', 'M', id = 'dhm' },
dhms = { 'd', 'H', 'M', 'S', id = 'dhms' },
ymdh = { 'y', 'm', 'd', 'H', id = 'ymdh' },
ymdhm = { 'y', 'm', 'd', 'H', 'M', id = 'ymdhm' },
ymwdh = { 'y', 'm', 'w', 'd', 'H', id = 'ymwdh' },
ymwdhm = { 'y', 'm', 'w', 'd', 'H', 'M', id = 'ymwdhm' },
},
sortable = {
off = false,
on = 'sortable_on',
table = 'sortable_table',
debug = 'sortable_debug',
},
}
local spellOptions = {
cardinal = {},
Cardinal = { upper = true },
cardinal_us = { us = true },
Cardinal_us = { us = true, upper = true },
ordinal = { ordinal = true },
Ordinal = { ordinal = true, upper = true },
ordinal_us = { ordinal = true, us = true },
Ordinal_us = { ordinal = true, us = true, upper = true },
}
local function dateExtract(frame)
-- Return part of a date after performing an optional operation.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {}
for i, v in ipairs(args) do
parms[i] = v
end
if yes(args.fix) then
table.insert(parms, 'fix')
end
if yes(args.partial) then
table.insert(parms, 'partial')
end
local show = stripToNil(args.show) or 'dmy'
local date = Date(unpack(parms))
if not date then
if show == 'format' then
return 'error'
end
return message('mt-need-valid-date')
end
local add = stripToNil(args.add)
if add then
for item in add:gmatch('%S+') do
date = date + item
if not date then
return message({ 'mt-cannot-add', item })
end
end
end
local sortKey, result
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date.partial and date.partial.first or date).jdz
sortKey = makeSort(value, sortable)
end
if show ~= 'hide' then
result = date[show]
if result == nil then
result = from_en(date:text(show))
elseif type(result) == 'boolean' then
result = result and '1' or '0'
else
result = from_en(tostring(result))
end
end
return (sortKey or '') .. makeExtra(args) .. (result or '')
end
local function rangeJoin(range)
-- Return text to be used between a range of ages.
return range == 'dash' and '–' or mtext['txt-or']
end
local function makeText(values, components, names, options, noUpper)
-- Return wikitext representing an age or duration.
local text = Collection.new()
local count = #values
local sep = names.sep or ''
for i, v in ipairs(values) do
-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).
local islist = type(v) == 'table'
if (islist or v > 0) or (text.n == 0 and i == count) or (text.n > 0 and components.keepZero) then
local fmt, vstr
if options.spell then
fmt = function(number)
return spellNumber(number, options.spell, noUpper or i)
end
elseif i == 1 and options.format == 'format_commas' then
-- Numbers after the first should be small and not need formatting.
fmt = formatNumber
else
fmt = tostring
end
if islist then
vstr = fmt(v[1]) .. rangeJoin(options.range)
noUpper = true
vstr = vstr .. fmt(v[2])
else
vstr = fmt(v)
end
local name = names[components[i]]
if name then
local plural = names.plural
if not plural or (islist and v[2] or v) == 1 then
plural = ''
end
text:add(vstr .. sep .. name .. plural)
else
text:add(vstr)
end
end
end
local first, last
if options.join == 'sep_space' then
first = ' '
last = ' '
elseif options.join == 'sep_comma' then
first = ', '
last = ', '
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
last = mtext['txt-comma-and']
else
first = ', '
last = mtext['txt-and']
end
for i, v in ipairs(text) do
if i < text.n then
text[i] = v .. (i + 1 < text.n and first or last)
end
end
local sign = ''
if options.isnegative then
-- Do not display negative zero.
if text.n > 1 or (text.n == 1 and text[1]:sub(1, 1) ~= '0' ) then
if options.format == 'format_raw' then
sign = '-' -- plain hyphen so result can be used in a calculation
else
sign = '−' -- Unicode U+2212 MINUS SIGN
end
end
end
return
(options.sortKey or '') ..
(options.extra or '') ..
sign ..
text:join() ..
(options.suffix or '')
end
local function dateDifference(parms)
-- Return a formatted date difference using the given parameters
-- which have been validated.
local names = {
abbr_off = {
plural = '',
sep = ' ',
y = 'год',
m = 'месяц',
w = 'недель',
d = 'день',
H = 'час',
M = 'минут',
S = 'секунд',
},
abbr_on = {
y = 'г.',
m = 'мес.',
w = 'нед.',
d = 'дн.',
H = 'час.',
M = 'мин.',
S = 'сек.',
},
abbr_infant = { -- for {{age for infant}}
plural = 's',
sep = ' ',
y = 'yr',
m = 'mo',
w = 'wk',
d = 'day',
H = 'hr',
M = 'min',
S = 'sec',
},
abbr_raw = {},
}
local diff = parms.diff -- must be a valid date difference
local show = parms.show -- may be nil; default is set below
local abbr = parms.abbr or 'abbr_on'
local defaultJoin
if abbr ~= 'abbr_off' then
defaultJoin = 'sep_space'
end
if not show then
show = 'ymd'
if parms.disp == 'disp_age' then
if diff.years < 3 then
defaultJoin = 'sep_space'
if diff.years >= 1 then
show = 'ym'
else
show = 'md'
end
else
show = 'y'
end
end
end
if type(show) ~= 'table' then
show = translateParameters.show[show]
end
if parms.disp == 'disp_raw' then
defaultJoin = 'sep_space'
abbr = 'abbr_raw'
elseif parms.wantSc then
defaultJoin = 'sep_serialcomma'
end
local diffOptions = {
round = parms.round,
duration = parms.wantDuration,
range = parms.range and true or nil,
}
local sortKey
if parms.sortable then
local value = diff.age_days + (parms.wantDuration and 1 or 0) -- days and fraction of a day
if diff.isnegative then
value = -value
end
sortKey = makeSort(value, parms.sortable)
end
local textOptions = {
extra = parms.extra,
format = parms.format,
join = parms.sep or defaultJoin,
isnegative = diff.isnegative,
range = parms.range,
sortKey = sortKey,
spell = parms.spell,
suffix = parms.suffix, -- not currently used
}
if show.id == 'hide' then
return sortKey or ''
end
local values = { diff:age(show.id, diffOptions) }
if values[1] then
return makeText(values, show, names[abbr], textOptions)
end
if diff.partial then
-- Handle a more complex range such as
-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days
local opt = {
format = textOptions.format,
join = textOptions.join,
isnegative = textOptions.isnegative,
spell = textOptions.spell,
}
return
(textOptions.sortKey or '') ..
makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..
rangeJoin(textOptions.range) ..
makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..
(textOptions.suffix or '')
end
return message({ 'mt-bad-show', show.id })
end
local function getDates(frame, getopt)
-- Parse template parameters and return one of:
-- * date (a date table, if single)
-- * date1, date2 (two date tables, if not single)
-- * text (a string error message)
-- A missing date is optionally replaced with the current date.
-- If wantMixture is true, a missing date component is replaced
-- from the current date, so can get a bizarre mixture of
-- specified/current y/m/d as has been done by some "age" templates.
-- Some results may be placed in table getopt.
local Date, currentDate = getExports(frame)
getopt = getopt or {}
local function flagCurrent(text)
-- This allows the calling template to detect if the current date has been used,
-- that is, whether both dates have been entered in a template expecting two.
-- For example, an infobox may want the age when an event occurred, not the current age.
-- Don't bother detecting if wantMixture is used because not needed and it is a poor option.
if not text then
if getopt.noMissing then
return nil -- this gives a nil date which gives an error
end
text = 'currentdate'
if getopt.flag == 'usesCurrent' then
getopt.usesCurrent = true
end
end
return text
end
local args = frame:getParent().args
local fields = {}
local isNamed = args.year or args.year1 or args.year2 or
args.month or args.month1 or args.month2 or
args.day or args.day1 or args.day2
if isNamed then
fields[1] = args.year1 or args.year
fields[2] = args.month1 or args.month
fields[3] = args.day1 or args.day
fields[4] = args.year2
fields[5] = args.month2
fields[6] = args.day2
else
for i = 1, 6 do
fields[i] = args[i]
end
end
local imax = 0
for i = 1, 6 do
fields[i] = stripToNil(fields[i])
if fields[i] then
imax = i
end
if getopt.omitZero and i % 3 ~= 1 then -- omit zero months and days as unknown values but keep year 0 which is 1 BCE
if isZero(fields[i]) then
fields[i] = nil
getopt.partial = true
end
end
end
local fix = getopt.fix and 'fix' or ''
local partialText = getopt.partial and 'partial' or ''
local dates = {}
if isNamed or imax >= 3 then
local nrDates = getopt.single and 1 or 2
if getopt.wantMixture then
-- Cannot be partial since empty fields are set from current.
local components = { 'year', 'month', 'day' }
for i = 1, nrDates * 3 do
fields[i] = fields[i] or currentDate[components[i > 3 and i - 3 or i]]
end
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
else
-- If partial dates are allowed, accept
-- year only, or
-- year and month only
-- Do not accept year and day without a month because that makes no sense
-- (and because, for example, Date('partial', 2001, nil, 12) sets day = nil, not 12).
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (getopt.partial and y and (m or not d)) or (y and m and d) then
dates[i] = Date(fix, partialText, y, m, d)
elseif not y and not m and not d then
dates[i] = Date(flagCurrent())
end
end
end
else
getopt.textdates = true -- have parsed each date from a single text field
dates[1] = Date(fix, partialText, flagCurrent(fields[1]))
if not getopt.single then
dates[2] = Date(fix, partialText, flagCurrent(fields[2]))
end
end
if not dates[1] then
return message(getopt.missing1 or 'mt-need-valid-ymd')
end
if getopt.single then
return dates[1]
end
if not dates[2] then
return message(getopt.missing2 or 'mt-need-valid-ymd2')
end
return dates[1], dates[2]
end
local function ageGeneric(frame)
-- Return the result required by the specified template.
-- Can use sortable=x where x = on/table/off/debug in any supported template.
-- Some templates default to sortable=on but can be overridden.
local name = frame.args.template
if not name then
return message('mt-template-x')
end
local args = frame:getParent().args
local specs = {
age_days = { -- {{age in days}}
show = 'd',
disp = 'disp_raw',
},
age_days_nts = { -- {{age in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
},
duration_days = { -- {{duration in days}}
show = 'd',
disp = 'disp_raw',
duration = true,
},
duration_days_nts = { -- {{duration in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
duration = true,
},
age_full_years = { -- {{age}}
show = 'y',
abbr = 'abbr_raw',
flag = 'usesCurrent',
omitZero = true,
range = 'no',
},
age_full_years_nts = { -- {{age nts}}
show = 'y',
abbr = 'abbr_raw',
format = 'format_commas',
sortable = 'on',
},
age_in_years = { -- {{age in years}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
},
age_in_years_nts = { -- {{age in years nts}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
format = 'format_commas',
sortable = 'on',
},
age_infant = { -- {{age for infant}}
-- Do not set show because special processing is done later.
abbr = yes(args.abbr) and 'abbr_infant' or 'abbr_off',
disp = 'disp_age',
sep = 'sep_space',
sortable = 'on',
},
age_m = { -- {{age in months}}
show = 'm',
disp = 'disp_raw',
},
age_w = { -- {{age in weeks}}
show = 'w',
disp = 'disp_raw',
},
age_wd = { -- {{age in weeks and days}}
show = 'wd',
},
age_yd = { -- {{age in years and days}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
},
age_yd_nts = { -- {{age in years and days nts}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
sortable = 'on',
},
age_ym = { -- {{age in years and months}}
show = 'ym',
sep = 'sep_comma',
},
age_ymd = { -- {{age in years, months and days}}
show = 'ymd',
range = true,
},
age_ymwd = { -- {{age in years, months, weeks and days}}
show = 'ymwd',
wantMixture = true,
},
}
local spec = specs[name]
if not spec then
return message('mt-template-bad-name')
end
if name == 'age_days' then
local su = stripToNil(args['show unit'])
if su then
if su == 'abbr' or su == 'full' then
spec.disp = nil
spec.abbr = su == 'abbr' and 'abbr_on' or nil
end
end
end
local partial, autofill
local range = stripToNil(args.range) or spec.range
if range then
-- Suppose partial dates are used and age could be 11 or 12 years.
-- "|range=" (empty value) has no effect (spec is used).
-- "|range=yes" or spec.range == true sets range = true (gives "11 or 12")
-- "|range=dash" or spec.range == 'dash' sets range = 'dash' (gives "11–12").
-- "|range=no" or spec.range == 'no' sets range = nil and fills each date in the diff (gives "12").
-- ("on" is equivalent to "yes", and "off" is equivalent to "no").
-- "|range=OTHER" sets range = nil and rejects partial dates.
range = ({ dash = 'dash', off = 'no', no = 'no', [true] = true })[range] or yes(range)
if range then
partial = true -- accept partial dates with a possible age range for the result
if range == 'no' then
autofill = true -- missing month/day in first or second date are filled from other date or 1
range = nil
end
end
end
local getopt = {
fix = yes(args.fix),
flag = stripToNil(args.flag) or spec.flag,
omitZero = spec.omitZero,
partial = partial,
wantMixture = spec.wantMixture,
}
local date1, date2 = getDates(frame, getopt)
if type(date1) == 'string' then
return date1
end
local format = stripToNil(args.format)
local spell = spellOptions[format]
if format then
format = 'format_' .. format
elseif name == 'age_days' and getopt.textdates then
format = 'format_commas'
end
local parms = {
diff = date2:subtract(date1, { fill = autofill }),
wantDuration = spec.duration or yes(args.duration),
range = range,
wantSc = yes(args.sc),
show = args.show == 'hide' and 'hide' or spec.show,
abbr = spec.abbr,
disp = spec.disp,
extra = makeExtra(args, getopt.usesCurrent and format ~= 'format_raw'),
format = format or spec.format,
round = yes(args.round),
sep = spec.sep,
sortable = translateParameters.sortable[args.sortable or spec.sortable],
spell = spell,
}
if (spec.negative or frame.args.negative) == 'error' and parms.diff.isnegative then
return message('mt-date-wrong-order')
end
return from_en(dateDifference(parms))
end
local function bda(frame)
-- Implement [[Template:Birth date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-bd',
noMissing = true,
single = true,
}
local date = getDates(frame, options)
if type(date) == 'string' then
return date -- error text
end
local Date = getExports(frame)
local diff = Date('currentdate') - date
if diff.isnegative or diff.years > 150 then
return message('mt-invalid-bd-age')
end
local disp, show = 'disp_raw', 'y'
if diff.years < 2 then
disp = 'disp_age'
if diff.years == 0 and diff.months == 0 then
show = 'd'
else
show = 'm'
end
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' ..
(df and '%-d %B %-Y' or '%B %-d, %-Y')
result = from_en('<span style="display:none"> ' ..
date:text(result) ..
'<span class="noprint ForceAgeToShow"> ' ..
mtext['txt-age'] ..
dateDifference({
diff = diff,
show = show,
abbr = 'abbr_off',
disp = disp,
sep = 'sep_space',
}) ..
')</span>')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
day = true,
day1 = true,
month = true,
month1 = true,
year = true,
year1 = true,
}
local invalid
local imax = options.textdates and 1 or 3
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dda(frame)
-- Implement [[Template:Death date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-dd',
missing2 = 'mt-need-valid-bd2',
noMissing = true,
partial = true,
}
local date1, date2 = getDates(frame, options)
if type(date1) == 'string' then
return date1
end
local diff = date1 - date2
if diff.isnegative then
return message('mt-dd-wrong-order')
end
local Date = getExports(frame)
local today = Date('currentdate') + 1 -- one day in future allows for timezones
if date1 > today then
return message('mt-dd-future')
end
local years
if diff.partial then
years = diff.partial.years
years = type(years) == 'table' and years[2] or years
else
years = diff.years
end
if years > 150 then
return message('mt-invalid-dates-age')
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result
if date1.day then -- y, m, d known
result = (df and
'%-d %B %-Y' or
'%B %-d, %-Y') ..
'<span style="display:none">(%-Y-%m-%d)</span>'
elseif date1.month then -- y, m known; d unknown
result =
'%B %-Y' ..
'<span style="display:none">(%-Y-%m-00)</span>'
else -- y known; m, d unknown
result =
'%-Y' ..
'<span style="display:none">(%-Y-00-00)</span>'
end
result = from_en(date1:text(result) ..
mtext['txt-aged'] ..
dateDifference({
diff = diff,
show = 'y',
abbr = 'abbr_off',
disp = 'disp_raw',
range = 'dash',
sep = 'sep_space',
}) ..
')')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
}
local invalid
local imax = options.textdates and 2 or 6
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dateToGsd(frame)
-- Implement [[Template:Gregorian serial date]].
-- Return Gregorian serial date of the given date, or the current date.
-- The returned value is negative for dates before 1 January 1 AD
-- despite the fact that GSD is not defined for such dates.
local date = getDates(frame, { wantMixture=true, single=true })
if type(date) == 'string' then
return date
end
return tostring(date.gsd)
end
local function jdToDate(frame)
-- Return formatted date from a Julian date.
-- The result includes a time if the input includes a fraction.
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date('juliandate', args[1], args[2])
if date then
return from_en(date:text())
end
return message('mt-need-jdn')
end
local function dateToJd(frame)
-- Return Julian date (a number) from a date which may include a time,
-- or the current date ('currentdate') or current date and time ('currentdatetime').
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])
if date then
return tostring(date.jd)
end
return message('mt-need-valid-ymd-current')
end
local function timeInterval(frame)
-- Implement [[Template:Time interval]].
-- There are two positional arguments: date1, date2.
-- The default for each is the current date and time.
-- Result is date2 - date1 formatted.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {
extra = makeExtra(args),
wantDuration = yes(args.duration),
range = yes(args.range) or (args.range == 'dash' and 'dash' or nil),
wantSc = yes(args.sc),
}
local fix = yes(args.fix) and 'fix' or ''
local date1 = Date(fix, 'partial', stripToNil(args[1]) or 'currentdatetime')
if not date1 then
return message('mt-invalid-start')
end
local date2 = Date(fix, 'partial', stripToNil(args[2]) or 'currentdatetime')
if not date2 then
return message('mt-invalid-end')
end
parms.diff = date2 - date1
for argname, translate in pairs(translateParameters) do
local parm = stripToNil(args[argname])
if parm then
parm = translate[parm]
if parm == nil then -- test for nil because false is a valid setting
return message({ 'mt-bad-param2', argname, args[argname] })
end
parms[argname] = parm
end
end
if parms.round then
local round = parms.round
local show = parms.show
if round ~= 'on' then
if show then
if show.id ~= round then
return message({ 'mt-conflicting-show', args.show, args.round })
end
else
parms.show = translateParameters.show[round]
end
end
parms.round = true
end
return from_en(dateDifference(parms))
end
return {
age_generic = ageGeneric, -- can emulate several age templates
birth_date_and_age = bda, -- Template:Birth_date_and_age
death_date_and_age = dda, -- Template:Death_date_and_age
gsd = dateToGsd, -- Template:Gregorian_serial_date
extract = dateExtract, -- Template:Extract
jd_to_date = jdToDate, -- Template:?
JULIANDAY = dateToJd, -- Template:JULIANDAY
time_interval = timeInterval, -- Template:Time_interval
}
cv4cyvm426376tqaxl8xalmo1gyn51g
240037
240036
2025-06-08T16:54:33Z
Narazeni
826
240037
Scribunto
text/plain
-- Implement various "age of" and other date-related templates.
local mtext = {
-- Message and other text that should be localized.
['mt-bad-param1'] = 'Invalid parameter $1',
['mt-bad-param2'] = 'Parameter $1=$2 is invalid',
['mt-bad-show'] = 'Parameter show=$1 is not supported here',
['mt-cannot-add'] = 'Cannot add "$1"',
['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2',
['mt-date-wrong-order'] = 'The second date must be later in time than the first date',
['mt-dd-future'] = 'Death date (first date) must not be in the future',
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)',
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age',
['mt-invalid-dates-age'] = 'Invalid dates for calculating age',
['mt-invalid-end'] = 'Invalid end date in second parameter',
['mt-invalid-start'] = 'Invalid start date in first parameter',
['mt-need-jdn'] = 'Need valid Julian date number',
['mt-need-valid-bd'] = 'Need valid birth date: year, month, day',
['mt-need-valid-bd2'] = 'Need valid birth date (second date): year, month, day',
['mt-need-valid-date'] = 'Need valid date',
['mt-need-valid-dd'] = 'Need valid death date (first date): year, month, day',
['mt-need-valid-ymd'] = 'Need valid year, month, day',
['mt-need-valid-ymd-current'] = 'Need valid year|month|day or "currentdate"',
['mt-need-valid-ymd2'] = 'Second date should be year, month, day',
['mt-template-bad-name'] = 'The specified template name is not valid',
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation',
['txt-age'] = '(age ',
['txt-aged'] = ' (aged ',
['txt-and'] = ' и ',
['txt-comma-and'] = ', и ',
['txt-error'] = 'Ошибка: ',
['txt-or'] = ' или ',
}
local translate, from_en, to_en, isZero
if translate then
-- Functions to translate from en to local language and reverse go here.
-- See example at [[:bn:Module:বয়স]].
else
from_en = function (text)
return text
end
isZero = function (text)
return tonumber(text) == 0
end
end
local _Date, _currentDate
local function getExports(frame)
-- Return objects exported from the date module or its sandbox.
if not _Date then
local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''
local datemod = require('Module:Date' .. sandbox)
local realDate = datemod._Date
_currentDate = datemod._current
if to_en then
_Date = function (...)
local args = {}
for i, v in ipairs({...}) do
args[i] = to_en(v)
end
return realDate(unpack(args))
end
else
_Date = realDate
end
end
return _Date, _currentDate
end
local Collection -- a table to hold items
Collection = {
add = function (self, item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end,
join = function (self, sep)
return table.concat(self, sep)
end,
remove = function (self, pos)
if self.n > 0 and (pos == nil or (0 < pos and pos <= self.n)) then
self.n = self.n - 1
return table.remove(self, pos)
end
end,
sort = function (self, comp)
table.sort(self, comp)
end,
new = function ()
return setmetatable({n = 0}, Collection)
end
}
Collection.__index = Collection
local function stripToNil(text)
-- If text is a string, return its trimmed content, or nil if empty.
-- Otherwise return text (which may, for example, be nil).
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function yes(parameter)
-- Return true if parameter should be interpreted as "yes".
-- Do not want to accept mixed upper/lowercase unless done by current templates.
-- Need to accept "on" because "round=on" is wanted.
return ({ y = true, yes = true, on = true })[parameter]
end
local function message(msg, id)
-- Return formatted message text for an error or warning.
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local text
if type(msg) == 'table' then
text = getText(msg[1])
local rep = {}
for i, v in ipairs(msg) do
if i > 1 then
rep['$' .. (i - 1)] = v
end
end
text = text:gsub('$%d+', rep)
else
text = getText(msg)
end
local categories = {
error = '[[Category:Age error]]',
warning = '[[Category:Age error]]', -- same as error until determine whether 'Age warning' would be worthwhile
}
local a, b, category
if id == 'warning' then
a = '<sup>[<i>'
b = '</i>]</sup>'
else
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
end
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
category = categories[id or 'error']
end
return
a ..
mw.text.nowiki(text) ..
b ..
(category or '')
end
local function formatNumber(number)
-- Return the given number formatted with commas as group separators,
-- given that the number is an integer.
local numstr = tostring(number)
local length = #numstr
local places = Collection.new()
local pos = 0
repeat
places:add(pos)
pos = pos + 3
until pos >= length
places:add(length)
local groups = Collection.new()
for i = places.n, 2, -1 do
local p1 = length - places[i] + 1
local p2 = length - places[i - 1]
groups:add(numstr:sub(p1, p2))
end
return groups:join(',')
end
local function spellNumber(number, options, i)
-- Return result of spelling number, or
-- return number (as a string) if cannot spell it.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
return require('Module:ConvertNumeric').spell_number(
number,
nil, -- fraction numerator
nil, -- fraction denominator
i == 1 and options.upper, -- true: 'One' instead of 'one'
not options.us, -- true: use 'and' between tens/ones etc
options.adj, -- true: hyphenated
options.ordinal -- true: 'first' instead of 'one'
) or number
end
local function makeExtra(args, flagCurrent)
-- Return extra text that will be inserted before the visible result
-- but after any sort key.
local extra = args.prefix or ''
if mw.ustring.len(extra) > 1 then
-- Parameter "~" gives "~3" whereas "over" gives "over 3".
if extra:sub(-6, -1) ~= ' ' then
extra = extra .. ' '
end
end
if flagCurrent then
extra = '<span class="currentage"></span>' .. extra
end
return extra
end
local function makeSort(value, sortable)
-- Return a sort key if requested.
-- Assume value is a valid number which has not overflowed.
if sortable == 'sortable_table' or sortable == 'sortable_on' or sortable == 'sortable_debug' then
local sortKey
if value == 0 then
sortKey = '5000000000000000000'
else
local mag = math.floor(math.log10(math.abs(value)) + 1e-14)
if value > 0 then
sortKey = 7000 + mag
else
sortKey = 2999 - mag
value = value + 10^(mag+1)
end
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag)))
end
local result
if sortable == 'sortable_table' then
result = 'data-sort-value="_SORTKEY_"|'
elseif sortable == 'sortable_debug' then
result = '<span data-sort-value="_SORTKEY_♠"><span style="border:1px solid">_SORTKEY_♠</span></span>'
else
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
return result:gsub('_SORTKEY_', sortKey)
end
end
local translateParameters = {
abbr = {
off = 'abbr_off',
on = 'abbr_on',
},
disp = {
age = 'disp_age',
raw = 'disp_raw',
},
format = {
raw = 'format_raw',
commas = 'format_commas',
},
round = {
on = 'on',
yes = 'on',
months = 'ym',
weeks = 'ymw',
days = 'ymd',
hours = 'ymdh',
},
sep = {
comma = 'sep_comma',
[','] = 'sep_comma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
},
show = {
hide = { id = 'hide' },
y = { 'y', id = 'y' },
ym = { 'y', 'm', id = 'ym' },
ymd = { 'y', 'm', 'd', id = 'ymd' },
ymw = { 'y', 'm', 'w', id = 'ymw' },
ymwd = { 'y', 'm', 'w', 'd', id = 'ymwd' },
yd = { 'y', 'd', id = 'yd', keepZero = true },
m = { 'm', id = 'm' },
md = { 'm', 'd', id = 'md' },
w = { 'w', id = 'w' },
wd = { 'w', 'd', id = 'wd' },
h = { 'H', id = 'h' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dhm = { 'd', 'H', 'M', id = 'dhm' },
dhms = { 'd', 'H', 'M', 'S', id = 'dhms' },
ymdh = { 'y', 'm', 'd', 'H', id = 'ymdh' },
ymdhm = { 'y', 'm', 'd', 'H', 'M', id = 'ymdhm' },
ymwdh = { 'y', 'm', 'w', 'd', 'H', id = 'ymwdh' },
ymwdhm = { 'y', 'm', 'w', 'd', 'H', 'M', id = 'ymwdhm' },
},
sortable = {
off = false,
on = 'sortable_on',
table = 'sortable_table',
debug = 'sortable_debug',
},
}
local spellOptions = {
cardinal = {},
Cardinal = { upper = true },
cardinal_us = { us = true },
Cardinal_us = { us = true, upper = true },
ordinal = { ordinal = true },
Ordinal = { ordinal = true, upper = true },
ordinal_us = { ordinal = true, us = true },
Ordinal_us = { ordinal = true, us = true, upper = true },
}
local function dateExtract(frame)
-- Return part of a date after performing an optional operation.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {}
for i, v in ipairs(args) do
parms[i] = v
end
if yes(args.fix) then
table.insert(parms, 'fix')
end
if yes(args.partial) then
table.insert(parms, 'partial')
end
local show = stripToNil(args.show) or 'dmy'
local date = Date(unpack(parms))
if not date then
if show == 'format' then
return 'error'
end
return message('mt-need-valid-date')
end
local add = stripToNil(args.add)
if add then
for item in add:gmatch('%S+') do
date = date + item
if not date then
return message({ 'mt-cannot-add', item })
end
end
end
local sortKey, result
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date.partial and date.partial.first or date).jdz
sortKey = makeSort(value, sortable)
end
if show ~= 'hide' then
result = date[show]
if result == nil then
result = from_en(date:text(show))
elseif type(result) == 'boolean' then
result = result and '1' or '0'
else
result = from_en(tostring(result))
end
end
return (sortKey or '') .. makeExtra(args) .. (result or '')
end
local function rangeJoin(range)
-- Return text to be used between a range of ages.
return range == 'dash' and '–' or mtext['txt-or']
end
local function makeText(values, components, names, options, noUpper)
-- Return wikitext representing an age or duration.
local text = Collection.new()
local count = #values
local sep = names.sep or ''
for i, v in ipairs(values) do
-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).
local islist = type(v) == 'table'
if (islist or v > 0) or (text.n == 0 and i == count) or (text.n > 0 and components.keepZero) then
local fmt, vstr
if options.spell then
fmt = function(number)
return spellNumber(number, options.spell, noUpper or i)
end
elseif i == 1 and options.format == 'format_commas' then
-- Numbers after the first should be small and not need formatting.
fmt = formatNumber
else
fmt = tostring
end
if islist then
vstr = fmt(v[1]) .. rangeJoin(options.range)
noUpper = true
vstr = vstr .. fmt(v[2])
else
vstr = fmt(v)
end
local name = names[components[i]]
if name then
local plural = names.plural
if not plural or (islist and v[2] or v) == 1 then
plural = ''
end
text:add(vstr .. sep .. name .. plural)
else
text:add(vstr)
end
end
end
local first, last
if options.join == 'sep_space' then
first = ' '
last = ' '
elseif options.join == 'sep_comma' then
first = ', '
last = ', '
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
last = mtext['txt-comma-and']
else
first = ', '
last = mtext['txt-and']
end
for i, v in ipairs(text) do
if i < text.n then
text[i] = v .. (i + 1 < text.n and first or last)
end
end
local sign = ''
if options.isnegative then
-- Do not display negative zero.
if text.n > 1 or (text.n == 1 and text[1]:sub(1, 1) ~= '0' ) then
if options.format == 'format_raw' then
sign = '-' -- plain hyphen so result can be used in a calculation
else
sign = '−' -- Unicode U+2212 MINUS SIGN
end
end
end
return
(options.sortKey or '') ..
(options.extra or '') ..
sign ..
text:join() ..
(options.suffix or '')
end
local function dateDifference(parms)
-- Return a formatted date difference using the given parameters
-- which have been validated.
local names = {
abbr_off = {
plural = '',
sep = ' ',
y = 'წანა',
m = 'თუთა',
w = 'მარა',
d = 'დღა',
H = 'სათი',
M = 'წუთი',
S = 'წამი',
},
abbr_on = {
y = 'წ.',
m = 'თ.',
w = 'მ.',
d = 'დღ.',
H = 'სთ.',
M = 'წთ.',
S = 'წმ.',
},
abbr_infant = { -- for {{age for infant}}
plural = 's',
sep = ' ',
y = 'yr',
m = 'mo',
w = 'wk',
d = 'day',
H = 'hr',
M = 'min',
S = 'sec',
},
abbr_raw = {},
}
local diff = parms.diff -- must be a valid date difference
local show = parms.show -- may be nil; default is set below
local abbr = parms.abbr or 'abbr_on'
local defaultJoin
if abbr ~= 'abbr_off' then
defaultJoin = 'sep_space'
end
if not show then
show = 'ymd'
if parms.disp == 'disp_age' then
if diff.years < 3 then
defaultJoin = 'sep_space'
if diff.years >= 1 then
show = 'ym'
else
show = 'md'
end
else
show = 'y'
end
end
end
if type(show) ~= 'table' then
show = translateParameters.show[show]
end
if parms.disp == 'disp_raw' then
defaultJoin = 'sep_space'
abbr = 'abbr_raw'
elseif parms.wantSc then
defaultJoin = 'sep_serialcomma'
end
local diffOptions = {
round = parms.round,
duration = parms.wantDuration,
range = parms.range and true or nil,
}
local sortKey
if parms.sortable then
local value = diff.age_days + (parms.wantDuration and 1 or 0) -- days and fraction of a day
if diff.isnegative then
value = -value
end
sortKey = makeSort(value, parms.sortable)
end
local textOptions = {
extra = parms.extra,
format = parms.format,
join = parms.sep or defaultJoin,
isnegative = diff.isnegative,
range = parms.range,
sortKey = sortKey,
spell = parms.spell,
suffix = parms.suffix, -- not currently used
}
if show.id == 'hide' then
return sortKey or ''
end
local values = { diff:age(show.id, diffOptions) }
if values[1] then
return makeText(values, show, names[abbr], textOptions)
end
if diff.partial then
-- Handle a more complex range such as
-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days
local opt = {
format = textOptions.format,
join = textOptions.join,
isnegative = textOptions.isnegative,
spell = textOptions.spell,
}
return
(textOptions.sortKey or '') ..
makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..
rangeJoin(textOptions.range) ..
makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..
(textOptions.suffix or '')
end
return message({ 'mt-bad-show', show.id })
end
local function getDates(frame, getopt)
-- Parse template parameters and return one of:
-- * date (a date table, if single)
-- * date1, date2 (two date tables, if not single)
-- * text (a string error message)
-- A missing date is optionally replaced with the current date.
-- If wantMixture is true, a missing date component is replaced
-- from the current date, so can get a bizarre mixture of
-- specified/current y/m/d as has been done by some "age" templates.
-- Some results may be placed in table getopt.
local Date, currentDate = getExports(frame)
getopt = getopt or {}
local function flagCurrent(text)
-- This allows the calling template to detect if the current date has been used,
-- that is, whether both dates have been entered in a template expecting two.
-- For example, an infobox may want the age when an event occurred, not the current age.
-- Don't bother detecting if wantMixture is used because not needed and it is a poor option.
if not text then
if getopt.noMissing then
return nil -- this gives a nil date which gives an error
end
text = 'currentdate'
if getopt.flag == 'usesCurrent' then
getopt.usesCurrent = true
end
end
return text
end
local args = frame:getParent().args
local fields = {}
local isNamed = args.year or args.year1 or args.year2 or
args.month or args.month1 or args.month2 or
args.day or args.day1 or args.day2
if isNamed then
fields[1] = args.year1 or args.year
fields[2] = args.month1 or args.month
fields[3] = args.day1 or args.day
fields[4] = args.year2
fields[5] = args.month2
fields[6] = args.day2
else
for i = 1, 6 do
fields[i] = args[i]
end
end
local imax = 0
for i = 1, 6 do
fields[i] = stripToNil(fields[i])
if fields[i] then
imax = i
end
if getopt.omitZero and i % 3 ~= 1 then -- omit zero months and days as unknown values but keep year 0 which is 1 BCE
if isZero(fields[i]) then
fields[i] = nil
getopt.partial = true
end
end
end
local fix = getopt.fix and 'fix' or ''
local partialText = getopt.partial and 'partial' or ''
local dates = {}
if isNamed or imax >= 3 then
local nrDates = getopt.single and 1 or 2
if getopt.wantMixture then
-- Cannot be partial since empty fields are set from current.
local components = { 'year', 'month', 'day' }
for i = 1, nrDates * 3 do
fields[i] = fields[i] or currentDate[components[i > 3 and i - 3 or i]]
end
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
else
-- If partial dates are allowed, accept
-- year only, or
-- year and month only
-- Do not accept year and day without a month because that makes no sense
-- (and because, for example, Date('partial', 2001, nil, 12) sets day = nil, not 12).
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (getopt.partial and y and (m or not d)) or (y and m and d) then
dates[i] = Date(fix, partialText, y, m, d)
elseif not y and not m and not d then
dates[i] = Date(flagCurrent())
end
end
end
else
getopt.textdates = true -- have parsed each date from a single text field
dates[1] = Date(fix, partialText, flagCurrent(fields[1]))
if not getopt.single then
dates[2] = Date(fix, partialText, flagCurrent(fields[2]))
end
end
if not dates[1] then
return message(getopt.missing1 or 'mt-need-valid-ymd')
end
if getopt.single then
return dates[1]
end
if not dates[2] then
return message(getopt.missing2 or 'mt-need-valid-ymd2')
end
return dates[1], dates[2]
end
local function ageGeneric(frame)
-- Return the result required by the specified template.
-- Can use sortable=x where x = on/table/off/debug in any supported template.
-- Some templates default to sortable=on but can be overridden.
local name = frame.args.template
if not name then
return message('mt-template-x')
end
local args = frame:getParent().args
local specs = {
age_days = { -- {{age in days}}
show = 'd',
disp = 'disp_raw',
},
age_days_nts = { -- {{age in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
},
duration_days = { -- {{duration in days}}
show = 'd',
disp = 'disp_raw',
duration = true,
},
duration_days_nts = { -- {{duration in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
duration = true,
},
age_full_years = { -- {{age}}
show = 'y',
abbr = 'abbr_raw',
flag = 'usesCurrent',
omitZero = true,
range = 'no',
},
age_full_years_nts = { -- {{age nts}}
show = 'y',
abbr = 'abbr_raw',
format = 'format_commas',
sortable = 'on',
},
age_in_years = { -- {{age in years}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
},
age_in_years_nts = { -- {{age in years nts}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
format = 'format_commas',
sortable = 'on',
},
age_infant = { -- {{age for infant}}
-- Do not set show because special processing is done later.
abbr = yes(args.abbr) and 'abbr_infant' or 'abbr_off',
disp = 'disp_age',
sep = 'sep_space',
sortable = 'on',
},
age_m = { -- {{age in months}}
show = 'm',
disp = 'disp_raw',
},
age_w = { -- {{age in weeks}}
show = 'w',
disp = 'disp_raw',
},
age_wd = { -- {{age in weeks and days}}
show = 'wd',
},
age_yd = { -- {{age in years and days}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
},
age_yd_nts = { -- {{age in years and days nts}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
sortable = 'on',
},
age_ym = { -- {{age in years and months}}
show = 'ym',
sep = 'sep_comma',
},
age_ymd = { -- {{age in years, months and days}}
show = 'ymd',
range = true,
},
age_ymwd = { -- {{age in years, months, weeks and days}}
show = 'ymwd',
wantMixture = true,
},
}
local spec = specs[name]
if not spec then
return message('mt-template-bad-name')
end
if name == 'age_days' then
local su = stripToNil(args['show unit'])
if su then
if su == 'abbr' or su == 'full' then
spec.disp = nil
spec.abbr = su == 'abbr' and 'abbr_on' or nil
end
end
end
local partial, autofill
local range = stripToNil(args.range) or spec.range
if range then
-- Suppose partial dates are used and age could be 11 or 12 years.
-- "|range=" (empty value) has no effect (spec is used).
-- "|range=yes" or spec.range == true sets range = true (gives "11 or 12")
-- "|range=dash" or spec.range == 'dash' sets range = 'dash' (gives "11–12").
-- "|range=no" or spec.range == 'no' sets range = nil and fills each date in the diff (gives "12").
-- ("on" is equivalent to "yes", and "off" is equivalent to "no").
-- "|range=OTHER" sets range = nil and rejects partial dates.
range = ({ dash = 'dash', off = 'no', no = 'no', [true] = true })[range] or yes(range)
if range then
partial = true -- accept partial dates with a possible age range for the result
if range == 'no' then
autofill = true -- missing month/day in first or second date are filled from other date or 1
range = nil
end
end
end
local getopt = {
fix = yes(args.fix),
flag = stripToNil(args.flag) or spec.flag,
omitZero = spec.omitZero,
partial = partial,
wantMixture = spec.wantMixture,
}
local date1, date2 = getDates(frame, getopt)
if type(date1) == 'string' then
return date1
end
local format = stripToNil(args.format)
local spell = spellOptions[format]
if format then
format = 'format_' .. format
elseif name == 'age_days' and getopt.textdates then
format = 'format_commas'
end
local parms = {
diff = date2:subtract(date1, { fill = autofill }),
wantDuration = spec.duration or yes(args.duration),
range = range,
wantSc = yes(args.sc),
show = args.show == 'hide' and 'hide' or spec.show,
abbr = spec.abbr,
disp = spec.disp,
extra = makeExtra(args, getopt.usesCurrent and format ~= 'format_raw'),
format = format or spec.format,
round = yes(args.round),
sep = spec.sep,
sortable = translateParameters.sortable[args.sortable or spec.sortable],
spell = spell,
}
if (spec.negative or frame.args.negative) == 'error' and parms.diff.isnegative then
return message('mt-date-wrong-order')
end
return from_en(dateDifference(parms))
end
local function bda(frame)
-- Implement [[Template:Birth date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-bd',
noMissing = true,
single = true,
}
local date = getDates(frame, options)
if type(date) == 'string' then
return date -- error text
end
local Date = getExports(frame)
local diff = Date('currentdate') - date
if diff.isnegative or diff.years > 150 then
return message('mt-invalid-bd-age')
end
local disp, show = 'disp_raw', 'y'
if diff.years < 2 then
disp = 'disp_age'
if diff.years == 0 and diff.months == 0 then
show = 'd'
else
show = 'm'
end
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' ..
(df and '%-d %B %-Y' or '%B %-d, %-Y')
result = from_en('<span style="display:none"> ' ..
date:text(result) ..
'<span class="noprint ForceAgeToShow"> ' ..
mtext['txt-age'] ..
dateDifference({
diff = diff,
show = show,
abbr = 'abbr_off',
disp = disp,
sep = 'sep_space',
}) ..
')</span>')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
day = true,
day1 = true,
month = true,
month1 = true,
year = true,
year1 = true,
}
local invalid
local imax = options.textdates and 1 or 3
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dda(frame)
-- Implement [[Template:Death date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-dd',
missing2 = 'mt-need-valid-bd2',
noMissing = true,
partial = true,
}
local date1, date2 = getDates(frame, options)
if type(date1) == 'string' then
return date1
end
local diff = date1 - date2
if diff.isnegative then
return message('mt-dd-wrong-order')
end
local Date = getExports(frame)
local today = Date('currentdate') + 1 -- one day in future allows for timezones
if date1 > today then
return message('mt-dd-future')
end
local years
if diff.partial then
years = diff.partial.years
years = type(years) == 'table' and years[2] or years
else
years = diff.years
end
if years > 150 then
return message('mt-invalid-dates-age')
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result
if date1.day then -- y, m, d known
result = (df and
'%-d %B %-Y' or
'%B %-d, %-Y') ..
'<span style="display:none">(%-Y-%m-%d)</span>'
elseif date1.month then -- y, m known; d unknown
result =
'%B %-Y' ..
'<span style="display:none">(%-Y-%m-00)</span>'
else -- y known; m, d unknown
result =
'%-Y' ..
'<span style="display:none">(%-Y-00-00)</span>'
end
result = from_en(date1:text(result) ..
mtext['txt-aged'] ..
dateDifference({
diff = diff,
show = 'y',
abbr = 'abbr_off',
disp = 'disp_raw',
range = 'dash',
sep = 'sep_space',
}) ..
')')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
}
local invalid
local imax = options.textdates and 2 or 6
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dateToGsd(frame)
-- Implement [[Template:Gregorian serial date]].
-- Return Gregorian serial date of the given date, or the current date.
-- The returned value is negative for dates before 1 January 1 AD
-- despite the fact that GSD is not defined for such dates.
local date = getDates(frame, { wantMixture=true, single=true })
if type(date) == 'string' then
return date
end
return tostring(date.gsd)
end
local function jdToDate(frame)
-- Return formatted date from a Julian date.
-- The result includes a time if the input includes a fraction.
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date('juliandate', args[1], args[2])
if date then
return from_en(date:text())
end
return message('mt-need-jdn')
end
local function dateToJd(frame)
-- Return Julian date (a number) from a date which may include a time,
-- or the current date ('currentdate') or current date and time ('currentdatetime').
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])
if date then
return tostring(date.jd)
end
return message('mt-need-valid-ymd-current')
end
local function timeInterval(frame)
-- Implement [[Template:Time interval]].
-- There are two positional arguments: date1, date2.
-- The default for each is the current date and time.
-- Result is date2 - date1 formatted.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {
extra = makeExtra(args),
wantDuration = yes(args.duration),
range = yes(args.range) or (args.range == 'dash' and 'dash' or nil),
wantSc = yes(args.sc),
}
local fix = yes(args.fix) and 'fix' or ''
local date1 = Date(fix, 'partial', stripToNil(args[1]) or 'currentdatetime')
if not date1 then
return message('mt-invalid-start')
end
local date2 = Date(fix, 'partial', stripToNil(args[2]) or 'currentdatetime')
if not date2 then
return message('mt-invalid-end')
end
parms.diff = date2 - date1
for argname, translate in pairs(translateParameters) do
local parm = stripToNil(args[argname])
if parm then
parm = translate[parm]
if parm == nil then -- test for nil because false is a valid setting
return message({ 'mt-bad-param2', argname, args[argname] })
end
parms[argname] = parm
end
end
if parms.round then
local round = parms.round
local show = parms.show
if round ~= 'on' then
if show then
if show.id ~= round then
return message({ 'mt-conflicting-show', args.show, args.round })
end
else
parms.show = translateParameters.show[round]
end
end
parms.round = true
end
return from_en(dateDifference(parms))
end
return {
age_generic = ageGeneric, -- can emulate several age templates
birth_date_and_age = bda, -- Template:Birth_date_and_age
death_date_and_age = dda, -- Template:Death_date_and_age
gsd = dateToGsd, -- Template:Gregorian_serial_date
extract = dateExtract, -- Template:Extract
jd_to_date = jdToDate, -- Template:?
JULIANDAY = dateToJd, -- Template:JULIANDAY
time_interval = timeInterval, -- Template:Time_interval
}
8wyq5svgkybhjgh3wxur71wxavv92em
240038
240037
2025-06-08T16:55:46Z
Narazeni
826
240038
Scribunto
text/plain
-- Implement various "age of" and other date-related templates.
local mtext = {
-- Message and other text that should be localized.
['mt-bad-param1'] = 'Invalid parameter $1',
['mt-bad-param2'] = 'Parameter $1=$2 is invalid',
['mt-bad-show'] = 'Parameter show=$1 is not supported here',
['mt-cannot-add'] = 'Cannot add "$1"',
['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2',
['mt-date-wrong-order'] = 'The second date must be later in time than the first date',
['mt-dd-future'] = 'Death date (first date) must not be in the future',
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)',
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age',
['mt-invalid-dates-age'] = 'Invalid dates for calculating age',
['mt-invalid-end'] = 'Invalid end date in second parameter',
['mt-invalid-start'] = 'Invalid start date in first parameter',
['mt-need-jdn'] = 'Need valid Julian date number',
['mt-need-valid-bd'] = 'Need valid birth date: year, month, day',
['mt-need-valid-bd2'] = 'Need valid birth date (second date): year, month, day',
['mt-need-valid-date'] = 'Need valid date',
['mt-need-valid-dd'] = 'Need valid death date (first date): year, month, day',
['mt-need-valid-ymd'] = 'Need valid year, month, day',
['mt-need-valid-ymd-current'] = 'Need valid year|month|day or "currentdate"',
['mt-need-valid-ymd2'] = 'Second date should be year, month, day',
['mt-template-bad-name'] = 'The specified template name is not valid',
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation',
['txt-age'] = '(age ',
['txt-aged'] = ' (aged ',
['txt-and'] = ' и ',
['txt-comma-and'] = ', и ',
['txt-error'] = 'Ошибка: ',
['txt-or'] = ' или ',
}
local translate, from_en, to_en, isZero
if translate then
-- Functions to translate from en to local language and reverse go here.
-- See example at [[:bn:Module:বয়স]].
else
from_en = function (text)
return text
end
isZero = function (text)
return tonumber(text) == 0
end
end
local _Date, _currentDate
local function getExports(frame)
-- Return objects exported from the date module or its sandbox.
if not _Date then
local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''
local datemod = require('Module:Date' .. sandbox)
local realDate = datemod._Date
_currentDate = datemod._current
if to_en then
_Date = function (...)
local args = {}
for i, v in ipairs({...}) do
args[i] = to_en(v)
end
return realDate(unpack(args))
end
else
_Date = realDate
end
end
return _Date, _currentDate
end
local Collection -- a table to hold items
Collection = {
add = function (self, item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end,
join = function (self, sep)
return table.concat(self, sep)
end,
remove = function (self, pos)
if self.n > 0 and (pos == nil or (0 < pos and pos <= self.n)) then
self.n = self.n - 1
return table.remove(self, pos)
end
end,
sort = function (self, comp)
table.sort(self, comp)
end,
new = function ()
return setmetatable({n = 0}, Collection)
end
}
Collection.__index = Collection
local function stripToNil(text)
-- If text is a string, return its trimmed content, or nil if empty.
-- Otherwise return text (which may, for example, be nil).
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function yes(parameter)
-- Return true if parameter should be interpreted as "yes".
-- Do not want to accept mixed upper/lowercase unless done by current templates.
-- Need to accept "on" because "round=on" is wanted.
return ({ y = true, yes = true, on = true })[parameter]
end
local function message(msg, id)
-- Return formatted message text for an error or warning.
local function getText(msg)
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined')
end
local text
if type(msg) == 'table' then
text = getText(msg[1])
local rep = {}
for i, v in ipairs(msg) do
if i > 1 then
rep['$' .. (i - 1)] = v
end
end
text = text:gsub('$%d+', rep)
else
text = getText(msg)
end
local categories = {
error = '[[Category:Age error]]',
warning = '[[Category:Age error]]', -- same as error until determine whether 'Age warning' would be worthwhile
}
local a, b, category
if id == 'warning' then
a = '<sup>[<i>'
b = '</i>]</sup>'
else
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
end
if mw.title.getCurrentTitle():inNamespaces(0) then
-- Category only in namespaces: 0=article.
category = categories[id or 'error']
end
return
a ..
mw.text.nowiki(text) ..
b ..
(category or '')
end
local function formatNumber(number)
-- Return the given number formatted with commas as group separators,
-- given that the number is an integer.
local numstr = tostring(number)
local length = #numstr
local places = Collection.new()
local pos = 0
repeat
places:add(pos)
pos = pos + 3
until pos >= length
places:add(length)
local groups = Collection.new()
for i = places.n, 2, -1 do
local p1 = length - places[i] + 1
local p2 = length - places[i - 1]
groups:add(numstr:sub(p1, p2))
end
return groups:join(',')
end
local function spellNumber(number, options, i)
-- Return result of spelling number, or
-- return number (as a string) if cannot spell it.
-- i == 1 for the first number which can optionally start with an uppercase letter.
number = tostring(number)
return require('Module:ConvertNumeric').spell_number(
number,
nil, -- fraction numerator
nil, -- fraction denominator
i == 1 and options.upper, -- true: 'One' instead of 'one'
not options.us, -- true: use 'and' between tens/ones etc
options.adj, -- true: hyphenated
options.ordinal -- true: 'first' instead of 'one'
) or number
end
local function makeExtra(args, flagCurrent)
-- Return extra text that will be inserted before the visible result
-- but after any sort key.
local extra = args.prefix or ''
if mw.ustring.len(extra) > 1 then
-- Parameter "~" gives "~3" whereas "over" gives "over 3".
if extra:sub(-6, -1) ~= ' ' then
extra = extra .. ' '
end
end
if flagCurrent then
extra = '<span class="currentage"></span>' .. extra
end
return extra
end
local function makeSort(value, sortable)
-- Return a sort key if requested.
-- Assume value is a valid number which has not overflowed.
if sortable == 'sortable_table' or sortable == 'sortable_on' or sortable == 'sortable_debug' then
local sortKey
if value == 0 then
sortKey = '5000000000000000000'
else
local mag = math.floor(math.log10(math.abs(value)) + 1e-14)
if value > 0 then
sortKey = 7000 + mag
else
sortKey = 2999 - mag
value = value + 10^(mag+1)
end
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag)))
end
local result
if sortable == 'sortable_table' then
result = 'data-sort-value="_SORTKEY_"|'
elseif sortable == 'sortable_debug' then
result = '<span data-sort-value="_SORTKEY_♠"><span style="border:1px solid">_SORTKEY_♠</span></span>'
else
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
return result:gsub('_SORTKEY_', sortKey)
end
end
local translateParameters = {
abbr = {
off = 'abbr_off',
on = 'abbr_on',
},
disp = {
age = 'disp_age',
raw = 'disp_raw',
},
format = {
raw = 'format_raw',
commas = 'format_commas',
},
round = {
on = 'on',
yes = 'on',
months = 'ym',
weeks = 'ymw',
days = 'ymd',
hours = 'ymdh',
},
sep = {
comma = 'sep_comma',
[','] = 'sep_comma',
serialcomma = 'sep_serialcomma',
space = 'sep_space',
},
show = {
hide = { id = 'hide' },
y = { 'y', id = 'y' },
ym = { 'y', 'm', id = 'ym' },
ymd = { 'y', 'm', 'd', id = 'ymd' },
ymw = { 'y', 'm', 'w', id = 'ymw' },
ymwd = { 'y', 'm', 'w', 'd', id = 'ymwd' },
yd = { 'y', 'd', id = 'yd', keepZero = true },
m = { 'm', id = 'm' },
md = { 'm', 'd', id = 'md' },
w = { 'w', id = 'w' },
wd = { 'w', 'd', id = 'wd' },
h = { 'H', id = 'h' },
hm = { 'H', 'M', id = 'hm' },
hms = { 'H', 'M', 'S', id = 'hms' },
d = { 'd', id = 'd' },
dh = { 'd', 'H', id = 'dh' },
dhm = { 'd', 'H', 'M', id = 'dhm' },
dhms = { 'd', 'H', 'M', 'S', id = 'dhms' },
ymdh = { 'y', 'm', 'd', 'H', id = 'ymdh' },
ymdhm = { 'y', 'm', 'd', 'H', 'M', id = 'ymdhm' },
ymwdh = { 'y', 'm', 'w', 'd', 'H', id = 'ymwdh' },
ymwdhm = { 'y', 'm', 'w', 'd', 'H', 'M', id = 'ymwdhm' },
},
sortable = {
off = false,
on = 'sortable_on',
table = 'sortable_table',
debug = 'sortable_debug',
},
}
local spellOptions = {
cardinal = {},
Cardinal = { upper = true },
cardinal_us = { us = true },
Cardinal_us = { us = true, upper = true },
ordinal = { ordinal = true },
Ordinal = { ordinal = true, upper = true },
ordinal_us = { ordinal = true, us = true },
Ordinal_us = { ordinal = true, us = true, upper = true },
}
local function dateExtract(frame)
-- Return part of a date after performing an optional operation.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {}
for i, v in ipairs(args) do
parms[i] = v
end
if yes(args.fix) then
table.insert(parms, 'fix')
end
if yes(args.partial) then
table.insert(parms, 'partial')
end
local show = stripToNil(args.show) or 'dmy'
local date = Date(unpack(parms))
if not date then
if show == 'format' then
return 'error'
end
return message('mt-need-valid-date')
end
local add = stripToNil(args.add)
if add then
for item in add:gmatch('%S+') do
date = date + item
if not date then
return message({ 'mt-cannot-add', item })
end
end
end
local sortKey, result
local sortable = translateParameters.sortable[args.sortable]
if sortable then
local value = (date.partial and date.partial.first or date).jdz
sortKey = makeSort(value, sortable)
end
if show ~= 'hide' then
result = date[show]
if result == nil then
result = from_en(date:text(show))
elseif type(result) == 'boolean' then
result = result and '1' or '0'
else
result = from_en(tostring(result))
end
end
return (sortKey or '') .. makeExtra(args) .. (result or '')
end
local function rangeJoin(range)
-- Return text to be used between a range of ages.
return range == 'dash' and '–' or mtext['txt-or']
end
local function makeText(values, components, names, options, noUpper)
-- Return wikitext representing an age or duration.
local text = Collection.new()
local count = #values
local sep = names.sep or ''
for i, v in ipairs(values) do
-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).
local islist = type(v) == 'table'
if (islist or v > 0) or (text.n == 0 and i == count) or (text.n > 0 and components.keepZero) then
local fmt, vstr
if options.spell then
fmt = function(number)
return spellNumber(number, options.spell, noUpper or i)
end
elseif i == 1 and options.format == 'format_commas' then
-- Numbers after the first should be small and not need formatting.
fmt = formatNumber
else
fmt = tostring
end
if islist then
vstr = fmt(v[1]) .. rangeJoin(options.range)
noUpper = true
vstr = vstr .. fmt(v[2])
else
vstr = fmt(v)
end
local name = names[components[i]]
if name then
local plural = names.plural
if not plural or (islist and v[2] or v) == 1 then
plural = ''
end
text:add(vstr .. sep .. name .. plural)
else
text:add(vstr)
end
end
end
local first, last
if options.join == 'sep_space' then
first = ' '
last = ' '
elseif options.join == 'sep_comma' then
first = ', '
last = ', '
elseif options.join == 'sep_serialcomma' and text.n > 2 then
first = ', '
last = mtext['txt-comma-and']
else
first = ', '
last = mtext['txt-and']
end
for i, v in ipairs(text) do
if i < text.n then
text[i] = v .. (i + 1 < text.n and first or last)
end
end
local sign = ''
if options.isnegative then
-- Do not display negative zero.
if text.n > 1 or (text.n == 1 and text[1]:sub(1, 1) ~= '0' ) then
if options.format == 'format_raw' then
sign = '-' -- plain hyphen so result can be used in a calculation
else
sign = '−' -- Unicode U+2212 MINUS SIGN
end
end
end
return
(options.sortKey or '') ..
(options.extra or '') ..
sign ..
text:join() ..
(options.suffix or '')
end
local function dateDifference(parms)
-- Return a formatted date difference using the given parameters
-- which have been validated.
local names = {
abbr_off = {
plural = '',
sep = ' ',
y = 'წანა',
m = 'თუთა',
w = 'მარა',
d = 'დღა',
H = 'სათი',
M = 'წუთი',
S = 'წამი',
},
abbr_on = {
y = 'წ.',
m = 'თ.',
w = 'მ.',
d = 'დღ.',
H = 'სთ.',
M = 'წთ.',
S = 'წმ.',
},
abbr_infant = { -- for {{age for infant}}
plural = 's',
sep = ' ',
y = 'yr',
m = 'mo',
w = 'wk',
d = 'day',
H = 'hr',
M = 'min',
S = 'sec',
},
abbr_raw = {},
}
local diff = parms.diff -- must be a valid date difference
local show = parms.show -- may be nil; default is set below
local abbr = parms.abbr or 'abbr_on'
local defaultJoin
if abbr ~= 'abbr_off' then
defaultJoin = 'sep_space'
end
if not show then
show = 'ymd'
if parms.disp == 'disp_age' then
if diff.years < 3 then
defaultJoin = 'sep_space'
if diff.years >= 1 then
show = 'ym'
else
show = 'md'
end
else
show = 'y'
end
end
end
if type(show) ~= 'table' then
show = translateParameters.show[show]
end
if parms.disp == 'disp_raw' then
defaultJoin = 'sep_space'
abbr = 'abbr_raw'
elseif parms.wantSc then
defaultJoin = 'sep_serialcomma'
end
local diffOptions = {
round = parms.round,
duration = parms.wantDuration,
range = parms.range and true or nil,
}
local sortKey
if parms.sortable then
local value = diff.age_days + (parms.wantDuration and 1 or 0) -- days and fraction of a day
if diff.isnegative then
value = -value
end
sortKey = makeSort(value, parms.sortable)
end
local textOptions = {
extra = parms.extra,
format = parms.format,
join = parms.sep or defaultJoin,
isnegative = diff.isnegative,
range = parms.range,
sortKey = sortKey,
spell = parms.spell,
suffix = parms.suffix, -- not currently used
}
if show.id == 'hide' then
return sortKey or ''
end
local values = { diff:age(show.id, diffOptions) }
if values[1] then
return makeText(values, show, names[abbr], textOptions)
end
if diff.partial then
-- Handle a more complex range such as
-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days
local opt = {
format = textOptions.format,
join = textOptions.join,
isnegative = textOptions.isnegative,
spell = textOptions.spell,
}
return
(textOptions.sortKey or '') ..
makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..
rangeJoin(textOptions.range) ..
makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..
(textOptions.suffix or '')
end
return message({ 'mt-bad-show', show.id })
end
local function getDates(frame, getopt)
-- Parse template parameters and return one of:
-- * date (a date table, if single)
-- * date1, date2 (two date tables, if not single)
-- * text (a string error message)
-- A missing date is optionally replaced with the current date.
-- If wantMixture is true, a missing date component is replaced
-- from the current date, so can get a bizarre mixture of
-- specified/current y/m/d as has been done by some "age" templates.
-- Some results may be placed in table getopt.
local Date, currentDate = getExports(frame)
getopt = getopt or {}
local function flagCurrent(text)
-- This allows the calling template to detect if the current date has been used,
-- that is, whether both dates have been entered in a template expecting two.
-- For example, an infobox may want the age when an event occurred, not the current age.
-- Don't bother detecting if wantMixture is used because not needed and it is a poor option.
if not text then
if getopt.noMissing then
return nil -- this gives a nil date which gives an error
end
text = 'currentdate'
if getopt.flag == 'usesCurrent' then
getopt.usesCurrent = true
end
end
return text
end
local args = frame:getParent().args
local fields = {}
local isNamed = args.year or args.year1 or args.year2 or
args.month or args.month1 or args.month2 or
args.day or args.day1 or args.day2
if isNamed then
fields[1] = args.year1 or args.year
fields[2] = args.month1 or args.month
fields[3] = args.day1 or args.day
fields[4] = args.year2
fields[5] = args.month2
fields[6] = args.day2
else
for i = 1, 6 do
fields[i] = args[i]
end
end
local imax = 0
for i = 1, 6 do
fields[i] = stripToNil(fields[i])
if fields[i] then
imax = i
end
if getopt.omitZero and i % 3 ~= 1 then -- omit zero months and days as unknown values but keep year 0 which is 1 BCE
if isZero(fields[i]) then
fields[i] = nil
getopt.partial = true
end
end
end
local fix = getopt.fix and 'fix' or ''
local partialText = getopt.partial and 'partial' or ''
local dates = {}
if isNamed or imax >= 3 then
local nrDates = getopt.single and 1 or 2
if getopt.wantMixture then
-- Cannot be partial since empty fields are set from current.
local components = { 'year', 'month', 'day' }
for i = 1, nrDates * 3 do
fields[i] = fields[i] or currentDate[components[i > 3 and i - 3 or i]]
end
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (m == 2 or m == '2') and (d == 29 or d == '29') then
-- Workaround error with following which attempt to use invalid date 2001-02-29.
-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}
-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}
-- TODO Get rid of wantMixture because even this ugly code does not handle
-- 'Feb' or 'February' or 'feb' or 'february'.
if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then
d = 28
end
end
dates[i] = Date(y, m, d)
end
else
-- If partial dates are allowed, accept
-- year only, or
-- year and month only
-- Do not accept year and day without a month because that makes no sense
-- (and because, for example, Date('partial', 2001, nil, 12) sets day = nil, not 12).
for i = 1, nrDates do
local index = i == 1 and 1 or 4
local y, m, d = fields[index], fields[index+1], fields[index+2]
if (getopt.partial and y and (m or not d)) or (y and m and d) then
dates[i] = Date(fix, partialText, y, m, d)
elseif not y and not m and not d then
dates[i] = Date(flagCurrent())
end
end
end
else
getopt.textdates = true -- have parsed each date from a single text field
dates[1] = Date(fix, partialText, flagCurrent(fields[1]))
if not getopt.single then
dates[2] = Date(fix, partialText, flagCurrent(fields[2]))
end
end
if not dates[1] then
return message(getopt.missing1 or 'mt-need-valid-ymd')
end
if getopt.single then
return dates[1]
end
if not dates[2] then
return message(getopt.missing2 or 'mt-need-valid-ymd2')
end
return dates[1], dates[2]
end
local function ageGeneric(frame)
-- Return the result required by the specified template.
-- Can use sortable=x where x = on/table/off/debug in any supported template.
-- Some templates default to sortable=on but can be overridden.
local name = frame.args.template
if not name then
return message('mt-template-x')
end
local args = frame:getParent().args
local specs = {
age_days = { -- {{age in days}}
show = 'd',
disp = 'disp_raw',
},
age_days_nts = { -- {{age in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
},
duration_days = { -- {{duration in days}}
show = 'd',
disp = 'disp_raw',
duration = true,
},
duration_days_nts = { -- {{duration in days nts}}
show = 'd',
disp = 'disp_raw',
format = 'format_commas',
sortable = 'on',
duration = true,
},
age_full_years = { -- {{age}}
show = 'y',
abbr = 'abbr_raw',
flag = 'usesCurrent',
omitZero = true,
range = 'no',
},
age_full_years_nts = { -- {{age nts}}
show = 'y',
abbr = 'abbr_raw',
format = 'format_commas',
sortable = 'on',
},
age_in_years = { -- {{age in years}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
},
age_in_years_nts = { -- {{age in years nts}}
show = 'y',
abbr = 'abbr_raw',
negative = 'error',
range = 'dash',
format = 'format_commas',
sortable = 'on',
},
age_infant = { -- {{age for infant}}
-- Do not set show because special processing is done later.
abbr = yes(args.abbr) and 'abbr_infant' or 'abbr_off',
disp = 'disp_age',
sep = 'sep_space',
sortable = 'on',
},
age_m = { -- {{age in months}}
show = 'm',
disp = 'disp_raw',
},
age_w = { -- {{age in weeks}}
show = 'w',
disp = 'disp_raw',
},
age_wd = { -- {{age in weeks and days}}
show = 'wd',
},
age_yd = { -- {{age in years and days}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
},
age_yd_nts = { -- {{age in years and days nts}}
show = 'yd',
format = 'format_commas',
sep = args.sep ~= 'and' and 'sep_comma' or nil,
sortable = 'on',
},
age_ym = { -- {{age in years and months}}
show = 'ym',
sep = 'sep_comma',
},
age_ymd = { -- {{age in years, months and days}}
show = 'ymd',
range = true,
},
age_ymwd = { -- {{age in years, months, weeks and days}}
show = 'ymwd',
wantMixture = true,
},
}
local spec = specs[name]
if not spec then
return message('mt-template-bad-name')
end
if name == 'age_days' then
local su = stripToNil(args['show unit'])
if su then
if su == 'abbr' or su == 'full' then
spec.disp = nil
spec.abbr = su == 'abbr' and 'abbr_on' or nil
end
end
end
local partial, autofill
local range = stripToNil(args.range) or spec.range
if range then
-- Suppose partial dates are used and age could be 11 or 12 years.
-- "|range=" (empty value) has no effect (spec is used).
-- "|range=yes" or spec.range == true sets range = true (gives "11 or 12")
-- "|range=dash" or spec.range == 'dash' sets range = 'dash' (gives "11–12").
-- "|range=no" or spec.range == 'no' sets range = nil and fills each date in the diff (gives "12").
-- ("on" is equivalent to "yes", and "off" is equivalent to "no").
-- "|range=OTHER" sets range = nil and rejects partial dates.
range = ({ dash = 'dash', off = 'no', no = 'no', [true] = true })[range] or yes(range)
if range then
partial = true -- accept partial dates with a possible age range for the result
if range == 'no' then
autofill = true -- missing month/day in first or second date are filled from other date or 1
range = nil
end
end
end
local getopt = {
fix = yes(args.fix),
flag = stripToNil(args.flag) or spec.flag,
omitZero = spec.omitZero,
partial = partial,
wantMixture = spec.wantMixture,
}
local date1, date2 = getDates(frame, getopt)
if type(date1) == 'string' then
return date1
end
local format = stripToNil(args.format)
local spell = spellOptions[format]
if format then
format = 'format_' .. format
elseif name == 'age_days' and getopt.textdates then
format = 'format_commas'
end
local parms = {
diff = date2:subtract(date1, { fill = autofill }),
wantDuration = spec.duration or yes(args.duration),
range = range,
wantSc = yes(args.sc),
show = args.show == 'hide' and 'hide' or spec.show,
abbr = spec.abbr,
disp = spec.disp,
extra = makeExtra(args, getopt.usesCurrent and format ~= 'format_raw'),
format = format or spec.format,
round = yes(args.round),
sep = spec.sep,
sortable = translateParameters.sortable[args.sortable or spec.sortable],
spell = spell,
}
if (spec.negative or frame.args.negative) == 'error' and parms.diff.isnegative then
return message('mt-date-wrong-order')
end
return from_en(dateDifference(parms))
end
local function bda(frame)
-- Implement [[Template:Birth date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-bd',
noMissing = true,
single = true,
}
local date = getDates(frame, options)
if type(date) == 'string' then
return date -- error text
end
local Date = getExports(frame)
local diff = Date('currentdate') - date
if diff.isnegative or diff.years > 150 then
return message('mt-invalid-bd-age')
end
local disp, show = 'disp_raw', 'y'
if diff.years < 2 then
disp = 'disp_age'
if diff.years == 0 and diff.months == 0 then
show = 'd'
else
show = 'm'
end
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' ..
(df and '%-d %B %-Y' or '%B %-d, %-Y')
result = from_en('<span style="display:none"> ' ..
date:text(result) ..
'<span class="noprint ForceAgeToShow"> ' ..
mtext['txt-age'] ..
dateDifference({
diff = diff,
show = show,
abbr = 'abbr_off',
disp = disp,
sep = 'sep_space',
}) ..
')</span>')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
day = true,
day1 = true,
month = true,
month1 = true,
year = true,
year1 = true,
}
local invalid
local imax = options.textdates and 1 or 3
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dda(frame)
-- Implement [[Template:Death date and age]].
local args = frame:getParent().args
local options = {
missing1 = 'mt-need-valid-dd',
missing2 = 'mt-need-valid-bd2',
noMissing = true,
partial = true,
}
local date1, date2 = getDates(frame, options)
if type(date1) == 'string' then
return date1
end
local diff = date1 - date2
if diff.isnegative then
return message('mt-dd-wrong-order')
end
local Date = getExports(frame)
local today = Date('currentdate') + 1 -- one day in future allows for timezones
if date1 > today then
return message('mt-dd-future')
end
local years
if diff.partial then
years = diff.partial.years
years = type(years) == 'table' and years[2] or years
else
years = diff.years
end
if years > 150 then
return message('mt-invalid-dates-age')
end
local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy)
local result
if date1.day then -- y, m, d known
result = (df and
'%-d %B %-Y' or
'%B %-d, %-Y') ..
'<span style="display:none">(%-Y-%m-%d)</span>'
elseif date1.month then -- y, m known; d unknown
result =
'%B %-Y' ..
'<span style="display:none">(%-Y-%m-00)</span>'
else -- y known; m, d unknown
result =
'%-Y' ..
'<span style="display:none">(%-Y-00-00)</span>'
end
result = from_en(date1:text(result) ..
mtext['txt-aged'] ..
dateDifference({
diff = diff,
show = 'y',
abbr = 'abbr_off',
disp = 'disp_raw',
range = 'dash',
sep = 'sep_space',
}) ..
')')
local warnings = tonumber(frame.args.warnings)
if warnings and warnings > 0 then
local good = {
df = true,
mf = true,
}
local invalid
local imax = options.textdates and 2 or 6
for k, _ in pairs(args) do
if type(k) == 'number' then
if k > imax then
invalid = tostring(k)
break
end
else
if not good[k] then
invalid = k
break
end
end
end
if invalid then
result = result .. message({ 'mt-bad-param1', invalid }, 'warning')
end
end
return result
end
local function dateToGsd(frame)
-- Implement [[Template:Gregorian serial date]].
-- Return Gregorian serial date of the given date, or the current date.
-- The returned value is negative for dates before 1 January 1 AD
-- despite the fact that GSD is not defined for such dates.
local date = getDates(frame, { wantMixture=true, single=true })
if type(date) == 'string' then
return date
end
return tostring(date.gsd)
end
local function jdToDate(frame)
-- Return formatted date from a Julian date.
-- The result includes a time if the input includes a fraction.
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date('juliandate', args[1], args[2])
if date then
return from_en(date:text())
end
return message('mt-need-jdn')
end
local function dateToJd(frame)
-- Return Julian date (a number) from a date which may include a time,
-- or the current date ('currentdate') or current date and time ('currentdatetime').
-- The word 'Julian' is accepted for the Julian calendar.
local Date = getExports(frame)
local args = frame:getParent().args
local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])
if date then
return tostring(date.jd)
end
return message('mt-need-valid-ymd-current')
end
local function timeInterval(frame)
-- Implement [[Template:Time interval]].
-- There are two positional arguments: date1, date2.
-- The default for each is the current date and time.
-- Result is date2 - date1 formatted.
local Date = getExports(frame)
local args = frame:getParent().args
local parms = {
extra = makeExtra(args),
wantDuration = yes(args.duration),
range = yes(args.range) or (args.range == 'dash' and 'dash' or nil),
wantSc = yes(args.sc),
}
local fix = yes(args.fix) and 'fix' or ''
local date1 = Date(fix, 'partial', stripToNil(args[1]) or 'currentdatetime')
if not date1 then
return message('mt-invalid-start')
end
local date2 = Date(fix, 'partial', stripToNil(args[2]) or 'currentdatetime')
if not date2 then
return message('mt-invalid-end')
end
parms.diff = date2 - date1
for argname, translate in pairs(translateParameters) do
local parm = stripToNil(args[argname])
if parm then
parm = translate[parm]
if parm == nil then -- test for nil because false is a valid setting
return message({ 'mt-bad-param2', argname, args[argname] })
end
parms[argname] = parm
end
end
if parms.round then
local round = parms.round
local show = parms.show
if round ~= 'on' then
if show then
if show.id ~= round then
return message({ 'mt-conflicting-show', args.show, args.round })
end
else
parms.show = translateParameters.show[round]
end
end
parms.round = true
end
return from_en(dateDifference(parms))
end
return {
age_generic = ageGeneric, -- can emulate several age templates
birth_date_and_age = bda, -- Template:Birth_date_and_age
death_date_and_age = dda, -- Template:Death_date_and_age
gsd = dateToGsd, -- Template:Gregorian_serial_date
extract = dateExtract, -- Template:Extract
jd_to_date = jdToDate, -- Template:?
JULIANDAY = dateToJd, -- Template:JULIANDAY
time_interval = timeInterval, -- Template:Time_interval
}
af1xfqe203b6wtpapnd6ex0fywr106t
ბიგ ბლეკ-რივერი
0
34139
240050
209792
2025-06-09T01:09:10Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240050
wikitext
text/x-wiki
{| style="border: 1px solid #AAAAAA; clear: right; float: right; font-size: 90%; margin-bottom: 0.5em; margin-left: 1em; padding: 0.4em; vertical-align: middle; width: 18em;" class="infobox"
|-
!style="background-color:#AACCFF; color:black; font-size: 125%; text-align:center;" colspan="2"|ბიგ ბლეკ-რივერი
|-
| align="center" colspan="2"|[[File:Big Black River at Highway 16 in Madison County, Mississippi.jpg|300px]]
<small>წყარმალუ ბიგ ბლეკ-რივერი</small>
[[File:Bigblackrivermap.png|300px]]<small>წყარმალუ ბიგ ბლეკ-რივერი რუკას</small>
|-
!style="text-align:center; background-color:#AACCFF; color:black" colspan="2"|დოხასიათაფა
|-
|სიგჷრძა
|<span style="white-space: nowrap;">530 კმ</span>
|-
|<span style="white-space: nowrap;">ღანჩოშ ფართობი</span>
|<span style="white-space: nowrap;">8,800 კმ²</span>
|-
!style="text-align:center; background-color:#AACCFF; color:black" colspan="2"|წყარიშ ნადუ
|-
|ოდუდე
|უებსტერიშ ოლქი, ნოღა იუპორაშ გოხოლუას
|-
|ინაკათუ
|<span style="white-space: nowrap;">[[მისისიპი]]</span></td>
|-
!style="text-align:center; background-color:#AACCFF; color:black" colspan="2"|ქიანეფი
|-
|ქიანეფი
| [[File:Flag of USA.svg|25px]] [[ააშ]]
|-
|შტატეფი
|[[File:Flag of Mississippi.svg|25px]] [[მისისიპიშ შტატი|მისისიპი]]
|}
'''ბიგ ბლეკ-რივერი''' ([[ინგლისური ნინა|ინგლ.]] Big Black River) რე [[წყარმალუ]] [[ააშ]]ს, [[მისისიპიშ შტატი]]ს. წყარმალუ ბლეკ-რივერი იჭყაფჷ უებსტერიშ ოლქის, ნოღა იუპორაშ გოხოლუას, ათავრეშე წყარმალუ მეურს 530 კილომეტრის დო ინაკათუ [[მისისიპი]]ს, ნოღა ვიკსბერგიშე 40 კმ.-შ მაშორას. ბიგ ბლეკ-რივერიშ ღანჩოშ ფართობ რე 8,800 კვ.კმ.
==ქოძირით თაშნეშე==
*[[მისისიპიშ წყარმალუეფიშ ერკებული]]
==ლიტერატურა==
*The American Heritage Dictionary of the English Language, Fourth Edition copyright 2000 by Houghton Mifflin Company
==რესურსეფი ინტერნეტის==
*[http://ms.water.usgs.gov/ms_proj/eric/bblack.html The Big Black River Basin Map] {{Webarchive|url=https://web.archive.org/web/20221120124733/https://ms.water.usgs.gov/ms_proj/eric/bblack.html |date=2022-11-20 }}
*[http://www.cr.nps.gov/hps/abpp/battles/ms010.htm Big Black River Bridge (Big Black)] {{Webarchive|url=https://web.archive.org/web/20061007210430/http://www.cr.nps.gov/hps/abpp/battles/ms010.htm |date=2006-10-07 }}
*[https://web.archive.org/web/20070311065245/http://encarta.msn.com/map_701511137/Big_Black.html Map of Big Black River]
*[https://web.archive.org/web/20070824163652/http://www.srh.noaa.gov/lmrfc/forecast/tributaries/status_bigb.shtml Big Black and Homochitto River Basins]
*[http://www.nps.gov/archive/vick/camptrail/sites/Mississippi-sites/BgBlkBrdgMS.htm The Big Black Bridge]
*[http://americancivilwar.com/statepic/ms/ms010.html Big Black River Bridge Civil War Mississippi]
*[https://web.archive.org/web/20040803175112/http://www.srh.noaa.gov/lmrfc/forecast/tributaries/BIG_BLACK-HOMOCHITTO_BASINS/WSTM6.shtml Big Black River at West]
*[http://www.davidrumsey.com/directory/who/Kirkley++JAW+/where/Big+Black+River++Miss++/ Historical Maps of Big Black River (Miss)]
[[კატეგორია:ოორუე ამერიკაშ წყარმალუეფი]]
[[კატეგორია:ააშ-შ წყარმალუეფი]]
[[კატეგორია:მისისიპიშ წყარმალუეფი]]
[[კატეგორია:მისისიპიშ ნადუეფი]]
4h0az3gvdn2a6q3iryb7ulr6hasjd6k
ოპერა
0
35013
240059
238577
2025-06-09T06:33:46Z
InternetArchiveBot
15194
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
240059
wikitext
text/x-wiki
{{მიარეშანულამობა*|ოპერა (მიარეშანულამი)}}
[[ფაილი:Milano - Teatro alla Scala 3924.jpg|მინი|[[ლა სკალა]]. [[მილანი]], [[იტალია]] — მოსოფელს ართ-ართი არძაშე ჩინ3ბული [[ოპერაშ თეატრი]].]]
'''ოპერა''' ([[იტალიური ნონა|იტალ.]] opera) — [[თეატრი|თეატრალური]] წჷმორინაშ ხანტურულ-დრამატული ფორმა, ნამუსჷთ ქიმინუა თარო [[მუსიკა|მუსიკათ]] (ბირათ დო აკომპანემენტით) ირსულებუ. ოპერა ლათინური ზიტყვა რე დო შანენს თხობელუას. ოპერა სინთეზური ჟანრი რე დო აკმოშაყარანს მუსიკაშ, დრამატურგიაშ, ხანტურუაშ დო ქორეოგრაფიაშ ელემენტეფს. ოპერაშ საორკესტრე დაჭყაფურს ჯოხო უვერტიურა (თინა სონატურ ფორმას ქორე ჭარილი-და). ოპერაშ ტექსტის ჯოხო ლიბრეტო, დო ოპერაშ ქიმინუეფს — აქტეფი. ოპერას ადხვადჷნა მელოდიაშე მერკებული ზიტყვური ტექსტი, ნამუსჷთ რეჩიტატივი ჯოხო, არია, ნამუშჷთ ოპერას მობირე მუში გინაფეფს გჷნმოჩანს, ბირა, კავატინა, კანცონა, ანსამბლური ნომერეფი, ბუნეფი. ოპერა შილებე ორდას უწლმუხარცქუ გოვითარაფაშ პრინციპშა ვარ-და თებული ფორმებეფიშ, ნომერებეფიშ მოლათირუათ (ოშა-გოშათ ჟირხოლოშა ართო) აკოგაფილი.
== რესურსეფი ინტერნეტის ==
* [http://operabase.com Operabase – Comprehensive opera performances database]
* [http://www.stageagent.com/browse/showtype/opera StageAgent – synopses & character descriptions for most major operas] {{Webarchive|url=https://web.archive.org/web/20100106005815/http://stageagent.com/browse/showtype/opera |date=2010-01-06 }}
* [http://www.opera-opera.com.au/plotind.htm What’s it about? – Opera plot summaries] {{Webarchive|url=https://web.archive.org/web/20090409075517/http://www.opera-opera.com.au/plotind.htm |date=2009-04-09 }}
* [http://operamusique.googlepages.com/ Vocabulaire de l’Opéra] {{Webarchive|url=https://web.archive.org/web/20090228114542/http://operamusique.googlepages.com/ |date=2009-02-28 }} {{Fr icon}}
* [http://opera.stanford.edu/main.html OperaGlass, a resource at Stanford University]
* [http://www.historicopera.com HistoricOpera – historic operatic images]
[[კატეგორია:ოპერა]]
[[კატეგორია:თეატრი]]
[[კატეგორია:მუსიკალური ფორმეფი]]
[[კატეგორია:მუსიკაშ ჟანრეფი]]
36azb9ibr68z9hlajmsgh53tg5yfjby
რუსეთიშ პრეზიდენტეფიშ ერკებული
0
42933
240039
240030
2025-06-08T16:57:08Z
Narazeni
826
240039
wikitext
text/x-wiki
{{რუსეთიშ პოლიტიკა|expanded=President}}
'''[[რუსეთიშ პრეზიდენტი]]''' რე [[რუსეთი|რუსეთიშ ფედერაციაშ]] სახენწჷფო ხეშუულებაშ უმაღალაში პიჯი. თე პოსტიშ დუმაკინე რე რუსეთიშ ფედერაციაშ სახენწჷფოშ მადუდე დო [[რუსეთიშ სახენწჷფო სხუნუ|სახენწჷფო სხუნუს]] ფორმალურო უნჯღვერს, თაშნეშე [[რუსეთიშ აკოანჯარაფილი ნძალეფი]]შ ცხენენჯმადუდე რე. პოსტიქ [[დჷნადგინა რუსეთიშ გამაგალაშ სისტემაშ გეშა (1918)|მიშაღალირქ იჸუ]] 1918 წანას, [[ფურთუთაშ რევოლუცია]]შ უკული, ასეიანი პოსტიქ გორჩქინდჷ [[1991]] წანაშ რეფერენდუმიშ უკული.<ref>{{cite book |last1=Aluf |first1=I. A. |url=http://encyclopedia2.thefreedictionary.com/February+Bourgeois+Democratic+Revolution+of+1917 |title=February Bourgeois Democratic Revolution of 1917 |work=[[The Great Soviet Encyclopedia]] |publisher=[[Gale (publisher)|The Gale Group, Inc.]] |year=1979 |edition=3rd}}</ref> [[სხუნუეფიშ რსხუ]]შ ბორჯის, [[რუსეთიშ სხუნუეფიშ ფედერაციული სოციალისტური რესპუბლიკა|რუსეთის]] ''[[დე იურე]]'' დუდენდეს კოლექტიური ორგანოეფი, მუჭომით რდჷ [[ედომუშამი რუსეთიშ ცენტრალური ემაჸონაფალი კომიტეტი]] და [[რუსეთიშ უმაღალაში სხუნუშ პრეზიდიუმი|უმაღალაში სხუნუშ პრეზიდიუმი]], ანდანე გამაგალაშ სხუნუური თეორია ვარებულენდჷ პრეზიდენტიშ პოსტიშ უციობას. [[1990]] წანას გენშეღეს [[სხუნუეფიშ რსხუშ პრეზიდენტი]]შ პოსტი, [[მიხეილ გორბაჩოვი]]შით სხუნუეფიშ რსხუშ [[ართპარტიული სახენწჷფო|ართპარტიული]] [[კომუნისტური სახენწჷფო]]შ [[პერესტროიკა|უმწუძინუ რეფორმეფიშ]] ბორჯის. გორბაჩოვი სხუნუეფიშ პირველი დო ეკონია პრეზიდენტი რდჷ.<ref>{{cite web |date=26 December 1991 |title=End of the Soviet Union: Text of Gorbachev's Farewell Address |url=https://www.nytimes.com/1991/12/26/world/end-of-the-soviet-union-text-of-gorbachev-s-farewell-address.html |access-date=27 December 2019 |website=The New York Times}}</ref> თიში მოღალობა ეიშანუაფუდჷ რუსეთწკჷმა დო სსრრ-შ შხვა რესპუბლიკეფწკჷმა სამართლებური დო პოლიტიკური აწორინაფეფით, ნამუქჷთ [[1991]] წანას, საბოლათ თინეფიშ რსული ზოხორინალა გჷმიჭანუ.
== პრეზიდენტეფი ==
{{main|რუსეთიშ პრეზიდენტი}}
{| class="wikitable" style="margin:1em auto; text-align:center; width:100%; border:1px #AAAAFF solid"
|- style="background:#cccccc"
! colspan="9" |
|-
!align="center" width="0" colspan=2 style="border-right: none"|
!align="center" width="0" style="border-left: none"|პორტრეტი
!align="center" width="0"|[[რუსეთიშ პრეზიდენტი|პრეზიდენტი]]
!align="center" width="0"|ხემანჭუაფაშ ხანი
!align="center" width="0"|ხანი
!align="center" width="0"|კინოხიანი პოსტი
!align="center" width="0" colspan=2|[[რუსეთიშ პრემიერ-მინისტრი|პრემიერ-მინისტრი]]
|-
! rowspan="10" style="background:{{party color|Independent (politician)}}" height="99" |
! rowspan="10" | [[ბორის ელცინიშ პორეზიდენტალა|1]]
| rowspan="10" style="width:150px" |[[ფაილი:Борис Николаевич Ельцин-1 (cropped).jpg|center|192x192px]]
| rowspan="10" |'''<big>[[ბორის ელცინი]]</big>'''<br><span style="font-size:100%;">Борис Ельцин</span><br>1931–2007<br><br>[[ფაილი:Yeltsin signature.svg|80px]]
| rowspan="10" style="background:#EEEEEE" | <span class="date"the sample style="white-space:nowrap;">10 კვირკვე, 1991</span> – <span class="date" style="white-space:nowrap;">31 ქირსეთუთა, 1999</span><br><small>(პოსტიშე გეგნოდირთუ)</small><br>({{age in years and days|1991|7|10|1999|12|31}})
| rowspan="4" style="background:#EEEEEE" |[[ბორის ელცინიშ პირველი ინაუგურაცია|1]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (1991)|1991]])</small><br>{{NoteTag|[[სხუნუეფიშ რსხუშ აკოცჷმა]]შე, ხათეშე, გიშაგორილქ იჸუ მუჭოთ რუსეთიშ სფსრ-შ პრეზიდენტი. პრეზიდენტიშ პოსტი უკებუდჷ 1996 წანაშახ, 1993 წანას კონსტიტუციაშ მეღებაშ დო პარლამენტწკჷმა ოურდუმე კონფლიქტიშ უმკუჯინალო.}}
| rowspan="10" style="background:#EEEEEE" | რუსეთიშ უჟინაში სხუნუშ მადუდე<br><small>(1990–1991)</small>
!style="background:{{party color|Communist Party of the Soviet Union}}"|
|style="background:#EEEEEE" |{{small|[[ივანე სილაევი]]}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#E6E6AA" |{{small|კჷნე მუ}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#E6E6AA" |{{small|[[ეგორ გაიდარი]]}}
|-
!rowspan="2" style="background:{{party color|Our Home – Russia}}"|
| rowspan="2" height=15px style="background:#EEEEEE" |{{small|[[ვიქტორ ჩერნომირდინი]]}}
|-
| rowspan="6" style="background:#EEEEEE" |[[ბორის ელცინიშ მაჟირა ინაუგურაცია|2]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (1996)|1996]])</small>
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[სერგეი კირიენკო]]}}
|-
!style="background:{{party color|Our Home – Russia}}"|
|height=10px style="background:#E6E6AA" |{{small|ვიქტორ ჩერნომირდინი}}
|-
!style="background:#42aaff"|
| style="background:#EEEEEE" |{{small|[[ევგენი პრიმაკოვი]]}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[სერგეი სტეპაშინი]]}}
|-
! rowspan=2 style="background:{{party color|Unity (Russian political party)}}"|
| rowspan=2 style="background:#EEEEEE" |{{small|[[ვლადიმერ პუტინი]]}}
|-
! rowspan="5" style="background:{{party color|Independent (politician)}}"; height="250" |
! rowspan="5" | [[რუსეთი ვლადიმერ პუტინიშ ბორჯის|2]]
| rowspan="5" |[[ფაილი: Vladimir Putin official portrait (cropped).jpg|center|192x192px]]
| rowspan="5" |'''<big>[[ვლადიმერ პუტინი]]</big>'''<br><span style="font-size:100%;">Владимир Путин</span><br>დ. 1952<br><small>(age {{Age|1952|10|7}})</small><br>[[File:Putin signature.svg|80px]]
| rowspan="5" style="background:#EEEEEE" | <span class="date" style="white-space:nowrap;">7 მესი, 2000</span> – <span class="date" style="white-space:nowrap;">7 მესი, 2008</span><br>{{small|(პოსტი უკებუდჷ 1999 წანაშ 31 ქირსეთუთაშე)}}<br>({{age in years and days|1999|12|31|2008|5|7}})
| rowspan="3" style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ პირველი ინაუგურაცია|3]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2000)|2000]])</small>
| rowspan="5" style="background:#EEEEEE" |[[რუსეთიშ პრემიერ-მინისტრი]]<br /><small>(1999–2000)</small>
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[მიხეილ კასიანოვი]]{{NoteTag|პრემიერ-მინისტრიშ მოღალობაშ მარსულებერი 2000 წანაშ 17 მესიშა.}}}}
|-
! rowspan="2" style="background:{{party color|Independent politician}}"|
| rowspan="2" height=70px style="background:#EEEEEE" |{{small|[[მიხეილ ფრადკოვი]]}}
|-
| rowspan="2" style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მაჟირა ინაუგურაცია|4]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2004)|2004]])</small>
|-
! style="background:{{party color|United Russia}}"|
| style="background:#EEEEEE" |{{small|[[ვიქტორ ზუბკოვი]]}}
|-
! style="background:{{party color|United Russia}}"; height="250" |
! [[დიმიტრი მედვედევიშ პრეზიდენტალა|3]]
|[[ფაილი:Dmitry_Medvedev_official_large_photo_-1_(cropped).jpg|center|192x192px]]
|'''<big>[[დიმიტრი მედვედევი]]</big>'''<br><span style="font-size:100%;">Дмитрий Медведев</span><br>Born 1965<br><small>(age {{Age|1965|9|14}})</small><br>[[ფაილი:Signature of Dmitry Medvedev.svg|80px]]
| style="background:#EEEEEE" | <span class="date" style="white-space:nowrap;">7 მესი, 2008</span> – <span class="date" style="white-space:nowrap;">7 მესი, 2012</span><br>({{age in years and days|2008|5|7|2012|5|7}})
| style="background:#EEEEEE" |[[დიმიტრი მედვედევიშ ინაუგურაცია|5]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2008)|2008]])</small>
| style="background:#EEEEEE" |[[რუსეთიშ პირველი ვიცე-პრემეირი]]<br><small>(2005–2008)</small>
! style="background:{{party color|United Russia}}"|
| style="background:#EEEEEE" |{{small|ვლადიმერ პუტინი}}
|-
! style="background:{{party color|United Russia}}"|
! rowspan="5" | [[რუსეთიშ ვლადიმერ პუტინიშ ბორჯის#მასუმა საპრეზიდენტო ხანი (2012–2018)|4]]
| rowspan="5" |[[ფაილი:Vladimir Putin - 2012.jpg|center|192x192px]]
| rowspan="5" |'''<big>[[ვლადიმერ პუტინი]]</big>'''<br /><span style="font-size:100%;">Владимир Путин</span><br>დ. 1952<br><small>(age {{Age|1952|10|7}})</small><br>[[ფაილი:Putin signature.svg|80px]]
| style="background:#EEEEEE" rowspan="5" |<span class="date" style="white-space:nowrap;">7 მესი, 2012</span> – ასეშა<br>({{age in years and days|2012|5|7}})
| style="background:#EEEEEE" rowspan="2" |[[ვლადიმერ პუტინიშ მასუმა ინაუგურაცია|6]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2012)|2012]])</small>
| style="background:#EEEEEE" rowspan="5" |რუსეთიშ პრემიერ-მინისტრი<br><small>(2008–2012)</small>
! style="background:{{party color|United Russia}}"|
| style="background:#E6E6AA" |{{small|ვიქტორ ზუბკოვი}}
|-
! rowspan=4 style="background: {{party color|Independent (politician)}}"; height="250" |
! rowspan=2 style="background:{{party color|United Russia}}"|
| rowspan=2 style="background:#EEEEEE" |{{small|დიმიტრი მედვედევი}}
|-
| rowspan=2 style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მაანთხა ინაუგურაცია|7]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2018)|2018]])</small>
|-
! rowspan="2" style="background:{{party color|Independent politician}}"|
| rowspan="2" style="background:#EEEEEE" |{{small|[[მიხეილ მიშუსტინი]]}}
|-
| style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მახუთა ინაუგურაცია|8]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2024)|2024]])</small>
|}
<!--
==მოღალობაშ==
{{mainarticle|Acting President of Russia}}
{{see also|President of the Soviet Union#Acting President}}
{|class="wikitable" style="margin:1em auto; width:100%; text-align:center;"
|- style="background:#cccccc"
!colspan=6 |
{{legend0|{{party color|Independent (politician)}}|[[Independent (politician)|Nonpartisan]]|border=1px solid #AAAAAA}} {{legend0|{{party color|Our Home – Russia}}|[[Our Home – Russia|NDR]]|border=1px solid #AAAAAA}} {{legend0|{{party color|Unity (Russian political party)}}|[[Unity (Russian political party)|Unity]]|border=1px solid #AAAAAA}}
|-
! align="center" style="border-right:none" |
! align="center" style="border-left:none" |Portrait
! align="center" |Acting President
! align="center" |Term of office
! align="center" |Main post
! align="center" |Notes
|-
!style="background:{{party color|Independent (politician)}};"|
| style="width:80px"|[[File:Evstafiev-alexander-rutskoy-w.jpg|154x154px]]
|'''[[Alexander Rutskoy]]'''<br><span style="font-size:100%;">Александр Руцкой</span><small><br>Born 1947<br>(age {{Age|1947|9|16}})</small>
|style="background:#EEEEEE"| 22 September – 4 October 1993
|style="background:#EEEEEE"| [[Vice President of Russia|Vice President]]
|style="background:#EEEEEE"| Acting president during the [[1993 Russian constitutional crisis|1993 constitutional crisis]].<br>His powers were not recognized by Boris Yeltsin.
|-
!style="background:{{party color|Our Home – Russia}};"|
|[[File:Viktor Chernomyrdin-1.jpg|110px]]
|'''[[Viktor Chernomyrdin]]'''<br><span style="font-size:100%;">Виктор Черномырдин</span><small><br>1938–2010<br>(aged 72)</small>
|style="background:#EEEEEE"| 5–6 November 1996
|rowspan="2" style="background:#EEEEEE"| [[Prime Minister of Russia|Prime Minister]]
|style="background:#EEEEEE"| Acting president during Boris Yeltsin's heart surgery.
|-
!style="background:{{party color|Unity (Russian political party)}};"|
|[[File:Vladimir Putin official portrait (cropped).jpg|138x138px]]
|'''[[Vladimir Putin]]'''<br><span style="font-size:100%;">Владимир Путин</span><small><br>Born 1952<br>(age {{Age|1952|10|7}})</small>
|style="background:#EEEEEE"| 31 December 1999 – 7 May 2000
|style="background:#EEEEEE"| {{nowrap|Acting president after Yeltsin's early resignation.}}
|}
== Timeline ==
{{#tag:timeline|
Define $width = 800
Define $warning = 680
Define $height = 250
Define $now = {{#time:d/m/Y}}
DateFormat = dd/mm/yyyy
Define $start = 01/01/1931
Define $end = {{NEXTYEAR}}
ImageSize = width:$width height:$height
PlotArea = right:10 left:7 bottom:80 top:50
Period = from:$start till:$end
TimeAxis = orientation:horizontal
Legend = orientation:vertical position:bottom columns:1
Colors =
id:bg value:white
id:lightline value:rgb(0.9, 0.9, 0.9)
id:lighttext value:rgb(0.5, 0.5, 0.5)
id:LIFESPAN value:rgb(0.9, 0.9, 0.9) Legend: Lifespan_besides_presidency
id:INDEPENDENT value:rgb(0.65, 0.65, 0.65) Legend: Independent
id:NDR value:rgb(0.16, 0.09, 0.44) Legend: Our_Home_–_Russia
id:UNITY value:rgb(0.13, 0.5, 0.81) Legend: Unity_(and_affiliated)
id:UNITED_RUSSIA value:rgb(0.12, 0.33, 0.68) Legend: United_Russia_(and_affiliated)
id:NAME value:rgb(0.15, 0.13, 0.05)
id:TODAY value:lightpurple
BackgroundColors = canvas:bg
ScaleMinor = gridcolor:lightline unit:year increment:1 start:$start
ScaleMajor = gridcolor:lighttext unit:year increment:10 start:01/01/1940
Define $dy = -5 # shift text to button side of bar
LineData=
at:$now color:TODAY width:0.1
PlotData=
bar:1 width:18
color:LIFESPAN align:center fontsize:M
from:01/02/1931 till:23/04/2007 shift:(-0,$dy) textcolor:NAME align:center text:[[Boris Yeltsin]]
color:INDEPENDENT
from:10/07/1991 till:31/12/1999
bar:2 width:15
color:LIFESPAN align:center fontsize:M
from:16/09/1947 till:$now shift:(-50,$dy) textcolor:NAME align:center text:[[Alexander Rutskoy|Alexander Rutskoy (acting; disputed)]]
color:INDEPENDENT
from:22/09/1993 till:04/10/1993
bar:3 width:15
color:LIFESPAN align:center fontsize:M
from:09/04/1938 till:03/11/2010 shift:(-50,$dy) textcolor:NAME text:[[Viktor Chernomyrdin|Viktor Chernomyrdin (acting)]]
color:NDR
from:05/11/1996 till: 06/11/1996
bar:4 width:20
color:LIFESPAN align:left fontsize:M
from:07/10/1952 till:$now shift:(-97,$dy) textcolor:NAME text:[[Vladimir Putin]]
color:UNITY
from:31/12/1999 till:01/12/2001
color:UNITED_RUSSIA
from:01/12/2001 till:07/05/2008
color:UNITED_RUSSIA
from:07/05/2012 till:26/05/2012
color:UNITED_RUSSIA
from:26/05/2012 till:$now
bar:5 width:20
color:LIFESPAN align:left fontsize:M
from:14/09/1965 till:$now shift:(-97,$dy) textcolor:NAME text:[[Dmitry Medvedev]]
color:UNITED_RUSSIA
from:07/05/2008 till:07/05/2012
TextData =
pos:(175,$height)
fontsize:L
textcolor:black
text:"Lifespan of each President and Acting President of Russia"
}}
{{^}}
[[File:Life expectancy in RSFSR and RF vs leader.png|thumb|left|520px|Graph of change of [[life expectancy]] in the Russian SFSR and Russia under various leaders]]
{{clear}}
==Subsequent public service==
Two presidents held other high offices after leaving the presidency.
{|class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
|-
!President
!Presidency
!Subsequent service
|-
|rowspan=2 nowrap|[[Vladimir Putin]]
|rowspan=2 style="text-align:center;"|2000–2008
|[[Prime Minister of Russia|Prime Minister]] (2008–2012)
|-
|[[President of Russia|President]] (2012–present)
|-
|rowspan=2|[[Dmitry Medvedev]]
|rowspan=2 style="text-align:center;"|2008–2012
|Prime Minister (2012–2020)
|-
|Deputy Chairman of the [[Security Council of Russia|Security Council]] (2020–present)
|}
-->
== თაშნეშე ქოძირით ==
* [[რუსეთიშ პრეზიდენტი]]
** [[რუსეთიშ მონარქეფიშ ერკებული]] (1917 წანაშახ)
** [[რუსეთიშ სახენწჷფოშ მადუდეეფიშ ერკებული]] (1917 წანაშე)
* [[რუსეთიშ პოლიტიკა]]
* [[რუსეთიშ თარობა]]
==რესურსეფი ინტერნეტის==
* [http://www.cbr.ru/eng/ რუსეთიშ ცენტრალური ბანკი]
* [https://web.archive.org/web/20090313002841/http://tonto.eia.doe.gov/country/country_energy_data.cfm?fips=RS რუსეთიშ ენერგეტიკაშ სტატისტიკა] ენერგეტიკაშ ინფორმაციული ადმინისტრაციაშე
* [https://web.archive.org/web/20080416210036/http://www.council.gov.ru/eng/index.html ფედერალური სხუნუ] — პარლამენტიშ ჟილენი პალატაშ ოფიციალური ვებ-ხასჷლა
==კომენტარეფი==
<references group="გეძახინი"/>
==სქოლიო==
{{reflist}}
{{მერკე-რუსეთი}}
{{რუსეთიშ პრეზიდენტეფი}}
[[კატეგორია:რუსეთიშ პრეზიდენტეფი|*ერკებული]]
[[კატეგორია:ერუანული პრეზიდენტეფიშ ერკებული|რუსეთი]]
[[კატეგორია:რუსი პოლიტიკოსეფი|პრეზიდენტეფი]]
inam5edg9phh3na02jxkbst4rmnyuiv
240041
240039
2025-06-08T18:25:44Z
Narazeni
826
240041
wikitext
text/x-wiki
{{რუსეთიშ პოლიტიკა|expanded=President}}
'''[[რუსეთიშ პრეზიდენტი]]''' რე [[რუსეთი|რუსეთიშ ფედერაციაშ]] სახენწჷფო ხეშუულებაშ უმაღალაში პიჯი. თე პოსტიშ დუმაკინე რე რუსეთიშ ფედერაციაშ სახენწჷფოშ მადუდე დო [[რუსეთიშ სახენწჷფო სხუნუ|სახენწჷფო სხუნუს]] ფორმალურო უნჯღვერს, თაშნეშე [[რუსეთიშ აკოანჯარაფილი ნძალეფი]]შ ცხენენჯმადუდე რე. პოსტიქ [[დჷნადგინა რუსეთიშ გამაგალაშ სისტემაშ გეშა (1918)|მიშაღალირქ იჸუ]] 1918 წანას, [[ფურთუთაშ რევოლუცია]]შ უკული, ასეიანი პოსტიქ გორჩქინდჷ [[1991]] წანაშ რეფერენდუმიშ უკული.<ref>{{cite book |last1=Aluf |first1=I. A. |url=http://encyclopedia2.thefreedictionary.com/February+Bourgeois+Democratic+Revolution+of+1917 |title=February Bourgeois Democratic Revolution of 1917 |work=[[The Great Soviet Encyclopedia]] |publisher=[[Gale (publisher)|The Gale Group, Inc.]] |year=1979 |edition=3rd}}</ref> [[სხუნუეფიშ რსხუ]]შ ბორჯის, [[რუსეთიშ სხუნუეფიშ ფედერაციული სოციალისტური რესპუბლიკა|რუსეთის]] ''[[დე იურე]]'' დუდენდეს კოლექტიური ორგანოეფი, მუჭომით რდჷ [[ედომუშამი რუსეთიშ ცენტრალური ემაჸონაფალი კომიტეტი]] დო [[რუსეთიშ უმაღალაში სხუნუშ პრეზიდიუმი|უმაღალაში სხუნუშ პრეზიდიუმი]], ანდანე გამაგალაშ სხუნუური თეორია ვარებულენდჷ პრეზიდენტიშ პოსტიშ უციობას. [[1990]] წანას გენშეღეს [[სხუნუეფიშ რსხუშ პრეზიდენტი]]შ პოსტი, [[მიხეილ გორბაჩოვი]]შით სხუნუეფიშ რსხუშ [[ართპარტიული სახენწჷფო|ართპარტიული]] [[კომუნისტური სახენწჷფო]]შ [[პერესტროიკა|უმწუძინუ რეფორმეფიშ]] ბორჯის. გორბაჩოვი სხუნუეფიშ პირველი დო ეკონია პრეზიდენტი რდჷ.<ref>{{cite web |date=26 December 1991 |title=End of the Soviet Union: Text of Gorbachev's Farewell Address |url=https://www.nytimes.com/1991/12/26/world/end-of-the-soviet-union-text-of-gorbachev-s-farewell-address.html |access-date=27 December 2019 |website=The New York Times}}</ref> თიში მოღალობა ეიშანუაფუდჷ რუსეთწკჷმა დო სსრრ-შ შხვა რესპუბლიკეფწკჷმა სამართლებური დო პოლიტიკური აწორინაფეფით, ნამუქჷთ [[1991]] წანას, საბოლათ თინეფიშ რსული ზოხორინალა გჷმიჭანუ.
== პრეზიდენტეფი ==
{{main|რუსეთიშ პრეზიდენტი}}
{| class="wikitable" style="margin:1em auto; text-align:center; width:100%; border:1px #AAAAFF solid"
|- style="background:#cccccc"
! colspan="9" |
|-
!align="center" width="0" colspan=2 style="border-right: none"|
!align="center" width="0" style="border-left: none"|პორტრეტი
!align="center" width="0"|[[რუსეთიშ პრეზიდენტი|პრეზიდენტი]]
!align="center" width="0"|ხემანჭუაფაშ ხანი
!align="center" width="0"|ხანი
!align="center" width="0"|კინოხიანი პოსტი
!align="center" width="0" colspan=2|[[რუსეთიშ პრემიერ-მინისტრი|პრემიერ-მინისტრი]]
|-
! rowspan="10" style="background:{{party color|Independent (politician)}}" height="99" |
! rowspan="10" | [[ბორის ელცინიშ პორეზიდენტალა|1]]
| rowspan="10" style="width:150px" |[[ფაილი:Борис Николаевич Ельцин-1 (cropped).jpg|center|192x192px]]
| rowspan="10" |'''<big>[[ბორის ელცინი]]</big>'''<br><span style="font-size:100%;">Борис Ельцин</span><br>1931–2007<br><br>[[ფაილი:Yeltsin signature.svg|80px]]
| rowspan="10" style="background:#EEEEEE" | <span class="date"the sample style="white-space:nowrap;">10 კვირკვე, 1991</span> – <span class="date" style="white-space:nowrap;">31 ქირსეთუთა, 1999</span><br><small>(პოსტიშე გეგნოდირთუ)</small><br>({{age in years and days|1991|7|10|1999|12|31}})
| rowspan="4" style="background:#EEEEEE" |[[ბორის ელცინიშ პირველი ინაუგურაცია|1]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (1991)|1991]])</small><br>{{NoteTag|[[სხუნუეფიშ რსხუშ აკოცჷმა]]შე, ხათეშე, გიშაგორილქ იჸუ მუჭოთ რუსეთიშ სფსრ-შ პრეზიდენტი. პრეზიდენტიშ პოსტი უკებუდჷ 1996 წანაშახ, 1993 წანას კონსტიტუციაშ მეღებაშ დო პარლამენტწკჷმა ოურდუმე კონფლიქტიშ უმკუჯინალო.}}
| rowspan="10" style="background:#EEEEEE" | რუსეთიშ უჟინაში სხუნუშ მადუდე<br><small>(1990–1991)</small>
!style="background:{{party color|Communist Party of the Soviet Union}}"|
|style="background:#EEEEEE" |{{small|[[ივანე სილაევი]]}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#E6E6AA" |{{small|კჷნე მუ}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#E6E6AA" |{{small|[[ეგორ გაიდარი]]}}
|-
!rowspan="2" style="background:{{party color|Our Home – Russia}}"|
| rowspan="2" height=15px style="background:#EEEEEE" |{{small|[[ვიქტორ ჩერნომირდინი]]}}
|-
| rowspan="6" style="background:#EEEEEE" |[[ბორის ელცინიშ მაჟირა ინაუგურაცია|2]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (1996)|1996]])</small>
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[სერგეი კირიენკო]]}}
|-
!style="background:{{party color|Our Home – Russia}}"|
|height=10px style="background:#E6E6AA" |{{small|ვიქტორ ჩერნომირდინი}}
|-
!style="background:#42aaff"|
| style="background:#EEEEEE" |{{small|[[ევგენი პრიმაკოვი]]}}
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[სერგეი სტეპაშინი]]}}
|-
! rowspan=2 style="background:{{party color|Unity (Russian political party)}}"|
| rowspan=2 style="background:#EEEEEE" |{{small|[[ვლადიმერ პუტინი]]}}
|-
! rowspan="5" style="background:{{party color|Independent (politician)}}"; height="250" |
! rowspan="5" | [[რუსეთი ვლადიმერ პუტინიშ ბორჯის|2]]
| rowspan="5" |[[ფაილი: Vladimir Putin official portrait (cropped).jpg|center|192x192px]]
| rowspan="5" |'''<big>[[ვლადიმერ პუტინი]]</big>'''<br><span style="font-size:100%;">Владимир Путин</span><br>დ. 1952<br><small>(age {{Age|1952|10|7}})</small><br>[[File:Putin signature.svg|80px]]
| rowspan="5" style="background:#EEEEEE" | <span class="date" style="white-space:nowrap;">7 მესი, 2000</span> – <span class="date" style="white-space:nowrap;">7 მესი, 2008</span><br>{{small|(პოსტი უკებუდჷ 1999 წანაშ 31 ქირსეთუთაშე)}}<br>({{age in years and days|1999|12|31|2008|5|7}})
| rowspan="3" style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ პირველი ინაუგურაცია|3]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2000)|2000]])</small>
| rowspan="5" style="background:#EEEEEE" |[[რუსეთიშ პრემიერ-მინისტრი]]<br /><small>(1999–2000)</small>
|-
!style="background:{{party color|Independent politician}}"|
| style="background:#EEEEEE" |{{small|[[მიხეილ კასიანოვი]]{{NoteTag|პრემიერ-მინისტრიშ მოღალობაშ მარსულებერი 2000 წანაშ 17 მესიშა.}}}}
|-
! rowspan="2" style="background:{{party color|Independent politician}}"|
| rowspan="2" height=70px style="background:#EEEEEE" |{{small|[[მიხეილ ფრადკოვი]]}}
|-
| rowspan="2" style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მაჟირა ინაუგურაცია|4]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2004)|2004]])</small>
|-
! style="background:{{party color|United Russia}}"|
| style="background:#EEEEEE" |{{small|[[ვიქტორ ზუბკოვი]]}}
|-
! style="background:{{party color|United Russia}}"; height="250" |
! [[დიმიტრი მედვედევიშ პრეზიდენტალა|3]]
|[[ფაილი:Dmitry_Medvedev_official_large_photo_-1_(cropped).jpg|center|192x192px]]
|'''<big>[[დიმიტრი მედვედევი]]</big>'''<br><span style="font-size:100%;">Дмитрий Медведев</span><br>Born 1965<br><small>(age {{Age|1965|9|14}})</small><br>[[ფაილი:Signature of Dmitry Medvedev.svg|80px]]
| style="background:#EEEEEE" | <span class="date" style="white-space:nowrap;">7 მესი, 2008</span> – <span class="date" style="white-space:nowrap;">7 მესი, 2012</span><br>({{age in years and days|2008|5|7|2012|5|7}})
| style="background:#EEEEEE" |[[დიმიტრი მედვედევიშ ინაუგურაცია|5]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2008)|2008]])</small>
| style="background:#EEEEEE" |[[რუსეთიშ პირველი ვიცე-პრემეირი]]<br><small>(2005–2008)</small>
! style="background:{{party color|United Russia}}"|
| style="background:#EEEEEE" |{{small|ვლადიმერ პუტინი}}
|-
! style="background:{{party color|United Russia}}"|
! rowspan="5" | [[რუსეთიშ ვლადიმერ პუტინიშ ბორჯის#მასუმა საპრეზიდენტო ხანი (2012–2018)|4]]
| rowspan="5" |[[ფაილი:Vladimir Putin - 2012.jpg|center|192x192px]]
| rowspan="5" |'''<big>[[ვლადიმერ პუტინი]]</big>'''<br /><span style="font-size:100%;">Владимир Путин</span><br>დ. 1952<br><small>(age {{Age|1952|10|7}})</small><br>[[ფაილი:Putin signature.svg|80px]]
| style="background:#EEEEEE" rowspan="5" |<span class="date" style="white-space:nowrap;">7 მესი, 2012</span> – ასეშა<br>({{age in years and days|2012|5|7}})
| style="background:#EEEEEE" rowspan="2" |[[ვლადიმერ პუტინიშ მასუმა ინაუგურაცია|6]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2012)|2012]])</small>
| style="background:#EEEEEE" rowspan="5" |რუსეთიშ პრემიერ-მინისტრი<br><small>(2008–2012)</small>
! style="background:{{party color|United Russia}}"|
| style="background:#E6E6AA" |{{small|ვიქტორ ზუბკოვი}}
|-
! rowspan=4 style="background: {{party color|Independent (politician)}}"; height="250" |
! rowspan=2 style="background:{{party color|United Russia}}"|
| rowspan=2 style="background:#EEEEEE" |{{small|დიმიტრი მედვედევი}}
|-
| rowspan=2 style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მაანთხა ინაუგურაცია|7]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2018)|2018]])</small>
|-
! rowspan="2" style="background:{{party color|Independent politician}}"|
| rowspan="2" style="background:#EEEEEE" |{{small|[[მიხეილ მიშუსტინი]]}}
|-
| style="background:#EEEEEE" |[[ვლადიმერ პუტინიშ მახუთა ინაუგურაცია|8]]<br><small>([[რუსეთიშ საპრეზიდენტო გიშაგორუეფი (2024)|2024]])</small>
|}
<!--
==მოღალობაშ==
{{mainarticle|Acting President of Russia}}
{{see also|President of the Soviet Union#Acting President}}
{|class="wikitable" style="margin:1em auto; width:100%; text-align:center;"
|- style="background:#cccccc"
!colspan=6 |
{{legend0|{{party color|Independent (politician)}}|[[Independent (politician)|Nonpartisan]]|border=1px solid #AAAAAA}} {{legend0|{{party color|Our Home – Russia}}|[[Our Home – Russia|NDR]]|border=1px solid #AAAAAA}} {{legend0|{{party color|Unity (Russian political party)}}|[[Unity (Russian political party)|Unity]]|border=1px solid #AAAAAA}}
|-
! align="center" style="border-right:none" |
! align="center" style="border-left:none" |Portrait
! align="center" |Acting President
! align="center" |Term of office
! align="center" |Main post
! align="center" |Notes
|-
!style="background:{{party color|Independent (politician)}};"|
| style="width:80px"|[[File:Evstafiev-alexander-rutskoy-w.jpg|154x154px]]
|'''[[Alexander Rutskoy]]'''<br><span style="font-size:100%;">Александр Руцкой</span><small><br>Born 1947<br>(age {{Age|1947|9|16}})</small>
|style="background:#EEEEEE"| 22 September – 4 October 1993
|style="background:#EEEEEE"| [[Vice President of Russia|Vice President]]
|style="background:#EEEEEE"| Acting president during the [[1993 Russian constitutional crisis|1993 constitutional crisis]].<br>His powers were not recognized by Boris Yeltsin.
|-
!style="background:{{party color|Our Home – Russia}};"|
|[[File:Viktor Chernomyrdin-1.jpg|110px]]
|'''[[Viktor Chernomyrdin]]'''<br><span style="font-size:100%;">Виктор Черномырдин</span><small><br>1938–2010<br>(aged 72)</small>
|style="background:#EEEEEE"| 5–6 November 1996
|rowspan="2" style="background:#EEEEEE"| [[Prime Minister of Russia|Prime Minister]]
|style="background:#EEEEEE"| Acting president during Boris Yeltsin's heart surgery.
|-
!style="background:{{party color|Unity (Russian political party)}};"|
|[[File:Vladimir Putin official portrait (cropped).jpg|138x138px]]
|'''[[Vladimir Putin]]'''<br><span style="font-size:100%;">Владимир Путин</span><small><br>Born 1952<br>(age {{Age|1952|10|7}})</small>
|style="background:#EEEEEE"| 31 December 1999 – 7 May 2000
|style="background:#EEEEEE"| {{nowrap|Acting president after Yeltsin's early resignation.}}
|}
== Timeline ==
{{#tag:timeline|
Define $width = 800
Define $warning = 680
Define $height = 250
Define $now = {{#time:d/m/Y}}
DateFormat = dd/mm/yyyy
Define $start = 01/01/1931
Define $end = {{NEXTYEAR}}
ImageSize = width:$width height:$height
PlotArea = right:10 left:7 bottom:80 top:50
Period = from:$start till:$end
TimeAxis = orientation:horizontal
Legend = orientation:vertical position:bottom columns:1
Colors =
id:bg value:white
id:lightline value:rgb(0.9, 0.9, 0.9)
id:lighttext value:rgb(0.5, 0.5, 0.5)
id:LIFESPAN value:rgb(0.9, 0.9, 0.9) Legend: Lifespan_besides_presidency
id:INDEPENDENT value:rgb(0.65, 0.65, 0.65) Legend: Independent
id:NDR value:rgb(0.16, 0.09, 0.44) Legend: Our_Home_–_Russia
id:UNITY value:rgb(0.13, 0.5, 0.81) Legend: Unity_(and_affiliated)
id:UNITED_RUSSIA value:rgb(0.12, 0.33, 0.68) Legend: United_Russia_(and_affiliated)
id:NAME value:rgb(0.15, 0.13, 0.05)
id:TODAY value:lightpurple
BackgroundColors = canvas:bg
ScaleMinor = gridcolor:lightline unit:year increment:1 start:$start
ScaleMajor = gridcolor:lighttext unit:year increment:10 start:01/01/1940
Define $dy = -5 # shift text to button side of bar
LineData=
at:$now color:TODAY width:0.1
PlotData=
bar:1 width:18
color:LIFESPAN align:center fontsize:M
from:01/02/1931 till:23/04/2007 shift:(-0,$dy) textcolor:NAME align:center text:[[Boris Yeltsin]]
color:INDEPENDENT
from:10/07/1991 till:31/12/1999
bar:2 width:15
color:LIFESPAN align:center fontsize:M
from:16/09/1947 till:$now shift:(-50,$dy) textcolor:NAME align:center text:[[Alexander Rutskoy|Alexander Rutskoy (acting; disputed)]]
color:INDEPENDENT
from:22/09/1993 till:04/10/1993
bar:3 width:15
color:LIFESPAN align:center fontsize:M
from:09/04/1938 till:03/11/2010 shift:(-50,$dy) textcolor:NAME text:[[Viktor Chernomyrdin|Viktor Chernomyrdin (acting)]]
color:NDR
from:05/11/1996 till: 06/11/1996
bar:4 width:20
color:LIFESPAN align:left fontsize:M
from:07/10/1952 till:$now shift:(-97,$dy) textcolor:NAME text:[[Vladimir Putin]]
color:UNITY
from:31/12/1999 till:01/12/2001
color:UNITED_RUSSIA
from:01/12/2001 till:07/05/2008
color:UNITED_RUSSIA
from:07/05/2012 till:26/05/2012
color:UNITED_RUSSIA
from:26/05/2012 till:$now
bar:5 width:20
color:LIFESPAN align:left fontsize:M
from:14/09/1965 till:$now shift:(-97,$dy) textcolor:NAME text:[[Dmitry Medvedev]]
color:UNITED_RUSSIA
from:07/05/2008 till:07/05/2012
TextData =
pos:(175,$height)
fontsize:L
textcolor:black
text:"Lifespan of each President and Acting President of Russia"
}}
{{^}}
[[File:Life expectancy in RSFSR and RF vs leader.png|thumb|left|520px|Graph of change of [[life expectancy]] in the Russian SFSR and Russia under various leaders]]
{{clear}}
==Subsequent public service==
Two presidents held other high offices after leaving the presidency.
{|class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
|-
!President
!Presidency
!Subsequent service
|-
|rowspan=2 nowrap|[[Vladimir Putin]]
|rowspan=2 style="text-align:center;"|2000–2008
|[[Prime Minister of Russia|Prime Minister]] (2008–2012)
|-
|[[President of Russia|President]] (2012–present)
|-
|rowspan=2|[[Dmitry Medvedev]]
|rowspan=2 style="text-align:center;"|2008–2012
|Prime Minister (2012–2020)
|-
|Deputy Chairman of the [[Security Council of Russia|Security Council]] (2020–present)
|}
-->
== თაშნეშე ქოძირით ==
* [[რუსეთიშ პრეზიდენტი]]
** [[რუსეთიშ მონარქეფიშ ერკებული]] (1917 წანაშახ)
** [[რუსეთიშ სახენწჷფოშ მადუდეეფიშ ერკებული]] (1917 წანაშე)
* [[რუსეთიშ პოლიტიკა]]
* [[რუსეთიშ თარობა]]
==რესურსეფი ინტერნეტის==
* [http://www.cbr.ru/eng/ რუსეთიშ ცენტრალური ბანკი]
* [https://web.archive.org/web/20090313002841/http://tonto.eia.doe.gov/country/country_energy_data.cfm?fips=RS რუსეთიშ ენერგეტიკაშ სტატისტიკა] ენერგეტიკაშ ინფორმაციული ადმინისტრაციაშე
* [https://web.archive.org/web/20080416210036/http://www.council.gov.ru/eng/index.html ფედერალური სხუნუ] — პარლამენტიშ ჟილენი პალატაშ ოფიციალური ვებ-ხასჷლა
==კომენტარეფი==
<references group="გეძახინი"/>
==სქოლიო==
{{reflist}}
{{მერკე-რუსეთი}}
{{რუსეთიშ პრეზიდენტეფი}}
[[კატეგორია:რუსეთიშ პრეზიდენტეფი|*ერკებული]]
[[კატეგორია:ერუანული პრეზიდენტეფიშ ერკებული|რუსეთი]]
[[კატეგორია:რუსი პოლიტიკოსეფი|პრეზიდენტეფი]]
bzza6k90bfkqvxmrq1jayyfh0smafqc
დიოგუ კოშტა
0
42934
240062
2025-06-09T10:14:24Z
Narazeni
826
ახალი ხასჷლა: {{ინფოდაფა მობურთე |ჯოხო = დიოგუ კოშტა |ედომუშამი ჯოხო = დიოგუ მეირელიშ და კოშტა |სურათი = [[სურათი:Diogo Costa in 2023.jpg|220px|center]] |დაბადებაშ თარიღი ={{დაბადებაშ თარიღი დო ხანი|1999|9|19}} |დაბადებაშ აბან...
240062
wikitext
text/x-wiki
{{ინფოდაფა მობურთე
|ჯოხო = დიოგუ კოშტა
|ედომუშამი ჯოხო = დიოგუ მეირელიშ და კოშტა
|სურათი = [[სურათი:Diogo Costa in 2023.jpg|220px|center]]
|დაბადებაშ თარიღი ={{დაბადებაშ თარიღი დო ხანი|1999|9|19}}
|დაბადებაშ აბანი =[[როტრისტი]], [[შვეიცარია]]
|ქიანა ={{შილა|პორტუგალია}}<br>{{შილა|შვეიცარია}}
|ღურაშ თარიღი =
|ღურაშ აბანი =
|სიმაღალა =186
|წონა =
|შხვა ჯოხო=
|პოზიცია =[[მეკარე (კუჩხბურთი)|მეკარე]]
|ერუანული ნაკორობა = {{fb|POR}}
|კლუბი = {{შილაშანი|პორტუგალია}} [[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]
|ნომერი = 99
|კარიერა =
}}
'''დიოგუ მეირელიშ და კოშტა''' ({{lang-pt|Diogo Meireles da Costa}}; დ. [[19 ეკენია]], [[1999]]) — [[პორტუგალია|პორტუგალიარი]] [[მობურთე]], ოკუჩხბურთე კლუბი „[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუშ]]“ დო [[პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა]]შ [[მეკარე (კუჩხბურთი)|მეკარე]]. [[მოსოფელიშ ოკუჩხბურთე ჩემპიონატი 2022|2022 წანაშ მოსოფელიშ]] დო [[ევროპაშ ოკუჩხბურთე ჩემპიონატი 2024|2024 წანაშ ევროპაშ ოკუჩხბურთე ჩემპიონატეფიშ]] მაკათური.
== რესურსეფი ინტერნეტის ==
* [http://www.zerozero.pt/player.php?id=284406&epoca_id=0&search=1 პროფილი ვებ-ხასჷლას ZeroZero]{{ref-pt}}
{{მერკე-სპორტი}}
[[კატეგორია:პორტუგალაიშ მობურთეეფი]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი (21 წანაშახ)]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი]]
[[კატეგორია:ევროპაშ 17-წანამეფშა კუჩხბურთიშ ჩემპიონეფი]]
[[კატეგორია:ევროპაშ 19-წანამეფშა კუჩხბურთიშ ჩემპიონეფი]]
[[კატეგორია:პორტუშ მობურთეეფი]]
[[კატეგორია:პორტუ B მობურთეეფი]]
1sl34usizok5cs895ofobjeu9irn2fn
240063
240062
2025-06-09T10:32:15Z
Narazeni
826
240063
wikitext
text/x-wiki
{{ინფოდაფა მობურთე
|ჯოხო = დიოგუ კოშტა
|ედომუშამი ჯოხო = დიოგუ მეირელიშ და კოშტა
|სურათი = [[სურათი:Diogo Costa in 2023.jpg|220px|center]]
|დაბადებაშ თარიღი ={{დაბადებაშ თარიღი დო ხანი|1999|9|19}}
|დაბადებაშ აბანი =[[როტრისტი]], [[შვეიცარია]]
|ქიანა ={{შილა|პორტუგალია}}<br>{{შილა|შვეიცარია}}
|ღურაშ თარიღი =
|ღურაშ აბანი =
|სიმაღალა =186
|წონა =
|შხვა ჯოხო=
|პოზიცია =[[მეკარე (კუჩხბურთი)|მეკარე]]
|ერუანული ნაკორობა = {{fb|POR}}
|კლუბი = {{შილაშანი|პორტუგალია}} [[პორტუ (ოკუჩხბურთე კლუბი)|პორტუ]]
|ნომერი = 99
|კარიერა =
}}
'''დიოგუ მეირელიშ და კოშტა''' ({{lang-pt|Diogo Meireles da Costa}}; დ. [[19 ეკენია]], [[1999]]) — [[პორტუგალია|პორტუგალიარი]] [[მობურთე]], ოკუჩხბურთე კლუბი „[[პორტუ (ოკუჩხბურთე კლუბი)|პორტუშ]]“ დო [[პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა]]შ [[მეკარე (კუჩხბურთი)|მეკარე]]. [[მოსოფელიშ ოკუჩხბურთე ჩემპიონატი 2022|2022 წანაშ მოსოფელიშ]] დო [[ევროპაშ ოკუჩხბურთე ჩემპიონატი 2024|2024 წანაშ ევროპაშ ოკუჩხბურთე ჩემპიონატეფიშ]] მაკათური.
== რესურსეფი ინტერნეტის ==
* [http://www.zerozero.pt/player.php?id=284406&epoca_id=0&search=1 პროფილი ვებ-ხასჷლას ZeroZero]{{ref-pt}}
{{მერკე-სპორტი}}
[[კატეგორია:პორტუგალაიშ მობურთეეფი]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი (21 წანაშახ)]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი]]
[[კატეგორია:ევროპაშ 17-წანამეფშა კუჩხბურთიშ ჩემპიონეფი]]
[[კატეგორია:ევროპაშ 19-წანამეფშა კუჩხბურთიშ ჩემპიონეფი]]
[[კატეგორია:ოკ პორტუშ მობურთეეფი]]
[[კატეგორია:ოკ პორტუ B მობურთეეფი]]
raqslm6j5piy41nvmmxragt0uo32bqx
ბერნარდუ სილვა
0
42935
240064
2025-06-09T10:37:02Z
Narazeni
826
ახალი ხასჷლა: {{ინფოდაფა მობურთე |ჯოხო = ბერნარდუ სილვა |ედომუშამი ჯოხო = ბერნარდუ მოტა ვეიგა დე კარვალიუ ი სილვა |სურათი = [[სურათი:Bernardo Silva (Isto É Gozar Com Quem Trabalha, 2024).png|220px|center]] |დაბადებაშ თარიღი ={{დაბადებაშ თა...
240064
wikitext
text/x-wiki
{{ინფოდაფა მობურთე
|ჯოხო = ბერნარდუ სილვა
|ედომუშამი ჯოხო = ბერნარდუ მოტა ვეიგა დე კარვალიუ ი სილვა
|სურათი = [[სურათი:Bernardo Silva (Isto É Gozar Com Quem Trabalha, 2024).png|220px|center]]
|დაბადებაშ თარიღი ={{დაბადებაშ თარიღი დო ხანი|1994|8|10}}
|დაბადებაშ აბანი =[[ლისაბონი]], [[პორტუგალია]]
|ქიანა ={{შილა|პორტუგალია}}
|ღურაშ თარიღი =
|ღურაშ აბანი =
|სიმაღალა =173
|წონა =
|შხვა ჯოხო=
|პოზიცია =[[ოშქაშემათხილე (კუჩხბურთი)|ოშქაშემათხილე]]
|ერუანული ნაკორობა = {{fb|POR}}
|კლუბი = {{შილაშანი|ინგლისი}} [[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტი]]
|ნომერი = 20
|კარიერა =
}}
'''ბერნარდუ მოტა ვეიგა დე კარვალიუ ი სილვა''' ({{lang-pt|Bernardo Mota Veiga de Carvalho e Silva}}, {{IPA|bɨɾˈnaɾdu ˈsiɫvɐ}}; დ. [[10 მარაშინათუთა]], [[1994]], [[ლისაბონი]], [[პორტუგალია]]) — [[პორტუგალია|პორტუგალია]] [[მობურთე]], ოკუჩხბურთე კლუბი „[[მანჩესტერ სიტი (ოკუჩხბურთე კლუბი)|მანჩესტერ სიტიშ]]“ დო [[პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობა]]შ [[ოშქაშემათხილე (კუჩხბურთი)|ოშქაშემათხილე]]. [[მოსოფელიშ კუჩხბურთიშ ჩემპიონატი|მოსოფელიშ 2]] ([[მოსოფელიშ ოკუჩხბურთე ჩემპიონატი 2018|2018]] დო [[მოსოფელიშ ოკუჩხბურთე ჩემპიონატი 2022|2022]]) დო [[ევროპაშ ოკუჩხბურთე ჩემპიონატი|ევროპაშ 2 ჩემპიონატეფიშ]] ([[ევროპაშ ოკუჩხბურთე ჩემპიონატი 2020|2020]] დო [[ევროპაშ ოკუჩხბურთე ჩემპიონატი 2024|2024]]) მაკათური.
== რესურსეფი ინტერნეტის ==
* [https://www.mancity.com/players/bernardo-silva მობურთეშ პროფილი] „მანჩესტერ სიტიშ“ ოფიციალურ ვებ-ხასჷლას{{ref-en}}
{{მერკე-სპორტი}}
[[კატეგორია:პორტუგალიაშ მობურთეეფი]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი (21 წანაშახ)]]
[[კატეგორია:პორტუგალიაშ ერუანული ოკუჩხბურთე ნაკორობაშ მობურთეეფი]]
[[კატეგორია:ოკ ბენფიკა ლისაბონიშ მობურთეეფი]]
[[კატეგორია:ოკ მონაკოშ მობურთეეფი]]
[[კატეგორია:ოკ მანჩესტერ სიტიშ მობურთეეფი]]
3jcvivo2tg1dko727ydbm3gk9yu0tsk