1# -*- coding: utf-8 -*- 2from __future__ import unicode_literals 3 4from io import StringIO 5 6import logging 7from parameterized import parameterized, param 8 9from dateparser.languages import default_loader, Locale 10from dateparser.languages.validation import LanguageValidator 11from dateparser.conf import apply_settings 12from dateparser.search.detection import AutoDetectLanguage, ExactLanguages 13from dateparser.utils import normalize_unicode 14 15from tests import BaseTestCase 16 17 18class TestBundledLanguages(BaseTestCase): 19 def setUp(self): 20 super(TestBundledLanguages, self).setUp() 21 self.language = NotImplemented 22 self.datetime_string = NotImplemented 23 self.translation = NotImplemented 24 self.tokens = NotImplemented 25 self.result = NotImplemented 26 self.settings = NotImplemented 27 28 @parameterized.expand([ 29 param('en', "Sep 03 2014", "september 03 2014"), 30 param('en', "friday, 03 september 2014", "friday 03 september 2014"), 31 # Chinese 32 param('zh', "1年11个月", "1 year 11 month"), 33 param('zh', "1年11個月", "1 year 11 month"), 34 param('zh', "2015年04月08日10点05", "2015-04-08 10:05"), 35 param('zh', "2015年04月08日10:05", "2015-04-08 10:05"), 36 param('zh', "2013年04月08日", "2013-04-08"), 37 param('zh', "周一", "monday"), 38 param('zh', "礼拜一", "monday"), 39 param('zh', "周二", "tuesday"), 40 param('zh', "礼拜二", "tuesday"), 41 param('zh', "周三", "wednesday"), 42 param('zh', "礼拜三", "wednesday"), 43 param('zh', "星期日 2015年04月08日10:05", "sunday 2015-04-08 10:05"), 44 param('zh', "周六 2013年04月08日", "saturday 2013-04-08"), 45 param('zh', "下午3:30", "3:30 pm"), 46 param('zh', "凌晨3:30", "3:30 am"), 47 param('zh', "中午", "12:00"), 48 # French 49 param('fr', "20 Février 2012", "20 february 2012"), 50 param('fr', "Mercredi 19 Novembre 2013", "wednesday 19 november 2013"), 51 param('fr', "18 octobre 2012 à 19 h 21 min", "18 october 2012 19:21"), 52 # German 53 param('de', "29. Juni 2007", "29. june 2007"), 54 param('de', "Montag 5 Januar, 2015", "monday 5 january 2015"), 55 # Hungarian 56 param('hu', '2016 augusztus 11.', '2016 august 11.'), 57 param('hu', '2016-08-13 szombat 10:21', '2016-08-13 saturday 10:21'), 58 param('hu', '2016. augusztus 14. vasárnap 10:21', '2016. august 14. sunday 10:21'), 59 param('hu', 'hétfő', 'monday'), 60 param('hu', 'tegnapelőtt', '2 day ago'), 61 param('hu', 'ma', "0 day ago"), 62 param('hu', '2 hónappal ezelőtt', "2 month ago"), 63 param('hu', '2016-08-13 szombat 10:21 GMT', '2016-08-13 saturday 10:21 GMT'), 64 # Spanish 65 param('es', "Miércoles 31 Diciembre 2014", "wednesday 31 december 2014"), 66 # Italian 67 param('it', "Giovedi Maggio 29 2013", "thursday may 29 2013"), 68 param('it', "19 Luglio 2013", "19 july 2013"), 69 # Portuguese 70 param('pt', "22 de dezembro de 2014 às 02:38", "22 december 2014 02:38"), 71 # Russian 72 param('ru', "5 августа 2014 г. в 12:00", "5 august 2014 year. 12:00"), 73 # Turkish 74 param('tr', "2 Ocak 2015 Cuma, 16:49", "2 january 2015 friday 16:49"), 75 # Czech 76 param('cs', "22. prosinec 2014 v 2:38", "22. december 2014 2:38"), 77 # Dutch 78 param('nl', "maandag 22 december 2014 om 2:38", "monday 22 december 2014 2:38"), 79 # Romanian 80 param('ro', "22 Decembrie 2014 la 02:38", "22 december 2014 02:38"), 81 # Polish 82 param('pl', "4 stycznia o 13:50", "4 january 13:50"), 83 param('pl', "29 listopada 2014 o 08:40", "29 november 2014 08:40"), 84 # Ukrainian 85 param('uk', "30 листопада 2013 о 04:27", "30 november 2013 04:27"), 86 # Belarusian 87 param('be', "5 снежня 2015 г. у 12:00", "5 december 2015 year. 12:00"), 88 param('be', "11 верасня 2015 г. у 12:11", "11 september 2015 year. 12:11"), 89 param('be', "3 стд 2015 г. у 10:33", "3 january 2015 year. 10:33"), 90 # Arabic 91 param('ar', "6 يناير، 2015، الساعة 05:16 مساءً", "6 january 2015 05:16 pm"), 92 param('ar', "7 يناير، 2015، الساعة 11:00 صباحاً", "7 january 2015 11:00 am"), 93 # Vietnamese 94 param('vi', "Thứ Năm, ngày 8 tháng 1 năm 2015", "thursday 8 january 2015"), 95 param('vi', "Thứ Tư, 07/01/2015 | 22:34", "wednesday 07/01/2015 22:34"), 96 param('vi', "9 Tháng 1 2015 lúc 15:08", "9 january 2015 15:08"), 97 # Thai 98 param('th', "เมื่อ กุมภาพันธ์ 09, 2015, 09:27:57 AM", "february 09 2015 09:27:57 am"), 99 param('th', "เมื่อ กรกฎาคม 05, 2012, 01:18:06 AM", "july 05 2012 01:18:06 am"), 100 param('th', "วันเสาร์ที่ 16 ธันวาคม 2560 7:00 pm", "saturday 16 december 2560 7:00 pm"), 101 param('th', "วันอาทิตย์ที่ 17 ธันวาคม 2560 6:00 pm", "sunday 17 december 2560 6:00 pm"), 102 103 # Tagalog 104 param('tl', "Biyernes Hulyo 3, 2015", "friday july 3 2015"), 105 param('tl', "Pebrero 5, 2015 7:00 pm", "february 5 2015 7:00 pm"), 106 # Indonesian 107 param('id', "06 Sep 2015", "06 september 2015"), 108 param('id', "07 Feb 2015 20:15", "07 february 2015 20:15"), 109 110 # Miscellaneous 111 param('en', "2014-12-12T12:33:39-08:00", "2014-12-12 12:33:39-08:00"), 112 param('en', "2014-10-15T16:12:20+00:00", "2014-10-15 16:12:20+00:00"), 113 param('en', "28 Oct 2014 16:39:01 +0000", "28 october 2014 16:39:01 +0000"), 114 param('es', "13 Febrero 2015 a las 23:00", "13 february 2015 23:00"), 115 116 # Danish 117 param('da', "Sep 03 2014", "september 03 2014"), 118 param('da', "fredag, 03 september 2014", "friday 03 september 2014"), 119 param('da', "fredag d. 3 september 2014", "friday 3 september 2014"), 120 121 # Finnish 122 param('fi', "maanantai tammikuu 16, 2015", "monday january 16 2015"), 123 param('fi', "ma tammi 16, 2015", "monday january 16 2015"), 124 param('fi', "tiistai helmikuu 16, 2015", "tuesday february 16 2015"), 125 param('fi', "ti helmi 16, 2015", "tuesday february 16 2015"), 126 param('fi', "keskiviikko maaliskuu 16, 2015", "wednesday march 16 2015"), 127 param('fi', "ke maalis 16, 2015", "wednesday march 16 2015"), 128 param('fi', "torstai huhtikuu 16, 2015", "thursday april 16 2015"), 129 param('fi', "to huhti 16, 2015", "thursday april 16 2015"), 130 param('fi', "perjantai toukokuu 16, 2015", "friday may 16 2015"), 131 param('fi', "pe touko 16, 2015", "friday may 16 2015"), 132 param('fi', "lauantai kesäkuu 16, 2015", "saturday june 16 2015"), 133 param('fi', "la kesä 16, 2015", "saturday june 16 2015"), 134 param('fi', "sunnuntai heinäkuu 16, 2015", "sunday july 16 2015"), 135 param('fi', "su heinä 16, 2015", "sunday july 16 2015"), 136 param('fi', "su elokuu 16, 2015", "sunday august 16 2015"), 137 param('fi', "su elo 16, 2015", "sunday august 16 2015"), 138 param('fi', "su syyskuu 16, 2015", "sunday september 16 2015"), 139 param('fi', "su syys 16, 2015", "sunday september 16 2015"), 140 param('fi', "su lokakuu 16, 2015", "sunday october 16 2015"), 141 param('fi', "su loka 16, 2015", "sunday october 16 2015"), 142 param('fi', "su marraskuu 16, 2015", "sunday november 16 2015"), 143 param('fi', "su marras 16, 2015", "sunday november 16 2015"), 144 param('fi', "su joulukuu 16, 2015", "sunday december 16 2015"), 145 param('fi', "su joulu 16, 2015", "sunday december 16 2015"), 146 param('fi', "1. tammikuuta, 2016", "1. january 2016"), 147 param('fi', "tiistaina, 27. lokakuuta 2015", "tuesday 27. october 2015"), 148 149 # Japanese 150 param('ja', "午後3時", "pm 3:00"), 151 param('ja', "2時", "2:00"), 152 param('ja', "11時42分", "11:42"), 153 param('ja', "3ヶ月", "3 month"), 154 param('ja', "約53か月前", "53 month ago"), 155 param('ja', "3月", "march"), 156 param('ja', "十二月", "december"), 157 param('ja', "2月10日", "2-10"), 158 param('ja', "2013年2月", "2013 year february"), 159 param('ja', "2013年04月08日", "2013-04-08"), 160 param('ja', "2016年03月24日 木曜日 10時05分", "2016-03-24 thursday 10:05"), 161 param('ja', "2016年3月20日 21時40分", "2016-3-20 21:40"), 162 param('ja', "2016年03月21日 23時05分11秒", "2016-03-21 23:05:11"), 163 param('ja', "2016年3月21日(月) 14時48分", "2016-3-21 monday 14:48"), 164 param('ja', "2016年3月20日(日) 21時40分", "2016-3-20 sunday 21:40"), 165 param('ja', "2016年3月20日 (日) 21時40分", "2016-3-20 sunday 21:40"), 166 167 # Hebrew 168 param('he', "20 לאפריל 2012", "20 april 2012"), 169 param('he', "יום רביעי ה-19 בנובמבר 2013", "wednesday 19 november 2013"), 170 param('he', "18 לאוקטובר 2012 בשעה 19:21", "18 october 2012 19:21"), 171 param('he', "יום ה' 6/10/2016", "thursday 6/10/2016"), 172 param('he', "חצות", "12 am"), 173 param('he', "1 אחר חצות", "1 am"), 174 param('he', "3 לפנות בוקר", "3 am"), 175 param('he', "3 בבוקר", "3 am"), 176 param('he', "3 בצהריים", "3 pm"), 177 param('he', "6 לפנות ערב", "6 pm"), 178 param('he', "6 אחרי הצהריים", "6 pm"), 179 param('he', "6 אחרי הצהרים", "6 pm"), 180 181 # Bangla 182 param('bn', "সেপ্টেম্বর 03 2014", "september 03 2014"), 183 param('bn', "শুক্রবার, 03 সেপ্টেম্বর 2014", "friday 03 september 2014"), 184 185 # Hindi 186 param('hi', 'सोमवार 13 जून 1998', 'monday 13 june 1998'), 187 param('hi', 'मंगल 16 1786 12:18', 'tuesday 16 1786 12:18'), 188 param('hi', 'शनि 11 अप्रैल 2002 03:09', 'saturday 11 april 2002 03:09'), 189 190 # Swedish 191 param('sv', "Sept 03 2014", "september 03 2014"), 192 param('sv', "fredag, 03 september 2014", "friday 03 september 2014"), 193 194 # af 195 param('af', '5 Mei 2017', '5 may 2017'), 196 param('af', 'maandag, Augustus 15 2005 10 vm', 'monday august 15 2005 10 am'), 197 198 # agq 199 param('agq', '12 ndzɔ̀ŋɔ̀tɨ̀fʉ̀ghàdzughù 1999', '12 september 1999'), 200 param('agq', 'tsuʔndzɨkɔʔɔ 14 see 10 ak', 'saturday 14 may 10 pm'), 201 202 # ak 203 param('ak', 'esusow aketseaba-kɔtɔnimba', 'may'), 204 param('ak', '8 mumu-ɔpɛnimba ben', '8 december tuesday'), 205 206 # am 207 param('am', 'ፌብሩወሪ 22 8:00 ጥዋት', 'february 22 8:00 am'), 208 param('am', 'ኖቬም 10', 'november 10'), 209 210 # as 211 param('as', '17 জানুৱাৰী 1885', '17 january 1885'), 212 param('as', 'বৃহষ্পতিবাৰ 1 জুলাই 2009', 'thursday 1 july 2009'), 213 214 # asa 215 param('asa', '12 julai 1879 08:00 ichamthi', '12 july 1879 08:00 pm'), 216 param('asa', 'jpi 2 desemba 2007 01:00 icheheavo', 'sunday 2 december 2007 01:00 am'), 217 218 # ast 219 param('ast', "d'ochobre 11, 11:00 de la mañana", 'october 11 11:00 am'), 220 param('ast', "vienres 19 payares 1 tarde", 'friday 19 november 1 pm'), 221 222 # az-Cyrl 223 param('az-Cyrl', "7 феврал 1788 05:30 пм", '7 february 1788 05:30 pm'), 224 param('az-Cyrl', "чәршәнбә ахшамы ијл 14", 'tuesday july 14'), 225 226 # az-Latn 227 param('az-Latn', 'yanvar 13 şənbə', 'january 13 saturday'), 228 param('az-Latn', 'b noy 12', 'sunday november 12'), 229 230 # az 231 param('az', "17 iyn 2000 cümə axşamı", '17 june 2000 thursday'), 232 param('az', "22 sentyabr 2003 bazar ertəsi", '22 september 2003 monday'), 233 234 # bas 235 param('bas', '1906 6 hìlòndɛ̀ ŋgwà njaŋgumba', '1906 6 june monday'), 236 param('bas', 'ŋgwà kɔɔ, 11 màtùmb 5 i ɓugajɔp', 'friday 11 march 5 pm'), 237 238 # be 239 param('be', '13 лютага 1913', '13 february 1913'), 240 param('be', 'жнівень 12, чацвер', 'august 12 thursday'), 241 242 # bem 243 param('bem', 'palichimo 12 machi 2015 11:00 uluchelo', 'monday 12 march 2015 11:00 am'), 244 param('bem', '5 epreo 2000 pa mulungu', '5 april 2000 sunday'), 245 246 # bez 247 param('bez', '1 pa mwedzi gwa hutala 1889 10:00 pamilau', '1 january 1889 10:00 am'), 248 param('bez', '31 pa mwedzi gwa kumi na mbili hit', '31 december thursday'), 249 250 # bm 251 param('bm', '12 ɔkutɔburu 2001 araba', '12 october 2001 wednesday'), 252 param('bm', 'alamisa 15 uti 1998', 'thursday 15 august 1998'), 253 254 # bo 255 param('bo', "ཟླ་བ་བཅུ་གཅིག་པ་ 18", 'november 18'), 256 param('bo', "གཟའ་ཕུར་བུ་ 12 ཟླ་བ་བཅུ་པ་ 1879 10:15 ཕྱི་དྲོ་", 'thursday 12 october 1879 10:15 pm'), 257 258 # br 259 param('br', "merc'her c'hwevrer 12 07:32 gm", "wednesday february 12 07:32 pm"), 260 param('br', "10 gwengolo 2002 sadorn", "10 september 2002 saturday"), 261 262 # brx 263 param('brx', "6 अखथबर 2019 10:00 बेलासे", "6 october 2019 10:00 pm"), 264 param('brx', "बिसथि 8 फेब्रुवारी", "thursday 8 february"), 265 266 # bs-Cyrl 267 param('bs-Cyrl', "2 септембар 2000, четвртак", "2 september 2000 thursday"), 268 param('bs-Cyrl', "1 јули 1987 9:25 поподне", "1 july 1987 9:25 pm"), 269 270 # bs-Latn 271 param('bs-Latn', "23 septembar 1879, petak", "23 september 1879 friday"), 272 param('bs-Latn', "subota 1 avg 2009 02:27 popodne", "saturday 1 august 2009 02:27 pm"), 273 274 # bs 275 param('bs', "10 maj 2020 utorak", "10 may 2020 tuesday"), 276 param('bs', "ponedjeljak, 1989 2 januar", "monday 1989 2 january"), 277 278 # ca 279 param('ca', "14 d'abril 1980 diumenge", "14 april 1980 sunday"), 280 param('ca', "3 de novembre 2004 dj", "3 november 2004 thursday"), 281 282 # ce 283 param('ce', "6 январь 1987 пӏераскан де", "6 january 1987 friday"), 284 param('ce', "оршотан де 3 июль 1890", "monday 3 july 1890"), 285 286 # cgg 287 param('cgg', "20 okwakataana 2027 orwamukaaga", "20 may 2027 saturday"), 288 param('cgg', "okwaikumi na ibiri 12 oks", "december 12 wednesday"), 289 290 # chr 291 param('chr', "ᎤᎾᏙᏓᏉᏅᎯ 16 ᏕᎭᎷᏱ 1562 11:16 ᏒᎯᏱᎢᏗᏢ", "monday 16 june 1562 11:16 pm"), 292 param('chr', "13 ᎠᏂᏍᎬᏘ ᎤᎾᏙᏓᏈᏕᎾ 8:00 ᏌᎾᎴ", "13 may saturday 8:00 am"), 293 294 # cy 295 param('cy', "dydd sadwrn 27 chwefror 1990 9 yb", "saturday 27 february 1990 9 am"), 296 param('cy', "19 gorff 2000 dydd gwener", "19 july 2000 friday"), 297 298 # dav 299 param('dav', "mori ghwa kawi 24 kuramuka kana", "february 24 thursday"), 300 param('dav', "11 ike 4 luma lwa p", "11 september 4 pm"), 301 302 # dje 303 param('dje', "2 žuweŋ 2030 alz 11 zaarikay b", "2 june 2030 friday 11 pm"), 304 param('dje', "sektanbur 12 alarba", "september 12 wednesday"), 305 306 # dsb 307 param('dsb', "njeźela julija 15 2 wótpołdnja", "sunday july 15 2 pm"), 308 param('dsb', "awgusta 10 sob", "august 10 saturday"), 309 310 # dua 311 param('dua', "madiɓɛ́díɓɛ́ 15 ɗónɛsú 7 idiɓa", "july 15 friday 7 am"), 312 param('dua', "éti 12 tiníní", "sunday 12 november"), 313 314 # dyo 315 param('dyo', "mee 1 2000 talata", "may 1 2000 tuesday"), 316 param('dyo', "arjuma de 10", "friday december 10"), 317 318 # dz 319 param('dz', "ཟླ་བཅུ་གཅིག་པ་ 10 གཟའ་ཉི་མ་", "november 10 saturday"), 320 param('dz', "མིར་ 2 སྤྱི་ཟླ་དྲུག་པ 2009 2 ཕྱི་ཆ་", "monday 2 june 2009 2 pm"), 321 322 # ebu 323 param('ebu', "mweri wa gatantatũ 11 maa 08:05 ut", "june 11 friday 08:05 pm"), 324 param('ebu', "2 igi 1998 njumamothii", "2 december 1998 saturday"), 325 326 # ee 327 param('ee', "5 afɔfĩe 2009 05:05 ɣetrɔ kɔsiɖa", "5 april 2009 05:05 pm sunday"), 328 param('ee', "yawoɖa 1890 deasiamime 23", "thursday 1890 august 23"), 329 330 # el 331 param('el', "απρίλιος 13 09:09 μμ", "april 13 09:09 pm"), 332 param('el', "1 ιούνιος 2002 07:17 πμ", "1 june 2002 07:17 am"), 333 334 # eo 335 param('eo', "12 aŭgusto 1887 06:06 atm", "12 august 1887 06:06 am"), 336 param('eo', "vendredo 10 sep 1957", "friday 10 september 1957"), 337 338 # et 339 param('et', "3 juuni 2001 neljapäev 07:09 pm", "3 june 2001 thursday 07:09 pm"), 340 param('et', "7 veebr 2004", "7 february 2004"), 341 342 # eu 343 param('eu', "1 urtarrila 1990 asteazkena", "1 january 1990 wednesday"), 344 param('eu', "ig 30 martxoa 1905", "sunday 30 march 1905"), 345 346 # ewo 347 param('ewo', "ngɔn lála 13 08:07 ngəgógəle", "march 13 08:07 pm"), 348 param('ewo', "séradé ngad 12 1915 2:00 ngəgógəle", "saturday november 12 1915 2:00 pm"), 349 350 # ff 351 param('ff', "1 colte 1976 hoore-biir 04:15 subaka", "1 february 1976 saturday 04:15 am"), 352 param('ff', "naasaande 3 yar 02:00 kikiiɗe", "thursday 3 october 02:00 pm"), 353 354 # fil 355 param('fil', "2 setyembre 1880 biyernes", "2 september 1880 friday"), 356 param('fil', "15 ago 1909 lun", "15 august 1909 monday"), 357 358 # fo 359 param('fo', "mánadagur 30 januar 1976", "monday 30 january 1976"), 360 param('fo', "2 apríl 1890 fríggjadagur", "2 april 1890 friday"), 361 362 # fur 363 param('fur', "12 avost 1990 domenie", "12 august 1990 sunday"), 364 param('fur', "miercus 5 fev 1990 10:10 p", "wednesday 5 february 1990 10:10 pm"), 365 366 # fy 367 param('fy', "febrewaris 2 1987 freed", "february 2 1987 friday"), 368 param('fy', "to 20 maaie 2010", "thursday 20 may 2010"), 369 370 # ga 371 param('ga', "1 bealtaine 2019 dé céadaoin", "1 may 2019 wednesday"), 372 param('ga', "deireadh fómhair 12 aoine 10:09 pm", "october 12 friday 10:09 pm"), 373 374 # gd 375 param('gd', "2 am faoilleach 1890 diardaoin 02:13 m", "2 january 1890 thursday 02:13 am"), 376 param('gd', "did an t-ògmhios 15 1876 08:15 f", "sunday june 15 1876 08:15 pm"), 377 378 # gl 379 param('gl', "1 xullo 2009 sáb", "1 july 2009 saturday"), 380 param('gl', "martes 15 setembro 1980", "tuesday 15 september 1980"), 381 382 # gsw 383 param('gsw', "5 auguscht 1856 10:08 am namittag", "5 august 1856 10:08 pm"), 384 param('gsw', "ziischtig 13 dezämber 03:12 vormittag", "tuesday 13 december 03:12 am"), 385 386 # gu 387 param('gu', "10 સપ્ટેમ્બર 2005 ગુરુવાર", "10 september 2005 thursday"), 388 param('gu', "સોમવાર 1 જુલાઈ 1980", "monday 1 july 1980"), 389 390 # guz 391 param('guz', "apiriri 2 1789 chumatano", "april 2 1789 wednesday"), 392 param('guz', "esabato 11 cul 2000 10:19 ma", "saturday 11 july 2000 10:19 am"), 393 394 # gv 395 param('gv', "3 toshiaght-arree 2023 jeh", "3 february 2023 friday"), 396 param('gv', "1 m-souree 1999 jedoonee", "1 june 1999 sunday"), 397 398 # ha 399 param('ha', "18 yuni 1920 laraba", "18 june 1920 wednesday"), 400 param('ha', "2 afi 1908 lit", "2 april 1908 monday"), 401 402 # haw 403 param('haw', "1 'apelila 1968 p6", "1 april 1968 saturday"), 404 param('haw', "po'alima 29 'ok 1899", "friday 29 october 1899"), 405 406 # hr 407 param('hr', "2 ožujak 1980 pet", "2 march 1980 friday"), 408 param('hr', "nedjelja 3 lis 1879", "sunday 3 october 1879"), 409 410 # hsb 411 param('hsb', "5 měrc 1789 póndźela 11:13 popołdnju", "5 march 1789 monday 11:13 pm"), 412 param('hsb', "štwórtk 2000 awg 14", "thursday 2000 august 14"), 413 414 # hy 415 param('hy', "2 դեկտեմբերի 2006 շբթ 02:00 կա", "2 december 2006 saturday 02:00 am"), 416 param('hy', "չորեքշաբթի մյս 17, 2009", "wednesday may 17 2009"), 417 418 # ig 419 param('ig', "1 ọgọọst 2001 wenezdee", "1 august 2001 wednesday"), 420 param('ig', "mbọsị ụka 23 epr 1980", "sunday 23 april 1980"), 421 422 # ii 423 param('ii', "ꆏꊂꇖ 12 ꌕꆪ 1980", "thursday 12 march 1980"), 424 param('ii', "ꉆꆪ 1 02:05 ꁯꋒ", "august 1 02:05 pm"), 425 426 # is 427 param('is', "þriðjudagur 15 júlí 2001", "tuesday 15 july 2001"), 428 param('is', "fös 10 desember 08:17 fh", "friday 10 december 08:17 am"), 429 430 # jgo 431 param('jgo', "pɛsaŋ pɛ́nɛ́pfúꞌú 15 10:16 ŋka mbɔ́t nji", "september 15 10:16 pm"), 432 param('jgo', "ápta mɔ́ndi 10 nduŋmbi saŋ 2009", "tuesday 10 january 2009"), 433 434 # jmc 435 param('jmc', "2 aprilyi 2015 jumapilyi 03:10 kyiukonyi", "2 april 2015 sunday 03:10 pm"), 436 param('jmc', "alh 11 julyai 1987", "thursday 11 july 1987"), 437 438 # kab 439 param('kab', "3 meɣres 1999 kuẓass 11:16 n tmeddit", "3 march 1999 wednesday 11:16 pm"), 440 param('kab', "1 yennayer 2004 sḍis", "1 january 2004 friday"), 441 442 # kam 443 param('kam', "mwai wa katatũ 12 wa katano 09:18 ĩyawĩoo", "march 12 friday 09:18 pm"), 444 param('kam', "1 mwai wa ĩkumi na ilĩ 1789 wth", "1 december 1789 saturday"), 445 446 # kde 447 param('kde', "mwedi wa nnyano na umo 12 1907 liduva litandi", "june 12 1907 saturday"), 448 param('kde', "2 mei 11:10 chilo ll6", "2 may 11:10 pm thursday"), 449 450 # kea 451 param('kea', "sigunda-fera 12 julhu 1902", "monday 12 july 1902"), 452 param('kea', "2 diz 2005 kua", "2 december 2005 wednesday"), 453 454 # khq 455 param('khq', "1 žanwiye 2019 ati 01:09 adduha", "1 january 2019 monday 01:09 am"), 456 param('khq', "alhamiisa 12 noowanbur 1908", "thursday 12 november 1908"), 457 458 # ki 459 param('ki', "1 mwere wa gatano 1980 09:12 hwaĩ-inĩ", "1 may 1980 09:12 pm"), 460 param('ki', "njumatana 2 wmw 2000 01:12 kiroko", "wednesday 2 november 2000 01:12 am"), 461 462 # kk 463 param('kk', "3 маусым 1956 дс", "3 june 1956 monday"), 464 param('kk', "жексенбі 12 қыркүйек 1890", "sunday 12 september 1890"), 465 466 # kl 467 param('kl', "2 martsi 2001 ataasinngorneq", "2 march 2001 monday"), 468 param('kl', "pin 1 oktoberi 1901", "wednesday 1 october 1901"), 469 470 # kln 471 param('kln', "3 ng'atyaato koang'wan 10:09 kooskoliny", "3 february thursday 10:09 pm"), 472 param('kln', "kipsuunde nebo aeng' 14 2009 kos", "december 14 2009 wednesday"), 473 474 # kok 475 param('kok', "1 नोव्हेंबर 2000 आदित्यवार 01:19 मनं", "1 november 2000 sunday 01:19 pm"), 476 param('kok', "मंगळार 2 फेब्रुवारी 2003", "tuesday 2 february 2003"), 477 478 # ksb 479 param('ksb', "jumaamosi 1 ago 09:19 makeo", "saturday 1 august 09:19 am"), 480 param('ksb', "3 febluali 1980 jmn", "3 february 1980 tuesday"), 481 482 # ksf 483 param('ksf', "ŋwíí a ntɔ́ntɔ 3 1990 09:15 cɛɛ́nko", "january 3 1990 09:15 pm"), 484 param('ksf', "2 ŋ3 1789 jǝǝdí", "2 march 1789 thursday"), 485 486 # ksh 487 param('ksh', "mohndaach 12 fäbrowa 2001 12:18 nm", "monday 12 february 2001 12:18 pm"), 488 param('ksh', "5 oujoß 12:17 uhr vörmiddaachs", "5 august 12:17 am"), 489 490 # kw 491 param('kw', "14 mis metheven 1980 dy yow", "14 june 1980 thursday"), 492 param('kw', "mis kevardhu 2019 1 sad", "december 2019 1 saturday"), 493 494 # ky 495 param('ky', "22 февраль 2025 01:12 түштөн кийинки", "22 february 2025 01:12 pm"), 496 param('ky', "шаршемби 11 авг 1908", "wednesday 11 august 1908"), 497 498 # lag 499 param('lag', "17 kʉvɨɨrɨ 2018 ijumáa", "17 august 2018 friday"), 500 param('lag', "táatu 16 kwiinyi 1978", "monday 16 october 1978"), 501 502 # lb 503 param('lb', "2 mäerz 2034 don 02:19 moies", "2 march 2034 thursday 02:19 am"), 504 param('lb', "samschdeg 15 abrëll", "saturday 15 april"), 505 506 # lg 507 param('lg', "sebuttemba 17 1980 lw6", "september 17 1980 saturday"), 508 param('lg', "2 okitobba 2010 lwakusatu", "2 october 2010 wednesday"), 509 510 # lkt 511 param('lkt', "18 čhaŋwápetȟo wí 2013 owáŋgyužažapi", "18 may 2013 saturday"), 512 param('lkt', "1 tȟahékapšuŋ wí 1978 aŋpétuzaptaŋ", "1 december 1978 friday"), 513 514 # ln 515 param('ln', "23 yan 2001 mokɔlɔ mwa mísáto", "23 january 2001 wednesday"), 516 param('ln', "mtn 17 sánzá ya zómi na míbalé 09:17 ntɔ́ngɔ́", "friday 17 december 09:17 am"), 517 518 # lo 519 param('lo', "18 ພຶດສະພາ 1908 ວັນອາທິດ", "18 may 1908 sunday"), 520 param('lo', "8 ກໍລະກົດ 2003 03:03 ຫຼັງທ່ຽງ", "8 july 2003 03:03 pm"), 521 522 # lt 523 param('lt', "15 gegužės 1970 trečiadienis", "15 may 1970 wednesday"), 524 param('lt', "an 2 rugsėjo 09:18 priešpiet", "tuesday 2 september 09:18 am"), 525 526 # lu 527 param('lu', "2 ciongo 2016 njw 02:16 dilolo", "2 january 2016 thursday 02:16 pm"), 528 param('lu', "16 lùshìkà 2009", "16 august 2009"), 529 530 # luo 531 param('luo', "15 dwe mar adek 1908 tan", "15 march 1908 thursday"), 532 param('luo', "jumapil 3 dao 2008 01:12 ot", "sunday 3 july 2008 01:12 pm"), 533 534 # luy 535 param('luy', "23 juni 1970 murwa wa kanne", "23 june 1970 thursday"), 536 param('luy', "jumatano, 5 aprili 1998", "wednesday 5 april 1998"), 537 538 # lv 539 param('lv', "14 jūnijs 2010 10:10 priekšpusdienā", "14 june 2010 10:10 am"), 540 param('lv', "24 okt 2000 piektdiena 11:11 pēcpusd", "24 october 2000 friday 11:11 pm"), 541 542 # mas 543 param('mas', "2 olodoyíóríê inkókúâ 1954 08:16 ɛnkakɛnyá", "2 april 1954 08:16 am"), 544 param('mas', "15 ɔɛn 2032 alaámisi 02:13 ɛndámâ", "15 march 2032 thursday 02:13 pm"), 545 546 # mer 547 param('mer', "1 mĩĩ 1924 wetano 10:05 ũg", "1 may 1924 friday 10:05 pm"), 548 param('mer', "6 njuraĩ 1895 muramuko", "6 july 1895 monday"), 549 550 # mfe 551 param('mfe', "27 zilye 1988 merkredi", "27 july 1988 wednesday"), 552 param('mfe', "lindi 3 oktob 1897", "monday 3 october 1897"), 553 554 # mg 555 param('mg', "1 martsa 1789 alakamisy", "1 march 1789 thursday"), 556 param('mg', "5 aogositra 1911 zoma", "5 august 1911 friday"), 557 558 # mgh 559 param('mgh', "sabato mweri wo unethanu 15 07:18 wichishu", "sunday may 15 07:18 am"), 560 param('mgh', "2 tis 1789 jumamosi 08:17 mchochil'l", "2 september 1789 saturday 08:17 pm"), 561 562 # mgo 563 param('mgo', "5 iməg mbegtug aneg 5", "5 january thursday"), 564 param('mgo', "aneg 2 iməg zò 17 1908", "monday november 17 1908"), 565 566 # mk 567 param('mk', "4 септември 2009 09:18 претпл", "4 september 2009 09:18 am"), 568 param('mk', "вторник 10 август 1777 01:12 попл", "tuesday 10 august 1777 01:12 pm"), 569 570 # mn 571 param('mn', "дөрөвдүгээр сар 15 баасан 10:10 үө", "april 15 friday 10:10 am"), 572 param('mn', "12 9-р сар 2019 пүрэв", "12 september 2019 thursday"), 573 574 # mr 575 param('mr', "16 फेब्रुवारी 1908 गुरु 02:03 मउ", "16 february 1908 thursday 02:03 pm"), 576 param('mr', "शनिवार 15 सप्टें 1888", "saturday 15 september 1888"), 577 578 # ms 579 param('ms', "4 mei 1768 jumaat 09:09 ptg", "4 may 1768 friday 09:09 pm"), 580 param('ms', "isnin 14 disember 2001 11:09 pg", "monday 14 december 2001 11:09 am"), 581 582 # mt 583 param('mt', "3 frar 1998 il-ħadd", "3 february 1998 sunday"), 584 param('mt', "16 awwissu 2019 erb", "16 august 2019 wednesday"), 585 586 # mua 587 param('mua', "1 cokcwaklaŋne 2014 comzyiiɗii", "1 february 2014 tuesday"), 588 param('mua', "fĩi yuru 17 1908 cze 10:08 lilli", "december 17 1908 saturday 10:08 pm"), 589 590 # naq 591 param('naq', "20 ǂkhoesaob 1934 wunstaxtsees", "20 july 1934 wednesday"), 592 param('naq', "do 12 gamaǀaeb 1999 05:12 ǃuias", "thursday 12 june 1999 05:12 pm"), 593 594 # nb 595 param('nb', "2 mars 1998 torsdag", "2 march 1998 thursday"), 596 param('nb', "ons 15 des 2001", "wednesday 15 december 2001"), 597 598 # nd 599 param('nd', "19 nkwenkwezi 1967 mgqibelo", "19 may 1967 saturday"), 600 param('nd', "sit 1 zibandlela 2011", "wednesday 1 january 2011"), 601 602 # ne 603 param('ne', "1 फेब्रुअरी 2003 बिहिबार 09:18 अपराह्न्", "1 february 2003 thursday 09:18 pm"), 604 param('ne', "आइत् 4 अक्टोबर 1957", "sunday 4 october 1957"), 605 606 # nl 607 param('nl', "4 augustus 1678 zaterdag", "4 august 1678 saturday"), 608 param('nl', "vr 27 juni 1997", "friday 27 june 1997"), 609 610 # nmg 611 param('nmg', "5 ngwɛn ńna 1897 sɔ́ndɔ mafú málal", "5 april 1897 wednesday"), 612 param('nmg', "mɔ́ndɔ 1 ng11 1678 04:15 kugú", "monday 1 november 1678 04:15 pm"), 613 614 # nn 615 param('nn', "tysdag 2 september 1897 01:12 fm", "tuesday 2 september 1897 01:12 am"), 616 param('nn', "2 mai 2000 søndag 09:18 ettermiddag", "2 may 2000 sunday 09:18 pm"), 617 618 # nnh 619 param('nnh', "1 saŋ tsɛ̀ɛ cÿó màga lyɛ̌' 08:18 ncwònzém", "1 may saturday 08:18 pm"), 620 param('nnh', "3 saŋ lepyè shúm 1789 mvfò lyɛ̌'", "3 march 1789 monday"), 621 622 # nus 623 param('nus', "7 kornyoot 2006 diɔ̱k lätni 01:12 tŋ", "7 june 2006 wednesday 01:12 pm"), 624 param('nus', "bäkɛl, 12 tio̱p in di̱i̱t 2008", "saturday 12 december 2008"), 625 626 # nyn 627 param('nyn', "5 okwakashatu 1980 okt", "5 march 1980 friday"), 628 param('nyn', "2 kms 2087 sande", "2 july 2087 sunday"), 629 630 # om 631 param('om', "15 bitooteessa 1997 02:23 wb", "15 march 1997 02:23 pm"), 632 param('om', "jimaata 13 gur 01:12 wd", "friday 13 february 01:12 am"), 633 634 # os 635 param('os', "хуыцаубон 1998 апрелы 12", "sunday 1998 april 12"), 636 param('os', "1 ноя 1990 ӕртыццӕг", "1 november 1990 wednesday"), 637 638 # pa-Guru 639 param('pa-Guru', "ਸ਼ਨਿੱਚਰਵਾਰ 4 ਫ਼ਰਵਰੀ 1989 01:12 ਬਾਦ", "saturday 4 february 1989 01:12 pm"), 640 param('pa-Guru', "2 ਅਕਤੂਬਰ 2015 ਸੋਮਵਾਰ", "2 october 2015 monday"), 641 642 # pa 643 param('pa', "2 ਅਗਸਤ 1682 ਸ਼ਨਿੱਚਰ", "2 august 1682 saturday"), 644 param('pa', "12 ਅਕਤੂ 11:08 ਪੂਦੁ", "12 october 11:08 am"), 645 646 # qu 647 param('qu', "5 pauqar waray 1878 miércoles", "5 march 1878 wednesday"), 648 param('qu', "6 int 2009 domingo", "6 june 2009 sunday"), 649 650 # rm 651 param('rm', "1 schaner 1890 venderdi", "1 january 1890 friday"), 652 param('rm', "me 6 avust 2009", "wednesday 6 august 2009"), 653 654 # rn 655 param('rn', "11 ntwarante 2008 12:34 zmw", "11 march 2008 12:34 pm"), 656 param('rn', "7 nze 1999 ku wa kabiri", "7 september 1999 tuesday"), 657 658 # rof 659 param('rof', "13 mweri wa tisa ijtn 12:56 kingoto", "13 september wednesday 12:56 pm"), 660 param('rof', "ijumanne 2 mweri wa saba 1890", "tuesday 2 july 1890"), 661 662 # rw 663 param('rw', "16 kamena 2001 kuwa gatanu", "16 june 2001 friday"), 664 param('rw', "3 ukuboza 2013 gnd", "3 december 2013 saturday"), 665 666 # rwk 667 param('rwk', "3 aprilyi 2009 ijumaa", "3 april 2009 friday"), 668 param('rwk', "jumamosi 2 januari 02:13 utuko", "saturday 2 january 02:13 am"), 669 670 # sah 671 param('sah', "16 тохсунньу 2003 сэрэдэ 09:59 эк", "16 january 2003 wednesday 09:59 pm"), 672 param('sah', "баскыһыанньа 14 балаҕан ыйа 1998", "sunday 14 september 1998"), 673 674 # saq 675 param('saq', "1 lapa le okuni 1980 kun 10:45 tesiran", "1 march 1980 monday 10:45 am"), 676 param('saq', "mderot ee inet 12 lapa le ong'wan 1824", "wednesday 12 april 1824"), 677 678 # sbp 679 param('sbp', "1 mupalangulwa mulungu 08:15 lwamilawu", "1 january sunday 08:15 am"), 680 param('sbp', "jtn 17 mokhu 2001", "wednesday 17 october 2001"), 681 682 # se 683 param('se', "láv 22 cuoŋománnu 10:08 iđitbeaivi", "saturday 22 april 10:08 am"), 684 param('se', "duorasdat 11 borgemánnu 1978 12:09 eb", "thursday 11 august 1978 12:09 pm"), 685 686 # seh 687 param('seh', "12 fevreiro 2005 sha", "12 february 2005 friday"), 688 param('seh', "chiposi 2 decembro 1987", "monday 2 december 1987"), 689 690 # ses 691 param('ses', "18 žuyye 2009 atalaata 03:12 aluula", "18 july 2009 tuesday 03:12 pm"), 692 param('ses', "asibti 2 awi 1987", "saturday 2 april 1987"), 693 694 # sg 695 param('sg', "5 ngubùe 1890 bïkua-ûse 12:08 lk", "5 april 1890 monday 12:08 pm"), 696 param('sg', "bk3 23 föndo 2001", "tuesday 23 june 2001"), 697 698 # shi-Latn 699 param('shi-Latn', "6 bṛayṛ 2014 akṛas 07:06 tifawt", "6 february 2014 wednesday 07:06 am"), 700 param('shi-Latn', "asamas 15 ɣuct 2045", "sunday 15 august 2045"), 701 702 # sk 703 param('sk', "15 marec 1987 utorok", "15 march 1987 tuesday"), 704 param('sk', "streda 17 mája 2003", "wednesday 17 may 2003"), 705 706 # sl 707 param('sl', "12 junij 2003 petek 10:09 pop", "12 june 2003 friday 10:09 pm"), 708 param('sl', "ponedeljek 15 okt 1997 09:07 dopoldne", "monday 15 october 1997 09:07 am"), 709 710 # smn 711 param('smn', "1 njuhčâmáánu 2008 majebaargâ 08:08 ip", "1 march 2008 tuesday 08:08 am"), 712 param('smn', "láv 23 roovvâd 1897", "saturday 23 october 1897"), 713 714 # sn 715 param('sn', "11 chikumi 1998 chipiri", "11 june 1998 tuesday"), 716 param('sn', "china 2 mbudzi 1890", "thursday 2 november 1890"), 717 718 # so 719 param('so', "sab 5 bisha saddexaad 1765 11:08 gn", "saturday 5 march 1765 11:08 pm"), 720 param('so', "16 lit 2008 axd", "16 december 2008 sunday"), 721 722 # sq 723 param('sq', "2 qershor 1997 e mërkurë 10:08 pasdite", "2 june 1997 wednesday 10:08 pm"), 724 param('sq', "pre 15 gusht 1885 04:54 e paradites", "friday 15 august 1885 04:54 am"), 725 726 # sr-Cyrl 727 param('sr-Cyrl', "16 април 2016 суб 03:46 по подне", "16 april 2016 saturday 03:46 pm"), 728 param('sr-Cyrl', "уторак 3 новембар 1999", "tuesday 3 november 1999"), 729 730 # sr-Latn 731 param('sr-Latn', "4 septembar 2000 četvrtak", "4 september 2000 thursday"), 732 param('sr-Latn', "uto 18 maj 2004 11:15 pre podne", "tuesday 18 may 2004 11:15 am"), 733 734 # sr 735 param('sr', "3 децембар 2005 уто 10:15 по подне", "3 december 2005 tuesday 10:15 pm"), 736 param('sr', "петак 12 август 2001", "friday 12 august 2001"), 737 738 # sv 739 param('sv', "4 augusti 2007 lördag 02:44 fm", "4 august 2007 saturday 02:44 am"), 740 param('sv', "onsdag 16 mars 08:15 eftermiddag", "wednesday 16 march 08:15 pm"), 741 742 # sw 743 param('sw', "5 mei 1994 jumapili 10:17 asubuhi", "5 may 1994 sunday 10:17 am"), 744 param('sw', "jumanne 2 desemba 2003", "tuesday 2 december 2003"), 745 746 # ta 747 param('ta', "6 ஏப்ரல் 1997 செவ்வாய் 02:09 முற்பகல்", "6 april 1997 tuesday 02:09 am"), 748 param('ta', "ஞாயி 1 ஜூன் 1998", "sunday 1 june 1998"), 749 750 # te 751 param('te', "సోమవారం 3 నవంబర 1887", "monday 3 november 1887"), 752 param('te', "5 మార్చి 2001 శుక్రవారం", "5 march 2001 friday"), 753 754 # teo 755 param('teo', "2 omodok'king'ol 1996 nakaare", "2 june 1996 tuesday"), 756 param('teo', "nakasabiti 4 jol 2001 01:12 ebongi", "saturday 4 july 2001 01:12 pm"), 757 758 # to 759 param('to', "5 fēpueli 2007 mōn 02:17 efiafi", "5 february 2007 monday 02:17 pm"), 760 param('to', "falaite 14 'okatopa 2015 09:48 hh", "friday 14 october 2015 09:48 am"), 761 762 # twq 763 param('twq', "17 feewiriye 2023 11:12 zaarikay b", "17 february 2023 11:12 pm"), 764 param('twq', "alzuma 11 sektanbur 2019", "friday 11 september 2019"), 765 766 # tzm 767 param('tzm', "2 yulyuz 2002 akwas 01:16 ḍeffir aza", "2 july 2002 thursday 01:16 pm"), 768 param('tzm', "asa 13 nwanbir 2005", "sunday 13 november 2005"), 769 770 # uz-Cyrl 771 param('uz-Cyrl', "пайшанба 24 ноябр 1957 01:18 то", "thursday 24 november 1957 01:18 am"), 772 param('uz-Cyrl', "4 авг 1887 чоршанба", "4 august 1887 wednesday"), 773 774 # uz-Latn 775 param('uz-Latn', "3 iyul 1997 payshanba 08:17 tk", "3 july 1997 thursday 08:17 pm"), 776 param('uz-Latn', "shan 15 sentabr 2008", "saturday 15 september 2008"), 777 778 # uz 779 param('uz', "1 fevral 1776 dushanba 09:17 to", "1 february 1776 monday 09:17 am"), 780 param('uz', "juma 18 aprel 2027", "friday 18 april 2027"), 781 782 # vun 783 param('vun', "2 aprilyi 1956 jumatatuu", "2 april 1956 monday"), 784 param('vun', "jumamosi 12 oktoba 02:16 kyiukonyi", "saturday 12 october 02:16 pm"), 785 786 # wae 787 param('wae', "zištag 16 abrille 2002", "tuesday 16 april 2002"), 788 param('wae', "27 öigšte 1669 fritag", "27 august 1669 friday"), 789 790 # xog 791 param('xog', "21 marisi 2001 owokubili", "21 march 2001 tuesday"), 792 param('xog', "kuta 30 okitobba 1955 02:17 eigulo", "friday 30 october 1955 02:17 pm"), 793 794 # yav 795 param('yav', "12 imɛŋ i puɔs 1998 metúkpíápɛ", "12 september 1998 wednesday"), 796 param('yav', "5 o10 2001 séselé 12:07 kiɛmɛ́ɛm", "5 october 2001 saturday 12:07 am"), 797 798 # yo 799 param('yo', "5 èrèlè 2005 ọjọ́rú 10:07 àárọ̀", "5 february 2005 wednesday 10:07 am"), 800 param('yo', "ọjọ́ àbámẹ́ta 2 oṣù ẹ̀bibi 1896", "saturday 2 may 1896"), 801 802 # zu 803 param('zu', "3 mashi 2007 ulwesibili 10:08", "3 march 2007 tuesday 10:08"), 804 param('zu', "son 23 umasingana 1996", "sunday 23 january 1996"), 805 ]) 806 def test_translation(self, shortname, datetime_string, expected_translation): 807 self.given_settings() 808 self.given_bundled_language(shortname) 809 self.given_string(datetime_string) 810 self.when_datetime_string_translated() 811 self.then_string_translated_to(expected_translation) 812 813 @parameterized.expand([ 814 # English 815 param('en', "yesterday", "1 day ago"), 816 param('en', "today", "0 day ago"), 817 param('en', "day before yesterday", "2 day ago"), 818 param('en', "last month", "1 month ago"), 819 param('en', "less than a minute ago", "45 second ago"), 820 # German 821 param('de', "vorgestern", "2 day ago"), 822 param('de', "heute", "0 day ago"), 823 param('de', "vor 3 Stunden", "3 hour ago"), 824 param('de', "vor 2 Monaten", "2 month ago"), 825 param('de', "vor 2 Monaten, 2 Wochen", "2 month ago 2 week"), 826 # French 827 param('fr', "avant-hier", "2 day ago"), 828 param('fr', "hier", "1 day ago"), 829 param('fr', "aujourd'hui", "0 day ago"), 830 # Spanish 831 param('es', "anteayer", "2 day ago"), 832 param('es', "ayer", "1 day ago"), 833 param('es', "ayer a las", "1 day ago "), 834 param('es', "hoy", "0 day ago"), 835 param('es', "hace un horas", "1 hour ago"), 836 param('es', "2 semanas", "2 week"), 837 param('es', "2 año", "2 year"), 838 # Italian 839 param('it', "altro ieri", "2 day ago"), 840 param('it', "ieri", "1 day ago"), 841 param('it', "oggi", "0 day ago"), 842 param('it', "2 settimana fa", "2 week ago"), 843 param('it', "2 anno fa", "2 year ago"), 844 # Portuguese 845 param('pt', "anteontem", "2 day ago"), 846 param('pt', "ontem", "1 day ago"), 847 param('pt', "hoje", "0 day ago"), 848 param('pt', "56 minutos", "56 minute"), 849 param('pt', "12 dias", "12 day"), 850 param('pt', "há 14 min.", "14 minute ago."), 851 param('pt', "1 segundo atrás", "1 second ago"), 852 # Russian 853 param('ru', "9 месяцев", "9 month"), 854 param('ru', "8 недели", "8 week"), 855 param('ru', "7 года", "7 year"), 856 param('ru', "позавчера", "2 day ago"), 857 param('ru', "сейчас", "0 second ago"), 858 param('ru', "спустя 2 дня", "in 2 day"), 859 param('ru', "вчера", "1 day ago"), 860 param('ru', "сегодня", "0 day ago"), 861 param('ru', "завтра", "in 1 day"), 862 param('ru', "послезавтра", "in 2 day"), 863 param('ru', "несколько секунд", "44 second"), 864 # Turkish 865 param('tr', "dün", "1 day ago"), 866 param('tr', "22 dakika", "22 minute"), 867 param('tr', "12 hafta", "12 week"), 868 param('tr', "13 yıl", "13 year"), 869 # Czech 870 param('cs', "40 sekunda", "40 second"), 871 param('cs', "4 týden", "4 week"), 872 param('cs', "14 roků", "14 year"), 873 # Chinese 874 param('zh', "昨天", "1 day ago"), 875 param('zh', "前天", "2 day ago"), 876 param('zh', "50 秒", "50 second"), 877 param('zh', "7 周", "7 week"), 878 param('zh', "12 年", "12 year"), 879 param('zh', "半小时前", "30 minute ago"), 880 # Danish 881 param('da', "i går", "1 day ago"), 882 param('da', "i dag", "0 day ago"), 883 param('da', "sidste måned", "1 month ago"), 884 param('da', "mindre end et minut siden", "45 seconds"), 885 # Dutch 886 param('nl', "17 uur geleden", "17 hour ago"), 887 param('nl', "27 jaar geleden", "27 year ago"), 888 param('nl', "45 minuten", "45 minute"), 889 param('nl', "nu", "0 second ago"), 890 param('nl', "eergisteren", "2 day ago"), 891 param('nl', "volgende maand", "in 1 month"), 892 # Romanian 893 param('ro', "23 săptămâni în urmă", "23 week ago"), 894 param('ro', "23 săptămâni", "23 week"), 895 param('ro', "13 oră", "13 hour"), 896 # Arabic 897 param('ar', "يومين", "2 day"), 898 param('ar', "أمس", "1 day ago"), 899 param('ar', "4 عام", "4 year"), 900 param('ar', "منذ 2 ساعات", "ago 2 hour"), 901 param('ar', "منذ ساعتين", "ago 2 hour"), 902 param('ar', "اليوم السابق", "1 day ago"), 903 param('ar', "اليوم", "0 day ago"), 904 # Polish 905 param('pl', "2 godz.", "2 hour."), 906 param('pl', "Wczoraj o 07:40", "1 day ago 07:40"), 907 # Vietnamese 908 param('vi', "2 tuần 3 ngày", "2 week 3 day"), 909 param('vi', "21 giờ trước", "21 hour ago"), 910 param('vi', "Hôm qua 08:16", "1 day ago 08:16"), 911 param('vi', "Hôm nay 15:39", "0 day ago 15:39"), 912 # French 913 param('fr', "maintenant", "0 second ago"), 914 param('fr', "demain", "in 1 day"), 915 param('fr', u"Il y a moins d'une minute", "1 minute ago"), 916 param('fr', u"Il y a moins de 30s", "30 second ago"), 917 # Tagalog 918 param('tl', "kahapon", "1 day ago"), 919 param('tl', "ngayon", "0 second ago"), 920 # Ukrainian 921 param('uk', "позавчора", "2 day ago"), 922 # Belarusian 923 param('be', "9 месяцаў", "9 month"), 924 param('be', "8 тыдняў", "8 week"), 925 param('be', "1 тыдзень", "1 week"), 926 param('be', "2 года", "2 year"), 927 param('be', "3 гады", "3 year"), 928 param('be', "11 секунд", "11 second"), 929 param('be', "учора", "1 day ago"), 930 param('be', "пазаўчора", "2 day ago"), 931 param('be', "сёння", "0 day ago"), 932 param('be', "некалькі хвілін", "2 minute"), 933 # Indonesian 934 param('id', "baru saja", "0 second ago"), 935 param('id', "hari ini", "0 day ago"), 936 param('id', "kemarin", "1 day ago"), 937 param('id', "kemarin lusa", "2 day ago"), 938 param('id', "sehari yang lalu", "1 day ago"), 939 param('id', "seminggu yang lalu", "1 week ago"), 940 param('id', "sebulan yang lalu", "1 month ago"), 941 param('id', "setahun yang lalu", "1 year ago"), 942 # Finnish 943 param('fi', "1 vuosi sitten", "1 year ago"), 944 param('fi', "2 vuotta sitten", "2 year ago"), 945 param('fi', "3 v sitten", "3 year ago"), 946 param('fi', "4 v. sitten", "4 year. ago"), 947 param('fi', "5 vv. sitten", "5 year. ago"), 948 param('fi', "1 kuukausi sitten", "1 month ago"), 949 param('fi', "2 kuukautta sitten", "2 month ago"), 950 param('fi', "3 kk sitten", "3 month ago"), 951 param('fi', "1 viikko sitten", "1 week ago"), 952 param('fi', "2 viikkoa sitten", "2 week ago"), 953 param('fi', "3 vk sitten", "3 week ago"), 954 param('fi', "4 vko sitten", "4 week ago"), 955 param('fi', "1 päivä sitten", "1 day ago"), 956 param('fi', "2 päivää sitten", "2 day ago"), 957 param('fi', "8 pvää sitten", "8 day ago"), 958 param('fi', "3 pv sitten", "3 day ago"), 959 param('fi', "4 p. sitten", "4 day. ago"), 960 param('fi', "5 pvä sitten", "5 day ago"), 961 param('fi', "1 tunti sitten", "1 hour ago"), 962 param('fi', "2 tuntia sitten", "2 hour ago"), 963 param('fi', "3 t sitten", "3 hour ago"), 964 param('fi', "1 minuutti sitten", "1 minute ago"), 965 param('fi', "2 minuuttia sitten", "2 minute ago"), 966 param('fi', "3 min sitten", "3 minute ago"), 967 param('fi', "1 sekunti sitten", "1 second ago"), 968 param('fi', "2 sekuntia sitten", "2 second ago"), 969 param('fi', "1 sekuntti sitten", "1 second ago"), 970 param('fi', "2 sekunttia sitten", "2 second ago"), 971 param('fi', "3 s sitten", "3 second ago"), 972 param('fi', "eilen", "1 day ago"), 973 param('fi', "tänään", "0 day ago"), 974 param('fi', "huomenna", "in 1 day"), 975 param('fi', "nyt", "0 second ago"), 976 param('fi', "ensi viikolla", "in 1 week"), 977 param('fi', "viime viikolla", "1 week ago"), 978 param('fi', "toissa vuonna", "2 year ago"), 979 param('fi', "9 kuukautta sitten", "9 month ago"), 980 param('fi', "3 viikon päästä", "in 3 week"), 981 param('fi', "10 tunnin kuluttua", "in 10 hour"), 982 # Japanese 983 param('ja', "今年", "0 year ago"), 984 param('ja', "去年", "1 year ago"), 985 param('ja', "17年前", "17 year ago"), 986 param('ja', "今月", "0 month ago"), 987 param('ja', "先月", "1 month ago"), 988 param('ja', "1ヶ月前", "1 month ago"), 989 param('ja', "2ヶ月前", "2 month ago"), 990 param('ja', "今週", "0 week ago"), 991 param('ja', "先週", "1 week ago"), 992 param('ja', "先々週", "2 week ago"), 993 param('ja', "2週間前", "2 week ago"), 994 param('ja', "3週間", "3 week"), 995 param('ja', "今日", "0 day ago"), 996 param('ja', "昨日", "1 day ago"), 997 param('ja', "一昨日", "2 day ago"), 998 param('ja', "3日前", "3 day ago"), 999 param('ja', "1時間", "1 hour"), 1000 param('ja', "23時間前", "23 hour ago"), 1001 param('ja', "30分", "30 minute"), 1002 param('ja', "3分間", "3 minute"), 1003 param('ja', "60秒", "60 second"), 1004 param('ja', "3秒前", "3 second ago"), 1005 param('ja', "現在", "0 second ago"), 1006 # Hebrew 1007 param('he', "אתמול", "1 day ago"), 1008 param('he', "אתמול בשעה 3", "1 day ago 3"), 1009 param('he', "היום", "0 day ago"), 1010 param('he', "לפני יומיים", "2 day ago"), 1011 param('he', "לפני שבועיים", "2 week ago"), 1012 # Bulgarian 1013 param("bg", "вдругиден", "in 2 day"), 1014 param("bg", "утре", "in 1 day"), 1015 param("bg", "след 5 дни", "in 5 day"), 1016 param("bg", "вчера", "1 day ago"), 1017 param("bg", "преди 9 дни", "9 day ago"), 1018 param("bg", "преди 10 минути", "10 minute ago"), 1019 param("bg", "преди час", "1 hour ago"), 1020 param("bg", "преди 4 години", "4 year ago"), 1021 param("bg", "преди десетилетие", "10 year ago"), 1022 # Bangla 1023 param('bn', "গতকাল", "1 day ago"), 1024 param('bn', "আজ", "0 day ago"), 1025 param('bn', "গত মাস", "1 month ago"), 1026 param('bn', "আগামী সপ্তাহ", "in 1 week"), 1027 # Hindi 1028 param('hi', "१ सप्ताह", "1 week"), 1029 param('hi', "२४ मिनट पहले", "24 minute ago"), 1030 param('hi', "5 वर्ष", "5 year"), 1031 param('hi', "५३ सप्ताह बाद", "53 week in"), 1032 param('hi', "12 सेकंड पूर्व", "12 second ago"), 1033 # Swedish 1034 param('sv', "igår", "1 day ago"), 1035 param('sv', "idag", "0 day ago"), 1036 param('sv', "förrgår", "2 day ago"), 1037 param('sv', "förra månaden", "1 month ago"), 1038 param('sv', "nästa månad", "in 1 month"), 1039 # Georgian 1040 param('ka', 'გუშინ', '1 day ago'), 1041 param('ka', 'დღეს', '0 day ago'), 1042 param('ka', 'ერთ თვე', '1 month'), 1043 param('ka', 'დღეიდან ერთ კვირა', 'in 1 week'), 1044 1045 # af 1046 param('af', "3 week gelede", "3 week ago"), 1047 param('af', "volgende jaar 10:08 nm", "in 1 year 10:08 pm"), 1048 param('af', "oor 45 sekondes", "in 45 second"), 1049 # am 1050 param('am', "የሚቀጥለው ሳምንት", "in 1 week"), 1051 param('am', "በ10 ሳምንት ውስጥ", "in 10 week"), 1052 # as 1053 param('as', "কাইলৈ", "in 1 day"), 1054 param('as', "আজি", "0 day ago"), 1055 # asa 1056 param('asa', "ighuo", "1 day ago"), 1057 param('asa', "yavo 09:27 ichamthi", "in 1 day 09:27 pm"), 1058 # ast 1059 param('ast', "el mes viniente 02:17 tarde", "in 1 month 02:17 pm"), 1060 param('ast', "hai 22 selmana", "22 week ago"), 1061 param('ast', "en 5 minutos", "in 5 minute"), 1062 # az-Latn 1063 param('az-Latn', "keçən həftə", "1 week ago"), 1064 param('az-Latn', "10 ay ərzində", "in 10 month"), 1065 param('az-Latn', "22 saniyə öncə", "22 second ago"), 1066 # az 1067 param('az', "12 saat ərzində", "in 12 hour"), 1068 param('az', "15 həftə öncə", "15 week ago"), 1069 # bas 1070 param('bas', "lɛ̀n 12:08 i ɓugajɔp", "0 day ago 12:08 pm"), 1071 param('bas', "yààni", "1 day ago"), 1072 # bem 1073 param('bem', "lelo", "0 day ago"), 1074 param('bem', "17 umweshi", "17 month"), 1075 # bez 1076 param('bez', "hilawu 08:44 pamilau", "in 1 day 08:44 am"), 1077 param('bez', "neng'u ni", "0 day ago"), 1078 param('bez', "12 mlungu gumamfu", "12 week"), 1079 # bm 1080 param('bm', "sini 01:18 am", "in 1 day 01:18 am"), 1081 param('bm', "kunu", "1 day ago"), 1082 param('bm', "22 dɔgɔkun", "22 week"), 1083 # bo 1084 param('bo', "ཁས་ས་", "1 day ago"), 1085 param('bo', "སང་ཉིན་", "in 1 day"), 1086 # br 1087 param('br', "ar sizhun diaraok", "1 week ago"), 1088 param('br', "ar bloaz a zeu 02:19 gm", "in 1 year 02:19 pm"), 1089 param('br', "10 deiz", "10 day"), 1090 # brx 1091 param('brx', "गाबोन", "in 1 day"), 1092 param('brx', "मैया 11:58 फुं", "1 day ago 11:58 am"), 1093 param('brx', "17 मिनिथ", "17 minute"), 1094 # bs-Cyrl 1095 param('bs-Cyrl', "следећег месеца", "in 1 month"), 1096 param('bs-Cyrl', "прошле године 10:05 пре подне", "1 year ago 10:05 am"), 1097 param('bs-Cyrl', "пре 28 недеља", "28 week ago"), 1098 # bs-Latn 1099 param('bs-Latn', "sljedeće godine", "in 1 year"), 1100 param('bs-Latn', "prije 4 mjeseci", "4 month ago"), 1101 param('bs-Latn', "za 36 sati", "in 36 hour"), 1102 # bs 1103 param('bs', "prije 12 sekundi", "12 second ago"), 1104 param('bs', "za 5 godinu", "in 5 year"), 1105 param('bs', "ovaj sat", "0 hour ago"), 1106 # ca 1107 param('ca', "d'aquí a 22 hores", "in 22 hour"), 1108 param('ca', "fa 17 anys", "17 year ago"), 1109 param('ca', "el mes passat", "1 month ago"), 1110 param('ca', "la pròxima setmana", "in 1 week"), 1111 param('ca', "despús-ahir", "2 day ago"), 1112 param('ca', "en un dia", "in 1 day"), 1113 param('ca', "demà passat", "in 2 day"), 1114 # ce 1115 param('ce', "72 сахьт даьлча", "in 72 hour"), 1116 param('ce', "42 шо хьалха", "42 year ago"), 1117 param('ce', "рогӏерчу баттахь", "in 1 month"), 1118 # cgg 1119 param('cgg', "nyenkyakare", "in 1 day"), 1120 param('cgg', "nyomwabazyo", "1 day ago"), 1121 param('cgg', "5 omwaka", "5 year"), 1122 # chr 1123 param('chr', "ᎯᎠ ᎢᏯᏔᏬᏍᏔᏅ", "0 minute ago"), 1124 param('chr', "ᎾᎿ 8 ᎧᎸᎢ ᏥᎨᏒ", "8 month ago"), 1125 param('chr', "ᎾᎿ 22 ᎢᏯᏔᏬᏍᏔᏅ", "in 22 minute"), 1126 # cs 1127 param('cs', "za 3 rok", "in 3 year"), 1128 param('cs', "před 11 měsícem", "11 month ago"), 1129 param('cs', "tento měsíc", "0 month ago"), 1130 # cy 1131 param('cy', "wythnos ddiwethaf", "1 week ago"), 1132 param('cy', "25 o flynyddoedd yn ôl", "25 year ago"), 1133 param('cy', "ymhen 4 awr", "in 4 hour"), 1134 # da 1135 param('da', "for 15 måneder siden", "15 month ago"), 1136 param('da', "om 60 sekunder", "in 60 second"), 1137 param('da', "sidste måned", "1 month ago"), 1138 # dav 1139 param('dav', "iguo", "1 day ago"), 1140 param('dav', "kesho 02:12 luma lwa p", "in 1 day 02:12 pm"), 1141 param('dav', "15 juma", "15 week"), 1142 # de 1143 param('de', "nächstes jahr", "in 1 year"), 1144 param('de', "letzte woche 04:25 nachm", "1 week ago 04:25 pm"), 1145 # dje 1146 param('dje', "hõo 08:08 subbaahi", "0 day ago 08:08 am"), 1147 param('dje', "suba", "in 1 day"), 1148 param('dje', "7 handu", "7 month"), 1149 # dsb 1150 param('dsb', "pśed 10 góźinami", "10 hour ago"), 1151 param('dsb', "za 43 minutow", "in 43 minute"), 1152 param('dsb', "pśiducy tyźeń", "in 1 week"), 1153 # dua 1154 param('dua', "kíɛlɛ nítómb́í", "1 day ago"), 1155 param('dua', "12 ŋgandɛ", "12 hour"), 1156 param('dua', "wɛ́ŋgɛ̄", "0 day ago"), 1157 # dyo 1158 param('dyo', "fucen", "1 day ago"), 1159 param('dyo', "kajom", "in 1 day"), 1160 param('dyo', "6 fuleeŋ", "6 month"), 1161 # dz 1162 param('dz', "ནངས་པ་", "in 1 day"), 1163 param('dz', "སྐར་མ་ 3 ནང་", "in 3 minute"), 1164 param('dz', "ལོ་འཁོར་ 21 ཧེ་མ་", "21 year ago"), 1165 # ebu 1166 param('ebu', "ĩgoro", "1 day ago"), 1167 param('ebu', "2 ndagĩka", "2 minute"), 1168 param('ebu', "rũciũ", "in 1 day"), 1169 # ee 1170 param('ee', "ɣleti si va yi", "1 month ago"), 1171 param('ee', "ƒe 24 si wo va yi", "24 year ago"), 1172 param('ee', "le sekend 20 me", "in 20 second"), 1173 # el 1174 param('el', "πριν από 45 λεπτό", "45 minute ago"), 1175 param('el', "σε 22 μήνες", "in 22 month"), 1176 param('el', "επόμενη εβδομάδα 12:09 μμ", "in 1 week 12:09 pm"), 1177 # et 1178 param('et', "eelmine nädal", "1 week ago"), 1179 param('et', "1 a pärast", "in 1 year"), 1180 param('et', "4 tunni eest", "4 hour ago"), 1181 # eu 1182 param('eu', "aurreko hilabetea", "1 month ago"), 1183 param('eu', "duela 15 segundo", "15 second ago"), 1184 param('eu', "2 hilabete barru", "in 2 month"), 1185 # ewo 1186 param('ewo', "okírí", "in 1 day"), 1187 param('ewo', "angogé 10:15 kíkíríg", "1 day ago 10:15 am"), 1188 param('ewo', "5 m̀bú", "5 year"), 1189 # ff 1190 param('ff', "hannde", "0 day ago"), 1191 param('ff', "haŋki 01:14 subaka", "1 day ago 01:14 am"), 1192 param('ff', "2 yontere", "2 week"), 1193 # fil 1194 param('fil', "22 min ang nakalipas", "22 minute ago"), 1195 param('fil', "sa 5 taon", "in 5 year"), 1196 param('fil', "nakalipas na linggo", "1 week ago"), 1197 # fo 1198 param('fo', "seinasta mánað", "1 month ago"), 1199 param('fo', "um 3 viku", "in 3 week"), 1200 param('fo', "7 tímar síðan", "7 hour ago"), 1201 # fur 1202 param('fur', "ca di 16 setemanis", "in 16 week"), 1203 param('fur', "15 secont indaûr", "15 second ago"), 1204 param('fur', "doman", "in 1 day"), 1205 # fy 1206 param('fy', "folgjende moanne", "in 1 month"), 1207 param('fy', "oer 24 oere", "in 24 hour"), 1208 param('fy', "2 deien lyn", "2 day ago"), 1209 # ga 1210 param('ga', "i gceann 6 nóiméad", "in 6 minute"), 1211 param('ga', "12 seachtain ó shin", "12 week ago"), 1212 param('ga', "an bhliain seo chugainn", "in 1 year"), 1213 # gd 1214 param('gd', "an ceann 2 mhìosa", "in 2 month"), 1215 param('gd', "15 uair a thìde air ais", "15 hour ago"), 1216 param('gd', "am mìos seo chaidh", "1 month ago"), 1217 # gl 1218 param('gl', "hai 25 semanas", "25 week ago"), 1219 param('gl', "en 2 horas", "in 2 hour"), 1220 param('gl', "o ano pasado", "1 year ago"), 1221 # gsw 1222 param('gsw', "moorn", "in 1 day"), 1223 param('gsw', "geschter", "1 day ago"), 1224 # gu 1225 param('gu', "2 વર્ષ પહેલા", "2 year ago"), 1226 param('gu', "આવતા મહિને", "in 1 month"), 1227 param('gu', "22 કલાક પહેલાં", "22 hour ago"), 1228 # guz 1229 param('guz', "mambia", "in 1 day"), 1230 param('guz', "igoro", "1 day ago"), 1231 # ha 1232 param('ha', "gobe", "in 1 day"), 1233 param('ha', "jiya", "1 day ago"), 1234 # hr 1235 param('hr', "prije 3 dana", "3 day ago"), 1236 param('hr', "sljedeći mjesec", "in 1 month"), 1237 param('hr', "za 2 sati", "in 2 hour"), 1238 # hsb 1239 param('hsb', "před 5 tydźenjemi", "5 week ago"), 1240 param('hsb', "za 60 sekundow", "in 60 second"), 1241 param('hsb', "lětsa", "0 year ago"), 1242 # hy 1243 param('hy', "հաջորդ ամիս", "in 1 month"), 1244 param('hy', "2 վայրկյան առաջ", "2 second ago"), 1245 param('hy', "3 տարուց", "in 3 year"), 1246 # id 1247 param('id', "5 tahun yang lalu", "5 year ago"), 1248 param('id', "dalam 43 menit", "in 43 minute"), 1249 param('id', "dlm 23 dtk", "in 23 second"), 1250 # ig 1251 param('ig', "nnyaafụ", "1 day ago"), 1252 param('ig', "taata", "0 day ago"), 1253 # is 1254 param('is', "í næstu viku", "in 1 week"), 1255 param('is', "fyrir 3 mánuðum", "3 month ago"), 1256 param('is', "eftir 2 klst", "in 2 hour"), 1257 # it 1258 param('it', "tra 3 minuti", "in 3 minute"), 1259 param('it', "5 giorni fa", "5 day ago"), 1260 param('it', "anno prossimo", "in 1 year"), 1261 # jgo 1262 param('jgo', "ɛ́ gɛ mɔ́ 20 háwa", "20 hour ago"), 1263 param('jgo', "ɛ́ gɛ́ mɔ́ pɛsaŋ 5", "5 month ago"), 1264 param('jgo', "nǔu ŋguꞌ 2", "in 2 year"), 1265 # jmc 1266 param('jmc', "ngama", "in 1 day"), 1267 param('jmc', "ukou", "1 day ago"), 1268 # ka 1269 param('ka', "ამ საათში", "0 hour ago"), 1270 param('ka', "7 კვირის წინ", "7 week ago"), 1271 param('ka', "6 წუთში", "in 6 minute"), 1272 # kab 1273 param('kab', "iḍelli", "1 day ago"), 1274 param('kab', "ass-a", "0 day ago"), 1275 # kam 1276 param('kam', "ũmũnthĩ", "0 day ago"), 1277 param('kam', "ũnĩ", "in 1 day"), 1278 # kde 1279 param('kde', "nundu", "in 1 day"), 1280 param('kde', "lido", "1 day ago"), 1281 # kea 1282 param('kea', "es simana li", "0 week ago"), 1283 param('kea', "di li 2 min", "in 2 minute"), 1284 param('kea', "a ten 6 anu", "6 year ago"), 1285 # khq 1286 param('khq', "hõo", "0 day ago"), 1287 param('khq', "bi", "1 day ago"), 1288 # ki 1289 param('ki', "rũciũ", "in 1 day"), 1290 param('ki', "ira", "1 day ago"), 1291 # kk 1292 param('kk', "3 апта бұрын", "3 week ago"), 1293 param('kk', "5 секундтан кейін", "in 5 second"), 1294 param('kk', "өткен ай", "1 month ago"), 1295 # kl 1296 param('kl', "om 8 sapaatip-akunnera", "in 8 week"), 1297 param('kl', "for 6 ukioq siden", "6 year ago"), 1298 param('kl', "om 56 minutsi", "in 56 minute"), 1299 # kln 1300 param('kln', "raini", "0 day ago"), 1301 param('kln', "mutai", "in 1 day"), 1302 # km 1303 param('km', "ម៉ោងនេះ", "0 hour ago"), 1304 param('km', "19 ខែមុន", "19 month ago"), 1305 param('km', "ក្នុងរយៈពេល 23 ម៉ោង", "in 23 hour"), 1306 # kn 1307 param('kn', "18 ತಿಂಗಳುಗಳ ಹಿಂದೆ", "18 month ago"), 1308 param('kn', "26 ಸೆಕೆಂಡ್ನಲ್ಲಿ", "in 26 second"), 1309 param('kn', "ಈ ನಿಮಿಷ", "0 minute ago"), 1310 # ko 1311 param('ko', "2분 후", "in 2 minute"), 1312 param('ko', "5년 전", "5 year ago"), 1313 param('ko', "다음 달", "in 1 month"), 1314 # ksb 1315 param('ksb', "keloi", "in 1 day"), 1316 param('ksb', "evi eo", "0 day ago"), 1317 # ksf 1318 param('ksf', "ridúrǝ́", "in 1 day"), 1319 param('ksf', "rinkɔɔ́", "1 day ago"), 1320 # ksh 1321 param('ksh', "nächste woche", "in 1 week"), 1322 param('ksh', "en 3 johre", "in 3 year"), 1323 param('ksh', "diese mohnd", "0 month ago"), 1324 # ky 1325 param('ky', "ушул мүнөттө", "0 minute ago"), 1326 param('ky', "6 айд кийин", "in 6 month"), 1327 param('ky', "5 мүнөт мурун", "5 minute ago"), 1328 # lag 1329 param('lag', "lamʉtoondo", "in 1 day"), 1330 param('lag', "niijo", "1 day ago"), 1331 # lb 1332 param('lb', "virun 2 stonn", "2 hour ago"), 1333 param('lb', "an 5 joer", "in 5 year"), 1334 param('lb', "leschte mount", "1 month ago"), 1335 # lg 1336 param('lg', "nkya", "in 1 day"), 1337 param('lg', "ggulo", "1 day ago"), 1338 # lkt 1339 param('lkt', "hékta wíyawapi 8 k'uŋ héhaŋ", "8 month ago"), 1340 param('lkt', "tȟokáta okó kiŋháŋ", "in 1 week"), 1341 param('lkt', "letáŋhaŋ owápȟe 4 kiŋháŋ", "in 4 hour"), 1342 # ln 1343 param('ln', "lóbi elékí", "1 day ago"), 1344 param('ln', "lóbi ekoyâ", "in 1 day"), 1345 # lo 1346 param('lo', "ໃນອີກ 5 ຊົ່ວໂມງ", "in 5 hour"), 1347 param('lo', "3 ປີກ່ອນ", "3 year ago"), 1348 # lt 1349 param('lt', "praėjusią savaitę", "1 week ago"), 1350 param('lt', "prieš 12 mėnesį", "12 month ago"), 1351 param('lt', "po 2 valandų", "in 2 hour"), 1352 # lu 1353 param('lu', "lelu", "0 day ago"), 1354 param('lu', "makelela", "1 day ago"), 1355 # luo 1356 param('luo', "nyoro", "1 day ago"), 1357 param('luo', "kiny", "in 1 day"), 1358 # luy 1359 param('luy', "mgorova", "1 day ago"), 1360 param('luy', "lero", "0 day ago"), 1361 # lv 1362 param('lv', "pēc 67 minūtes", "in 67 minute"), 1363 param('lv', "pirms 5 nedēļām", "5 week ago"), 1364 param('lv', "nākamajā gadā", "in 1 year"), 1365 # mas 1366 param('mas', "tááisérè", "in 1 day"), 1367 param('mas', "ŋolé", "1 day ago"), 1368 # mer 1369 param('mer', "ĩgoro", "1 day ago"), 1370 param('mer', "narua", "0 day ago"), 1371 # mfe 1372 param('mfe', "zordi", "0 day ago"), 1373 param('mfe', "demin", "in 1 day"), 1374 # mg 1375 param('mg', "rahampitso", "in 1 day"), 1376 param('mg', "omaly", "1 day ago"), 1377 # mgh 1378 param('mgh', "lel'lo", "0 day ago"), 1379 param('mgh', "n'chana", "1 day ago"), 1380 # mgo 1381 param('mgo', "ikwiri", "1 day ago"), 1382 param('mgo', "isu", "in 1 day"), 1383 # mk 1384 param('mk', "пред 4 минута", "4 minute ago"), 1385 param('mk', "за 6 месеци", "in 6 month"), 1386 param('mk', "минатата година", "1 year ago"), 1387 # ml 1388 param('ml', "ഈ മിനിറ്റിൽ", "0 minute ago"), 1389 param('ml', "7 മണിക്കൂറിൽ", "in 7 hour"), 1390 param('ml', "2 വർഷം മുമ്പ്", "2 year ago"), 1391 # mn 1392 param('mn', "5 цагийн өмнө", "5 hour ago"), 1393 param('mn', "10 жилийн дараа", "in 10 year"), 1394 param('mn', "өнгөрсөн долоо хоног", "1 week ago"), 1395 # mr 1396 param('mr', "2 मिनिटांमध्ये", "in 2 minute"), 1397 param('mr', "5 महिन्यापूर्वी", "5 month ago"), 1398 param('mr', "हे वर्ष", "0 year ago"), 1399 # ms 1400 param('ms', "dalam 7 hari", "in 7 day"), 1401 param('ms', "3 thn lalu", "3 year ago"), 1402 param('ms', "bulan depan", "in 1 month"), 1403 # mt 1404 param('mt', "ix-xahar li għadda", "1 month ago"), 1405 param('mt', "2 sena ilu", "2 year ago"), 1406 param('mt', "il-ġimgħa d-dieħla", "in 1 week"), 1407 # mua 1408 param('mua', "tǝ'nahko", "0 day ago"), 1409 param('mua', "tǝ'nane", "in 1 day"), 1410 # my 1411 param('my', "ပြီးခဲ့သည့် 7 မိနစ်", "7 minute ago"), 1412 param('my', "12 လအတွင်း", "in 12 month"), 1413 param('my', "ယခု သီတင်းပတ်", "0 week ago"), 1414 # nb 1415 param('nb', "om 6 timer", "in 6 hour"), 1416 param('nb', "om 2 måneder", "in 2 month"), 1417 param('nb', "forrige uke", "1 week ago"), 1418 # nd 1419 param('nd', "kusasa", "in 1 day"), 1420 param('nd', "izolo", "1 day ago"), 1421 # ne 1422 param('ne', "5 वर्ष अघि", "5 year ago"), 1423 param('ne', "35 मिनेटमा", "in 35 minute"), 1424 param('ne', "यो हप्ता", "0 week ago"), 1425 # nl 1426 param('nl', "15 dgn geleden", "15 day ago"), 1427 param('nl', "over 2 maand", "in 2 month"), 1428 param('nl', "vorige jaar", "1 year ago"), 1429 # nmg 1430 param('nmg', "nakugú", "1 day ago"), 1431 param('nmg', "namáná", "in 1 day"), 1432 # nn 1433 param('nn', "for 5 minutter siden", "5 minute ago"), 1434 param('nn', "om 3 uker", "in 3 week"), 1435 param('nn', "i morgon", "in 1 day"), 1436 # nnh 1437 param('nnh', "jǔɔ gẅie à ne ntóo", "in 1 day"), 1438 param('nnh', "jǔɔ gẅie à ka tɔ̌g", "1 day ago"), 1439 # nus 1440 param('nus', "ruun", "in 1 day"), 1441 param('nus', "walɛ 06:23 tŋ", "0 day ago 06:23 pm"), 1442 # nyn 1443 param('nyn', "nyomwabazyo", "1 day ago"), 1444 param('nyn', "erizooba", "0 day ago"), 1445 # os 1446 param('os', "3 боны размӕ", "3 day ago"), 1447 param('os', "47 сахаты фӕстӕ", "in 47 hour"), 1448 param('os', "знон", "1 day ago"), 1449 # pa-Guru 1450 param('pa-Guru', "ਅਗਲਾ ਹਫ਼ਤਾ", "in 1 week"), 1451 param('pa-Guru', "5 ਮਹੀਨੇ ਪਹਿਲਾਂ", "5 month ago"), 1452 param('pa-Guru', "22 ਮਿੰਟਾਂ ਵਿੱਚ", "in 22 minute"), 1453 # pa 1454 param('pa', "15 ਘੰਟੇ ਪਹਿਲਾਂ", "15 hour ago"), 1455 param('pa', "16 ਸਕਿੰਟ ਵਿੱਚ", "in 16 second"), 1456 param('pa', "ਅਗਲਾ ਸਾਲ", "in 1 year"), 1457 # pl 1458 param('pl', "6 tygodni temu", "6 week ago"), 1459 param('pl', "za 8 lat", "in 8 year"), 1460 param('pl', "ta minuta", "0 minute ago"), 1461 # rm 1462 param('rm', "damaun", "in 1 day"), 1463 param('rm', "ier", "1 day ago"), 1464 # ro 1465 param('ro', "acum 2 de ore", "2 hour ago"), 1466 param('ro', "peste 5 de ani", "in 5 year"), 1467 param('ro', "săptămâna trecută", "1 week ago"), 1468 # rof 1469 param('rof', "linu", "0 day ago"), 1470 param('rof', "ng'ama", "in 1 day"), 1471 # ru 1472 param('ru', "12 секунды назад", "12 second ago"), 1473 param('ru', "через 8 месяца", "in 8 month"), 1474 param('ru', "в прошлом году", "1 year ago"), 1475 # rwk 1476 param('rwk', "ukou", "1 day ago"), 1477 param('rwk', "ngama", "in 1 day"), 1478 # sah 1479 param('sah', "20 чаас ынараа өттүгэр", "20 hour ago"), 1480 param('sah', "50 сылынан", "in 50 year"), 1481 param('sah', "ааспыт нэдиэлэ", "1 week ago"), 1482 # saq 1483 param('saq', "duo", "0 day ago"), 1484 param('saq', "taisere", "in 1 day"), 1485 # sbp 1486 param('sbp', "pamulaawu", "in 1 day"), 1487 param('sbp', "ineng'uni", "0 day ago"), 1488 # se 1489 param('se', "51 minuhta maŋŋilit", "in 51 minute"), 1490 param('se', "3 jahkki árat", "3 year ago"), 1491 param('se', "ihttin", "in 1 day"), 1492 # seh 1493 param('seh', "manguana", "in 1 day"), 1494 param('seh', "zuro", "1 day ago"), 1495 # ses 1496 param('ses', "suba", "in 1 day"), 1497 param('ses', "hõo", "0 day ago"), 1498 # sg 1499 param('sg', "bîrï", "1 day ago"), 1500 param('sg', "lâsô", "0 day ago"), 1501 # shi-Latn 1502 param('shi-Latn', "iḍlli", "1 day ago"), 1503 param('shi-Latn', "askka 06:15 tifawt", "in 1 day 06:15 am"), 1504 # shi-Tfng 1505 param('shi-Tfng', "ⴰⵙⴽⴽⴰ", "in 1 day"), 1506 param('shi-Tfng', "ⴰⵙⵙⴰ", "0 day ago"), 1507 # shi 1508 param('shi', "ⵉⴹⵍⵍⵉ", "1 day ago"), 1509 # si 1510 param('si', "තත්පර 14කින්", "in 14 second"), 1511 param('si', "වසර 2කට පෙර", "2 year ago"), 1512 param('si', "මෙම සතිය", "0 week ago"), 1513 # sk 1514 param('sk', "pred 11 týždňami", "11 week ago"), 1515 param('sk', "o 25 rokov", "in 25 year"), 1516 param('sk', "v tejto hodine", "0 hour ago"), 1517 # sl 1518 param('sl', "pred 4 dnevom", "4 day ago"), 1519 param('sl', "čez 76 leto", "in 76 year"), 1520 param('sl', "naslednji mesec", "in 1 month"), 1521 # sn 1522 param('sn', "mangwana", "in 1 day"), 1523 param('sn', "nhasi", "0 day ago"), 1524 # so 1525 param('so', "berri", "in 1 day"), 1526 param('so', "shalay", "1 day ago"), 1527 # sq 1528 param('sq', "pas 6 muajsh", "in 6 month"), 1529 param('sq', "72 orë më parë", "72 hour ago"), 1530 param('sq', "javën e ardhshme", "in 1 week"), 1531 # sr-Cyrl 1532 param('sr-Cyrl', "пре 5 година", "5 year ago"), 1533 param('sr-Cyrl', "за 52 нед", "in 52 week"), 1534 param('sr-Cyrl', "данас", "0 day ago"), 1535 # sr-Latn 1536 param('sr-Latn', "za 120 sekundi", "in 120 second"), 1537 param('sr-Latn', "pre 365 dana", "365 day ago"), 1538 param('sr-Latn', "prošle nedelje", "1 week ago"), 1539 # sr 1540 param('sr', "пре 40 сати", "40 hour ago"), 1541 param('sr', "за 100 год", "in 100 year"), 1542 param('sr', "овог месеца", "0 month ago"), 1543 # sv 1544 param('sv', "för 15 vecka sedan", "15 week ago"), 1545 param('sv', "om 2 sekunder", "in 2 second"), 1546 param('sv', "förra året", "1 year ago"), 1547 # sw 1548 param('sw', "sekunde 25 zilizopita", "25 second ago"), 1549 param('sw', "miezi 5 iliyopita", "5 month ago"), 1550 param('sw', "mwaka uliopita", "1 year ago"), 1551 # ta 1552 param('ta', "7 நாட்களுக்கு முன்", "7 day ago"), 1553 param('ta', "45 ஆண்டுகளில்", "in 45 year"), 1554 param('ta', "இப்போது", "0 second ago"), 1555 # te 1556 param('te', "12 గంటల క్రితం", "12 hour ago"), 1557 param('te', "25 సంవత్సరాల్లో", "in 25 year"), 1558 param('te', "గత వారం", "1 week ago"), 1559 # teo 1560 param('teo', "moi", "in 1 day"), 1561 param('teo', "lolo", "0 day ago"), 1562 # to 1563 param('to', "miniti 'e 5 kuo'osi", "5 minute ago"), 1564 param('to', "'i he ta'u 'e 6", "in 6 year"), 1565 param('to', "'aneafi", "1 day ago"), 1566 # tr 1567 param('tr', "11 saat önce", "11 hour ago"), 1568 param('tr', "10 yıl sonra", "in 10 year"), 1569 param('tr', "geçen ay", "1 month ago"), 1570 # twq 1571 param('twq', "hõo", "0 day ago"), 1572 param('twq', "suba", "in 1 day"), 1573 # tzm 1574 param('tzm', "assenaṭ", "1 day ago"), 1575 param('tzm', "asekka", "in 1 day"), 1576 # uk 1577 param('uk', "18 хвилину тому", "18 minute ago"), 1578 param('uk', "через 22 року", "in 22 year"), 1579 param('uk', "цього тижня", "0 week ago"), 1580 # uz-Cyrl 1581 param('uz-Cyrl', "кейинги ой", "in 1 month"), 1582 param('uz-Cyrl', "30 йил аввал", "30 year ago"), 1583 param('uz-Cyrl', "59 сониядан сўнг", "in 59 second"), 1584 # uz-Latn 1585 param('uz-Latn', "3 haftadan keyin", "in 3 week"), 1586 param('uz-Latn', "5 soat oldin", "5 hour ago"), 1587 param('uz-Latn', "shu yil", "0 year ago"), 1588 # uz 1589 param('uz', "25 soat oldin", "25 hour ago"), 1590 param('uz', "8 yildan keyin", "in 8 year"), 1591 param('uz', "bugun", "0 day ago"), 1592 # vi 1593 param('vi', "sau 22 giờ nữa", "in 22 hour"), 1594 param('vi', "15 tháng trước", "15 month ago"), 1595 param('vi', "tuần sau", "in 1 week"), 1596 # vun 1597 param('vun', "ngama", "in 1 day"), 1598 param('vun', "ukou", "1 day ago"), 1599 # wae 1600 param('wae', "vor 11 minüta", "11 minute ago"), 1601 param('wae', "i 15 wuča", "in 15 week"), 1602 param('wae', "hitte", "0 day ago"), 1603 # xog 1604 param('xog', "enkyo", "in 1 day"), 1605 param('xog', "edho", "1 day ago"), 1606 # yav 1607 param('yav', "ínaan", "0 day ago"), 1608 param('yav', "nakinyám", "in 1 day"), 1609 # yo 1610 param('yo', "ọ̀la", "in 1 day"), 1611 param('yo', "òní", "0 day ago"), 1612 # yue 1613 param('yue', "13 個星期後", "in 13 week"), 1614 param('yue', "2 小時前", "2 hour ago"), 1615 param('yue', "上個月", "1 month ago"), 1616 # zgh 1617 param('zgh', "ⴰⵙⵙⴰ", "0 day ago"), 1618 param('zgh', "ⵉⴹⵍⵍⵉ", "1 day ago"), 1619 # zh-Hans 1620 param('zh-Hans', "3秒钟后", "in 3 second"), 1621 param('zh-Hans', "4年后", "in 4 year"), 1622 param('zh-Hans', "上周", "1 week ago"), 1623 # zh-Hant 1624 param('zh-Hant', "7 分鐘後", "in 7 minute"), 1625 param('zh-Hant', "12 個月前", "12 month ago"), 1626 param('zh-Hant', "這一小時", "0 hour ago"), 1627 # zu 1628 param('zu', "10 amaminithi edlule", "10 minute ago"), 1629 param('zu', "20 unyaka odlule", "20 year ago"), 1630 param('zu', "manje", "0 second ago"), 1631 ]) 1632 def test_freshness_translation(self, shortname, datetime_string, expected_translation): 1633 self.given_settings(settings={'NORMALIZE': False}) 1634 # Finnish language use "t" as hour, so empty SKIP_TOKENS. 1635 if shortname == 'fi': 1636 self.settings.SKIP_TOKENS = [] 1637 self.given_bundled_language(shortname) 1638 self.given_string(datetime_string) 1639 self.when_datetime_string_translated() 1640 self.then_string_translated_to(expected_translation) 1641 1642 @parameterized.expand([ 1643 param('pt', "sexta-feira, 10 de junho de 2014 14:52", 1644 ["sexta-feira", " ", "10", " ", "de", " ", "junho", " ", "de", " ", "2014", " ", "14", ":", "52"]), 1645 param('it', "14_luglio_15", ["14", "luglio", "15"]), 1646 param('zh', "1年11个月", ["1", "年", "11", "个月"]), 1647 param('zh', "1年11個月", ["1", "年", "11", "個月"]), 1648 param('tr', "2 saat önce", ["2 saat önce"]), 1649 param('fr', "il ya environ 23 heures'", 1650 ["il ya", " ", "environ", " ", "23", " ", "heures"]), 1651 param('de', "Gestern um 04:41", 1652 ['Gestern', ' ', 'um', ' ', '04', ':', '41']), 1653 param('de', "Donnerstag, 8. Januar 2015 um 07:17", 1654 ['Donnerstag', ' ', '8', '.', ' ', 'Januar', ' ', '2015', ' ', 'um', ' ', '07', ':', '17']), 1655 param('ru', "8 января 2015 г. в 9:10", 1656 ['8', ' ', 'января', ' ', '2015', ' ', 'г', '.', ' ', 'в', ' ', '9', ':', '10']), 1657 param('cs', "6. leden 2015 v 22:29", 1658 ['6', '.', ' ', 'leden', ' ', '2015', ' ', 'v', ' ', '22', ':', '29']), 1659 param('nl', "woensdag 7 januari 2015 om 21:32", 1660 ['woensdag', ' ', '7', ' ', 'januari', ' ', '2015', ' ', 'om', ' ', '21', ':', '32']), 1661 param('ro', "8 Ianuarie 2015 la 13:33", 1662 ['8', ' ', 'Ianuarie', ' ', '2015', ' ', 'la', ' ', '13', ':', '33']), 1663 param('ar', "8 يناير، 2015، الساعة 10:01 صباحاً", 1664 ['8', ' ', 'يناير', ' ', '2015', 'الساعة', ' ', '10', ':', '01', ' ','صباحاً']), 1665 param('th', "8 มกราคม 2015 เวลา 12:22 น.", 1666 ['8', ' ', 'มกราคม', ' ', '2015', ' ', 'เวลา', ' ', '12', ':', '22', ' ', 'น.']), 1667 param('pl', "8 stycznia 2015 o 10:19", 1668 ['8', ' ', 'stycznia', ' ', '2015', ' ', 'o', ' ', '10', ':', '19']), 1669 param('vi', "Thứ Năm, ngày 8 tháng 1 năm 2015", 1670 ["Thứ Năm", " ", "ngày", " ", "8", " ", "tháng 1", " ", "năm", " ", "2015"]), 1671 param('tl', "Biyernes Hulyo 3 2015", 1672 ["Biyernes", " ", "Hulyo", " ", "3", " ", "2015"]), 1673 param('be', "3 верасня 2015 г. у 11:10", 1674 ['3', ' ', 'верасня', ' ', '2015', ' ', 'г', '.', ' ', 'у', ' ', '11', ':', '10']), 1675 param('id', "3 Juni 2015 13:05:46", 1676 ['3', ' ', 'Juni', ' ', '2015', ' ', '13', ':', '05', ':', '46']), 1677 param('he', "ה-21 לאוקטובר 2016 ב-15:00", 1678 ['ה-', '21', ' ', 'לאוקטובר', ' ', '2016', ' ', 'ב-', '15', ':', '00']), 1679 param('bn', "3 জুন 2015 13:05:46", 1680 ['3', ' ', 'জুন', ' ', '2015', ' ', '13', ':', '05', ':', '46']), 1681 param('hi', "13 मार्च 2013 11:15:09", 1682 ['13', ' ', 'मार्च', ' ', '2013', ' ', '11', ':', '15', ':', '09']), 1683 param('mgo', "aneg 5 12 iməg àdùmbə̀ŋ 2001 09:14 pm", 1684 ['aneg 5', ' ', '12', ' ', 'iməg àdùmbə̀ŋ', ' ', '2001', ' ', '09', ':', '14', ' ', 'pm']), 1685 param('qu', "2 kapaq raymi 1998 domingo", ['2', ' ', 'kapaq raymi', ' ', '1998', ' ', 'domingo']), 1686 param('os', "24 сахаты размӕ 10:09 ӕмбисбоны размӕ", 1687 ['24 сахаты размӕ', ' ', '10', ':', '09', ' ', 'ӕмбисбоны размӕ']), 1688 param('pa', "25 ਘੰਟੇ ਪਹਿਲਾਂ 10:08 ਬਾਦੁ", 1689 ['25 ਘੰਟੇ ਪਹਿਲਾਂ', ' ', '10', ':', '08', ' ', 'ਬਾਦੁ']), 1690 param('en', "25_April_2008", ['25', 'April', '2008']), 1691 param('af', "hierdie uur 10:19 vm", ['hierdie uur', ' ', '10', ':', '19', ' ', 'vm']), 1692 param('rof', "7 mweri wa kaana 1998 12:09 kang'ama", 1693 ["7", " ", "mweri wa kaana", " ", "1998", " ", "12", ":", "09", " ", "kang'ama"]), 1694 param('saq', "14 lapa le tomon obo 2098 ong", 1695 ["14", " ", "lapa le tomon obo", " ", "2098", " ", "ong"]), 1696 param('wae', "cor 6 wučä 09:19 pm", ['cor 6 wučä', ' ', '09', ':', '19', ' ', 'pm']), 1697 param('naq', "13 ǃkhanǀgôab 1887", ["13", " ", "ǃkhanǀgôab", " ", "1887"]), 1698 1699 ]) 1700 def test_split(self, shortname, datetime_string, expected_tokens): 1701 self.given_settings(settings={'NORMALIZE': False}) 1702 self.given_bundled_language(shortname) 1703 self.given_string(datetime_string) 1704 self.when_datetime_string_splitted() 1705 self.then_tokens_are(expected_tokens) 1706 1707 @parameterized.expand([ 1708 param('en', "17th October, 2034 @ 01:08 am PDT", strip_timezone=True), 1709 param('en', "#@Sept#04#2014", strip_timezone=False), 1710 param('en', "2014-12-13T00:11:00Z", strip_timezone=False), 1711 param('de', "Donnerstag, 8. Januar 2015 um 07:17", strip_timezone=False), 1712 param('da', "Torsdag, 8. januar 2015 kl. 07:17", strip_timezone=False), 1713 param('ru', "8 января 2015 г. в 9:10", strip_timezone=False), 1714 param('cs', "Pondělí v 22:29", strip_timezone=False), 1715 param('nl', "woensdag 7 januari om 21:32", strip_timezone=False), 1716 param('ro', "8 Ianuarie 2015 la 13:33", strip_timezone=False), 1717 param('ar', "ساعتين", strip_timezone=False), 1718 param('tr', "3 hafta", strip_timezone=False), 1719 param('th', "17 เดือนมิถุนายน", strip_timezone=False), 1720 param('pl', "przedwczoraj", strip_timezone=False), 1721 param('fa', "ژانویه 8, 2015، ساعت 15:46", strip_timezone=False), 1722 param('vi', "2 tuần 3 ngày", strip_timezone=False), 1723 param('tl', "Hulyo 3, 2015 7:00 pm", strip_timezone=False), 1724 param('be', "3 верасня 2015 г. у 11:10", strip_timezone=False), 1725 param('id', "01 Agustus 2015 18:23", strip_timezone=False), 1726 param('he', "6 לדצמבר 1973", strip_timezone=False), 1727 param('bn', "3 সপ্তাহ", strip_timezone=False), 1728 ]) 1729 def test_applicable_languages(self, shortname, datetime_string, strip_timezone): 1730 self.given_settings() 1731 self.given_bundled_language(shortname) 1732 self.given_string(datetime_string) 1733 self.when_datetime_string_checked_if_applicable(strip_timezone) 1734 self.then_language_is_applicable() 1735 1736 @parameterized.expand([ 1737 param('ru', "08.haziran.2014, 11:07", strip_timezone=False), 1738 param('ar', "6 دقیقه", strip_timezone=False), 1739 param('fa', "ساعتين", strip_timezone=False), 1740 param('cs', "3 hafta", strip_timezone=False), 1741 ]) 1742 def test_not_applicable_languages(self, shortname, datetime_string, strip_timezone): 1743 self.given_settings() 1744 self.given_bundled_language(shortname) 1745 self.given_string(datetime_string) 1746 self.when_datetime_string_checked_if_applicable(strip_timezone) 1747 self.then_language_is_not_applicable() 1748 1749 @apply_settings 1750 def given_settings(self, settings=None): 1751 self.settings = settings 1752 1753 def given_string(self, datetime_string): 1754 if self.settings.NORMALIZE: 1755 datetime_string = normalize_unicode(datetime_string) 1756 self.datetime_string = datetime_string 1757 1758 def given_bundled_language(self, shortname): 1759 self.language = default_loader.get_locale(shortname) 1760 1761 def when_datetime_string_translated(self): 1762 self.translation = self.language.translate(self.datetime_string, settings=self.settings) 1763 1764 def when_datetime_string_splitted(self, keep_formatting=False): 1765 self.tokens = self.language._get_dictionary(self.settings).split(self.datetime_string) 1766 1767 def when_datetime_string_checked_if_applicable(self, strip_timezone): 1768 self.result = self.language.is_applicable(self.datetime_string, strip_timezone, 1769 settings=self.settings) 1770 1771 def then_string_translated_to(self, expected_string): 1772 self.assertEqual(expected_string, self.translation) 1773 1774 def then_tokens_are(self, expected_tokens): 1775 self.assertEqual(expected_tokens, self.tokens) 1776 1777 def then_language_is_applicable(self): 1778 self.assertTrue(self.result) 1779 1780 def then_language_is_not_applicable(self): 1781 self.assertFalse(self.result) 1782 1783 1784class BaseLanguageDetectorTestCase(BaseTestCase): 1785 __test__ = False 1786 1787 NOT_DETECTED = object() 1788 1789 def setUp(self): 1790 super(BaseLanguageDetectorTestCase, self).setUp() 1791 self.datetime_string = NotImplemented 1792 self.detector = NotImplemented 1793 self.detected_language = NotImplemented 1794 self.known_languages = None 1795 1796 @parameterized.expand([ 1797 param("1 january 2015", 'en'), 1798 ]) 1799 def test_valid_dates_detected(self, datetime_string, expected_language): 1800 self.given_locales(expected_language) 1801 self.given_detector() 1802 self.given_settings() 1803 self.given_string(datetime_string) 1804 self.when_searching_for_first_applicable_language() 1805 self.then_language_was_detected(expected_language) 1806 1807 @parameterized.expand([ 1808 param("foo"), 1809 ]) 1810 def test_invalid_dates_not_detected(self, datetime_string): 1811 self.given_locales('en') 1812 self.given_detector() 1813 self.given_settings() 1814 self.given_string(datetime_string) 1815 self.when_searching_for_first_applicable_language() 1816 self.then_no_language_was_detected() 1817 1818 def test_invalid_date_after_valid_date_not_detected(self): 1819 self.given_settings() 1820 self.given_locales('en') 1821 self.given_detector() 1822 self.given_previously_detected_string("1 january 2015") 1823 self.given_string("foo") 1824 self.when_searching_for_first_applicable_language() 1825 self.then_no_language_was_detected() 1826 1827 def test_valid_date_after_invalid_date_detected(self): 1828 self.given_locales('en') 1829 self.given_settings() 1830 self.given_detector() 1831 self.given_previously_detected_string("foo") 1832 self.given_string("1 january 2015") 1833 self.when_searching_for_first_applicable_language() 1834 self.then_language_was_detected('en') 1835 1836 def given_locales(self, *shortnames): 1837 self.known_languages = [default_loader.get_locale(shortname) 1838 for shortname in shortnames] 1839 1840 @apply_settings 1841 def given_settings(self, settings=None): 1842 self.settings = settings 1843 1844 def given_previously_detected_string(self, datetime_string): 1845 for _ in self.detector.iterate_applicable_languages( 1846 datetime_string, modify=True, settings=self.settings): 1847 break 1848 1849 def given_string(self, datetime_string): 1850 self.datetime_string = datetime_string 1851 1852 def given_detector(self): 1853 raise NotImplementedError 1854 1855 def when_searching_for_first_applicable_language(self): 1856 for language in self.detector.iterate_applicable_languages(self.datetime_string, modify=True, 1857 settings=self.settings): 1858 self.detected_language = language 1859 break 1860 else: 1861 self.detected_language = self.NOT_DETECTED 1862 1863 def then_language_was_detected(self, shortname): 1864 self.assertIsInstance(self.detected_language, Locale, "Language was not properly detected") 1865 self.assertEqual(shortname, self.detected_language.shortname) 1866 1867 def then_no_language_was_detected(self): 1868 self.assertIs(self.detected_language, self.NOT_DETECTED) 1869 1870 1871class TestExactLanguages(BaseLanguageDetectorTestCase): 1872 __test__ = True 1873 1874 @parameterized.expand([ 1875 param("01-01-12", ['en', 'fr']), 1876 param("01-01-12", ['tr', 'ar']), 1877 param("01-01-12", ['ru', 'fr', 'en', 'pl']), 1878 param("01-01-12", ['en']), 1879 ]) 1880 def test_exact_languages(self, datetime_string, shortnames): 1881 self.given_settings() 1882 self.given_string(datetime_string) 1883 self.given_known_languages(shortnames) 1884 self.given_detector() 1885 self.when_using_exact_languages() 1886 self.then_exact_languages_were_filtered(shortnames) 1887 1888 @apply_settings 1889 def given_settings(self, settings=None): 1890 self.settings = settings 1891 1892 def given_known_languages(self, shortnames): 1893 self.known_languages = [default_loader.get_locale(shortname) 1894 for shortname in shortnames] 1895 1896 def given_detector(self): 1897 self.assertIsInstance(self.known_languages, list, 1898 "Require a list of languages to initialize") 1899 self.assertGreaterEqual(len(self.known_languages), 1, 1900 "Could only be initialized with one or more languages") 1901 self.detector = ExactLanguages(languages=self.known_languages) 1902 1903 def when_using_exact_languages(self): 1904 self.exact_languages = self.detector.iterate_applicable_languages( 1905 self.datetime_string, modify=True, settings=self.settings) 1906 1907 def then_exact_languages_were_filtered(self, shortnames): 1908 self.assertEqual(set(shortnames), set([lang.shortname for lang in self.exact_languages])) 1909 1910 1911class BaseAutoDetectLanguageDetectorTestCase(BaseLanguageDetectorTestCase): 1912 allow_redetection = NotImplemented 1913 1914 def given_detector(self): 1915 self.detector = AutoDetectLanguage( 1916 languages=self.known_languages, allow_redetection=self.allow_redetection) 1917 1918 @apply_settings 1919 def given_settings(self, settings=None): 1920 self.settings = settings 1921 1922 1923class TestAutoDetectLanguageDetectorWithoutRedetection(BaseAutoDetectLanguageDetectorTestCase): 1924 __test__ = True 1925 allow_redetection = False 1926 1927 1928class TestAutoDetectLanguageDetectorWithRedetection(BaseAutoDetectLanguageDetectorTestCase): 1929 __test__ = True 1930 allow_redetection = True 1931 1932 1933class TestLanguageValidatorWhenInvalid(BaseTestCase): 1934 def setUp(self): 1935 super(TestLanguageValidatorWhenInvalid, self).setUp() 1936 self.validator = LanguageValidator 1937 self.captured_logs = StringIO() 1938 self.validator.get_logger() 1939 self.sh = logging.StreamHandler(self.captured_logs) 1940 self.validator.logger.addHandler(self.sh) 1941 self.log_list = self.captured_logs.getvalue().split('\n')[0] 1942 1943 @staticmethod 1944 def make_python3_msg(text): 1945 text = text.replace('unicode', 'str') 1946 text = text.replace('u\'', '\'') 1947 return text 1948 1949 def get_log_str(self): 1950 return self.make_python3_msg(self.captured_logs.getvalue().split('\n')[0]) 1951 1952 @parameterized.expand([ 1953 param('en', 'string instead of dict', log_msg="Language 'en' info expected to be dict, " 1954 "but have got str", ), 1955 ]) 1956 def test_validate_info_when_invalid_type(self, lang_id, lang_info, log_msg): 1957 result = self.validator.validate_info(lang_id, lang_info) 1958 self.assertEqual(log_msg, self.get_log_str()) 1959 self.assertFalse(result) 1960 1961 @parameterized.expand([ 1962 param('en', {}, log_msg="Language 'en' does not have a name"), 1963 param('en', {'name': 22}, log_msg="Language 'en' does not have a name"), 1964 param('en', {'name': ''}, log_msg="Language 'en' does not have a name"), 1965 ]) 1966 def test_validate_name_when_invalid(self, lang_id, lang_info, log_msg): 1967 result = self.validator._validate_name(lang_id, lang_info) 1968 self.assertEqual(log_msg, self.get_log_str()) 1969 self.assertFalse(result) 1970 1971 @parameterized.expand([ 1972 param('en', {'no_word_spacing': 'string instead of bool'}, 1973 log_msg="Invalid 'no_word_spacing' value 'string instead of bool' for 'en' language: " 1974 "expected boolean"), 1975 ]) 1976 def test_validate_word_spacing_when_invalid(self, lang_id, lang_info, log_msg): 1977 result = self.validator._validate_word_spacing(lang_id, lang_info) 1978 self.assertEqual(log_msg, self.get_log_str()) 1979 self.assertFalse(result) 1980 1981 @parameterized.expand([ 1982 param('en', {'skip': 'string instead of list'}, 1983 log_msg="Invalid 'skip' list for 'en' language: " 1984 "expected list type but have got str"), 1985 param('en', {'skip': ['']}, log_msg="Invalid 'skip' token '' for 'en' language: " 1986 "expected not empty string"), 1987 ]) 1988 def test_validate_skip_list_when_invalid(self, lang_id, lang_info, log_msg): 1989 result = self.validator._validate_skip_list(lang_id, lang_info) 1990 self.assertEqual(log_msg, self.get_log_str()) 1991 self.assertFalse(result) 1992 1993 @parameterized.expand([ 1994 param('en', {}), 1995 1996 ]) 1997 def test_validate_skip_list_when_absent(self, lang_id, lang_info): 1998 result = self.validator._validate_skip_list(lang_id, lang_info) 1999 self.assertTrue(result) 2000 2001 @parameterized.expand([ 2002 param('en', {'pertain': 'it is a string', 'skip': ['']}, 2003 log_msg="Invalid 'pertain' token '' for 'en' language: expected not empty string"), 2004 param('en', {'pertain': [''], 'skip': 'it is a string'}, 2005 log_msg="Invalid 'pertain' list for 'en' language: expected list type but have got str"), 2006 ]) 2007 def test_validate_pertain_list_when_invalid(self, lang_id, lang_info, log_msg): 2008 result = self.validator._validate_pertain_list(lang_id, lang_info) 2009 self.assertEqual(log_msg, self.get_log_str()) 2010 self.assertFalse(result) 2011 2012 @parameterized.expand([ 2013 param('en', {}), 2014 2015 ]) 2016 def test_validate_pertain_list_when_absent(self, lang_id, lang_info): 2017 result = self.validator._validate_pertain_list(lang_id, lang_info) 2018 self.assertTrue(result) 2019 2020 @parameterized.expand([ 2021 param('en', {}, log_msg="No translations for 'monday' provided for 'en' language"), 2022 param('en', 2023 {'monday': 1, 'tuesday': 2, 'wednesday': 3, 'thursday': 4, 'friday': 5, 'saturday': 6, 'sunday': 7}, 2024 log_msg="Invalid 'monday' translations list for 'en' language: expected list type but have got int"), 2025 param('en', {'monday': [1], 'tuesday': [2], 'wednesday': [3], 'thursday': [4], 'friday': [5], 2026 'saturday': [6], 'sunday': [7]}, 2027 log_msg="Invalid 'monday' translation 1 for 'en' language: expected not empty string"), 2028 ]) 2029 def test_validate_weekdays_when_invalid(self, lang_id, lang_info, log_msg): 2030 result = self.validator._validate_weekdays(lang_id, lang_info) 2031 self.assertEqual(log_msg, self.get_log_str()) 2032 self.assertFalse(result) 2033 2034 @parameterized.expand([ 2035 param('en', {}, log_msg="No translations for 'january' provided for 'en' language"), 2036 param('en', 2037 {'january': 1, 'february': 2, 'march': 3, 'april': 4, 'may': 5, 'june': 6, 'july': 7, 2038 'august': 8, 'september': 9, 'october': 10, 'november': 11, 'december': 12}, 2039 log_msg="Invalid 'january' translations list for 'en' language: expected list type but have got int"), 2040 param('en', 2041 {'january': [1], 'february': [2], 'march': [3], 'april': [4], 'may': [5], 'june': [6], 'july': [7], 2042 'august': [8], 'september': [9], 'october': [10], 'november': [11], 'december': [12]}, 2043 log_msg="Invalid 'january' translation 1 for 'en' language: expected not empty string"), 2044 ]) 2045 def test_validate_months_when_invalid(self, lang_id, lang_info, log_msg): 2046 result = self.validator._validate_months(lang_id, lang_info) 2047 self.assertEqual(log_msg, self.get_log_str()) 2048 self.assertFalse(result) 2049 2050 @parameterized.expand([ 2051 param('en', {}, log_msg="No translations for 'year' provided for 'en' language"), 2052 param('en', 2053 {'year': 1, 'month': 2, 'week': 3, 'day': 4, 'hour': 5, 'minute': 6, 'second': 7}, 2054 log_msg="Invalid 'year' translations list for 'en' language: expected list type but have got int"), 2055 param('en', 2056 {'year': [1], 'month': [2], 'week': [3], 'day': [4], 'hour': [5], 'minute': [6], 'second': [7]}, 2057 log_msg="Invalid 'year' translation 1 for 'en' language: expected not empty string"), 2058 ]) 2059 def test_validate_units_when_invalid(self, lang_id, lang_info, log_msg): 2060 result = self.validator._validate_units(lang_id, lang_info) 2061 self.assertEqual(log_msg, self.get_log_str()) 2062 self.assertFalse(result) 2063 2064 @parameterized.expand([ 2065 param('en', {}, log_msg="No translations for 'ago' provided for 'en' language"), 2066 param('en', 2067 {'ago': 1}, log_msg="Invalid 'ago' translations list for 'en' language: " 2068 "expected list type but have got int"), 2069 param('en', 2070 {'ago': []}, log_msg="No translations for 'ago' provided for 'en' language"), 2071 param('en', 2072 {'ago': ['']}, log_msg="Invalid 'ago' translation '' for 'en' language: expected not empty string"), 2073 ]) 2074 def test_validate_other_words_when_invalid(self, lang_id, lang_info, log_msg='na'): 2075 result = self.validator._validate_other_words(lang_id, lang_info) 2076 self.assertEqual(log_msg, self.get_log_str()) 2077 self.assertFalse(result) 2078 2079 @parameterized.expand([ 2080 param('en', {}), 2081 2082 ]) 2083 def test_validate_simplifications_when_absent(self, lang_id, lang_info): 2084 result = self.validator._validate_simplifications(lang_id, lang_info) 2085 self.assertTrue(result) 2086 2087 @parameterized.expand([ 2088 param('en', 2089 {'simplifications': 'string instead of list'}, 2090 log_msg="Invalid 'simplifications' list for 'en' language: expected list type but have got str"), 2091 param('en', 2092 {'simplifications': [{}]}, 2093 log_msg="Invalid simplification {} for 'en' language: eash simplification suppose " 2094 "to be one-to-one mapping"), 2095 param('en', 2096 {'simplifications': [{28: []}]}, 2097 log_msg="Invalid simplification {28: []} for 'en' language: each simplification suppose " 2098 "to be string-to-string-or-int mapping"), 2099 param('en', 2100 {'simplifications': [{'simplification': []}]}, 2101 log_msg="Invalid simplification {'simplification': []} for 'en' language: each simplification suppose " 2102 "to be string-to-string-or-int mapping"), 2103 param('en', 2104 {'simplifications': [{'(\d+)\s*hr(s?)\g<(.+?)>': r'\1 hour\2'}]}, 2105 log_msg="Invalid simplification {'(\\\\d+)\\\\s*hr(s?)\\\\g<(.+?)>': '\\\\1 hour\\\\2'} " 2106 "for 'en' language: groups 3 were not used"), 2107 param('en', 2108 {'simplifications': [{'(one)(two)(three)': r'\1\3\2\4'}]}, 2109 log_msg="Invalid simplification {'(one)(two)(three)': '\\\\1\\\\3\\\\2\\\\4'} for 'en' language:" 2110 " unknown groups 4"), 2111 param('en', 2112 {'simplifications': [{r'(?P<A>\w+)(?P<B>\w+)': '\\g<A>'}]}, 2113 log_msg="Invalid simplification {'(?P<A>\\\\w+)(?P<B>\\\\w+)': '\\\\g<A>'} for 'en' language:" 2114 " groups 2 were not used"), 2115 param('en', 2116 {'simplifications': [{r'(?P<A>\w+)': '\\g<B>(.*?)'}]}, 2117 log_msg="Invalid simplification {'(?P<A>\\\\w+)': '\\\\g<B>(.*?)'} for 'en' language: unknown group B"), 2118 2119 ]) 2120 def test_validate_simplifications_when_invalid(self, lang_id, lang_info, log_msg): 2121 result = self.validator._validate_simplifications(lang_id, lang_info) 2122 self.assertEqual(log_msg, self.get_log_str()) 2123 self.assertFalse(result) 2124 2125 @parameterized.expand([ 2126 param('en', {'sentence_splitter_group': 'string instead of int'}, 2127 log_msg="Invalid 'sentence_splitter_group' for 'en' language: " 2128 "expected int type but have got str"), 2129 param('en', {'sentence_splitter_group': 48}, 2130 log_msg="Invalid 'sentence_splitter_group' number 48 for 'en' language: " 2131 "expected number from 1 to 6"), 2132 2133 ]) 2134 def test_validate_sentence_splitter_group_when_invalid(self, lang_id, lang_info, log_msg): 2135 result = self.validator._validate_sentence_splitter_group(lang_id, lang_info) 2136 self.assertEqual(log_msg, self.get_log_str()) 2137 self.assertFalse(result) 2138 2139 @parameterized.expand([ 2140 param('en', {'invalid_key': ''}, 2141 log_msg="Extra keys found for 'en' language: 'invalid_key'"), 2142 2143 ]) 2144 def test_validate_extra_keys_when_invalid(self, lang_id, lang_info, log_msg): 2145 result = self.validator._validate_extra_keys(lang_id, lang_info) 2146 self.assertEqual(log_msg, self.get_log_str()) 2147 self.assertFalse(result) 2148