| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652 |
- """Provides internationalization for arrow in over 60 languages and dialects."""
- from math import trunc
- from typing import (
- Any,
- ClassVar,
- Dict,
- List,
- Literal,
- Mapping,
- Optional,
- Sequence,
- Tuple,
- Type,
- Union,
- cast,
- )
- TimeFrameLiteral = Literal[
- "now",
- "second",
- "seconds",
- "minute",
- "minutes",
- "hour",
- "hours",
- "day",
- "days",
- "week",
- "weeks",
- "month",
- "months",
- "quarter",
- "quarters",
- "year",
- "years",
- ]
- _TimeFrameElements = Union[
- str, Sequence[str], Mapping[str, str], Mapping[str, Sequence[str]]
- ]
- _locale_map: Dict[str, Type["Locale"]] = {}
- def get_locale(name: str) -> "Locale":
- """Returns an appropriate :class:`Locale <arrow.locales.Locale>`
- corresponding to an input locale name.
- :param name: the name of the locale.
- """
- normalized_locale_name = name.lower().replace("_", "-")
- locale_cls = _locale_map.get(normalized_locale_name)
- if locale_cls is None:
- raise ValueError(f"Unsupported locale {normalized_locale_name!r}.")
- return locale_cls()
- def get_locale_by_class_name(name: str) -> "Locale":
- """Returns an appropriate :class:`Locale <arrow.locales.Locale>`
- corresponding to an locale class name.
- :param name: the name of the locale class.
- """
- locale_cls: Optional[Type[Locale]] = globals().get(name)
- if locale_cls is None:
- raise ValueError(f"Unsupported locale {name!r}.")
- return locale_cls()
- class Locale:
- """Represents locale-specific data and functionality."""
- names: ClassVar[List[str]] = []
- timeframes: ClassVar[Mapping[TimeFrameLiteral, _TimeFrameElements]] = {
- "now": "",
- "second": "",
- "seconds": "",
- "minute": "",
- "minutes": "",
- "hour": "",
- "hours": "",
- "day": "",
- "days": "",
- "week": "",
- "weeks": "",
- "month": "",
- "months": "",
- "quarter": "",
- "quarters": "",
- "year": "",
- "years": "",
- }
- meridians: ClassVar[Dict[str, str]] = {"am": "", "pm": "", "AM": "", "PM": ""}
- past: ClassVar[str]
- future: ClassVar[str]
- and_word: ClassVar[Optional[str]] = None
- month_names: ClassVar[List[str]] = []
- month_abbreviations: ClassVar[List[str]] = []
- day_names: ClassVar[List[str]] = []
- day_abbreviations: ClassVar[List[str]] = []
- ordinal_day_re: ClassVar[str] = r"(\d+)"
- _month_name_to_ordinal: Optional[Dict[str, int]]
- def __init_subclass__(cls, **kwargs: Any) -> None:
- for locale_name in cls.names:
- if locale_name in _locale_map:
- raise LookupError(f"Duplicated locale name: {locale_name}")
- _locale_map[locale_name.lower().replace("_", "-")] = cls
- def __init__(self) -> None:
- self._month_name_to_ordinal = None
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int] = 0,
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within a timeframe in plain language.
- :param timeframe: a string representing a timeframe.
- :param delta: a quantity representing a delta in a timeframe.
- :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
- """
- humanized = self._format_timeframe(timeframe, trunc(delta))
- if not only_distance:
- humanized = self._format_relative(humanized, timeframe, delta)
- return humanized
- def describe_multi(
- self,
- timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]],
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within multiple timeframes in plain language.
- :param timeframes: a list of string, quantity pairs each representing a timeframe and delta.
- :param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords
- """
- parts = [
- self._format_timeframe(timeframe, trunc(delta))
- for timeframe, delta in timeframes
- ]
- if self.and_word:
- parts.insert(-1, self.and_word)
- humanized = " ".join(parts)
- if not only_distance:
- # Needed to determine the correct relative string to use
- timeframe_value = 0
- for _, unit_value in timeframes:
- if trunc(unit_value) != 0:
- timeframe_value = trunc(unit_value)
- break
- # Note it doesn't matter the timeframe unit we use on the call, only the value
- humanized = self._format_relative(humanized, "seconds", timeframe_value)
- return humanized
- def day_name(self, day: int) -> str:
- """Returns the day name for a specified day of the week.
- :param day: the ``int`` day of the week (1-7).
- """
- return self.day_names[day]
- def day_abbreviation(self, day: int) -> str:
- """Returns the day abbreviation for a specified day of the week.
- :param day: the ``int`` day of the week (1-7).
- """
- return self.day_abbreviations[day]
- def month_name(self, month: int) -> str:
- """Returns the month name for a specified month of the year.
- :param month: the ``int`` month of the year (1-12).
- """
- return self.month_names[month]
- def month_abbreviation(self, month: int) -> str:
- """Returns the month abbreviation for a specified month of the year.
- :param month: the ``int`` month of the year (1-12).
- """
- return self.month_abbreviations[month]
- def month_number(self, name: str) -> Optional[int]:
- """Returns the month number for a month specified by name or abbreviation.
- :param name: the month name or abbreviation.
- """
- if self._month_name_to_ordinal is None:
- self._month_name_to_ordinal = self._name_to_ordinal(self.month_names)
- self._month_name_to_ordinal.update(
- self._name_to_ordinal(self.month_abbreviations)
- )
- return self._month_name_to_ordinal.get(name)
- def year_full(self, year: int) -> str:
- """Returns the year for specific locale if available
- :param year: the ``int`` year (4-digit)
- """
- return f"{year:04d}"
- def year_abbreviation(self, year: int) -> str:
- """Returns the year for specific locale if available
- :param year: the ``int`` year (4-digit)
- """
- return f"{year:04d}"[2:]
- def meridian(self, hour: int, token: Any) -> Optional[str]:
- """Returns the meridian indicator for a specified hour and format token.
- :param hour: the ``int`` hour of the day.
- :param token: the format token.
- """
- if token == "a":
- return self.meridians["am"] if hour < 12 else self.meridians["pm"]
- if token == "A":
- return self.meridians["AM"] if hour < 12 else self.meridians["PM"]
- return None
- def ordinal_number(self, n: int) -> str:
- """Returns the ordinal format of a given integer
- :param n: an integer
- """
- return self._ordinal_number(n)
- def _ordinal_number(self, n: int) -> str:
- return f"{n}"
- def _name_to_ordinal(self, lst: Sequence[str]) -> Dict[str, int]:
- return {elem.lower(): i for i, elem in enumerate(lst[1:], 1)}
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- # TODO: remove cast
- return cast(str, self.timeframes[timeframe]).format(trunc(abs(delta)))
- def _format_relative(
- self,
- humanized: str,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int],
- ) -> str:
- if timeframe == "now":
- return humanized
- direction = self.past if delta < 0 else self.future
- return direction.format(humanized)
- class EnglishLocale(Locale):
- names = [
- "en",
- "en-us",
- "en-gb",
- "en-au",
- "en-be",
- "en-jp",
- "en-za",
- "en-ca",
- "en-ph",
- ]
- past = "{0} ago"
- future = "in {0}"
- and_word = "and"
- timeframes = {
- "now": "just now",
- "second": "a second",
- "seconds": "{0} seconds",
- "minute": "a minute",
- "minutes": "{0} minutes",
- "hour": "an hour",
- "hours": "{0} hours",
- "day": "a day",
- "days": "{0} days",
- "week": "a week",
- "weeks": "{0} weeks",
- "month": "a month",
- "months": "{0} months",
- "quarter": "a quarter",
- "quarters": "{0} quarters",
- "year": "a year",
- "years": "{0} years",
- }
- meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
- month_names = [
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec",
- ]
- day_names = [
- "",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Sunday",
- ]
- day_abbreviations = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
- ordinal_day_re = r"((?P<value>[2-3]?1(?=st)|[2-3]?2(?=nd)|[2-3]?3(?=rd)|[1-3]?[04-9](?=th)|1[1-3](?=th))(st|nd|rd|th))"
- def _ordinal_number(self, n: int) -> str:
- if n % 100 not in (11, 12, 13):
- remainder = abs(n) % 10
- if remainder == 1:
- return f"{n}st"
- elif remainder == 2:
- return f"{n}nd"
- elif remainder == 3:
- return f"{n}rd"
- return f"{n}th"
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[int, float] = 0,
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within a timeframe in plain language.
- :param timeframe: a string representing a timeframe.
- :param delta: a quantity representing a delta in a timeframe.
- :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
- """
- humanized = super().describe(timeframe, delta, only_distance)
- if only_distance and timeframe == "now":
- humanized = "instantly"
- return humanized
- class ItalianLocale(Locale):
- names = ["it", "it-it"]
- past = "{0} fa"
- future = "tra {0}"
- and_word = "e"
- timeframes = {
- "now": "adesso",
- "second": "un secondo",
- "seconds": "{0} qualche secondo",
- "minute": "un minuto",
- "minutes": "{0} minuti",
- "hour": "un'ora",
- "hours": "{0} ore",
- "day": "un giorno",
- "days": "{0} giorni",
- "week": "una settimana",
- "weeks": "{0} settimane",
- "month": "un mese",
- "months": "{0} mesi",
- "year": "un anno",
- "years": "{0} anni",
- }
- month_names = [
- "",
- "gennaio",
- "febbraio",
- "marzo",
- "aprile",
- "maggio",
- "giugno",
- "luglio",
- "agosto",
- "settembre",
- "ottobre",
- "novembre",
- "dicembre",
- ]
- month_abbreviations = [
- "",
- "gen",
- "feb",
- "mar",
- "apr",
- "mag",
- "giu",
- "lug",
- "ago",
- "set",
- "ott",
- "nov",
- "dic",
- ]
- day_names = [
- "",
- "lunedì",
- "martedì",
- "mercoledì",
- "giovedì",
- "venerdì",
- "sabato",
- "domenica",
- ]
- day_abbreviations = ["", "lun", "mar", "mer", "gio", "ven", "sab", "dom"]
- ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])"
- def _ordinal_number(self, n: int) -> str:
- return f"{n}º"
- class SpanishLocale(Locale):
- names = ["es", "es-es"]
- past = "hace {0}"
- future = "en {0}"
- and_word = "y"
- timeframes = {
- "now": "ahora",
- "second": "un segundo",
- "seconds": "{0} segundos",
- "minute": "un minuto",
- "minutes": "{0} minutos",
- "hour": "una hora",
- "hours": "{0} horas",
- "day": "un día",
- "days": "{0} días",
- "week": "una semana",
- "weeks": "{0} semanas",
- "month": "un mes",
- "months": "{0} meses",
- "year": "un año",
- "years": "{0} años",
- }
- meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
- month_names = [
- "",
- "enero",
- "febrero",
- "marzo",
- "abril",
- "mayo",
- "junio",
- "julio",
- "agosto",
- "septiembre",
- "octubre",
- "noviembre",
- "diciembre",
- ]
- month_abbreviations = [
- "",
- "ene",
- "feb",
- "mar",
- "abr",
- "may",
- "jun",
- "jul",
- "ago",
- "sep",
- "oct",
- "nov",
- "dic",
- ]
- day_names = [
- "",
- "lunes",
- "martes",
- "miércoles",
- "jueves",
- "viernes",
- "sábado",
- "domingo",
- ]
- day_abbreviations = ["", "lun", "mar", "mie", "jue", "vie", "sab", "dom"]
- ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=[ºª]))[ºª])"
- def _ordinal_number(self, n: int) -> str:
- return f"{n}º"
- class FrenchBaseLocale(Locale):
- past = "il y a {0}"
- future = "dans {0}"
- and_word = "et"
- timeframes = {
- "now": "maintenant",
- "second": "une seconde",
- "seconds": "{0} secondes",
- "minute": "une minute",
- "minutes": "{0} minutes",
- "hour": "une heure",
- "hours": "{0} heures",
- "day": "un jour",
- "days": "{0} jours",
- "week": "une semaine",
- "weeks": "{0} semaines",
- "month": "un mois",
- "months": "{0} mois",
- "year": "un an",
- "years": "{0} ans",
- }
- month_names = [
- "",
- "janvier",
- "février",
- "mars",
- "avril",
- "mai",
- "juin",
- "juillet",
- "août",
- "septembre",
- "octobre",
- "novembre",
- "décembre",
- ]
- day_names = [
- "",
- "lundi",
- "mardi",
- "mercredi",
- "jeudi",
- "vendredi",
- "samedi",
- "dimanche",
- ]
- day_abbreviations = ["", "lun", "mar", "mer", "jeu", "ven", "sam", "dim"]
- ordinal_day_re = (
- r"((?P<value>\b1(?=er\b)|[1-3]?[02-9](?=e\b)|[1-3]1(?=e\b))(er|e)\b)"
- )
- def _ordinal_number(self, n: int) -> str:
- if abs(n) == 1:
- return f"{n}er"
- return f"{n}e"
- class FrenchLocale(FrenchBaseLocale, Locale):
- names = ["fr", "fr-fr"]
- month_abbreviations = [
- "",
- "janv",
- "févr",
- "mars",
- "avr",
- "mai",
- "juin",
- "juil",
- "août",
- "sept",
- "oct",
- "nov",
- "déc",
- ]
- class FrenchCanadianLocale(FrenchBaseLocale, Locale):
- names = ["fr-ca"]
- month_abbreviations = [
- "",
- "janv",
- "févr",
- "mars",
- "avr",
- "mai",
- "juin",
- "juill",
- "août",
- "sept",
- "oct",
- "nov",
- "déc",
- ]
- class GreekLocale(Locale):
- names = ["el", "el-gr"]
- past = "πριν από {0}"
- future = "σε {0}"
- and_word = "και"
- timeframes = {
- "now": "τώρα",
- "second": "ένα δευτερόλεπτο",
- "seconds": "{0} δευτερόλεπτα",
- "minute": "ένα λεπτό",
- "minutes": "{0} λεπτά",
- "hour": "μία ώρα",
- "hours": "{0} ώρες",
- "day": "μία ημέρα",
- "days": "{0} ημέρες",
- "week": "μία εβδομάδα",
- "weeks": "{0} εβδομάδες",
- "month": "ένα μήνα",
- "months": "{0} μήνες",
- "year": "ένα χρόνο",
- "years": "{0} χρόνια",
- }
- month_names = [
- "",
- "Ιανουαρίου",
- "Φεβρουαρίου",
- "Μαρτίου",
- "Απριλίου",
- "Μαΐου",
- "Ιουνίου",
- "Ιουλίου",
- "Αυγούστου",
- "Σεπτεμβρίου",
- "Οκτωβρίου",
- "Νοεμβρίου",
- "Δεκεμβρίου",
- ]
- month_abbreviations = [
- "",
- "Ιαν",
- "Φεβ",
- "Μαρ",
- "Απρ",
- "Μαΐ",
- "Ιον",
- "Ιολ",
- "Αυγ",
- "Σεπ",
- "Οκτ",
- "Νοε",
- "Δεκ",
- ]
- day_names = [
- "",
- "Δευτέρα",
- "Τρίτη",
- "Τετάρτη",
- "Πέμπτη",
- "Παρασκευή",
- "Σάββατο",
- "Κυριακή",
- ]
- day_abbreviations = ["", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"]
- class JapaneseLocale(Locale):
- names = ["ja", "ja-jp"]
- past = "{0}前"
- future = "{0}後"
- and_word = ""
- timeframes = {
- "now": "現在",
- "second": "1秒",
- "seconds": "{0}秒",
- "minute": "1分",
- "minutes": "{0}分",
- "hour": "1時間",
- "hours": "{0}時間",
- "day": "1日",
- "days": "{0}日",
- "week": "1週間",
- "weeks": "{0}週間",
- "month": "1ヶ月",
- "months": "{0}ヶ月",
- "year": "1年",
- "years": "{0}年",
- }
- month_names = [
- "",
- "1月",
- "2月",
- "3月",
- "4月",
- "5月",
- "6月",
- "7月",
- "8月",
- "9月",
- "10月",
- "11月",
- "12月",
- ]
- month_abbreviations = [
- "",
- " 1",
- " 2",
- " 3",
- " 4",
- " 5",
- " 6",
- " 7",
- " 8",
- " 9",
- "10",
- "11",
- "12",
- ]
- day_names = [
- "",
- "月曜日",
- "火曜日",
- "水曜日",
- "木曜日",
- "金曜日",
- "土曜日",
- "日曜日",
- ]
- day_abbreviations = ["", "月", "火", "水", "木", "金", "土", "日"]
- class SwedishLocale(Locale):
- names = ["sv", "sv-se"]
- past = "för {0} sen"
- future = "om {0}"
- and_word = "och"
- timeframes = {
- "now": "just nu",
- "second": "en sekund",
- "seconds": "{0} sekunder",
- "minute": "en minut",
- "minutes": "{0} minuter",
- "hour": "en timme",
- "hours": "{0} timmar",
- "day": "en dag",
- "days": "{0} dagar",
- "week": "en vecka",
- "weeks": "{0} veckor",
- "month": "en månad",
- "months": "{0} månader",
- "year": "ett år",
- "years": "{0} år",
- }
- month_names = [
- "",
- "januari",
- "februari",
- "mars",
- "april",
- "maj",
- "juni",
- "juli",
- "augusti",
- "september",
- "oktober",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "maj",
- "jun",
- "jul",
- "aug",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "måndag",
- "tisdag",
- "onsdag",
- "torsdag",
- "fredag",
- "lördag",
- "söndag",
- ]
- day_abbreviations = ["", "mån", "tis", "ons", "tor", "fre", "lör", "sön"]
- class FinnishLocale(Locale):
- names = ["fi", "fi-fi"]
- # The finnish grammar is very complex, and its hard to convert
- # 1-to-1 to something like English.
- past = "{0} sitten"
- future = "{0} kuluttua"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "juuri nyt",
- "second": {"past": "sekunti", "future": "sekunnin"},
- "seconds": {"past": "{0} sekuntia", "future": "{0} sekunnin"},
- "minute": {"past": "minuutti", "future": "minuutin"},
- "minutes": {"past": "{0} minuuttia", "future": "{0} minuutin"},
- "hour": {"past": "tunti", "future": "tunnin"},
- "hours": {"past": "{0} tuntia", "future": "{0} tunnin"},
- "day": {"past": "päivä", "future": "päivän"},
- "days": {"past": "{0} päivää", "future": "{0} päivän"},
- "week": {"past": "viikko", "future": "viikon"},
- "weeks": {"past": "{0} viikkoa", "future": "{0} viikon"},
- "month": {"past": "kuukausi", "future": "kuukauden"},
- "months": {"past": "{0} kuukautta", "future": "{0} kuukauden"},
- "year": {"past": "vuosi", "future": "vuoden"},
- "years": {"past": "{0} vuotta", "future": "{0} vuoden"},
- }
- # Months and days are lowercase in Finnish
- month_names = [
- "",
- "tammikuu",
- "helmikuu",
- "maaliskuu",
- "huhtikuu",
- "toukokuu",
- "kesäkuu",
- "heinäkuu",
- "elokuu",
- "syyskuu",
- "lokakuu",
- "marraskuu",
- "joulukuu",
- ]
- month_abbreviations = [
- "",
- "tammi",
- "helmi",
- "maalis",
- "huhti",
- "touko",
- "kesä",
- "heinä",
- "elo",
- "syys",
- "loka",
- "marras",
- "joulu",
- ]
- day_names = [
- "",
- "maanantai",
- "tiistai",
- "keskiviikko",
- "torstai",
- "perjantai",
- "lauantai",
- "sunnuntai",
- ]
- day_abbreviations = ["", "ma", "ti", "ke", "to", "pe", "la", "su"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- if isinstance(form, Mapping):
- if delta < 0:
- form = form["past"]
- else:
- form = form["future"]
- return form.format(abs(delta))
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- class ChineseCNLocale(Locale):
- names = ["zh", "zh-cn"]
- past = "{0}前"
- future = "{0}后"
- timeframes = {
- "now": "刚才",
- "second": "1秒",
- "seconds": "{0}秒",
- "minute": "1分钟",
- "minutes": "{0}分钟",
- "hour": "1小时",
- "hours": "{0}小时",
- "day": "1天",
- "days": "{0}天",
- "week": "1周",
- "weeks": "{0}周",
- "month": "1个月",
- "months": "{0}个月",
- "year": "1年",
- "years": "{0}年",
- }
- month_names = [
- "",
- "一月",
- "二月",
- "三月",
- "四月",
- "五月",
- "六月",
- "七月",
- "八月",
- "九月",
- "十月",
- "十一月",
- "十二月",
- ]
- month_abbreviations = [
- "",
- " 1",
- " 2",
- " 3",
- " 4",
- " 5",
- " 6",
- " 7",
- " 8",
- " 9",
- "10",
- "11",
- "12",
- ]
- day_names = [
- "",
- "星期一",
- "星期二",
- "星期三",
- "星期四",
- "星期五",
- "星期六",
- "星期日",
- ]
- day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
- class ChineseTWLocale(Locale):
- names = ["zh-tw"]
- past = "{0}前"
- future = "{0}後"
- and_word = "和"
- timeframes = {
- "now": "剛才",
- "second": "1秒",
- "seconds": "{0}秒",
- "minute": "1分鐘",
- "minutes": "{0}分鐘",
- "hour": "1小時",
- "hours": "{0}小時",
- "day": "1天",
- "days": "{0}天",
- "week": "1週",
- "weeks": "{0}週",
- "month": "1個月",
- "months": "{0}個月",
- "year": "1年",
- "years": "{0}年",
- }
- month_names = [
- "",
- "1月",
- "2月",
- "3月",
- "4月",
- "5月",
- "6月",
- "7月",
- "8月",
- "9月",
- "10月",
- "11月",
- "12月",
- ]
- month_abbreviations = [
- "",
- " 1",
- " 2",
- " 3",
- " 4",
- " 5",
- " 6",
- " 7",
- " 8",
- " 9",
- "10",
- "11",
- "12",
- ]
- day_names = ["", "週一", "週二", "週三", "週四", "週五", "週六", "週日"]
- day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
- class HongKongLocale(Locale):
- names = ["zh-hk"]
- past = "{0}前"
- future = "{0}後"
- timeframes = {
- "now": "剛才",
- "second": "1秒",
- "seconds": "{0}秒",
- "minute": "1分鐘",
- "minutes": "{0}分鐘",
- "hour": "1小時",
- "hours": "{0}小時",
- "day": "1天",
- "days": "{0}天",
- "week": "1星期",
- "weeks": "{0}星期",
- "month": "1個月",
- "months": "{0}個月",
- "year": "1年",
- "years": "{0}年",
- }
- month_names = [
- "",
- "1月",
- "2月",
- "3月",
- "4月",
- "5月",
- "6月",
- "7月",
- "8月",
- "9月",
- "10月",
- "11月",
- "12月",
- ]
- month_abbreviations = [
- "",
- " 1",
- " 2",
- " 3",
- " 4",
- " 5",
- " 6",
- " 7",
- " 8",
- " 9",
- "10",
- "11",
- "12",
- ]
- day_names = [
- "",
- "星期一",
- "星期二",
- "星期三",
- "星期四",
- "星期五",
- "星期六",
- "星期日",
- ]
- day_abbreviations = ["", "一", "二", "三", "四", "五", "六", "日"]
- class KoreanLocale(Locale):
- names = ["ko", "ko-kr"]
- past = "{0} 전"
- future = "{0} 후"
- timeframes = {
- "now": "지금",
- "second": "1초",
- "seconds": "{0}초",
- "minute": "1분",
- "minutes": "{0}분",
- "hour": "한시간",
- "hours": "{0}시간",
- "day": "하루",
- "days": "{0}일",
- "week": "1주",
- "weeks": "{0}주",
- "month": "한달",
- "months": "{0}개월",
- "year": "1년",
- "years": "{0}년",
- }
- special_dayframes = {
- -2: "그제",
- -1: "어제",
- 1: "내일",
- 2: "모레",
- 3: "글피",
- 4: "그글피",
- }
- special_yearframes = {-2: "재작년", -1: "작년", 1: "내년", 2: "내후년"}
- month_names = [
- "",
- "1월",
- "2월",
- "3월",
- "4월",
- "5월",
- "6월",
- "7월",
- "8월",
- "9월",
- "10월",
- "11월",
- "12월",
- ]
- month_abbreviations = [
- "",
- " 1",
- " 2",
- " 3",
- " 4",
- " 5",
- " 6",
- " 7",
- " 8",
- " 9",
- "10",
- "11",
- "12",
- ]
- day_names = [
- "",
- "월요일",
- "화요일",
- "수요일",
- "목요일",
- "금요일",
- "토요일",
- "일요일",
- ]
- day_abbreviations = ["", "월", "화", "수", "목", "금", "토", "일"]
- def _ordinal_number(self, n: int) -> str:
- ordinals = [
- "0",
- "첫",
- "두",
- "세",
- "네",
- "다섯",
- "여섯",
- "일곱",
- "여덟",
- "아홉",
- "열",
- ]
- if n < len(ordinals):
- return f"{ordinals[n]}번째"
- return f"{n}번째"
- def _format_relative(
- self,
- humanized: str,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int],
- ) -> str:
- if timeframe in ("day", "days"):
- special = self.special_dayframes.get(int(delta))
- if special:
- return special
- elif timeframe in ("year", "years"):
- special = self.special_yearframes.get(int(delta))
- if special:
- return special
- return super()._format_relative(humanized, timeframe, delta)
- # derived locale types & implementations.
- class DutchLocale(Locale):
- names = ["nl", "nl-nl"]
- past = "{0} geleden"
- future = "over {0}"
- timeframes = {
- "now": "nu",
- "second": "een seconde",
- "seconds": "{0} seconden",
- "minute": "een minuut",
- "minutes": "{0} minuten",
- "hour": "een uur",
- "hours": "{0} uur",
- "day": "een dag",
- "days": "{0} dagen",
- "week": "een week",
- "weeks": "{0} weken",
- "month": "een maand",
- "months": "{0} maanden",
- "year": "een jaar",
- "years": "{0} jaar",
- }
- # In Dutch names of months and days are not starting with a capital letter
- # like in the English language.
- month_names = [
- "",
- "januari",
- "februari",
- "maart",
- "april",
- "mei",
- "juni",
- "juli",
- "augustus",
- "september",
- "oktober",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mrt",
- "apr",
- "mei",
- "jun",
- "jul",
- "aug",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "maandag",
- "dinsdag",
- "woensdag",
- "donderdag",
- "vrijdag",
- "zaterdag",
- "zondag",
- ]
- day_abbreviations = ["", "ma", "di", "wo", "do", "vr", "za", "zo"]
- class SlavicBaseLocale(Locale):
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if delta % 10 == 1 and delta % 100 != 11:
- form = form["singular"]
- elif 2 <= delta % 10 <= 4 and (delta % 100 < 10 or delta % 100 >= 20):
- form = form["dual"]
- else:
- form = form["plural"]
- return form.format(delta)
- class BelarusianLocale(SlavicBaseLocale):
- names = ["be", "be-by"]
- past = "{0} таму"
- future = "праз {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "зараз",
- "second": "секунду",
- "seconds": "{0} некалькі секунд",
- "minute": "хвіліну",
- "minutes": {
- "singular": "{0} хвіліну",
- "dual": "{0} хвіліны",
- "plural": "{0} хвілін",
- },
- "hour": "гадзіну",
- "hours": {
- "singular": "{0} гадзіну",
- "dual": "{0} гадзіны",
- "plural": "{0} гадзін",
- },
- "day": "дзень",
- "days": {"singular": "{0} дзень", "dual": "{0} дні", "plural": "{0} дзён"},
- "month": "месяц",
- "months": {
- "singular": "{0} месяц",
- "dual": "{0} месяцы",
- "plural": "{0} месяцаў",
- },
- "year": "год",
- "years": {"singular": "{0} год", "dual": "{0} гады", "plural": "{0} гадоў"},
- }
- month_names = [
- "",
- "студзеня",
- "лютага",
- "сакавіка",
- "красавіка",
- "траўня",
- "чэрвеня",
- "ліпеня",
- "жніўня",
- "верасня",
- "кастрычніка",
- "лістапада",
- "снежня",
- ]
- month_abbreviations = [
- "",
- "студ",
- "лют",
- "сак",
- "крас",
- "трав",
- "чэрв",
- "ліп",
- "жнів",
- "вер",
- "каст",
- "ліст",
- "снеж",
- ]
- day_names = [
- "",
- "панядзелак",
- "аўторак",
- "серада",
- "чацвер",
- "пятніца",
- "субота",
- "нядзеля",
- ]
- day_abbreviations = ["", "пн", "ат", "ср", "чц", "пт", "сб", "нд"]
- class PolishLocale(SlavicBaseLocale):
- names = ["pl", "pl-pl"]
- past = "{0} temu"
- future = "za {0}"
- # The nouns should be in genitive case (Polish: "dopełniacz")
- # in order to correctly form `past` & `future` expressions.
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "teraz",
- "second": "sekundę",
- "seconds": {
- "singular": "{0} sekund",
- "dual": "{0} sekundy",
- "plural": "{0} sekund",
- },
- "minute": "minutę",
- "minutes": {
- "singular": "{0} minut",
- "dual": "{0} minuty",
- "plural": "{0} minut",
- },
- "hour": "godzinę",
- "hours": {
- "singular": "{0} godzin",
- "dual": "{0} godziny",
- "plural": "{0} godzin",
- },
- "day": "dzień",
- "days": "{0} dni",
- "week": "tydzień",
- "weeks": {
- "singular": "{0} tygodni",
- "dual": "{0} tygodnie",
- "plural": "{0} tygodni",
- },
- "month": "miesiąc",
- "months": {
- "singular": "{0} miesięcy",
- "dual": "{0} miesiące",
- "plural": "{0} miesięcy",
- },
- "year": "rok",
- "years": {"singular": "{0} lat", "dual": "{0} lata", "plural": "{0} lat"},
- }
- month_names = [
- "",
- "styczeń",
- "luty",
- "marzec",
- "kwiecień",
- "maj",
- "czerwiec",
- "lipiec",
- "sierpień",
- "wrzesień",
- "październik",
- "listopad",
- "grudzień",
- ]
- month_abbreviations = [
- "",
- "sty",
- "lut",
- "mar",
- "kwi",
- "maj",
- "cze",
- "lip",
- "sie",
- "wrz",
- "paź",
- "lis",
- "gru",
- ]
- day_names = [
- "",
- "poniedziałek",
- "wtorek",
- "środa",
- "czwartek",
- "piątek",
- "sobota",
- "niedziela",
- ]
- day_abbreviations = ["", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nd"]
- class RussianLocale(SlavicBaseLocale):
- names = ["ru", "ru-ru"]
- past = "{0} назад"
- future = "через {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "сейчас",
- "second": "секунда",
- "seconds": {
- "singular": "{0} секунду",
- "dual": "{0} секунды",
- "plural": "{0} секунд",
- },
- "minute": "минуту",
- "minutes": {
- "singular": "{0} минуту",
- "dual": "{0} минуты",
- "plural": "{0} минут",
- },
- "hour": "час",
- "hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часов"},
- "day": "день",
- "days": {"singular": "{0} день", "dual": "{0} дня", "plural": "{0} дней"},
- "week": "неделю",
- "weeks": {
- "singular": "{0} неделю",
- "dual": "{0} недели",
- "plural": "{0} недель",
- },
- "month": "месяц",
- "months": {
- "singular": "{0} месяц",
- "dual": "{0} месяца",
- "plural": "{0} месяцев",
- },
- "quarter": "квартал",
- "quarters": {
- "singular": "{0} квартал",
- "dual": "{0} квартала",
- "plural": "{0} кварталов",
- },
- "year": "год",
- "years": {"singular": "{0} год", "dual": "{0} года", "plural": "{0} лет"},
- }
- month_names = [
- "",
- "января",
- "февраля",
- "марта",
- "апреля",
- "мая",
- "июня",
- "июля",
- "августа",
- "сентября",
- "октября",
- "ноября",
- "декабря",
- ]
- month_abbreviations = [
- "",
- "янв",
- "фев",
- "мар",
- "апр",
- "май",
- "июн",
- "июл",
- "авг",
- "сен",
- "окт",
- "ноя",
- "дек",
- ]
- day_names = [
- "",
- "понедельник",
- "вторник",
- "среда",
- "четверг",
- "пятница",
- "суббота",
- "воскресенье",
- ]
- day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "вс"]
- class AfrikaansLocale(Locale):
- names = ["af", "af-nl"]
- past = "{0} gelede"
- future = "in {0}"
- timeframes = {
- "now": "nou",
- "second": "n sekonde",
- "seconds": "{0} sekondes",
- "minute": "minuut",
- "minutes": "{0} minute",
- "hour": "uur",
- "hours": "{0} ure",
- "day": "een dag",
- "days": "{0} dae",
- "month": "een maand",
- "months": "{0} maande",
- "year": "een jaar",
- "years": "{0} jaar",
- }
- month_names = [
- "",
- "Januarie",
- "Februarie",
- "Maart",
- "April",
- "Mei",
- "Junie",
- "Julie",
- "Augustus",
- "September",
- "Oktober",
- "November",
- "Desember",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mrt",
- "Apr",
- "Mei",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Okt",
- "Nov",
- "Des",
- ]
- day_names = [
- "",
- "Maandag",
- "Dinsdag",
- "Woensdag",
- "Donderdag",
- "Vrydag",
- "Saterdag",
- "Sondag",
- ]
- day_abbreviations = ["", "Ma", "Di", "Wo", "Do", "Vr", "Za", "So"]
- class BulgarianLocale(SlavicBaseLocale):
- names = ["bg", "bg-bg"]
- past = "{0} назад"
- future = "напред {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "сега",
- "second": "секунда",
- "seconds": "{0} няколко секунди",
- "minute": "минута",
- "minutes": {
- "singular": "{0} минута",
- "dual": "{0} минути",
- "plural": "{0} минути",
- },
- "hour": "час",
- "hours": {"singular": "{0} час", "dual": "{0} часа", "plural": "{0} часа"},
- "day": "ден",
- "days": {"singular": "{0} ден", "dual": "{0} дни", "plural": "{0} дни"},
- "month": "месец",
- "months": {
- "singular": "{0} месец",
- "dual": "{0} месеца",
- "plural": "{0} месеца",
- },
- "year": "година",
- "years": {
- "singular": "{0} година",
- "dual": "{0} години",
- "plural": "{0} години",
- },
- }
- month_names = [
- "",
- "януари",
- "февруари",
- "март",
- "април",
- "май",
- "юни",
- "юли",
- "август",
- "септември",
- "октомври",
- "ноември",
- "декември",
- ]
- month_abbreviations = [
- "",
- "ян",
- "февр",
- "март",
- "апр",
- "май",
- "юни",
- "юли",
- "авг",
- "септ",
- "окт",
- "ноем",
- "дек",
- ]
- day_names = [
- "",
- "понеделник",
- "вторник",
- "сряда",
- "четвъртък",
- "петък",
- "събота",
- "неделя",
- ]
- day_abbreviations = ["", "пон", "вт", "ср", "четв", "пет", "съб", "нед"]
- class UkrainianLocale(SlavicBaseLocale):
- names = ["ua", "uk", "uk-ua"]
- past = "{0} тому"
- future = "за {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "зараз",
- "second": "секунда",
- "seconds": "{0} кілька секунд",
- "minute": "хвилину",
- "minutes": {
- "singular": "{0} хвилину",
- "dual": "{0} хвилини",
- "plural": "{0} хвилин",
- },
- "hour": "годину",
- "hours": {
- "singular": "{0} годину",
- "dual": "{0} години",
- "plural": "{0} годин",
- },
- "day": "день",
- "days": {"singular": "{0} день", "dual": "{0} дні", "plural": "{0} днів"},
- "month": "місяць",
- "months": {
- "singular": "{0} місяць",
- "dual": "{0} місяці",
- "plural": "{0} місяців",
- },
- "year": "рік",
- "years": {"singular": "{0} рік", "dual": "{0} роки", "plural": "{0} років"},
- }
- month_names = [
- "",
- "січня",
- "лютого",
- "березня",
- "квітня",
- "травня",
- "червня",
- "липня",
- "серпня",
- "вересня",
- "жовтня",
- "листопада",
- "грудня",
- ]
- month_abbreviations = [
- "",
- "січ",
- "лют",
- "бер",
- "квіт",
- "трав",
- "черв",
- "лип",
- "серп",
- "вер",
- "жовт",
- "лист",
- "груд",
- ]
- day_names = [
- "",
- "понеділок",
- "вівторок",
- "середа",
- "четвер",
- "п’ятниця",
- "субота",
- "неділя",
- ]
- day_abbreviations = ["", "пн", "вт", "ср", "чт", "пт", "сб", "нд"]
- class MacedonianLocale(SlavicBaseLocale):
- names = ["mk", "mk-mk"]
- past = "пред {0}"
- future = "за {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "сега",
- "second": "една секунда",
- "seconds": {
- "singular": "{0} секунда",
- "dual": "{0} секунди",
- "plural": "{0} секунди",
- },
- "minute": "една минута",
- "minutes": {
- "singular": "{0} минута",
- "dual": "{0} минути",
- "plural": "{0} минути",
- },
- "hour": "еден саат",
- "hours": {"singular": "{0} саат", "dual": "{0} саати", "plural": "{0} саати"},
- "day": "еден ден",
- "days": {"singular": "{0} ден", "dual": "{0} дена", "plural": "{0} дена"},
- "week": "една недела",
- "weeks": {
- "singular": "{0} недела",
- "dual": "{0} недели",
- "plural": "{0} недели",
- },
- "month": "еден месец",
- "months": {
- "singular": "{0} месец",
- "dual": "{0} месеци",
- "plural": "{0} месеци",
- },
- "year": "една година",
- "years": {
- "singular": "{0} година",
- "dual": "{0} години",
- "plural": "{0} години",
- },
- }
- meridians = {"am": "дп", "pm": "пп", "AM": "претпладне", "PM": "попладне"}
- month_names = [
- "",
- "Јануари",
- "Февруари",
- "Март",
- "Април",
- "Мај",
- "Јуни",
- "Јули",
- "Август",
- "Септември",
- "Октомври",
- "Ноември",
- "Декември",
- ]
- month_abbreviations = [
- "",
- "Јан",
- "Фев",
- "Мар",
- "Апр",
- "Мај",
- "Јун",
- "Јул",
- "Авг",
- "Септ",
- "Окт",
- "Ноем",
- "Декем",
- ]
- day_names = [
- "",
- "Понеделник",
- "Вторник",
- "Среда",
- "Четврток",
- "Петок",
- "Сабота",
- "Недела",
- ]
- day_abbreviations = [
- "",
- "Пон",
- "Вт",
- "Сре",
- "Чет",
- "Пет",
- "Саб",
- "Нед",
- ]
- class MacedonianLatinLocale(SlavicBaseLocale):
- names = ["mk-latn", "mk-mk-latn"]
- past = "pred {0}"
- future = "za {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "sega",
- "second": "edna sekunda",
- "seconds": {
- "singular": "{0} sekunda",
- "dual": "{0} sekundi",
- "plural": "{0} sekundi",
- },
- "minute": "edna minuta",
- "minutes": {
- "singular": "{0} minuta",
- "dual": "{0} minuti",
- "plural": "{0} minuti",
- },
- "hour": "eden saat",
- "hours": {"singular": "{0} saat", "dual": "{0} saati", "plural": "{0} saati"},
- "day": "eden den",
- "days": {"singular": "{0} den", "dual": "{0} dena", "plural": "{0} dena"},
- "week": "edna nedela",
- "weeks": {
- "singular": "{0} nedela",
- "dual": "{0} nedeli",
- "plural": "{0} nedeli",
- },
- "month": "eden mesec",
- "months": {
- "singular": "{0} mesec",
- "dual": "{0} meseci",
- "plural": "{0} meseci",
- },
- "year": "edna godina",
- "years": {
- "singular": "{0} godina",
- "dual": "{0} godini",
- "plural": "{0} godini",
- },
- }
- meridians = {"am": "dp", "pm": "pp", "AM": "pretpladne", "PM": "popladne"}
- month_names = [
- "",
- "Januari",
- "Fevruari",
- "Mart",
- "April",
- "Maj",
- "Juni",
- "Juli",
- "Avgust",
- "Septemvri",
- "Oktomvri",
- "Noemvri",
- "Dekemvri",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Fev",
- "Mar",
- "Apr",
- "Maj",
- "Jun",
- "Jul",
- "Avg",
- "Sep",
- "Okt",
- "Noe",
- "Dek",
- ]
- day_names = [
- "",
- "Ponedelnik",
- "Vtornik",
- "Sreda",
- "Chetvrtok",
- "Petok",
- "Sabota",
- "Nedela",
- ]
- day_abbreviations = [
- "",
- "Pon",
- "Vt",
- "Sre",
- "Chet",
- "Pet",
- "Sab",
- "Ned",
- ]
- class GermanBaseLocale(Locale):
- past = "vor {0}"
- future = "in {0}"
- and_word = "und"
- timeframes: ClassVar[Dict[TimeFrameLiteral, str]] = {
- "now": "gerade eben",
- "second": "einer Sekunde",
- "seconds": "{0} Sekunden",
- "minute": "einer Minute",
- "minutes": "{0} Minuten",
- "hour": "einer Stunde",
- "hours": "{0} Stunden",
- "day": "einem Tag",
- "days": "{0} Tagen",
- "week": "einer Woche",
- "weeks": "{0} Wochen",
- "month": "einem Monat",
- "months": "{0} Monaten",
- "year": "einem Jahr",
- "years": "{0} Jahren",
- }
- timeframes_only_distance = timeframes.copy()
- timeframes_only_distance["second"] = "eine Sekunde"
- timeframes_only_distance["minute"] = "eine Minute"
- timeframes_only_distance["hour"] = "eine Stunde"
- timeframes_only_distance["day"] = "ein Tag"
- timeframes_only_distance["days"] = "{0} Tage"
- timeframes_only_distance["week"] = "eine Woche"
- timeframes_only_distance["month"] = "ein Monat"
- timeframes_only_distance["months"] = "{0} Monate"
- timeframes_only_distance["year"] = "ein Jahr"
- timeframes_only_distance["years"] = "{0} Jahre"
- month_names = [
- "",
- "Januar",
- "Februar",
- "März",
- "April",
- "Mai",
- "Juni",
- "Juli",
- "August",
- "September",
- "Oktober",
- "November",
- "Dezember",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mär",
- "Apr",
- "Mai",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Okt",
- "Nov",
- "Dez",
- ]
- day_names = [
- "",
- "Montag",
- "Dienstag",
- "Mittwoch",
- "Donnerstag",
- "Freitag",
- "Samstag",
- "Sonntag",
- ]
- day_abbreviations = ["", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[int, float] = 0,
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within a timeframe in plain language.
- :param timeframe: a string representing a timeframe.
- :param delta: a quantity representing a delta in a timeframe.
- :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
- """
- if not only_distance:
- return super().describe(timeframe, delta, only_distance)
- # German uses a different case without 'in' or 'ago'
- humanized: str = self.timeframes_only_distance[timeframe].format(
- trunc(abs(delta))
- )
- return humanized
- class GermanLocale(GermanBaseLocale, Locale):
- names = ["de", "de-de"]
- class SwissLocale(GermanBaseLocale, Locale):
- names = ["de-ch"]
- class AustrianLocale(GermanBaseLocale, Locale):
- names = ["de-at"]
- month_names = [
- "",
- "Jänner",
- "Februar",
- "März",
- "April",
- "Mai",
- "Juni",
- "Juli",
- "August",
- "September",
- "Oktober",
- "November",
- "Dezember",
- ]
- class NorwegianLocale(Locale):
- names = ["nb", "nb-no"]
- past = "for {0} siden"
- future = "om {0}"
- timeframes = {
- "now": "nå nettopp",
- "second": "ett sekund",
- "seconds": "{0} sekunder",
- "minute": "ett minutt",
- "minutes": "{0} minutter",
- "hour": "en time",
- "hours": "{0} timer",
- "day": "en dag",
- "days": "{0} dager",
- "week": "en uke",
- "weeks": "{0} uker",
- "month": "en måned",
- "months": "{0} måneder",
- "year": "ett år",
- "years": "{0} år",
- }
- month_names = [
- "",
- "januar",
- "februar",
- "mars",
- "april",
- "mai",
- "juni",
- "juli",
- "august",
- "september",
- "oktober",
- "november",
- "desember",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "mai",
- "jun",
- "jul",
- "aug",
- "sep",
- "okt",
- "nov",
- "des",
- ]
- day_names = [
- "",
- "mandag",
- "tirsdag",
- "onsdag",
- "torsdag",
- "fredag",
- "lørdag",
- "søndag",
- ]
- day_abbreviations = ["", "ma", "ti", "on", "to", "fr", "lø", "sø"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- class NewNorwegianLocale(Locale):
- names = ["nn", "nn-no"]
- past = "for {0} sidan"
- future = "om {0}"
- timeframes = {
- "now": "no nettopp",
- "second": "eitt sekund",
- "seconds": "{0} sekund",
- "minute": "eitt minutt",
- "minutes": "{0} minutt",
- "hour": "ein time",
- "hours": "{0} timar",
- "day": "ein dag",
- "days": "{0} dagar",
- "week": "ei veke",
- "weeks": "{0} veker",
- "month": "ein månad",
- "months": "{0} månader",
- "year": "eitt år",
- "years": "{0} år",
- }
- month_names = [
- "",
- "januar",
- "februar",
- "mars",
- "april",
- "mai",
- "juni",
- "juli",
- "august",
- "september",
- "oktober",
- "november",
- "desember",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "mai",
- "jun",
- "jul",
- "aug",
- "sep",
- "okt",
- "nov",
- "des",
- ]
- day_names = [
- "",
- "måndag",
- "tysdag",
- "onsdag",
- "torsdag",
- "fredag",
- "laurdag",
- "sundag",
- ]
- day_abbreviations = ["", "må", "ty", "on", "to", "fr", "la", "su"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- class PortugueseLocale(Locale):
- names = ["pt", "pt-pt"]
- past = "há {0}"
- future = "em {0}"
- and_word = "e"
- timeframes = {
- "now": "agora",
- "second": "um segundo",
- "seconds": "{0} segundos",
- "minute": "um minuto",
- "minutes": "{0} minutos",
- "hour": "uma hora",
- "hours": "{0} horas",
- "day": "um dia",
- "days": "{0} dias",
- "week": "uma semana",
- "weeks": "{0} semanas",
- "month": "um mês",
- "months": "{0} meses",
- "year": "um ano",
- "years": "{0} anos",
- }
- month_names = [
- "",
- "Janeiro",
- "Fevereiro",
- "Março",
- "Abril",
- "Maio",
- "Junho",
- "Julho",
- "Agosto",
- "Setembro",
- "Outubro",
- "Novembro",
- "Dezembro",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Fev",
- "Mar",
- "Abr",
- "Mai",
- "Jun",
- "Jul",
- "Ago",
- "Set",
- "Out",
- "Nov",
- "Dez",
- ]
- day_names = [
- "",
- "Segunda-feira",
- "Terça-feira",
- "Quarta-feira",
- "Quinta-feira",
- "Sexta-feira",
- "Sábado",
- "Domingo",
- ]
- day_abbreviations = ["", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"]
- class BrazilianPortugueseLocale(PortugueseLocale):
- names = ["pt-br"]
- past = "faz {0}"
- class TagalogLocale(Locale):
- names = ["tl", "tl-ph"]
- past = "nakaraang {0}"
- future = "{0} mula ngayon"
- timeframes = {
- "now": "ngayon lang",
- "second": "isang segundo",
- "seconds": "{0} segundo",
- "minute": "isang minuto",
- "minutes": "{0} minuto",
- "hour": "isang oras",
- "hours": "{0} oras",
- "day": "isang araw",
- "days": "{0} araw",
- "week": "isang linggo",
- "weeks": "{0} linggo",
- "month": "isang buwan",
- "months": "{0} buwan",
- "year": "isang taon",
- "years": "{0} taon",
- }
- month_names = [
- "",
- "Enero",
- "Pebrero",
- "Marso",
- "Abril",
- "Mayo",
- "Hunyo",
- "Hulyo",
- "Agosto",
- "Setyembre",
- "Oktubre",
- "Nobyembre",
- "Disyembre",
- ]
- month_abbreviations = [
- "",
- "Ene",
- "Peb",
- "Mar",
- "Abr",
- "May",
- "Hun",
- "Hul",
- "Ago",
- "Set",
- "Okt",
- "Nob",
- "Dis",
- ]
- day_names = [
- "",
- "Lunes",
- "Martes",
- "Miyerkules",
- "Huwebes",
- "Biyernes",
- "Sabado",
- "Linggo",
- ]
- day_abbreviations = ["", "Lun", "Mar", "Miy", "Huw", "Biy", "Sab", "Lin"]
- meridians = {"am": "nu", "pm": "nh", "AM": "ng umaga", "PM": "ng hapon"}
- def _ordinal_number(self, n: int) -> str:
- return f"ika-{n}"
- class VietnameseLocale(Locale):
- names = ["vi", "vi-vn"]
- past = "{0} trước"
- future = "{0} nữa"
- timeframes = {
- "now": "hiện tại",
- "second": "một giây",
- "seconds": "{0} giây",
- "minute": "một phút",
- "minutes": "{0} phút",
- "hour": "một giờ",
- "hours": "{0} giờ",
- "day": "một ngày",
- "days": "{0} ngày",
- "week": "một tuần",
- "weeks": "{0} tuần",
- "month": "một tháng",
- "months": "{0} tháng",
- "year": "một năm",
- "years": "{0} năm",
- }
- month_names = [
- "",
- "Tháng Một",
- "Tháng Hai",
- "Tháng Ba",
- "Tháng Tư",
- "Tháng Năm",
- "Tháng Sáu",
- "Tháng Bảy",
- "Tháng Tám",
- "Tháng Chín",
- "Tháng Mười",
- "Tháng Mười Một",
- "Tháng Mười Hai",
- ]
- month_abbreviations = [
- "",
- "Tháng 1",
- "Tháng 2",
- "Tháng 3",
- "Tháng 4",
- "Tháng 5",
- "Tháng 6",
- "Tháng 7",
- "Tháng 8",
- "Tháng 9",
- "Tháng 10",
- "Tháng 11",
- "Tháng 12",
- ]
- day_names = [
- "",
- "Thứ Hai",
- "Thứ Ba",
- "Thứ Tư",
- "Thứ Năm",
- "Thứ Sáu",
- "Thứ Bảy",
- "Chủ Nhật",
- ]
- day_abbreviations = ["", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"]
- class TurkishLocale(Locale):
- names = ["tr", "tr-tr"]
- past = "{0} önce"
- future = "{0} sonra"
- and_word = "ve"
- timeframes = {
- "now": "şimdi",
- "second": "bir saniye",
- "seconds": "{0} saniye",
- "minute": "bir dakika",
- "minutes": "{0} dakika",
- "hour": "bir saat",
- "hours": "{0} saat",
- "day": "bir gün",
- "days": "{0} gün",
- "week": "bir hafta",
- "weeks": "{0} hafta",
- "month": "bir ay",
- "months": "{0} ay",
- "year": "bir yıl",
- "years": "{0} yıl",
- }
- meridians = {"am": "öö", "pm": "ös", "AM": "ÖÖ", "PM": "ÖS"}
- month_names = [
- "",
- "Ocak",
- "Şubat",
- "Mart",
- "Nisan",
- "Mayıs",
- "Haziran",
- "Temmuz",
- "Ağustos",
- "Eylül",
- "Ekim",
- "Kasım",
- "Aralık",
- ]
- month_abbreviations = [
- "",
- "Oca",
- "Şub",
- "Mar",
- "Nis",
- "May",
- "Haz",
- "Tem",
- "Ağu",
- "Eyl",
- "Eki",
- "Kas",
- "Ara",
- ]
- day_names = [
- "",
- "Pazartesi",
- "Salı",
- "Çarşamba",
- "Perşembe",
- "Cuma",
- "Cumartesi",
- "Pazar",
- ]
- day_abbreviations = ["", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz"]
- class AzerbaijaniLocale(Locale):
- names = ["az", "az-az"]
- past = "{0} əvvəl"
- future = "{0} sonra"
- timeframes = {
- "now": "indi",
- "second": "bir saniyə",
- "seconds": "{0} saniyə",
- "minute": "bir dəqiqə",
- "minutes": "{0} dəqiqə",
- "hour": "bir saat",
- "hours": "{0} saat",
- "day": "bir gün",
- "days": "{0} gün",
- "week": "bir həftə",
- "weeks": "{0} həftə",
- "month": "bir ay",
- "months": "{0} ay",
- "year": "bir il",
- "years": "{0} il",
- }
- month_names = [
- "",
- "Yanvar",
- "Fevral",
- "Mart",
- "Aprel",
- "May",
- "İyun",
- "İyul",
- "Avqust",
- "Sentyabr",
- "Oktyabr",
- "Noyabr",
- "Dekabr",
- ]
- month_abbreviations = [
- "",
- "Yan",
- "Fev",
- "Mar",
- "Apr",
- "May",
- "İyn",
- "İyl",
- "Avq",
- "Sen",
- "Okt",
- "Noy",
- "Dek",
- ]
- day_names = [
- "",
- "Bazar ertəsi",
- "Çərşənbə axşamı",
- "Çərşənbə",
- "Cümə axşamı",
- "Cümə",
- "Şənbə",
- "Bazar",
- ]
- day_abbreviations = ["", "Ber", "Çax", "Çər", "Cax", "Cüm", "Şnb", "Bzr"]
- class ArabicLocale(Locale):
- names = [
- "ar",
- "ar-ae",
- "ar-bh",
- "ar-dj",
- "ar-eg",
- "ar-eh",
- "ar-er",
- "ar-km",
- "ar-kw",
- "ar-ly",
- "ar-om",
- "ar-qa",
- "ar-sa",
- "ar-sd",
- "ar-so",
- "ar-ss",
- "ar-td",
- "ar-ye",
- ]
- past = "منذ {0}"
- future = "خلال {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "الآن",
- "second": "ثانية",
- "seconds": {"2": "ثانيتين", "ten": "{0} ثوان", "higher": "{0} ثانية"},
- "minute": "دقيقة",
- "minutes": {"2": "دقيقتين", "ten": "{0} دقائق", "higher": "{0} دقيقة"},
- "hour": "ساعة",
- "hours": {"2": "ساعتين", "ten": "{0} ساعات", "higher": "{0} ساعة"},
- "day": "يوم",
- "days": {"2": "يومين", "ten": "{0} أيام", "higher": "{0} يوم"},
- "week": "اسبوع",
- "weeks": {"2": "اسبوعين", "ten": "{0} أسابيع", "higher": "{0} اسبوع"},
- "month": "شهر",
- "months": {"2": "شهرين", "ten": "{0} أشهر", "higher": "{0} شهر"},
- "year": "سنة",
- "years": {"2": "سنتين", "ten": "{0} سنوات", "higher": "{0} سنة"},
- }
- month_names = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "أبريل",
- "مايو",
- "يونيو",
- "يوليو",
- "أغسطس",
- "سبتمبر",
- "أكتوبر",
- "نوفمبر",
- "ديسمبر",
- ]
- month_abbreviations = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "أبريل",
- "مايو",
- "يونيو",
- "يوليو",
- "أغسطس",
- "سبتمبر",
- "أكتوبر",
- "نوفمبر",
- "ديسمبر",
- ]
- day_names = [
- "",
- "الإثنين",
- "الثلاثاء",
- "الأربعاء",
- "الخميس",
- "الجمعة",
- "السبت",
- "الأحد",
- ]
- day_abbreviations = ["", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if delta == 2:
- form = form["2"]
- elif 2 < delta <= 10:
- form = form["ten"]
- else:
- form = form["higher"]
- return form.format(delta)
- class LevantArabicLocale(ArabicLocale):
- names = ["ar-iq", "ar-jo", "ar-lb", "ar-ps", "ar-sy"]
- month_names = [
- "",
- "كانون الثاني",
- "شباط",
- "آذار",
- "نيسان",
- "أيار",
- "حزيران",
- "تموز",
- "آب",
- "أيلول",
- "تشرين الأول",
- "تشرين الثاني",
- "كانون الأول",
- ]
- month_abbreviations = [
- "",
- "كانون الثاني",
- "شباط",
- "آذار",
- "نيسان",
- "أيار",
- "حزيران",
- "تموز",
- "آب",
- "أيلول",
- "تشرين الأول",
- "تشرين الثاني",
- "كانون الأول",
- ]
- class AlgeriaTunisiaArabicLocale(ArabicLocale):
- names = ["ar-tn", "ar-dz"]
- month_names = [
- "",
- "جانفي",
- "فيفري",
- "مارس",
- "أفريل",
- "ماي",
- "جوان",
- "جويلية",
- "أوت",
- "سبتمبر",
- "أكتوبر",
- "نوفمبر",
- "ديسمبر",
- ]
- month_abbreviations = [
- "",
- "جانفي",
- "فيفري",
- "مارس",
- "أفريل",
- "ماي",
- "جوان",
- "جويلية",
- "أوت",
- "سبتمبر",
- "أكتوبر",
- "نوفمبر",
- "ديسمبر",
- ]
- class MauritaniaArabicLocale(ArabicLocale):
- names = ["ar-mr"]
- month_names = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "إبريل",
- "مايو",
- "يونيو",
- "يوليو",
- "أغشت",
- "شتمبر",
- "أكتوبر",
- "نوفمبر",
- "دجمبر",
- ]
- month_abbreviations = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "إبريل",
- "مايو",
- "يونيو",
- "يوليو",
- "أغشت",
- "شتمبر",
- "أكتوبر",
- "نوفمبر",
- "دجمبر",
- ]
- class MoroccoArabicLocale(ArabicLocale):
- names = ["ar-ma"]
- month_names = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "أبريل",
- "ماي",
- "يونيو",
- "يوليوز",
- "غشت",
- "شتنبر",
- "أكتوبر",
- "نونبر",
- "دجنبر",
- ]
- month_abbreviations = [
- "",
- "يناير",
- "فبراير",
- "مارس",
- "أبريل",
- "ماي",
- "يونيو",
- "يوليوز",
- "غشت",
- "شتنبر",
- "أكتوبر",
- "نونبر",
- "دجنبر",
- ]
- class IcelandicLocale(Locale):
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- if isinstance(form, Mapping):
- if delta < 0:
- form = form["past"]
- elif delta > 0:
- form = form["future"]
- else:
- raise ValueError(
- "Icelandic Locale does not support units with a delta of zero. "
- "Please consider making a contribution to fix this issue."
- )
- # FIXME: handle when delta is 0
- return form.format(abs(delta))
- names = ["is", "is-is"]
- past = "fyrir {0} síðan"
- future = "eftir {0}"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "rétt í þessu",
- "second": {"past": "sekúndu", "future": "sekúndu"},
- "seconds": {"past": "{0} nokkrum sekúndum", "future": "nokkrar sekúndur"},
- "minute": {"past": "einni mínútu", "future": "eina mínútu"},
- "minutes": {"past": "{0} mínútum", "future": "{0} mínútur"},
- "hour": {"past": "einum tíma", "future": "einn tíma"},
- "hours": {"past": "{0} tímum", "future": "{0} tíma"},
- "day": {"past": "einum degi", "future": "einn dag"},
- "days": {"past": "{0} dögum", "future": "{0} daga"},
- "month": {"past": "einum mánuði", "future": "einn mánuð"},
- "months": {"past": "{0} mánuðum", "future": "{0} mánuði"},
- "year": {"past": "einu ári", "future": "eitt ár"},
- "years": {"past": "{0} árum", "future": "{0} ár"},
- }
- meridians = {"am": "f.h.", "pm": "e.h.", "AM": "f.h.", "PM": "e.h."}
- month_names = [
- "",
- "janúar",
- "febrúar",
- "mars",
- "apríl",
- "maí",
- "júní",
- "júlí",
- "ágúst",
- "september",
- "október",
- "nóvember",
- "desember",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "maí",
- "jún",
- "júl",
- "ágú",
- "sep",
- "okt",
- "nóv",
- "des",
- ]
- day_names = [
- "",
- "mánudagur",
- "þriðjudagur",
- "miðvikudagur",
- "fimmtudagur",
- "föstudagur",
- "laugardagur",
- "sunnudagur",
- ]
- day_abbreviations = ["", "mán", "þri", "mið", "fim", "fös", "lau", "sun"]
- class DanishLocale(Locale):
- names = ["da", "da-dk"]
- past = "for {0} siden"
- future = "om {0}"
- and_word = "og"
- timeframes = {
- "now": "lige nu",
- "second": "et sekund",
- "seconds": "{0} sekunder",
- "minute": "et minut",
- "minutes": "{0} minutter",
- "hour": "en time",
- "hours": "{0} timer",
- "day": "en dag",
- "days": "{0} dage",
- "week": "en uge",
- "weeks": "{0} uger",
- "month": "en måned",
- "months": "{0} måneder",
- "year": "et år",
- "years": "{0} år",
- }
- month_names = [
- "",
- "januar",
- "februar",
- "marts",
- "april",
- "maj",
- "juni",
- "juli",
- "august",
- "september",
- "oktober",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "maj",
- "jun",
- "jul",
- "aug",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "mandag",
- "tirsdag",
- "onsdag",
- "torsdag",
- "fredag",
- "lørdag",
- "søndag",
- ]
- day_abbreviations = ["", "man", "tir", "ons", "tor", "fre", "lør", "søn"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- class MalayalamLocale(Locale):
- names = ["ml"]
- past = "{0} മുമ്പ്"
- future = "{0} ശേഷം"
- timeframes = {
- "now": "ഇപ്പോൾ",
- "second": "ഒരു നിമിഷം",
- "seconds": "{0} സെക്കന്റ്",
- "minute": "ഒരു മിനിറ്റ്",
- "minutes": "{0} മിനിറ്റ്",
- "hour": "ഒരു മണിക്കൂർ",
- "hours": "{0} മണിക്കൂർ",
- "day": "ഒരു ദിവസം ",
- "days": "{0} ദിവസം ",
- "month": "ഒരു മാസം ",
- "months": "{0} മാസം ",
- "year": "ഒരു വർഷം ",
- "years": "{0} വർഷം ",
- }
- meridians = {
- "am": "രാവിലെ",
- "pm": "ഉച്ചക്ക് ശേഷം",
- "AM": "രാവിലെ",
- "PM": "ഉച്ചക്ക് ശേഷം",
- }
- month_names = [
- "",
- "ജനുവരി",
- "ഫെബ്രുവരി",
- "മാർച്ച്",
- "ഏപ്രിൽ ",
- "മെയ് ",
- "ജൂണ്",
- "ജൂലൈ",
- "ഓഗസ്റ്റ്",
- "സെപ്റ്റംബർ",
- "ഒക്ടോബർ",
- "നവംബർ",
- "ഡിസംബർ",
- ]
- month_abbreviations = [
- "",
- "ജനു",
- "ഫെബ് ",
- "മാർ",
- "ഏപ്രിൽ",
- "മേയ്",
- "ജൂണ്",
- "ജൂലൈ",
- "ഓഗസ്റ",
- "സെപ്റ്റ",
- "ഒക്ടോ",
- "നവം",
- "ഡിസം",
- ]
- day_names = ["", "തിങ്കള്", "ചൊവ്വ", "ബുധന്", "വ്യാഴം", "വെള്ളി", "ശനി", "ഞായര്"]
- day_abbreviations = [
- "",
- "തിങ്കള്",
- "ചൊവ്വ",
- "ബുധന്",
- "വ്യാഴം",
- "വെള്ളി",
- "ശനി",
- "ഞായര്",
- ]
- class HindiLocale(Locale):
- names = ["hi", "hi-in"]
- past = "{0} पहले"
- future = "{0} बाद"
- timeframes = {
- "now": "अभी",
- "second": "एक पल",
- "seconds": "{0} सेकंड्",
- "minute": "एक मिनट ",
- "minutes": "{0} मिनट ",
- "hour": "एक घंटा",
- "hours": "{0} घंटे",
- "day": "एक दिन",
- "days": "{0} दिन",
- "month": "एक माह ",
- "months": "{0} महीने ",
- "year": "एक वर्ष ",
- "years": "{0} साल ",
- }
- meridians = {"am": "सुबह", "pm": "शाम", "AM": "सुबह", "PM": "शाम"}
- month_names = [
- "",
- "जनवरी",
- "फरवरी",
- "मार्च",
- "अप्रैल ",
- "मई",
- "जून",
- "जुलाई",
- "अगस्त",
- "सितंबर",
- "अक्टूबर",
- "नवंबर",
- "दिसंबर",
- ]
- month_abbreviations = [
- "",
- "जन",
- "फ़र",
- "मार्च",
- "अप्रै",
- "मई",
- "जून",
- "जुलाई",
- "आग",
- "सित",
- "अकत",
- "नवे",
- "दिस",
- ]
- day_names = [
- "",
- "सोमवार",
- "मंगलवार",
- "बुधवार",
- "गुरुवार",
- "शुक्रवार",
- "शनिवार",
- "रविवार",
- ]
- day_abbreviations = ["", "सोम", "मंगल", "बुध", "गुरुवार", "शुक्र", "शनि", "रवि"]
- class CzechLocale(Locale):
- names = ["cs", "cs-cz"]
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "Teď",
- "second": {"past": "vteřina", "future": "vteřina"},
- "seconds": {
- "zero": "vteřina",
- "past": "{0} sekundami",
- "future-singular": "{0} sekundy",
- "future-paucal": "{0} sekund",
- },
- "minute": {"past": "minutou", "future": "minutu"},
- "minutes": {
- "zero": "{0} minut",
- "past": "{0} minutami",
- "future-singular": "{0} minuty",
- "future-paucal": "{0} minut",
- },
- "hour": {"past": "hodinou", "future": "hodinu"},
- "hours": {
- "zero": "{0} hodin",
- "past": "{0} hodinami",
- "future-singular": "{0} hodiny",
- "future-paucal": "{0} hodin",
- },
- "day": {"past": "dnem", "future": "den"},
- "days": {
- "zero": "{0} dnů",
- "past": "{0} dny",
- "future-singular": "{0} dny",
- "future-paucal": "{0} dnů",
- },
- "week": {"past": "týdnem", "future": "týden"},
- "weeks": {
- "zero": "{0} týdnů",
- "past": "{0} týdny",
- "future-singular": "{0} týdny",
- "future-paucal": "{0} týdnů",
- },
- "month": {"past": "měsícem", "future": "měsíc"},
- "months": {
- "zero": "{0} měsíců",
- "past": "{0} měsíci",
- "future-singular": "{0} měsíce",
- "future-paucal": "{0} měsíců",
- },
- "year": {"past": "rokem", "future": "rok"},
- "years": {
- "zero": "{0} let",
- "past": "{0} lety",
- "future-singular": "{0} roky",
- "future-paucal": "{0} let",
- },
- }
- past = "Před {0}"
- future = "Za {0}"
- month_names = [
- "",
- "leden",
- "únor",
- "březen",
- "duben",
- "květen",
- "červen",
- "červenec",
- "srpen",
- "září",
- "říjen",
- "listopad",
- "prosinec",
- ]
- month_abbreviations = [
- "",
- "led",
- "úno",
- "bře",
- "dub",
- "kvě",
- "čvn",
- "čvc",
- "srp",
- "zář",
- "říj",
- "lis",
- "pro",
- ]
- day_names = [
- "",
- "pondělí",
- "úterý",
- "středa",
- "čtvrtek",
- "pátek",
- "sobota",
- "neděle",
- ]
- day_abbreviations = ["", "po", "út", "st", "čt", "pá", "so", "ne"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- """Czech aware time frame format function, takes into account
- the differences between past and future forms."""
- abs_delta = abs(delta)
- form = self.timeframes[timeframe]
- if isinstance(form, str):
- return form.format(abs_delta)
- if delta == 0:
- key = "zero" # And *never* use 0 in the singular!
- elif delta < 0:
- key = "past"
- else:
- # Needed since both regular future and future-singular and future-paucal cases
- if "future-singular" not in form:
- key = "future"
- elif 2 <= abs_delta % 10 <= 4 and (
- abs_delta % 100 < 10 or abs_delta % 100 >= 20
- ):
- key = "future-singular"
- else:
- key = "future-paucal"
- form: str = form[key]
- return form.format(abs_delta)
- class SlovakLocale(Locale):
- names = ["sk", "sk-sk"]
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "Teraz",
- "second": {"past": "sekundou", "future": "sekundu"},
- "seconds": {
- "zero": "{0} sekúnd",
- "past": "{0} sekundami",
- "future-singular": "{0} sekundy",
- "future-paucal": "{0} sekúnd",
- },
- "minute": {"past": "minútou", "future": "minútu"},
- "minutes": {
- "zero": "{0} minút",
- "past": "{0} minútami",
- "future-singular": "{0} minúty",
- "future-paucal": "{0} minút",
- },
- "hour": {"past": "hodinou", "future": "hodinu"},
- "hours": {
- "zero": "{0} hodín",
- "past": "{0} hodinami",
- "future-singular": "{0} hodiny",
- "future-paucal": "{0} hodín",
- },
- "day": {"past": "dňom", "future": "deň"},
- "days": {
- "zero": "{0} dní",
- "past": "{0} dňami",
- "future-singular": "{0} dni",
- "future-paucal": "{0} dní",
- },
- "week": {"past": "týždňom", "future": "týždeň"},
- "weeks": {
- "zero": "{0} týždňov",
- "past": "{0} týždňami",
- "future-singular": "{0} týždne",
- "future-paucal": "{0} týždňov",
- },
- "month": {"past": "mesiacom", "future": "mesiac"},
- "months": {
- "zero": "{0} mesiacov",
- "past": "{0} mesiacmi",
- "future-singular": "{0} mesiace",
- "future-paucal": "{0} mesiacov",
- },
- "year": {"past": "rokom", "future": "rok"},
- "years": {
- "zero": "{0} rokov",
- "past": "{0} rokmi",
- "future-singular": "{0} roky",
- "future-paucal": "{0} rokov",
- },
- }
- past = "Pred {0}"
- future = "O {0}"
- and_word = "a"
- month_names = [
- "",
- "január",
- "február",
- "marec",
- "apríl",
- "máj",
- "jún",
- "júl",
- "august",
- "september",
- "október",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "máj",
- "jún",
- "júl",
- "aug",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "pondelok",
- "utorok",
- "streda",
- "štvrtok",
- "piatok",
- "sobota",
- "nedeľa",
- ]
- day_abbreviations = ["", "po", "ut", "st", "št", "pi", "so", "ne"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- """Slovak aware time frame format function, takes into account
- the differences between past and future forms."""
- abs_delta = abs(delta)
- form = self.timeframes[timeframe]
- if isinstance(form, str):
- return form.format(abs_delta)
- if delta == 0:
- key = "zero" # And *never* use 0 in the singular!
- elif delta < 0:
- key = "past"
- else:
- if "future-singular" not in form:
- key = "future"
- elif 2 <= abs_delta % 10 <= 4 and (
- abs_delta % 100 < 10 or abs_delta % 100 >= 20
- ):
- key = "future-singular"
- else:
- key = "future-paucal"
- form: str = form[key]
- return form.format(abs_delta)
- class FarsiLocale(Locale):
- names = ["fa", "fa-ir"]
- past = "{0} قبل"
- future = "در {0}"
- timeframes = {
- "now": "اکنون",
- "second": "یک لحظه",
- "seconds": "{0} ثانیه",
- "minute": "یک دقیقه",
- "minutes": "{0} دقیقه",
- "hour": "یک ساعت",
- "hours": "{0} ساعت",
- "day": "یک روز",
- "days": "{0} روز",
- "week": "یک هفته",
- "weeks": "{0} هفته",
- "quarter": "یک فصل",
- "quarters": "{0} فصل",
- "month": "یک ماه",
- "months": "{0} ماه",
- "year": "یک سال",
- "years": "{0} سال",
- }
- meridians = {
- "am": "قبل از ظهر",
- "pm": "بعد از ظهر",
- "AM": "قبل از ظهر",
- "PM": "بعد از ظهر",
- }
- month_names = [
- "",
- "ژانویه",
- "فوریه",
- "مارس",
- "آوریل",
- "مه",
- "ژوئن",
- "ژوئیه",
- "اوت",
- "سپتامبر",
- "اکتبر",
- "نوامبر",
- "دسامبر",
- ]
- month_abbreviations = [
- "",
- "ژانویه",
- "فوریه",
- "مارس",
- "آوریل",
- "مه",
- "ژوئن",
- "ژوئیه",
- "اوت",
- "سپتامبر",
- "اکتبر",
- "نوامبر",
- "دسامبر",
- ]
- day_names = [
- "",
- "دو شنبه",
- "سه شنبه",
- "چهارشنبه",
- "پنجشنبه",
- "جمعه",
- "شنبه",
- "یکشنبه",
- ]
- day_abbreviations = [
- "",
- "دو شنبه",
- "سه شنبه",
- "چهارشنبه",
- "پنجشنبه",
- "جمعه",
- "شنبه",
- "یکشنبه",
- ]
- class HebrewLocale(Locale):
- names = ["he", "he-il"]
- past = "לפני {0}"
- future = "בעוד {0}"
- and_word = "ו"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "הרגע",
- "second": "שנייה",
- "seconds": "{0} שניות",
- "minute": "דקה",
- "minutes": "{0} דקות",
- "hour": "שעה",
- "hours": {"2": "שעתיים", "ten": "{0} שעות", "higher": "{0} שעות"},
- "day": "יום",
- "days": {"2": "יומיים", "ten": "{0} ימים", "higher": "{0} יום"},
- "week": "שבוע",
- "weeks": {"2": "שבועיים", "ten": "{0} שבועות", "higher": "{0} שבועות"},
- "month": "חודש",
- "months": {"2": "חודשיים", "ten": "{0} חודשים", "higher": "{0} חודשים"},
- "year": "שנה",
- "years": {"2": "שנתיים", "ten": "{0} שנים", "higher": "{0} שנה"},
- }
- meridians = {
- "am": 'לפנ"צ',
- "pm": 'אחר"צ',
- "AM": "לפני הצהריים",
- "PM": "אחרי הצהריים",
- }
- month_names = [
- "",
- "ינואר",
- "פברואר",
- "מרץ",
- "אפריל",
- "מאי",
- "יוני",
- "יולי",
- "אוגוסט",
- "ספטמבר",
- "אוקטובר",
- "נובמבר",
- "דצמבר",
- ]
- month_abbreviations = [
- "",
- "ינו׳",
- "פבר׳",
- "מרץ",
- "אפר׳",
- "מאי",
- "יוני",
- "יולי",
- "אוג׳",
- "ספט׳",
- "אוק׳",
- "נוב׳",
- "דצמ׳",
- ]
- day_names = ["", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
- day_abbreviations = ["", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳", "א׳"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if delta == 2:
- form = form["2"]
- elif delta == 0 or 2 < delta <= 10:
- form = form["ten"]
- else:
- form = form["higher"]
- return form.format(delta)
- def describe_multi(
- self,
- timeframes: Sequence[Tuple[TimeFrameLiteral, Union[int, float]]],
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within multiple timeframes in plain language.
- In Hebrew, the and word behaves a bit differently.
- :param timeframes: a list of string, quantity pairs each representing a timeframe and delta.
- :param only_distance: return only distance eg: "2 hours and 11 seconds" without "in" or "ago" keywords
- """
- humanized = ""
- for index, (timeframe, delta) in enumerate(timeframes):
- last_humanized = self._format_timeframe(timeframe, trunc(delta))
- if index == 0:
- humanized = last_humanized
- elif index == len(timeframes) - 1: # Must have at least 2 items
- humanized += " " + self.and_word
- if last_humanized[0].isdecimal():
- humanized += "־"
- humanized += last_humanized
- else: # Don't add for the last one
- humanized += ", " + last_humanized
- if not only_distance:
- humanized = self._format_relative(humanized, timeframe, trunc(delta))
- return humanized
- class MarathiLocale(Locale):
- names = ["mr"]
- past = "{0} आधी"
- future = "{0} नंतर"
- timeframes = {
- "now": "सद्य",
- "second": "एक सेकंद",
- "seconds": "{0} सेकंद",
- "minute": "एक मिनिट ",
- "minutes": "{0} मिनिट ",
- "hour": "एक तास",
- "hours": "{0} तास",
- "day": "एक दिवस",
- "days": "{0} दिवस",
- "month": "एक महिना ",
- "months": "{0} महिने ",
- "year": "एक वर्ष ",
- "years": "{0} वर्ष ",
- }
- meridians = {"am": "सकाळ", "pm": "संध्याकाळ", "AM": "सकाळ", "PM": "संध्याकाळ"}
- month_names = [
- "",
- "जानेवारी",
- "फेब्रुवारी",
- "मार्च",
- "एप्रिल",
- "मे",
- "जून",
- "जुलै",
- "अॉगस्ट",
- "सप्टेंबर",
- "अॉक्टोबर",
- "नोव्हेंबर",
- "डिसेंबर",
- ]
- month_abbreviations = [
- "",
- "जान",
- "फेब्रु",
- "मार्च",
- "एप्रि",
- "मे",
- "जून",
- "जुलै",
- "अॉग",
- "सप्टें",
- "अॉक्टो",
- "नोव्हें",
- "डिसें",
- ]
- day_names = [
- "",
- "सोमवार",
- "मंगळवार",
- "बुधवार",
- "गुरुवार",
- "शुक्रवार",
- "शनिवार",
- "रविवार",
- ]
- day_abbreviations = ["", "सोम", "मंगळ", "बुध", "गुरु", "शुक्र", "शनि", "रवि"]
- class CatalanLocale(Locale):
- names = ["ca", "ca-es", "ca-ad", "ca-fr", "ca-it"]
- past = "Fa {0}"
- future = "En {0}"
- and_word = "i"
- timeframes = {
- "now": "Ara mateix",
- "second": "un segon",
- "seconds": "{0} segons",
- "minute": "un minut",
- "minutes": "{0} minuts",
- "hour": "una hora",
- "hours": "{0} hores",
- "day": "un dia",
- "days": "{0} dies",
- "week": "una setmana",
- "weeks": "{0} setmanes",
- "month": "un mes",
- "months": "{0} mesos",
- "year": "un any",
- "years": "{0} anys",
- }
- month_names = [
- "",
- "gener",
- "febrer",
- "març",
- "abril",
- "maig",
- "juny",
- "juliol",
- "agost",
- "setembre",
- "octubre",
- "novembre",
- "desembre",
- ]
- month_abbreviations = [
- "",
- "gen.",
- "febr.",
- "març",
- "abr.",
- "maig",
- "juny",
- "jul.",
- "ag.",
- "set.",
- "oct.",
- "nov.",
- "des.",
- ]
- day_names = [
- "",
- "dilluns",
- "dimarts",
- "dimecres",
- "dijous",
- "divendres",
- "dissabte",
- "diumenge",
- ]
- day_abbreviations = [
- "",
- "dl.",
- "dt.",
- "dc.",
- "dj.",
- "dv.",
- "ds.",
- "dg.",
- ]
- class BasqueLocale(Locale):
- names = ["eu", "eu-eu"]
- past = "duela {0}"
- future = "{0}" # I don't know what's the right phrase in Basque for the future.
- timeframes = {
- "now": "Orain",
- "second": "segundo bat",
- "seconds": "{0} segundu",
- "minute": "minutu bat",
- "minutes": "{0} minutu",
- "hour": "ordu bat",
- "hours": "{0} ordu",
- "day": "egun bat",
- "days": "{0} egun",
- "month": "hilabete bat",
- "months": "{0} hilabet",
- "year": "urte bat",
- "years": "{0} urte",
- }
- month_names = [
- "",
- "urtarrilak",
- "otsailak",
- "martxoak",
- "apirilak",
- "maiatzak",
- "ekainak",
- "uztailak",
- "abuztuak",
- "irailak",
- "urriak",
- "azaroak",
- "abenduak",
- ]
- month_abbreviations = [
- "",
- "urt",
- "ots",
- "mar",
- "api",
- "mai",
- "eka",
- "uzt",
- "abu",
- "ira",
- "urr",
- "aza",
- "abe",
- ]
- day_names = [
- "",
- "astelehena",
- "asteartea",
- "asteazkena",
- "osteguna",
- "ostirala",
- "larunbata",
- "igandea",
- ]
- day_abbreviations = ["", "al", "ar", "az", "og", "ol", "lr", "ig"]
- class HungarianLocale(Locale):
- names = ["hu", "hu-hu"]
- past = "{0} ezelőtt"
- future = "{0} múlva"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "éppen most",
- "second": {"past": "egy második", "future": "egy második"},
- "seconds": {"past": "{0} másodpercekkel", "future": "{0} pár másodperc"},
- "minute": {"past": "egy perccel", "future": "egy perc"},
- "minutes": {"past": "{0} perccel", "future": "{0} perc"},
- "hour": {"past": "egy órával", "future": "egy óra"},
- "hours": {"past": "{0} órával", "future": "{0} óra"},
- "day": {"past": "egy nappal", "future": "egy nap"},
- "days": {"past": "{0} nappal", "future": "{0} nap"},
- "week": {"past": "egy héttel", "future": "egy hét"},
- "weeks": {"past": "{0} héttel", "future": "{0} hét"},
- "month": {"past": "egy hónappal", "future": "egy hónap"},
- "months": {"past": "{0} hónappal", "future": "{0} hónap"},
- "year": {"past": "egy évvel", "future": "egy év"},
- "years": {"past": "{0} évvel", "future": "{0} év"},
- }
- month_names = [
- "",
- "január",
- "február",
- "március",
- "április",
- "május",
- "június",
- "július",
- "augusztus",
- "szeptember",
- "október",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "jan",
- "febr",
- "márc",
- "ápr",
- "máj",
- "jún",
- "júl",
- "aug",
- "szept",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "hétfő",
- "kedd",
- "szerda",
- "csütörtök",
- "péntek",
- "szombat",
- "vasárnap",
- ]
- day_abbreviations = ["", "hét", "kedd", "szer", "csüt", "pént", "szom", "vas"]
- meridians = {"am": "de", "pm": "du", "AM": "DE", "PM": "DU"}
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- if isinstance(form, Mapping):
- if delta > 0:
- form = form["future"]
- else:
- form = form["past"]
- return form.format(abs(delta))
- class EsperantoLocale(Locale):
- names = ["eo", "eo-xx"]
- past = "antaŭ {0}"
- future = "post {0}"
- timeframes = {
- "now": "nun",
- "second": "sekundo",
- "seconds": "{0} kelkaj sekundoj",
- "minute": "unu minuto",
- "minutes": "{0} minutoj",
- "hour": "un horo",
- "hours": "{0} horoj",
- "day": "unu tago",
- "days": "{0} tagoj",
- "month": "unu monato",
- "months": "{0} monatoj",
- "year": "unu jaro",
- "years": "{0} jaroj",
- }
- month_names = [
- "",
- "januaro",
- "februaro",
- "marto",
- "aprilo",
- "majo",
- "junio",
- "julio",
- "aŭgusto",
- "septembro",
- "oktobro",
- "novembro",
- "decembro",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "maj",
- "jun",
- "jul",
- "aŭg",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "lundo",
- "mardo",
- "merkredo",
- "ĵaŭdo",
- "vendredo",
- "sabato",
- "dimanĉo",
- ]
- day_abbreviations = ["", "lun", "mar", "mer", "ĵaŭ", "ven", "sab", "dim"]
- meridians = {"am": "atm", "pm": "ptm", "AM": "ATM", "PM": "PTM"}
- ordinal_day_re = r"((?P<value>[1-3]?[0-9](?=a))a)"
- def _ordinal_number(self, n: int) -> str:
- return f"{n}a"
- class ThaiLocale(Locale):
- names = ["th", "th-th"]
- past = "{0} ที่ผ่านมา"
- future = "ในอีก {0}"
- timeframes = {
- "now": "ขณะนี้",
- "second": "วินาที",
- "seconds": "{0} วินาที",
- "minute": "นาที",
- "minutes": "{0} นาที",
- "hour": "ชั่วโมง",
- "hours": "{0} ชั่วโมง",
- "day": "วัน",
- "days": "{0} วัน",
- "week": "สัปดาห์",
- "weeks": "{0} สัปดาห์",
- "month": "เดือน",
- "months": "{0} เดือน",
- "year": "ปี",
- "years": "{0} ปี",
- }
- month_names = [
- "",
- "มกราคม",
- "กุมภาพันธ์",
- "มีนาคม",
- "เมษายน",
- "พฤษภาคม",
- "มิถุนายน",
- "กรกฎาคม",
- "สิงหาคม",
- "กันยายน",
- "ตุลาคม",
- "พฤศจิกายน",
- "ธันวาคม",
- ]
- month_abbreviations = [
- "",
- "ม.ค.",
- "ก.พ.",
- "มี.ค.",
- "เม.ย.",
- "พ.ค.",
- "มิ.ย.",
- "ก.ค.",
- "ส.ค.",
- "ก.ย.",
- "ต.ค.",
- "พ.ย.",
- "ธ.ค.",
- ]
- day_names = [
- "",
- "วันจันทร์",
- "วันอังคาร",
- "วันพุธ",
- "วันพฤหัสบดี",
- "วันศุกร์",
- "วันเสาร์",
- "วันอาทิตย์",
- ]
- day_abbreviations = ["", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส.", "อา."]
- meridians = {"am": "am", "pm": "pm", "AM": "AM", "PM": "PM"}
- BE_OFFSET = 543
- def year_full(self, year: int) -> str:
- """Thai always use Buddhist Era (BE) which is CE + 543"""
- year += self.BE_OFFSET
- return f"{year:04d}"
- def year_abbreviation(self, year: int) -> str:
- """Thai always use Buddhist Era (BE) which is CE + 543"""
- year += self.BE_OFFSET
- return f"{year:04d}"[2:]
- def _format_relative(
- self,
- humanized: str,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int],
- ) -> str:
- """Thai normally doesn't have any space between words"""
- if timeframe == "now":
- return humanized
- direction = self.past if delta < 0 else self.future
- relative_string = direction.format(humanized)
- if timeframe == "seconds":
- relative_string = relative_string.replace(" ", "")
- return relative_string
- class LaotianLocale(Locale):
- names = ["lo", "lo-la"]
- past = "{0} ກ່ອນຫນ້ານີ້"
- future = "ໃນ {0}"
- timeframes = {
- "now": "ດຽວນີ້",
- "second": "ວິນາທີ",
- "seconds": "{0} ວິນາທີ",
- "minute": "ນາທີ",
- "minutes": "{0} ນາທີ",
- "hour": "ຊົ່ວໂມງ",
- "hours": "{0} ຊົ່ວໂມງ",
- "day": "ມື້",
- "days": "{0} ມື້",
- "week": "ອາທິດ",
- "weeks": "{0} ອາທິດ",
- "month": "ເດືອນ",
- "months": "{0} ເດືອນ",
- "year": "ປີ",
- "years": "{0} ປີ",
- }
- month_names = [
- "",
- "ມັງກອນ", # mangkon
- "ກຸມພາ", # kumpha
- "ມີນາ", # mina
- "ເມສາ", # mesa
- "ພຶດສະພາ", # phudsapha
- "ມິຖຸນາ", # mithuna
- "ກໍລະກົດ", # kolakod
- "ສິງຫາ", # singha
- "ກັນຍາ", # knaia
- "ຕຸລາ", # tula
- "ພະຈິກ", # phachik
- "ທັນວາ", # thanuaa
- ]
- month_abbreviations = [
- "",
- "ມັງກອນ",
- "ກຸມພາ",
- "ມີນາ",
- "ເມສາ",
- "ພຶດສະພາ",
- "ມິຖຸນາ",
- "ກໍລະກົດ",
- "ສິງຫາ",
- "ກັນຍາ",
- "ຕຸລາ",
- "ພະຈິກ",
- "ທັນວາ",
- ]
- day_names = [
- "",
- "ວັນຈັນ", # vanchan
- "ວັນອັງຄານ", # vnoangkhan
- "ວັນພຸດ", # vanphud
- "ວັນພະຫັດ", # vanphahad
- "ວັນສຸກ", # vansuk
- "ວັນເສົາ", # vansao
- "ວັນອາທິດ", # vnoathid
- ]
- day_abbreviations = [
- "",
- "ວັນຈັນ",
- "ວັນອັງຄານ",
- "ວັນພຸດ",
- "ວັນພະຫັດ",
- "ວັນສຸກ",
- "ວັນເສົາ",
- "ວັນອາທິດ",
- ]
- BE_OFFSET = 543
- def year_full(self, year: int) -> str:
- """Lao always use Buddhist Era (BE) which is CE + 543"""
- year += self.BE_OFFSET
- return f"{year:04d}"
- def year_abbreviation(self, year: int) -> str:
- """Lao always use Buddhist Era (BE) which is CE + 543"""
- year += self.BE_OFFSET
- return f"{year:04d}"[2:]
- def _format_relative(
- self,
- humanized: str,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int],
- ) -> str:
- """Lao normally doesn't have any space between words"""
- if timeframe == "now":
- return humanized
- direction = self.past if delta < 0 else self.future
- relative_string = direction.format(humanized)
- if timeframe == "seconds":
- relative_string = relative_string.replace(" ", "")
- return relative_string
- class BengaliLocale(Locale):
- names = ["bn", "bn-bd", "bn-in"]
- past = "{0} আগে"
- future = "{0} পরে"
- timeframes = {
- "now": "এখন",
- "second": "একটি দ্বিতীয়",
- "seconds": "{0} সেকেন্ড",
- "minute": "এক মিনিট",
- "minutes": "{0} মিনিট",
- "hour": "এক ঘণ্টা",
- "hours": "{0} ঘণ্টা",
- "day": "এক দিন",
- "days": "{0} দিন",
- "month": "এক মাস",
- "months": "{0} মাস ",
- "year": "এক বছর",
- "years": "{0} বছর",
- }
- meridians = {"am": "সকাল", "pm": "বিকাল", "AM": "সকাল", "PM": "বিকাল"}
- month_names = [
- "",
- "জানুয়ারি",
- "ফেব্রুয়ারি",
- "মার্চ",
- "এপ্রিল",
- "মে",
- "জুন",
- "জুলাই",
- "আগস্ট",
- "সেপ্টেম্বর",
- "অক্টোবর",
- "নভেম্বর",
- "ডিসেম্বর",
- ]
- month_abbreviations = [
- "",
- "জানু",
- "ফেব",
- "মার্চ",
- "এপ্রি",
- "মে",
- "জুন",
- "জুল",
- "অগা",
- "সেপ্ট",
- "অক্টো",
- "নভে",
- "ডিসে",
- ]
- day_names = [
- "",
- "সোমবার",
- "মঙ্গলবার",
- "বুধবার",
- "বৃহস্পতিবার",
- "শুক্রবার",
- "শনিবার",
- "রবিবার",
- ]
- day_abbreviations = ["", "সোম", "মঙ্গল", "বুধ", "বৃহঃ", "শুক্র", "শনি", "রবি"]
- def _ordinal_number(self, n: int) -> str:
- if n > 10 or n == 0:
- return f"{n}তম"
- if n in [1, 5, 7, 8, 9, 10]:
- return f"{n}ম"
- if n in [2, 3]:
- return f"{n}য়"
- if n == 4:
- return f"{n}র্থ"
- if n == 6:
- return f"{n}ষ্ঠ"
- return ""
- class RomanshLocale(Locale):
- names = ["rm", "rm-ch"]
- past = "avant {0}"
- future = "en {0}"
- timeframes = {
- "now": "en quest mument",
- "second": "in secunda",
- "seconds": "{0} secundas",
- "minute": "ina minuta",
- "minutes": "{0} minutas",
- "hour": "in'ura",
- "hours": "{0} ura",
- "day": "in di",
- "days": "{0} dis",
- "week": "in'emna",
- "weeks": "{0} emnas",
- "month": "in mais",
- "months": "{0} mais",
- "year": "in onn",
- "years": "{0} onns",
- }
- month_names = [
- "",
- "schaner",
- "favrer",
- "mars",
- "avrigl",
- "matg",
- "zercladur",
- "fanadur",
- "avust",
- "settember",
- "october",
- "november",
- "december",
- ]
- month_abbreviations = [
- "",
- "schan",
- "fav",
- "mars",
- "avr",
- "matg",
- "zer",
- "fan",
- "avu",
- "set",
- "oct",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "glindesdi",
- "mardi",
- "mesemna",
- "gievgia",
- "venderdi",
- "sonda",
- "dumengia",
- ]
- day_abbreviations = ["", "gli", "ma", "me", "gie", "ve", "so", "du"]
- class RomanianLocale(Locale):
- names = ["ro", "ro-ro"]
- past = "{0} în urmă"
- future = "peste {0}"
- and_word = "și"
- timeframes = {
- "now": "acum",
- "second": "o secunda",
- "seconds": "{0} câteva secunde",
- "minute": "un minut",
- "minutes": "{0} minute",
- "hour": "o oră",
- "hours": "{0} ore",
- "day": "o zi",
- "days": "{0} zile",
- "month": "o lună",
- "months": "{0} luni",
- "year": "un an",
- "years": "{0} ani",
- }
- month_names = [
- "",
- "ianuarie",
- "februarie",
- "martie",
- "aprilie",
- "mai",
- "iunie",
- "iulie",
- "august",
- "septembrie",
- "octombrie",
- "noiembrie",
- "decembrie",
- ]
- month_abbreviations = [
- "",
- "ian",
- "febr",
- "mart",
- "apr",
- "mai",
- "iun",
- "iul",
- "aug",
- "sept",
- "oct",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "luni",
- "marți",
- "miercuri",
- "joi",
- "vineri",
- "sâmbătă",
- "duminică",
- ]
- day_abbreviations = ["", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"]
- class SlovenianLocale(Locale):
- names = ["sl", "sl-si"]
- past = "pred {0}"
- future = "čez {0}"
- and_word = "in"
- timeframes = {
- "now": "zdaj",
- "second": "sekundo",
- "seconds": "{0} sekund",
- "minute": "minuta",
- "minutes": "{0} minutami",
- "hour": "uro",
- "hours": "{0} ur",
- "day": "dan",
- "days": "{0} dni",
- "month": "mesec",
- "months": "{0} mesecev",
- "year": "leto",
- "years": "{0} let",
- }
- meridians = {"am": "", "pm": "", "AM": "", "PM": ""}
- month_names = [
- "",
- "Januar",
- "Februar",
- "Marec",
- "April",
- "Maj",
- "Junij",
- "Julij",
- "Avgust",
- "September",
- "Oktober",
- "November",
- "December",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "Maj",
- "Jun",
- "Jul",
- "Avg",
- "Sep",
- "Okt",
- "Nov",
- "Dec",
- ]
- day_names = [
- "",
- "Ponedeljek",
- "Torek",
- "Sreda",
- "Četrtek",
- "Petek",
- "Sobota",
- "Nedelja",
- ]
- day_abbreviations = ["", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"]
- class IndonesianLocale(Locale):
- names = ["id", "id-id"]
- past = "{0} yang lalu"
- future = "dalam {0}"
- and_word = "dan"
- timeframes = {
- "now": "baru saja",
- "second": "1 sebentar",
- "seconds": "{0} detik",
- "minute": "1 menit",
- "minutes": "{0} menit",
- "hour": "1 jam",
- "hours": "{0} jam",
- "day": "1 hari",
- "days": "{0} hari",
- "week": "1 minggu",
- "weeks": "{0} minggu",
- "month": "1 bulan",
- "months": "{0} bulan",
- "quarter": "1 kuartal",
- "quarters": "{0} kuartal",
- "year": "1 tahun",
- "years": "{0} tahun",
- }
- meridians = {"am": "", "pm": "", "AM": "", "PM": ""}
- month_names = [
- "",
- "Januari",
- "Februari",
- "Maret",
- "April",
- "Mei",
- "Juni",
- "Juli",
- "Agustus",
- "September",
- "Oktober",
- "November",
- "Desember",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "Mei",
- "Jun",
- "Jul",
- "Ags",
- "Sept",
- "Okt",
- "Nov",
- "Des",
- ]
- day_names = ["", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"]
- day_abbreviations = [
- "",
- "Senin",
- "Selasa",
- "Rabu",
- "Kamis",
- "Jumat",
- "Sabtu",
- "Minggu",
- ]
- class NepaliLocale(Locale):
- names = ["ne", "ne-np"]
- past = "{0} पहिले"
- future = "{0} पछी"
- timeframes = {
- "now": "अहिले",
- "second": "एक सेकेन्ड",
- "seconds": "{0} सेकण्ड",
- "minute": "मिनेट",
- "minutes": "{0} मिनेट",
- "hour": "एक घण्टा",
- "hours": "{0} घण्टा",
- "day": "एक दिन",
- "days": "{0} दिन",
- "month": "एक महिना",
- "months": "{0} महिना",
- "year": "एक बर्ष",
- "years": "{0} बर्ष",
- }
- meridians = {"am": "पूर्वाह्न", "pm": "अपरान्ह", "AM": "पूर्वाह्न", "PM": "अपरान्ह"}
- month_names = [
- "",
- "जनवरी",
- "फेब्रुअरी",
- "मार्च",
- "एप्रील",
- "मे",
- "जुन",
- "जुलाई",
- "अगष्ट",
- "सेप्टेम्बर",
- "अक्टोबर",
- "नोवेम्बर",
- "डिसेम्बर",
- ]
- month_abbreviations = [
- "",
- "जन",
- "फेब",
- "मार्च",
- "एप्रील",
- "मे",
- "जुन",
- "जुलाई",
- "अग",
- "सेप",
- "अक्ट",
- "नोव",
- "डिस",
- ]
- day_names = [
- "",
- "सोमवार",
- "मंगलवार",
- "बुधवार",
- "बिहिवार",
- "शुक्रवार",
- "शनिवार",
- "आइतवार",
- ]
- day_abbreviations = ["", "सोम", "मंगल", "बुध", "बिहि", "शुक्र", "शनि", "आइत"]
- class EstonianLocale(Locale):
- names = ["ee", "et"]
- past = "{0} tagasi"
- future = "{0} pärast"
- and_word = "ja"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Mapping[str, str]]] = {
- "now": {"past": "just nüüd", "future": "just nüüd"},
- "second": {"past": "üks sekund", "future": "ühe sekundi"},
- "seconds": {"past": "{0} sekundit", "future": "{0} sekundi"},
- "minute": {"past": "üks minut", "future": "ühe minuti"},
- "minutes": {"past": "{0} minutit", "future": "{0} minuti"},
- "hour": {"past": "tund aega", "future": "tunni aja"},
- "hours": {"past": "{0} tundi", "future": "{0} tunni"},
- "day": {"past": "üks päev", "future": "ühe päeva"},
- "days": {"past": "{0} päeva", "future": "{0} päeva"},
- "month": {"past": "üks kuu", "future": "ühe kuu"},
- "months": {"past": "{0} kuud", "future": "{0} kuu"},
- "year": {"past": "üks aasta", "future": "ühe aasta"},
- "years": {"past": "{0} aastat", "future": "{0} aasta"},
- }
- month_names = [
- "",
- "Jaanuar",
- "Veebruar",
- "Märts",
- "Aprill",
- "Mai",
- "Juuni",
- "Juuli",
- "August",
- "September",
- "Oktoober",
- "November",
- "Detsember",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Veb",
- "Mär",
- "Apr",
- "Mai",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Okt",
- "Nov",
- "Dets",
- ]
- day_names = [
- "",
- "Esmaspäev",
- "Teisipäev",
- "Kolmapäev",
- "Neljapäev",
- "Reede",
- "Laupäev",
- "Pühapäev",
- ]
- day_abbreviations = ["", "Esm", "Teis", "Kolm", "Nelj", "Re", "Lau", "Püh"]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- if delta > 0:
- _form = form["future"]
- else:
- _form = form["past"]
- return _form.format(abs(delta))
- class LatvianLocale(Locale):
- names = ["lv", "lv-lv"]
- past = "pirms {0}"
- future = "pēc {0}"
- and_word = "un"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "tagad",
- "second": "sekundes",
- "seconds": "{0} sekundēm",
- "minute": "minūtes",
- "minutes": "{0} minūtēm",
- "hour": "stundas",
- "hours": "{0} stundām",
- "day": "dienas",
- "days": "{0} dienām",
- "week": "nedēļas",
- "weeks": "{0} nedēļām",
- "month": "mēneša",
- "months": "{0} mēnešiem",
- "year": "gada",
- "years": "{0} gadiem",
- }
- month_names = [
- "",
- "janvāris",
- "februāris",
- "marts",
- "aprīlis",
- "maijs",
- "jūnijs",
- "jūlijs",
- "augusts",
- "septembris",
- "oktobris",
- "novembris",
- "decembris",
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "marts",
- "apr",
- "maijs",
- "jūnijs",
- "jūlijs",
- "aug",
- "sept",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "pirmdiena",
- "otrdiena",
- "trešdiena",
- "ceturtdiena",
- "piektdiena",
- "sestdiena",
- "svētdiena",
- ]
- day_abbreviations = [
- "",
- "pi",
- "ot",
- "tr",
- "ce",
- "pi",
- "se",
- "sv",
- ]
- class SwahiliLocale(Locale):
- names = [
- "sw",
- "sw-ke",
- "sw-tz",
- ]
- past = "{0} iliyopita"
- future = "muda wa {0}"
- and_word = "na"
- timeframes = {
- "now": "sasa hivi",
- "second": "sekunde",
- "seconds": "sekunde {0}",
- "minute": "dakika moja",
- "minutes": "dakika {0}",
- "hour": "saa moja",
- "hours": "saa {0}",
- "day": "siku moja",
- "days": "siku {0}",
- "week": "wiki moja",
- "weeks": "wiki {0}",
- "month": "mwezi moja",
- "months": "miezi {0}",
- "year": "mwaka moja",
- "years": "miaka {0}",
- }
- meridians = {"am": "asu", "pm": "mch", "AM": "ASU", "PM": "MCH"}
- month_names = [
- "",
- "Januari",
- "Februari",
- "Machi",
- "Aprili",
- "Mei",
- "Juni",
- "Julai",
- "Agosti",
- "Septemba",
- "Oktoba",
- "Novemba",
- "Desemba",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mac",
- "Apr",
- "Mei",
- "Jun",
- "Jul",
- "Ago",
- "Sep",
- "Okt",
- "Nov",
- "Des",
- ]
- day_names = [
- "",
- "Jumatatu",
- "Jumanne",
- "Jumatano",
- "Alhamisi",
- "Ijumaa",
- "Jumamosi",
- "Jumapili",
- ]
- day_abbreviations = [
- "",
- "Jumatatu",
- "Jumanne",
- "Jumatano",
- "Alhamisi",
- "Ijumaa",
- "Jumamosi",
- "Jumapili",
- ]
- class CroatianLocale(Locale):
- names = ["hr", "hr-hr"]
- past = "prije {0}"
- future = "za {0}"
- and_word = "i"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "upravo sad",
- "second": "sekundu",
- "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"},
- "minute": "minutu",
- "minutes": {"double": "{0} minute", "higher": "{0} minuta"},
- "hour": "sat",
- "hours": {"double": "{0} sata", "higher": "{0} sati"},
- "day": "jedan dan",
- "days": {"double": "{0} dana", "higher": "{0} dana"},
- "week": "tjedan",
- "weeks": {"double": "{0} tjedna", "higher": "{0} tjedana"},
- "month": "mjesec",
- "months": {"double": "{0} mjeseca", "higher": "{0} mjeseci"},
- "year": "godinu",
- "years": {"double": "{0} godine", "higher": "{0} godina"},
- }
- month_names = [
- "",
- "siječanj",
- "veljača",
- "ožujak",
- "travanj",
- "svibanj",
- "lipanj",
- "srpanj",
- "kolovoz",
- "rujan",
- "listopad",
- "studeni",
- "prosinac",
- ]
- month_abbreviations = [
- "",
- "siječ",
- "velj",
- "ožuj",
- "trav",
- "svib",
- "lip",
- "srp",
- "kol",
- "ruj",
- "list",
- "stud",
- "pros",
- ]
- day_names = [
- "",
- "ponedjeljak",
- "utorak",
- "srijeda",
- "četvrtak",
- "petak",
- "subota",
- "nedjelja",
- ]
- day_abbreviations = [
- "",
- "po",
- "ut",
- "sr",
- "če",
- "pe",
- "su",
- "ne",
- ]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if 1 < delta <= 4:
- form = form["double"]
- else:
- form = form["higher"]
- return form.format(delta)
- class LatinLocale(Locale):
- names = ["la", "la-va"]
- past = "ante {0}"
- future = "in {0}"
- and_word = "et"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "nunc",
- "second": "secundum",
- "seconds": "{0} secundis",
- "minute": "minutam",
- "minutes": "{0} minutis",
- "hour": "horam",
- "hours": "{0} horas",
- "day": "diem",
- "days": "{0} dies",
- "week": "hebdomadem",
- "weeks": "{0} hebdomades",
- "month": "mensem",
- "months": "{0} mensis",
- "year": "annum",
- "years": "{0} annos",
- }
- month_names = [
- "",
- "Ianuarius",
- "Februarius",
- "Martius",
- "Aprilis",
- "Maius",
- "Iunius",
- "Iulius",
- "Augustus",
- "September",
- "October",
- "November",
- "December",
- ]
- month_abbreviations = [
- "",
- "Ian",
- "Febr",
- "Mart",
- "Apr",
- "Mai",
- "Iun",
- "Iul",
- "Aug",
- "Sept",
- "Oct",
- "Nov",
- "Dec",
- ]
- day_names = [
- "",
- "dies Lunae",
- "dies Martis",
- "dies Mercurii",
- "dies Iovis",
- "dies Veneris",
- "dies Saturni",
- "dies Solis",
- ]
- day_abbreviations = [
- "",
- "dies Lunae",
- "dies Martis",
- "dies Mercurii",
- "dies Iovis",
- "dies Veneris",
- "dies Saturni",
- "dies Solis",
- ]
- class LithuanianLocale(Locale):
- names = ["lt", "lt-lt"]
- past = "prieš {0}"
- future = "po {0}"
- and_word = "ir"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "dabar",
- "second": "sekundės",
- "seconds": "{0} sekundžių",
- "minute": "minutės",
- "minutes": "{0} minučių",
- "hour": "valandos",
- "hours": "{0} valandų",
- "day": "dieną",
- "days": "{0} dienų",
- "week": "savaitės",
- "weeks": "{0} savaičių",
- "month": "mėnesio",
- "months": "{0} mėnesių",
- "year": "metų",
- "years": "{0} metų",
- }
- month_names = [
- "",
- "sausis",
- "vasaris",
- "kovas",
- "balandis",
- "gegužė",
- "birželis",
- "liepa",
- "rugpjūtis",
- "rugsėjis",
- "spalis",
- "lapkritis",
- "gruodis",
- ]
- month_abbreviations = [
- "",
- "saus",
- "vas",
- "kovas",
- "bal",
- "geg",
- "birž",
- "liepa",
- "rugp",
- "rugs",
- "spalis",
- "lapkr",
- "gr",
- ]
- day_names = [
- "",
- "pirmadienis",
- "antradienis",
- "trečiadienis",
- "ketvirtadienis",
- "penktadienis",
- "šeštadienis",
- "sekmadienis",
- ]
- day_abbreviations = [
- "",
- "pi",
- "an",
- "tr",
- "ke",
- "pe",
- "še",
- "se",
- ]
- class MalayLocale(Locale):
- names = ["ms", "ms-my", "ms-bn"]
- past = "{0} yang lalu"
- future = "dalam {0}"
- and_word = "dan"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "sekarang",
- "second": "saat",
- "seconds": "{0} saat",
- "minute": "minit",
- "minutes": "{0} minit",
- "hour": "jam",
- "hours": "{0} jam",
- "day": "hari",
- "days": "{0} hari",
- "week": "minggu",
- "weeks": "{0} minggu",
- "month": "bulan",
- "months": "{0} bulan",
- "year": "tahun",
- "years": "{0} tahun",
- }
- month_names = [
- "",
- "Januari",
- "Februari",
- "Mac",
- "April",
- "Mei",
- "Jun",
- "Julai",
- "Ogos",
- "September",
- "Oktober",
- "November",
- "Disember",
- ]
- month_abbreviations = [
- "",
- "Jan.",
- "Feb.",
- "Mac",
- "Apr.",
- "Mei",
- "Jun",
- "Julai",
- "Og.",
- "Sept.",
- "Okt.",
- "Nov.",
- "Dis.",
- ]
- day_names = [
- "",
- "Isnin",
- "Selasa",
- "Rabu",
- "Khamis",
- "Jumaat",
- "Sabtu",
- "Ahad",
- ]
- day_abbreviations = [
- "",
- "Isnin",
- "Selasa",
- "Rabu",
- "Khamis",
- "Jumaat",
- "Sabtu",
- "Ahad",
- ]
- class MalteseLocale(Locale):
- names = ["mt", "mt-mt"]
- past = "{0} ilu"
- future = "fi {0}"
- and_word = "u"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "issa",
- "second": "sekonda",
- "seconds": "{0} sekondi",
- "minute": "minuta",
- "minutes": "{0} minuti",
- "hour": "siegħa",
- "hours": {"dual": "{0} sagħtejn", "plural": "{0} sigħat"},
- "day": "jum",
- "days": {"dual": "{0} jumejn", "plural": "{0} ijiem"},
- "week": "ġimgħa",
- "weeks": {"dual": "{0} ġimagħtejn", "plural": "{0} ġimgħat"},
- "month": "xahar",
- "months": {"dual": "{0} xahrejn", "plural": "{0} xhur"},
- "year": "sena",
- "years": {"dual": "{0} sentejn", "plural": "{0} snin"},
- }
- month_names = [
- "",
- "Jannar",
- "Frar",
- "Marzu",
- "April",
- "Mejju",
- "Ġunju",
- "Lulju",
- "Awwissu",
- "Settembru",
- "Ottubru",
- "Novembru",
- "Diċembru",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Fr",
- "Mar",
- "Apr",
- "Mejju",
- "Ġun",
- "Lul",
- "Aw",
- "Sett",
- "Ott",
- "Nov",
- "Diċ",
- ]
- day_names = [
- "",
- "It-Tnejn",
- "It-Tlieta",
- "L-Erbgħa",
- "Il-Ħamis",
- "Il-Ġimgħa",
- "Is-Sibt",
- "Il-Ħadd",
- ]
- day_abbreviations = [
- "",
- "T",
- "TL",
- "E",
- "Ħ",
- "Ġ",
- "S",
- "Ħ",
- ]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if delta == 2:
- form = form["dual"]
- else:
- form = form["plural"]
- return form.format(delta)
- class SamiLocale(Locale):
- names = ["se", "se-fi", "se-no", "se-se"]
- past = "{0} dassái"
- future = "{0} " # NOTE: couldn't find preposition for Sami here, none needed?
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "dál",
- "second": "sekunda",
- "seconds": "{0} sekundda",
- "minute": "minuhta",
- "minutes": "{0} minuhta",
- "hour": "diimmu",
- "hours": "{0} diimmu",
- "day": "beaivvi",
- "days": "{0} beaivvi",
- "week": "vahku",
- "weeks": "{0} vahku",
- "month": "mánu",
- "months": "{0} mánu",
- "year": "jagi",
- "years": "{0} jagi",
- }
- month_names = [
- "",
- "Ođđajagimánnu",
- "Guovvamánnu",
- "Njukčamánnu",
- "Cuoŋománnu",
- "Miessemánnu",
- "Geassemánnu",
- "Suoidnemánnu",
- "Borgemánnu",
- "Čakčamánnu",
- "Golggotmánnu",
- "Skábmamánnu",
- "Juovlamánnu",
- ]
- month_abbreviations = [
- "",
- "Ođđajagimánnu",
- "Guovvamánnu",
- "Njukčamánnu",
- "Cuoŋománnu",
- "Miessemánnu",
- "Geassemánnu",
- "Suoidnemánnu",
- "Borgemánnu",
- "Čakčamánnu",
- "Golggotmánnu",
- "Skábmamánnu",
- "Juovlamánnu",
- ]
- day_names = [
- "",
- "Mánnodat",
- "Disdat",
- "Gaskavahkku",
- "Duorastat",
- "Bearjadat",
- "Lávvordat",
- "Sotnabeaivi",
- ]
- day_abbreviations = [
- "",
- "Mánnodat",
- "Disdat",
- "Gaskavahkku",
- "Duorastat",
- "Bearjadat",
- "Lávvordat",
- "Sotnabeaivi",
- ]
- class OdiaLocale(Locale):
- names = ["or", "or-in"]
- past = "{0} ପୂର୍ବେ"
- future = "{0} ପରେ"
- timeframes = {
- "now": "ବର୍ତ୍ତମାନ",
- "second": "ଏକ ସେକେଣ୍ଡ",
- "seconds": "{0} ସେକେଣ୍ଡ",
- "minute": "ଏକ ମିନଟ",
- "minutes": "{0} ମିନଟ",
- "hour": "ଏକ ଘଣ୍ଟା",
- "hours": "{0} ଘଣ୍ଟା",
- "day": "ଏକ ଦିନ",
- "days": "{0} ଦିନ",
- "month": "ଏକ ମାସ",
- "months": "{0} ମାସ ",
- "year": "ଏକ ବର୍ଷ",
- "years": "{0} ବର୍ଷ",
- }
- meridians = {"am": "ପୂର୍ବାହ୍ନ", "pm": "ଅପରାହ୍ନ", "AM": "ପୂର୍ବାହ୍ନ", "PM": "ଅପରାହ୍ନ"}
- month_names = [
- "",
- "ଜାନୁଆରୀ",
- "ଫେବୃଆରୀ",
- "ମାର୍ଚ୍ଚ୍",
- "ଅପ୍ରେଲ",
- "ମଇ",
- "ଜୁନ୍",
- "ଜୁଲାଇ",
- "ଅଗଷ୍ଟ",
- "ସେପ୍ଟେମ୍ବର",
- "ଅକ୍ଟୋବର୍",
- "ନଭେମ୍ବର୍",
- "ଡିସେମ୍ବର୍",
- ]
- month_abbreviations = [
- "",
- "ଜାନୁ",
- "ଫେବୃ",
- "ମାର୍ଚ୍ଚ୍",
- "ଅପ୍ରେ",
- "ମଇ",
- "ଜୁନ୍",
- "ଜୁଲା",
- "ଅଗ",
- "ସେପ୍ଟେ",
- "ଅକ୍ଟୋ",
- "ନଭେ",
- "ଡିସେ",
- ]
- day_names = [
- "",
- "ସୋମବାର",
- "ମଙ୍ଗଳବାର",
- "ବୁଧବାର",
- "ଗୁରୁବାର",
- "ଶୁକ୍ରବାର",
- "ଶନିବାର",
- "ରବିବାର",
- ]
- day_abbreviations = [
- "",
- "ସୋମ",
- "ମଙ୍ଗଳ",
- "ବୁଧ",
- "ଗୁରୁ",
- "ଶୁକ୍ର",
- "ଶନି",
- "ରବି",
- ]
- def _ordinal_number(self, n: int) -> str:
- if n > 10 or n == 0:
- return f"{n}ତମ"
- if n in [1, 5, 7, 8, 9, 10]:
- return f"{n}ମ"
- if n in [2, 3]:
- return f"{n}ୟ"
- if n == 4:
- return f"{n}ର୍ଥ"
- if n == 6:
- return f"{n}ଷ୍ଠ"
- return ""
- class SerbianLocale(Locale):
- names = ["sr", "sr-rs", "sr-sp"]
- past = "pre {0}"
- future = "za {0}"
- and_word = "i"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[str, Mapping[str, str]]]] = {
- "now": "sada",
- "second": "sekundu",
- "seconds": {"double": "{0} sekunde", "higher": "{0} sekundi"},
- "minute": "minutu",
- "minutes": {"double": "{0} minute", "higher": "{0} minuta"},
- "hour": "sat",
- "hours": {"double": "{0} sata", "higher": "{0} sati"},
- "day": "dan",
- "days": {"double": "{0} dana", "higher": "{0} dana"},
- "week": "nedelju",
- "weeks": {"double": "{0} nedelje", "higher": "{0} nedelja"},
- "month": "mesec",
- "months": {"double": "{0} meseca", "higher": "{0} meseci"},
- "year": "godinu",
- "years": {"double": "{0} godine", "higher": "{0} godina"},
- }
- month_names = [
- "",
- "januar", # јануар
- "februar", # фебруар
- "mart", # март
- "april", # април
- "maj", # мај
- "jun", # јун
- "jul", # јул
- "avgust", # август
- "septembar", # септембар
- "oktobar", # октобар
- "novembar", # новембар
- "decembar", # децембар
- ]
- month_abbreviations = [
- "",
- "jan",
- "feb",
- "mar",
- "apr",
- "maj",
- "jun",
- "jul",
- "avg",
- "sep",
- "okt",
- "nov",
- "dec",
- ]
- day_names = [
- "",
- "ponedeljak", # понедељак
- "utorak", # уторак
- "sreda", # среда
- "četvrtak", # четвртак
- "petak", # петак
- "subota", # субота
- "nedelja", # недеља
- ]
- day_abbreviations = [
- "",
- "po", # по
- "ut", # ут
- "sr", # ср
- "če", # че
- "pe", # пе
- "su", # су
- "ne", # не
- ]
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- form = self.timeframes[timeframe]
- delta = abs(delta)
- if isinstance(form, Mapping):
- if 1 < delta <= 4:
- form = form["double"]
- else:
- form = form["higher"]
- return form.format(delta)
- class LuxembourgishLocale(Locale):
- names = ["lb", "lb-lu"]
- past = "virun {0}"
- future = "an {0}"
- and_word = "an"
- timeframes: ClassVar[Dict[TimeFrameLiteral, str]] = {
- "now": "just elo",
- "second": "enger Sekonn",
- "seconds": "{0} Sekonnen",
- "minute": "enger Minutt",
- "minutes": "{0} Minutten",
- "hour": "enger Stonn",
- "hours": "{0} Stonnen",
- "day": "engem Dag",
- "days": "{0} Deeg",
- "week": "enger Woch",
- "weeks": "{0} Wochen",
- "month": "engem Mount",
- "months": "{0} Méint",
- "year": "engem Joer",
- "years": "{0} Jahren",
- }
- timeframes_only_distance = timeframes.copy()
- timeframes_only_distance["second"] = "eng Sekonn"
- timeframes_only_distance["minute"] = "eng Minutt"
- timeframes_only_distance["hour"] = "eng Stonn"
- timeframes_only_distance["day"] = "een Dag"
- timeframes_only_distance["days"] = "{0} Deeg"
- timeframes_only_distance["week"] = "eng Woch"
- timeframes_only_distance["month"] = "ee Mount"
- timeframes_only_distance["months"] = "{0} Méint"
- timeframes_only_distance["year"] = "ee Joer"
- timeframes_only_distance["years"] = "{0} Joer"
- month_names = [
- "",
- "Januar",
- "Februar",
- "Mäerz",
- "Abrëll",
- "Mee",
- "Juni",
- "Juli",
- "August",
- "September",
- "Oktouber",
- "November",
- "Dezember",
- ]
- month_abbreviations = [
- "",
- "Jan",
- "Feb",
- "Mäe",
- "Abr",
- "Mee",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Okt",
- "Nov",
- "Dez",
- ]
- day_names = [
- "",
- "Méindeg",
- "Dënschdeg",
- "Mëttwoch",
- "Donneschdeg",
- "Freideg",
- "Samschdeg",
- "Sonndeg",
- ]
- day_abbreviations = ["", "Méi", "Dën", "Mët", "Don", "Fre", "Sam", "Son"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}."
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[int, float] = 0,
- only_distance: bool = False,
- ) -> str:
- if not only_distance:
- return super().describe(timeframe, delta, only_distance)
- # Luxembourgish uses a different case without 'in' or 'ago'
- humanized: str = self.timeframes_only_distance[timeframe].format(
- trunc(abs(delta))
- )
- return humanized
- class ZuluLocale(Locale):
- names = ["zu", "zu-za"]
- past = "{0} edlule"
- future = "{0} "
- and_word = "futhi"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
- "now": "manje",
- "second": {"past": "umzuzwana", "future": "ngomzuzwana"},
- "seconds": {"past": "{0} imizuzwana", "future": "{0} ngemizuzwana"},
- "minute": {"past": "umzuzu", "future": "ngomzuzu"},
- "minutes": {"past": "{0} imizuzu", "future": "{0} ngemizuzu"},
- "hour": {"past": "ihora", "future": "ngehora"},
- "hours": {"past": "{0} amahora", "future": "{0} emahoreni"},
- "day": {"past": "usuku", "future": "ngosuku"},
- "days": {"past": "{0} izinsuku", "future": "{0} ezinsukwini"},
- "week": {"past": "isonto", "future": "ngesonto"},
- "weeks": {"past": "{0} amasonto", "future": "{0} emasontweni"},
- "month": {"past": "inyanga", "future": "ngenyanga"},
- "months": {"past": "{0} izinyanga", "future": "{0} ezinyangeni"},
- "year": {"past": "unyaka", "future": "ngonyak"},
- "years": {"past": "{0} iminyaka", "future": "{0} eminyakeni"},
- }
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- """Zulu aware time frame format function, takes into account
- the differences between past and future forms."""
- abs_delta = abs(delta)
- form = self.timeframes[timeframe]
- if isinstance(form, str):
- return form.format(abs_delta)
- if delta > 0:
- key = "future"
- else:
- key = "past"
- form = form[key]
- return form.format(abs_delta)
- month_names = [
- "",
- "uMasingane",
- "uNhlolanja",
- "uNdasa",
- "UMbasa",
- "UNhlaba",
- "UNhlangulana",
- "uNtulikazi",
- "UNcwaba",
- "uMandulo",
- "uMfumfu",
- "uLwezi",
- "uZibandlela",
- ]
- month_abbreviations = [
- "",
- "uMasingane",
- "uNhlolanja",
- "uNdasa",
- "UMbasa",
- "UNhlaba",
- "UNhlangulana",
- "uNtulikazi",
- "UNcwaba",
- "uMandulo",
- "uMfumfu",
- "uLwezi",
- "uZibandlela",
- ]
- day_names = [
- "",
- "uMsombuluko",
- "uLwesibili",
- "uLwesithathu",
- "uLwesine",
- "uLwesihlanu",
- "uMgqibelo",
- "iSonto",
- ]
- day_abbreviations = [
- "",
- "uMsombuluko",
- "uLwesibili",
- "uLwesithathu",
- "uLwesine",
- "uLwesihlanu",
- "uMgqibelo",
- "iSonto",
- ]
- class TamilLocale(Locale):
- names = ["ta", "ta-in", "ta-lk"]
- past = "{0} நேரத்திற்கு முன்பு"
- future = "இல் {0}"
- timeframes = {
- "now": "இப்போது",
- "second": "ஒரு இரண்டாவது",
- "seconds": "{0} விநாடிகள்",
- "minute": "ஒரு நிமிடம்",
- "minutes": "{0} நிமிடங்கள்",
- "hour": "ஒரு மணி",
- "hours": "{0} மணிநேரம்",
- "day": "ஒரு நாள்",
- "days": "{0} நாட்கள்",
- "week": "ஒரு வாரம்",
- "weeks": "{0} வாரங்கள்",
- "month": "ஒரு மாதம்",
- "months": "{0} மாதங்கள்",
- "year": "ஒரு ஆண்டு",
- "years": "{0} ஆண்டுகள்",
- }
- month_names = [
- "",
- "சித்திரை",
- "வைகாசி",
- "ஆனி",
- "ஆடி",
- "ஆவணி",
- "புரட்டாசி",
- "ஐப்பசி",
- "கார்த்திகை",
- "மார்கழி",
- "தை",
- "மாசி",
- "பங்குனி",
- ]
- month_abbreviations = [
- "",
- "ஜன",
- "பிப்",
- "மார்",
- "ஏப்",
- "மே",
- "ஜூன்",
- "ஜூலை",
- "ஆக",
- "செப்",
- "அக்",
- "நவ",
- "டிச",
- ]
- day_names = [
- "",
- "திங்கட்கிழமை",
- "செவ்வாய்க்கிழமை",
- "புதன்கிழமை",
- "வியாழக்கிழமை",
- "வெள்ளிக்கிழமை",
- "சனிக்கிழமை",
- "ஞாயிற்றுக்கிழமை",
- ]
- day_abbreviations = [
- "",
- "திங்கட்",
- "செவ்வாய்",
- "புதன்",
- "வியாழன்",
- "வெள்ளி",
- "சனி",
- "ஞாயிறு",
- ]
- def _ordinal_number(self, n: int) -> str:
- if n == 1:
- return f"{n}வது"
- elif n >= 0:
- return f"{n}ஆம்"
- else:
- return ""
- class AlbanianLocale(Locale):
- names = ["sq", "sq-al"]
- past = "{0} më parë"
- future = "në {0}"
- and_word = "dhe"
- timeframes = {
- "now": "tani",
- "second": "sekondë",
- "seconds": "{0} sekonda",
- "minute": "minutë",
- "minutes": "{0} minuta",
- "hour": "orë",
- "hours": "{0} orë",
- "day": "ditë",
- "days": "{0} ditë",
- "week": "javë",
- "weeks": "{0} javë",
- "month": "muaj",
- "months": "{0} muaj",
- "year": "vit",
- "years": "{0} vjet",
- }
- month_names = [
- "",
- "janar",
- "shkurt",
- "mars",
- "prill",
- "maj",
- "qershor",
- "korrik",
- "gusht",
- "shtator",
- "tetor",
- "nëntor",
- "dhjetor",
- ]
- month_abbreviations = [
- "",
- "jan",
- "shk",
- "mar",
- "pri",
- "maj",
- "qer",
- "korr",
- "gush",
- "sht",
- "tet",
- "nën",
- "dhj",
- ]
- day_names = [
- "",
- "e hënë",
- "e martë",
- "e mërkurë",
- "e enjte",
- "e premte",
- "e shtunë",
- "e diel",
- ]
- day_abbreviations = [
- "",
- "hën",
- "mar",
- "mër",
- "enj",
- "pre",
- "sht",
- "die",
- ]
- class GeorgianLocale(Locale):
- names = ["ka", "ka-ge"]
- past = "{0} წინ" # ts’in
- future = "{0} შემდეგ" # shemdeg
- and_word = "და" # da
- timeframes = {
- "now": "ახლა", # akhla
- # When a cardinal qualifies a noun, it stands in the singular
- "second": "წამის", # ts’amis
- "seconds": "{0} წამის",
- "minute": "წუთის", # ts’utis
- "minutes": "{0} წუთის",
- "hour": "საათის", # saatis
- "hours": "{0} საათის",
- "day": "დღის", # dghis
- "days": "{0} დღის",
- "week": "კვირის", # k’viris
- "weeks": "{0} კვირის",
- "month": "თვის", # tvis
- "months": "{0} თვის",
- "year": "წლის", # ts’lis
- "years": "{0} წლის",
- }
- month_names = [
- # modern month names
- "",
- "იანვარი", # Ianvari
- "თებერვალი", # Tebervali
- "მარტი", # Mart'i
- "აპრილი", # Ap'rili
- "მაისი", # Maisi
- "ივნისი", # Ivnisi
- "ივლისი", # Ivlisi
- "აგვისტო", # Agvist'o
- "სექტემბერი", # Sekt'emberi
- "ოქტომბერი", # Okt'omberi
- "ნოემბერი", # Noemberi
- "დეკემბერი", # Dek'emberi
- ]
- month_abbreviations = [
- # no abbr. found yet
- "",
- "იანვარი", # Ianvari
- "თებერვალი", # Tebervali
- "მარტი", # Mart'i
- "აპრილი", # Ap'rili
- "მაისი", # Maisi
- "ივნისი", # Ivnisi
- "ივლისი", # Ivlisi
- "აგვისტო", # Agvist'o
- "სექტემბერი", # Sekt'emberi
- "ოქტომბერი", # Okt'omberi
- "ნოემბერი", # Noemberi
- "დეკემბერი", # Dek'emberi
- ]
- day_names = [
- "",
- "ორშაბათი", # orshabati
- "სამშაბათი", # samshabati
- "ოთხშაბათი", # otkhshabati
- "ხუთშაბათი", # khutshabati
- "პარასკევი", # p’arask’evi
- "შაბათი", # shabati
- # "k’vira" also serves as week; to avoid confusion "k’vira-dge" can be used for Sunday
- "კვირა", # k’vira
- ]
- day_abbreviations = [
- "",
- "ორშაბათი", # orshabati
- "სამშაბათი", # samshabati
- "ოთხშაბათი", # otkhshabati
- "ხუთშაბათი", # khutshabati
- "პარასკევი", # p’arask’evi
- "შაბათი", # shabati
- "კვირა", # k’vira
- ]
- class SinhalaLocale(Locale):
- names = ["si", "si-lk"]
- past = "{0}ට පෙර"
- future = "{0}"
- and_word = "සහ"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
- "now": "දැන්",
- "second": {
- "past": "තත්පරයක",
- "future": "තත්පරයකින්",
- }, # ක් is the article
- "seconds": {
- "past": "තත්පර {0} ක",
- "future": "තත්පර {0} කින්",
- },
- "minute": {
- "past": "විනාඩියක",
- "future": "විනාඩියකින්",
- },
- "minutes": {
- "past": "විනාඩි {0} ක",
- "future": "මිනිත්තු {0} කින්",
- },
- "hour": {"past": "පැයක", "future": "පැයකින්"},
- "hours": {
- "past": "පැය {0} ක",
- "future": "පැය {0} කින්",
- },
- "day": {"past": "දිනක", "future": "දිනකට"},
- "days": {
- "past": "දින {0} ක",
- "future": "දින {0} කින්",
- },
- "week": {"past": "සතියක", "future": "සතියකින්"},
- "weeks": {
- "past": "සති {0} ක",
- "future": "සති {0} කින්",
- },
- "month": {"past": "මාසයක", "future": "එය මාසය තුළ"},
- "months": {
- "past": "මාස {0} ක",
- "future": "මාස {0} කින්",
- },
- "year": {"past": "වසරක", "future": "වසරක් තුළ"},
- "years": {
- "past": "අවුරුදු {0} ක",
- "future": "අවුරුදු {0} තුළ",
- },
- }
- # Sinhala: the general format to describe timeframe is different from past and future,
- # so we do not copy the original timeframes dictionary
- timeframes_only_distance = {}
- timeframes_only_distance["second"] = "තත්පරයක්"
- timeframes_only_distance["seconds"] = "තත්පර {0}"
- timeframes_only_distance["minute"] = "මිනිත්තුවක්"
- timeframes_only_distance["minutes"] = "විනාඩි {0}"
- timeframes_only_distance["hour"] = "පැයක්"
- timeframes_only_distance["hours"] = "පැය {0}"
- timeframes_only_distance["day"] = "දවසක්"
- timeframes_only_distance["days"] = "දවස් {0}"
- timeframes_only_distance["week"] = "සතියක්"
- timeframes_only_distance["weeks"] = "සති {0}"
- timeframes_only_distance["month"] = "මාසයක්"
- timeframes_only_distance["months"] = "මාස {0}"
- timeframes_only_distance["year"] = "අවුරුද්දක්"
- timeframes_only_distance["years"] = "අවුරුදු {0}"
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- """
- Sinhala awares time frame format function, takes into account
- the differences between general, past, and future forms (three different suffixes).
- """
- abs_delta = abs(delta)
- form = self.timeframes[timeframe]
- if isinstance(form, str):
- return form.format(abs_delta)
- if delta > 0:
- key = "future"
- else:
- key = "past"
- form = form[key]
- return form.format(abs_delta)
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int] = 1, # key is always future when only_distance=False
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within a timeframe in plain language.
- :param timeframe: a string representing a timeframe.
- :param delta: a quantity representing a delta in a timeframe.
- :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
- """
- if not only_distance:
- return super().describe(timeframe, delta, only_distance)
- # Sinhala uses a different case without 'in' or 'ago'
- humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta)))
- return humanized
- month_names = [
- "",
- "ජනවාරි",
- "පෙබරවාරි",
- "මාර්තු",
- "අප්රේල්",
- "මැයි",
- "ජූනි",
- "ජූලි",
- "අගෝස්තු",
- "සැප්තැම්බර්",
- "ඔක්තෝබර්",
- "නොවැම්බර්",
- "දෙසැම්බර්",
- ]
- month_abbreviations = [
- "",
- "ජන",
- "පෙබ",
- "මාර්",
- "අප්රේ",
- "මැයි",
- "ජුනි",
- "ජූලි",
- "අගෝ",
- "සැප්",
- "ඔක්",
- "නොවැ",
- "දෙසැ",
- ]
- day_names = [
- "",
- "සදුදා",
- "අඟහරැවදා",
- "බදාදා",
- "බ්රහස්පතින්දා",
- "සිකුරාදා",
- "සෙනසුරාදා",
- "ඉරිදා",
- ]
- day_abbreviations = [
- "",
- "සදුද",
- "බදා",
- "බදා",
- "සිකු",
- "සෙන",
- "අ",
- "ඉරිදා",
- ]
- class UrduLocale(Locale):
- names = ["ur", "ur-pk"]
- past = "پہلے {0}"
- future = "میں {0}"
- and_word = "اور"
- timeframes = {
- "now": "ابھی",
- "second": "ایک سیکنڈ",
- "seconds": "{0} سیکنڈ",
- "minute": "ایک منٹ",
- "minutes": "{0} منٹ",
- "hour": "ایک گھنٹے",
- "hours": "{0} گھنٹے",
- "day": "ایک دن",
- "days": "{0} دن",
- "week": "ایک ہفتے",
- "weeks": "{0} ہفتے",
- "month": "ایک مہینہ",
- "months": "{0} ماہ",
- "year": "ایک سال",
- "years": "{0} سال",
- }
- month_names = [
- "",
- "جنوری",
- "فروری",
- "مارچ",
- "اپریل",
- "مئی",
- "جون",
- "جولائی",
- "اگست",
- "ستمبر",
- "اکتوبر",
- "نومبر",
- "دسمبر",
- ]
- month_abbreviations = [
- "",
- "جنوری",
- "فروری",
- "مارچ",
- "اپریل",
- "مئی",
- "جون",
- "جولائی",
- "اگست",
- "ستمبر",
- "اکتوبر",
- "نومبر",
- "دسمبر",
- ]
- day_names = [
- "",
- "سوموار",
- "منگل",
- "بدھ",
- "جمعرات",
- "جمعہ",
- "ہفتہ",
- "اتوار",
- ]
- day_abbreviations = [
- "",
- "سوموار",
- "منگل",
- "بدھ",
- "جمعرات",
- "جمعہ",
- "ہفتہ",
- "اتوار",
- ]
- class KazakhLocale(Locale):
- names = ["kk", "kk-kz"]
- past = "{0} бұрын"
- future = "{0} кейін"
- timeframes = {
- "now": "қазір",
- "second": "бір секунд",
- "seconds": "{0} секунд",
- "minute": "бір минут",
- "minutes": "{0} минут",
- "hour": "бір сағат",
- "hours": "{0} сағат",
- "day": "бір күн",
- "days": "{0} күн",
- "week": "бір апта",
- "weeks": "{0} апта",
- "month": "бір ай",
- "months": "{0} ай",
- "year": "бір жыл",
- "years": "{0} жыл",
- }
- month_names = [
- "",
- "Қаңтар",
- "Ақпан",
- "Наурыз",
- "Сәуір",
- "Мамыр",
- "Маусым",
- "Шілде",
- "Тамыз",
- "Қыркүйек",
- "Қазан",
- "Қараша",
- "Желтоқсан",
- ]
- month_abbreviations = [
- "",
- "Қан",
- "Ақп",
- "Нау",
- "Сәу",
- "Мам",
- "Мау",
- "Шіл",
- "Там",
- "Қыр",
- "Қаз",
- "Қар",
- "Жел",
- ]
- day_names = [
- "",
- "Дүйсембі",
- "Сейсенбі",
- "Сәрсенбі",
- "Бейсенбі",
- "Жұма",
- "Сенбі",
- "Жексенбі",
- ]
- day_abbreviations = ["", "Дс", "Сс", "Ср", "Бс", "Жм", "Сб", "Жс"]
- class AmharicLocale(Locale):
- names = ["am", "am-et"]
- past = "{0} በፊት"
- future = "{0} ውስጥ"
- and_word = "እና"
- timeframes: ClassVar[Mapping[TimeFrameLiteral, Union[Mapping[str, str], str]]] = {
- "now": "አሁን",
- "second": {
- "past": "ከአንድ ሰከንድ",
- "future": "በአንድ ሰከንድ",
- },
- "seconds": {
- "past": "ከ {0} ሰከንድ",
- "future": "በ {0} ሰከንድ",
- },
- "minute": {
- "past": "ከአንድ ደቂቃ",
- "future": "በአንድ ደቂቃ",
- },
- "minutes": {
- "past": "ከ {0} ደቂቃዎች",
- "future": "በ {0} ደቂቃዎች",
- },
- "hour": {
- "past": "ከአንድ ሰዓት",
- "future": "በአንድ ሰዓት",
- },
- "hours": {
- "past": "ከ {0} ሰዓታት",
- "future": "በ {0} ሰከንድ",
- },
- "day": {
- "past": "ከአንድ ቀን",
- "future": "በአንድ ቀን",
- },
- "days": {
- "past": "ከ {0} ቀናት",
- "future": "በ {0} ቀናት",
- },
- "week": {
- "past": "ከአንድ ሳምንት",
- "future": "በአንድ ሳምንት",
- },
- "weeks": {
- "past": "ከ {0} ሳምንታት",
- "future": "በ {0} ሳምንታት",
- },
- "month": {
- "past": "ከአንድ ወር",
- "future": "በአንድ ወር",
- },
- "months": {
- "past": "ከ {0} ወር",
- "future": "በ {0} ወራት",
- },
- "year": {
- "past": "ከአንድ አመት",
- "future": "በአንድ አመት",
- },
- "years": {
- "past": "ከ {0} ዓመታት",
- "future": "በ {0} ዓመታት",
- },
- }
- # Amharic: the general format to describe timeframe is different from past and future,
- # so we do not copy the original timeframes dictionary
- timeframes_only_distance = {
- "second": "አንድ ሰከንድ",
- "seconds": "{0} ሰከንድ",
- "minute": "አንድ ደቂቃ",
- "minutes": "{0} ደቂቃዎች",
- "hour": "አንድ ሰዓት",
- "hours": "{0} ሰዓት",
- "day": "አንድ ቀን",
- "days": "{0} ቀናት",
- "week": "አንድ ሳምንት",
- "weeks": "{0} ሳምንት",
- "month": "አንድ ወር",
- "months": "{0} ወራት",
- "year": "አንድ አመት",
- "years": "{0} ዓመታት",
- }
- month_names = [
- "",
- "ጃንዩወሪ",
- "ፌብሩወሪ",
- "ማርች",
- "ኤፕሪል",
- "ሜይ",
- "ጁን",
- "ጁላይ",
- "ኦገስት",
- "ሴፕቴምበር",
- "ኦክቶበር",
- "ኖቬምበር",
- "ዲሴምበር",
- ]
- month_abbreviations = [
- "",
- "ጃንዩ",
- "ፌብሩ",
- "ማርች",
- "ኤፕሪ",
- "ሜይ",
- "ጁን",
- "ጁላይ",
- "ኦገስ",
- "ሴፕቴ",
- "ኦክቶ",
- "ኖቬም",
- "ዲሴም",
- ]
- day_names = [
- "",
- "ሰኞ",
- "ማክሰኞ",
- "ረቡዕ",
- "ሐሙስ",
- "ዓርብ",
- "ቅዳሜ",
- "እሑድ",
- ]
- day_abbreviations = ["", "እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"]
- def _ordinal_number(self, n: int) -> str:
- return f"{n}ኛ"
- def _format_timeframe(self, timeframe: TimeFrameLiteral, delta: int) -> str:
- """
- Amharic awares time frame format function, takes into account
- the differences between general, past, and future forms (three different suffixes).
- """
- abs_delta = abs(delta)
- form = self.timeframes[timeframe]
- if isinstance(form, str):
- return form.format(abs_delta)
- if delta > 0:
- key = "future"
- else:
- key = "past"
- form = form[key]
- return form.format(abs_delta)
- def describe(
- self,
- timeframe: TimeFrameLiteral,
- delta: Union[float, int] = 1, # key is always future when only_distance=False
- only_distance: bool = False,
- ) -> str:
- """Describes a delta within a timeframe in plain language.
- :param timeframe: a string representing a timeframe.
- :param delta: a quantity representing a delta in a timeframe.
- :param only_distance: return only distance eg: "11 seconds" without "in" or "ago" keywords
- """
- if not only_distance:
- return super().describe(timeframe, delta, only_distance)
- humanized = self.timeframes_only_distance[timeframe].format(trunc(abs(delta)))
- return humanized
- class ArmenianLocale(Locale):
- names = ["hy", "hy-am"]
- past = "{0} առաջ"
- future = "{0}ից"
- and_word = "Եվ" # Yev
- timeframes = {
- "now": "հիմա",
- "second": "վայրկյան",
- "seconds": "{0} վայրկյան",
- "minute": "րոպե",
- "minutes": "{0} րոպե",
- "hour": "ժամ",
- "hours": "{0} ժամ",
- "day": "օր",
- "days": "{0} օր",
- "month": "ամիս",
- "months": "{0} ամիս",
- "year": "տարին",
- "years": "{0} տարին",
- "week": "շաբաթ",
- "weeks": "{0} շաբաթ",
- }
- meridians = {
- "am": "Ամ",
- "pm": "պ.մ.",
- "AM": "Ամ",
- "PM": "պ.մ.",
- }
- month_names = [
- "",
- "հունվար",
- "փետրվար",
- "մարտ",
- "ապրիլ",
- "մայիս",
- "հունիս",
- "հուլիս",
- "օգոստոս",
- "սեպտեմբեր",
- "հոկտեմբեր",
- "նոյեմբեր",
- "դեկտեմբեր",
- ]
- month_abbreviations = [
- "",
- "հունվար",
- "փետրվար",
- "մարտ",
- "ապրիլ",
- "մայիս",
- "հունիս",
- "հուլիս",
- "օգոստոս",
- "սեպտեմբեր",
- "հոկտեմբեր",
- "նոյեմբեր",
- "դեկտեմբեր",
- ]
- day_names = [
- "",
- "երկուշաբթի",
- "երեքշաբթի",
- "չորեքշաբթի",
- "հինգշաբթի",
- "ուրբաթ",
- "շաբաթ",
- "կիրակի",
- ]
- day_abbreviations = [
- "",
- "երկ.",
- "երեք.",
- "չորեք.",
- "հինգ.",
- "ուրբ.",
- "շաբ.",
- "կիր.",
- ]
- class UzbekLocale(Locale):
- names = ["uz", "uz-uz"]
- past = "{0}dan avval"
- future = "{0}dan keyin"
- timeframes = {
- "now": "hozir",
- "second": "bir soniya",
- "seconds": "{0} soniya",
- "minute": "bir daqiqa",
- "minutes": "{0} daqiqa",
- "hour": "bir soat",
- "hours": "{0} soat",
- "day": "bir kun",
- "days": "{0} kun",
- "week": "bir hafta",
- "weeks": "{0} hafta",
- "month": "bir oy",
- "months": "{0} oy",
- "year": "bir yil",
- "years": "{0} yil",
- }
- month_names = [
- "",
- "Yanvar",
- "Fevral",
- "Mart",
- "Aprel",
- "May",
- "Iyun",
- "Iyul",
- "Avgust",
- "Sentyabr",
- "Oktyabr",
- "Noyabr",
- "Dekabr",
- ]
- month_abbreviations = [
- "",
- "Yan",
- "Fev",
- "Mar",
- "Apr",
- "May",
- "Iyn",
- "Iyl",
- "Avg",
- "Sen",
- "Okt",
- "Noy",
- "Dek",
- ]
- day_names = [
- "",
- "Dushanba",
- "Seshanba",
- "Chorshanba",
- "Payshanba",
- "Juma",
- "Shanba",
- "Yakshanba",
- ]
- day_abbreviations = ["", "Dush", "Sesh", "Chor", "Pay", "Jum", "Shan", "Yak"]
|