模块:I18n/date

来自萌娘共享
跳转至: 导航搜索

简介

该模块y用于实现Date模块的国际化。

该模块的国际化信息主要由以下两张表存储:

  • p.DateLang:匹配用户设定语言中的日期格式。没有列出的语言默认为简体中文。
  • p.DateFormat:所有能为{{#time:}}解析函数支持的日期格式。根据输入的时间信息进行解析。(区别见下)

几种不同的时间格式

  • YMDHMS = YYYY:MM:DD, HH:MM:SS
  • YMDHM = YYYY:MM:DD, HH:MM
  • YMD = YYYY:MM:DD
  • YM = YYYY:MM (年—月)
  • MD = MM:DD (月—日)
  • Y = YYYY (只有年)
  • M = 只有月

  1. --[[
  2. __ __ _ _ ___ _ ___ __ _ _
  3. | \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /_| | __ _| |_ ___
  4. | |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / _` |/ _` | __/ _ \
  5. | | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| | (_| | || __/
  6. |_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \__,_|\__,_|\__\___|
  7. This Module handles per language customization of dates
  8. Authors and Maintainers:
  9. * Jarekt
  10. ]]
  11. local p = {}
  12. --[[ Different languages use different date formats, and many formats are shared among whole families of languages.
  13. "DateLang" picks a cluster of languages associated with a single date format, based on the language to be used.
  14. All unlisted languages default to English form. Languages like "de-formal" follows regular language fallback chain
  15. and would default to German, and only if that does not exist then to English.
  16. ]]
  17. p.DateLang = {
  18. ['be'] = 'ru-form', -- Belarusian
  19. ['be-tarsk'] = 'ru-form', -- Belarusian (Tara۫ievica)
  20. ['bn'] = 'en-form', -- Bengali
  21. ['bpy'] = 'bpy-form', -- Bishnupuriya Manipuri
  22. ['ce'] = 'ce-form', -- Chechen
  23. ['cs'] = 'cs-form', -- Czech
  24. ['da'] = 'de-form', -- Danish
  25. ['de'] = 'de-form', -- German
  26. ['el'] = 'ru-form', -- Greek
  27. ['en'] = 'en-form', -- English
  28. ['eo'] = 'eo-form', -- Esperanto
  29. ['es'] = 'es-form', -- Spanish
  30. ['et'] = 'de-form', -- Estonian
  31. ['eu'] = 'eu-form', -- Basque
  32. ['fa'] = 'he-form', -- Persian
  33. ['fi'] = 'fi-form', -- Finnish
  34. ['fr'] = 'fr-form', -- French
  35. ['ga'] = 'ga-form', -- Gallic
  36. ['gl'] = 'es-form', -- Galician based on https://translatewiki.net/wiki/MediaWiki:Pagetriage-info-timestamp-date-format/gl
  37. ['hi'] = 'en-form', -- Hindi
  38. ['he'] = 'he-form', -- Hebrew
  39. ['hr'] = 'hr-form', -- Croatian
  40. ['hu'] = 'hu-form', -- Hungarian
  41. ['hsb'] = 'cs-form', -- Upper Sorbian
  42. ['ia'] = 'ia-form', -- Interlingua
  43. ['is'] = 'de-form', -- Icelandic
  44. ['ja'] = 'zh-form', -- Japanese
  45. ['kn'] = 'kn-form', -- Kannada
  46. ['ko'] = 'ko-form', -- Korean
  47. ['lt'] = 'lt-form', -- Lithuanian
  48. ['lv'] = 'lv-form', -- Latvian
  49. ['mk'] = 'en-form', -- Macedonian
  50. ['ml'] = 'ml-form', -- Malayalam
  51. ['mr'] = 'mr-form', -- Marathi
  52. ['new'] = 'new-form', -- Newari
  53. ['nn'] = 'de-form', -- Norwegian Nynorsk
  54. ['no'] = 'de-form', -- Norwegian (bokm欩
  55. ['oc'] = 'oc-form', -- Occitan
  56. ['pa'] = 'en-form', -- Punjabi
  57. ['pl'] = 'ru-form', -- Polish
  58. ['pt'] = 'es-form', -- Portuguese
  59. ['qu'] = 'qu-form', -- Quechua based on https://translatewiki.net/wiki/MediaWiki:Pagetriage-info-timestamp-date-format/qu
  60. ['qug'] = 'qug-form', -- Kichwa based on Template_talk:Date#Kichwa_.5Bqug.5D
  61. ['ru'] = 'ru-form', -- Russian
  62. ['sk'] = 'cs-form', -- Slovakian
  63. ['sl'] = 'sl-form', -- Slovene
  64. ['sr'] = 'hr-form', -- Serbian
  65. ['th'] = 'th-form', -- Thai solar calendar
  66. ['uk'] = 'ru-form', -- Ukrainian
  67. ['vi'] = 'vi-form', -- Vietnamese
  68. ['zh-hans'] = 'zh-form', -- Chinese
  69. }
  70. --[[ Date format parameter which will be passed to {{#time:}} parser function.
  71. It depends on the language and which parts of the date need to be displayed.
  72. Different forms are:
  73. * YMDHMS = stands for YYYY:MM:DD, HH:MM:SS format or equivalent
  74. * YMDHM = stands for YYYY:MM:DD, HH:MM format or equivalent
  75. * YMD = stands for YYYY:MM:DD format or equivalent
  76. * YM = stands for YYYY:MM (year-month) format or equivalent
  77. * MD = stands for MM:DD (month-day) format or equivalent
  78. * Y = stands for YYYY (year only) format or equivalent
  79. * M = stands for month name only
  80. The left hand side follows encoding used by {{#time}} parser function ,
  81. see https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time for documentation.
  82. To summerize:
  83. * Y - 4-digit year, like "2017"
  84. * y - 2-digit year, like "17"
  85. * M - An abbreviation of the month name, in the site language, like "Mar"
  86. * F - The full month name in the site language, like "March"
  87. * xg - Output the full month name in the genitive form for site languages that distinguish
  88. between genitive and nominative forms. This option is useful for many Slavic languages
  89. like Polish, Russian, Belarusian, Czech, Slovak, Slovene, Ukrainian, etc.
  90. * j - Day of the month, not zero-padded, like "1"
  91. * d - Day of the month, zero-padded, like "01"
  92. * a - "am" during the morning (00:00:00 → 11:59:59), "pm" otherwise (12:00:00 → 23:59:59).
  93. * A - Uppercase version of a above.
  94. * g - Hour in 12-hour format, not zero-padded.
  95. * h - Hour in 12-hour format, zero-padded.
  96. * G - Hour in 24-hour format, not zero-padded.
  97. * H - Hour in 24-hour format, zero-padded.
  98. * i - Minutes past the hour, zero-padded.
  99. * s - Seconds past the minute, zero-padded.
  100. Original set was developed to match the output of the pre-Lua {{date}} template, preserved as {{date/old}}
  101. ]]
  102. p.DateFormat = {
  103. -- day/month/year languages
  104. ['en-form'] = {
  105. YMDHMS='j F Y, H:i:s',
  106. YMDHM ='j F Y, H:i',
  107. YMD ='j F Y',
  108. YM ='F Y',
  109. MD ='j F',
  110. Y ='Y',
  111. M ='F'
  112. },
  113. ['de-form'] = {
  114. YMDHMS='j. F Y, H:i:s',
  115. YMDHM ='j. F Y, H:i',
  116. YMD ='j. F Y',
  117. YM ='F Y',
  118. MD ='j. F',
  119. Y ='Y',
  120. M ='F'
  121. },
  122. ['hr-form'] = {
  123. YMDHMS='j. F Y., H:i:s',
  124. YMDHM ='j. F Y., H:i',
  125. YMD ='j. F Y.',
  126. YM ='F Y.',
  127. MD ='j. F',
  128. Y ='Y.',
  129. M ='F'
  130. },
  131. ['ml-form'] = {
  132. YMDHMS='j F Y, H:i:s',
  133. YMDHM ='j F Y, H:i',
  134. YMD ='j F Y',
  135. YM ='F Y',
  136. MD ='F j',
  137. Y ='Y',
  138. M ='F'
  139. },
  140. ['th-form'] = {
  141. YMDHMS='j F "พ.ศ." xkY, H:i:s',
  142. YMDHM ='j F "พ.ศ." xkY, H:i',
  143. YMD ='j F "พ.ศ." xkY',
  144. YM ='F "พ.ศ." xkY',
  145. MD ='j F',
  146. Y ='"พ.ศ." xkY',
  147. M ='F'
  148. },
  149. ['fi-form'] = {
  150. YMDHMS='j. F"ta" Y, H:i:s',
  151. YMDHM ='j. F"ta" Y, H:i',
  152. YMD ='j. F"ta" Y',
  153. YM ='F Y',
  154. MD ='j. F"ta"',
  155. Y ='Y',
  156. M ='F'
  157. },
  158. ['es-form'] = {
  159. YMDHMS='j "de" F "de" Y, H:i:s',
  160. YMDHM ='j "de" F "de" Y, H:i',
  161. YMD ='j "de" F "de" Y',
  162. YM ='F "de" Y',
  163. MD ='j "de" F',
  164. Y ='Y',
  165. M ='F'
  166. },
  167. ['oc-form'] = {
  168. YMDHMS='j F "de" Y, H:i:s',
  169. YMDHM ='j F "de" Y, H:i',
  170. YMD ='j F "de" Y',
  171. YM ='F "de" Y',
  172. MD ='j F',
  173. Y ='Y',
  174. M ='F'
  175. },
  176. ['ia-form'] = {
  177. YMDHMS='j "de" F Y, H:i:s',
  178. YMDHM ='j "de" F Y, H:i',
  179. YMD ='j "de" F Y',
  180. YM ='F Y',
  181. MD ='j "de" F',
  182. Y ='Y',
  183. M ='F'
  184. },
  185. ['eo-form'] = {
  186. YMDHMS='"la" j"-a de" F Y, H:i:s',
  187. YMDHM ='"la" j"-a de" F Y, H:i',
  188. YMD ='"la" j"-a de" F Y',
  189. YM ='F Y',
  190. MD ='"la" j"-a de" F',
  191. Y ='Y',
  192. M ='F'
  193. },
  194. ['vi-form'] = {
  195. YMDHMS='j F "năm" Y "lúc" H:i:s',
  196. YMDHM ='j F "năm" Y "lúc" H:i',
  197. YMD ='j F "năm" Y',
  198. YM ='F "năm" Y',
  199. MD ='j F',
  200. Y ='Y',
  201. M ='F'
  202. },
  203. ['qu-form'] = {
  204. YMDHMS='j "ñiqin" F"pi" Y "watapi", H:i:s',
  205. YMDHM ='j "ñiqin" F"pi" Y "watapi", H:i',
  206. YMD ='j "ñiqin" F"pi" Y "watapi"',
  207. YM ='F"pi" Y "watapi"',
  208. MD ='j "ñiqin" F"pi"',
  209. Y ='Y',
  210. M ='F'
  211. },
  212. ['qug-form'] = {
  213. YMDHMS='j "niki" F"pi" Y "watapi", H:i:s',
  214. YMDHM ='j "niki" F"pi" Y "watapi", H:i',
  215. YMD ='j "niki" F"pi" Y "watapi"',
  216. YM ='F"pi" Y "watapi"',
  217. MD ='j "niki" F"pi"',
  218. Y ='Y',
  219. M ='F'
  220. },
  221. ['he-form'] = {
  222. YMDHMS='"<span dir=rtl>"j xg Y"</span>", H:i:s',
  223. YMDHM ='"<span dir=rtl>"j xg Y"</span>", H:i',
  224. YMD ='"<span dir=rtl>"j xg Y"</span>"',
  225. YM ='"<span dir=rtl>"F Y"</span>"',
  226. MD ='"<span dir=rtl>"j xg"</span>"',
  227. Y ='Y',
  228. M ='"<span dir=rtl>"F"</span>"'
  229. },
  230. -- French and Gallic languages require different form for first day of the month and
  231. -- different for the other days
  232. ['fr-form'] = {
  233. YMDHMS='j F Y, H:i:s',
  234. YMDHM ='j F Y, H:i',
  235. YMD ='j F Y',
  236. YM ='F Y',
  237. MD ='j F',
  238. Y ='Y',
  239. M ='F'
  240. },
  241. ['ga-form'] = {
  242. YMDHMS='j F Y, H:i:s',
  243. YMDHM ='j F Y, H:i',
  244. YMD ='j F Y',
  245. YM ='F Y',
  246. MD ='j F',
  247. Y ='Y',
  248. M ='F'
  249. },
  250. ['fr-form1'] = { -- 1st of the month form
  251. YMDHMS='j"<sup>er</sup>" F Y, H:i:s',
  252. YMDHM ='j"<sup>er</sup>" F Y, H:i',
  253. YMD ='j"<sup>er</sup>" F Y',
  254. YM ='F Y',
  255. MD ='j"<sup>er</sup>" F',
  256. Y ='Y',
  257. M ='F'
  258. },
  259. ['ga-form1'] = { -- 1st of the month form
  260. YMDHMS='j"<sup>ú</sup>" F Y, H:i:s',
  261. YMDHM ='j"<sup>ú</sup>" F Y, H:i',
  262. YMD ='j"<sup>ú</sup>" F Y',
  263. YM ='F Y',
  264. MD ='j"<sup>ú</sup>" F',
  265. Y ='Y',
  266. M ='F'
  267. },
  268. -- day/month/year Slavic languages
  269. ['ru-form'] = {
  270. YMDHMS='j xg Y, H:i:s',
  271. YMDHM ='j xg Y, H:i',
  272. YMD ='j xg Y',
  273. YM ='F Y',
  274. MD ='j xg',
  275. Y ='Y',
  276. M ='F'
  277. },
  278. ['cs-form'] = {
  279. YMDHMS='j. xg Y, H:i:s',
  280. YMDHM ='j. xg Y, H:i',
  281. YMD ='j. xg Y',
  282. YM ='F Y',
  283. MD ='j. xg',
  284. Y ='Y',
  285. M ='F'
  286. },
  287. ['sl-form'] = {
  288. YMDHMS='j. xg Y "ob" H:i:s',
  289. YMDHM ='j. xg Y "ob" H:i',
  290. YMD ='j. xg Y',
  291. YM ='F Y',
  292. MD ='j. xg',
  293. Y ='Y',
  294. M ='F'
  295. },
  296. -- year/month/day languages
  297. ['zh-form'] = {
  298. YMDHMS='Y年Fj日, H:i:s',
  299. YMDHM ='Y年Fj日, H:i',
  300. YMD ='Y年Fj日',
  301. YM ='Y年F',
  302. MD ='Fj日',
  303. Y ='Y年',
  304. M ='F'
  305. },
  306. ['ko-form'] = {
  307. YMDHMS='Y년 F j일, H:i:s',
  308. YMDHM ='Y년 F j일, H:i',
  309. YMD ='Y년 F j일',
  310. YM ='Y년 F',
  311. MD ='F j일',
  312. Y ='Y년',
  313. M ='F'
  314. },
  315. ['hu-form'] = {
  316. YMDHMS='Y. F j., H:i:s',
  317. YMDHM ='Y. F j., H:i',
  318. YMD ='Y. F j.',
  319. YM ='Y. F',
  320. MD ='F j.',
  321. Y ='Y',
  322. M ='F'
  323. },
  324. ['lt-form'] = {
  325. YMDHMS='Y "m". F j "d"., H:i:s',
  326. YMDHM ='Y "m". F j "d"., H:i',
  327. YMD ='Y "m". F j "d".',
  328. YM ='Y "m". F',
  329. MD ='F j "d".',
  330. Y ='Y "m".',
  331. M ='F'
  332. },
  333. ['eu-form'] = {
  334. YMDHMS='Y"ko" F"ren" j"a", H:i:s',
  335. YMDHM ='Y"ko" F"ren" j"a", H:i',
  336. YMD ='Y"ko" F"ren" j"a"',
  337. YM ='Y"ko" F',
  338. MD ='F"ren" j"a"',
  339. Y ='Y',
  340. M ='F'
  341. },
  342. ['eu-form01'] = { -- 1st and 21st of the month uses different form
  343. YMDHMS='Y"ko" F"ren" j"ea", H:i:s',
  344. YMDHM ='Y"ko" F"ren" j"ea", H:i',
  345. YMD ='Y"ko" F"ren" j"ea"',
  346. YM ='Y"ko" F',
  347. MD ='F"ren" j"ea"',
  348. Y ='Y',
  349. M ='F'
  350. },
  351. ['eu-form11'] = { -- 11th and 31st of the month uses different form
  352. YMDHMS='Y"ko" F"ren" j, H:i:s',
  353. YMDHM ='Y"ko" F"ren" j, H:i',
  354. YMD ='Y"ko" F"ren" j',
  355. YM ='Y"ko" F',
  356. MD ='F"ren" j',
  357. Y ='Y',
  358. M ='F'
  359. },
  360. ['ce-form'] = {
  361. YMDHMS='Y "шаран" j F, H:i:s',
  362. YMDHM ='Y "шаран" j F, H:i',
  363. YMD ='Y "шаран" j F',
  364. YM ='Y "шаран" F',
  365. MD ='j F',
  366. Y ='Y "шо"',
  367. M ='F'
  368. },
  369. -- year/day/month languages
  370. ['lv-form'] = {
  371. YMDHMS='Y". gada" j. F, H:i:s',
  372. YMDHM ='Y". gada" j. F, H:i',
  373. YMD ='Y". gada" j. F',
  374. YM ='Y". gada" F',
  375. MD ='j. F',
  376. Y ='Y". gada"',
  377. M ='F'
  378. },
  379. -- month/day/year languages
  380. ['kn-form'] = {
  381. YMDHMS='F j, Y, H:i:s',
  382. YMDHM ='F j, Y, H:i',
  383. YMD ='F j, Y',
  384. YM ='F, Y',
  385. MD ='F j',
  386. Y ='Y',
  387. M ='F'
  388. },
  389. ['bpy-form']= {
  390. YMDHMS='F j, মারি Y, H:i:s',
  391. YMDHM ='F j, মারি Y, H:i',
  392. YMD ='F j, মারি Y',
  393. YM ='F, মারি Y',
  394. MD ='F j',
  395. Y ='মারি Y',
  396. M ='F'
  397. },
  398. ['mr-form'] = {
  399. YMDHMS='F j, इ.स. Y, H:i:s',
  400. YMDHM ='F j, इ.स. Y, H:i',
  401. YMD ='F j, इ.स. Y',
  402. YM ='F, इ.स. Y',
  403. MD ='F j',
  404. Y ='इ.स. Y',
  405. M ='F'
  406. },
  407. ['new-form']= {
  408. YMDHMS='F j, ई सं Y, H:i:s',
  409. YMDHM ='F j, ई सं Y, H:i',
  410. YMD ='F j, ई सं Y',
  411. YM ='F, ई सं Y',
  412. MD ='F j',
  413. Y ='ई सं Y',
  414. M ='F'
  415. },
  416. }
  417. return p