@knight-lab/timelinejs 3.8.21 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/.nvmrc +1 -1
  2. package/API_TEST.html +0 -5
  3. package/CHANGELOG.md +6 -0
  4. package/dist/css/fonts/font.amatic-andika.css +1 -1
  5. package/dist/css/fonts/font.bitter-raleway.css +4 -4
  6. package/dist/css/fonts/font.clicker-garamond.css +1 -1
  7. package/dist/css/fonts/font.dancing-ledger.css +2 -2
  8. package/dist/css/fonts/font.oldstandard.css +2 -2
  9. package/dist/css/fonts/font.opensans-gentiumbook.css +2 -2
  10. package/dist/css/fonts/font.playfair-faunaone.css +2 -2
  11. package/dist/css/fonts/font.playfair.css +2 -2
  12. package/dist/css/fonts/font.roboto-megrim.css +2 -2
  13. package/dist/css/fonts/font.unicaone-vollkorn.css +2 -2
  14. package/dist/css/icons/tl-icons.eot +0 -0
  15. package/dist/css/icons/tl-icons.svg +58 -55
  16. package/dist/css/icons/tl-icons.ttf +0 -0
  17. package/dist/css/icons/tl-icons.woff +0 -0
  18. package/dist/css/icons/tl-icons.woff2 +0 -0
  19. package/dist/css/themes/timeline.theme.contrast.css +157 -319
  20. package/dist/css/themes/timeline.theme.dark.css +146 -308
  21. package/dist/css/timeline.css +155 -317
  22. package/dist/css/timeline.css.map +1 -1
  23. package/dist/embed/compare.html +4 -4
  24. package/dist/embed/index.html +3 -6
  25. package/dist/embed/old-index.html +2 -5
  26. package/dist/embed/popular_timelines.json +5989 -1
  27. package/dist/js/locale/af.json +54 -56
  28. package/dist/js/locale/ar.json +54 -56
  29. package/dist/js/locale/be.json +71 -73
  30. package/dist/js/locale/bg.json +54 -56
  31. package/dist/js/locale/ca.json +54 -56
  32. package/dist/js/locale/cz.json +56 -63
  33. package/dist/js/locale/da.json +54 -56
  34. package/dist/js/locale/de.json +1 -3
  35. package/dist/js/locale/el.json +54 -56
  36. package/dist/js/locale/en-24hr.json +51 -57
  37. package/dist/js/locale/en-week.json +51 -57
  38. package/dist/js/locale/en.json +3 -8
  39. package/dist/js/locale/eo.json +54 -56
  40. package/dist/js/locale/es.json +55 -57
  41. package/dist/js/locale/et.json +54 -56
  42. package/dist/js/locale/eu.json +54 -56
  43. package/dist/js/locale/fa.json +52 -54
  44. package/dist/js/locale/fi.json +73 -75
  45. package/dist/js/locale/fo.json +54 -56
  46. package/dist/js/locale/fr.json +1 -8
  47. package/dist/js/locale/fy.json +71 -73
  48. package/dist/js/locale/ga.json +54 -56
  49. package/dist/js/locale/gl.json +54 -56
  50. package/dist/js/locale/he.json +54 -56
  51. package/dist/js/locale/hi.json +72 -74
  52. package/dist/js/locale/hr.json +54 -56
  53. package/dist/js/locale/hu.json +91 -93
  54. package/dist/js/locale/hy.json +54 -56
  55. package/dist/js/locale/id.json +54 -56
  56. package/dist/js/locale/is.json +54 -56
  57. package/dist/js/locale/it.json +18 -20
  58. package/dist/js/locale/iw.json +54 -56
  59. package/dist/js/locale/ja.json +54 -56
  60. package/dist/js/locale/ka.json +54 -56
  61. package/dist/js/locale/ko.json +54 -56
  62. package/dist/js/locale/lb.json +54 -56
  63. package/dist/js/locale/lt.json +54 -56
  64. package/dist/js/locale/lv.json +54 -56
  65. package/dist/js/locale/ms.json +54 -56
  66. package/dist/js/locale/my.json +31 -38
  67. package/dist/js/locale/nb.json +54 -56
  68. package/dist/js/locale/ne.json +54 -56
  69. package/dist/js/locale/nl.json +54 -56
  70. package/dist/js/locale/nn.json +54 -56
  71. package/dist/js/locale/no.json +54 -56
  72. package/dist/js/locale/pl.json +54 -56
  73. package/dist/js/locale/pt-br.json +45 -47
  74. package/dist/js/locale/pt.json +57 -59
  75. package/dist/js/locale/rm.json +54 -56
  76. package/dist/js/locale/ro.json +54 -56
  77. package/dist/js/locale/ru.json +54 -56
  78. package/dist/js/locale/si.json +53 -55
  79. package/dist/js/locale/sk.json +54 -56
  80. package/dist/js/locale/sl.json +54 -56
  81. package/dist/js/locale/sr-cy.json +54 -56
  82. package/dist/js/locale/sr.json +54 -56
  83. package/dist/js/locale/sv.json +11 -13
  84. package/dist/js/locale/ta.json +54 -56
  85. package/dist/js/locale/te.json +53 -55
  86. package/dist/js/locale/th.json +55 -62
  87. package/dist/js/locale/tl.json +54 -56
  88. package/dist/js/locale/tr.json +54 -56
  89. package/dist/js/locale/uk.json +54 -56
  90. package/dist/js/locale/ur.json +2 -9
  91. package/dist/js/locale/vi.json +33 -35
  92. package/dist/js/locale/zh-cn.json +1 -3
  93. package/dist/js/locale/zh-tw.json +54 -56
  94. package/dist/js/timeline.js +2 -3
  95. package/dist/js/timeline.js.LICENSE.txt +1 -0
  96. package/dist/js/timeline.js.map +1 -1
  97. package/package.json +20 -18
  98. package/src/css/icons/icons.html +49 -1
  99. package/src/css/icons/tl-icons.eot +0 -0
  100. package/src/css/icons/tl-icons.svg +58 -55
  101. package/src/css/icons/tl-icons.ttf +0 -0
  102. package/src/css/icons/tl-icons.woff +0 -0
  103. package/src/css/icons/tl-icons.woff2 +0 -0
  104. package/src/embed/compare.html +4 -4
  105. package/src/embed/index.html +3 -6
  106. package/src/embed/old-index.html +2 -5
  107. package/src/embed/popular_timelines.json +5989 -1
  108. package/src/js/core/TimelineConfig.js +0 -1
  109. package/src/js/dom/DOMUtil.js +12 -12
  110. package/src/js/language/I18NMixins.js +13 -3
  111. package/src/js/language/Language.js +50 -23
  112. package/src/js/language/__tests__/Language.test.js +32 -0
  113. package/src/js/language/locale/af.json +54 -56
  114. package/src/js/language/locale/ar.json +54 -56
  115. package/src/js/language/locale/be.json +71 -73
  116. package/src/js/language/locale/bg.json +54 -56
  117. package/src/js/language/locale/ca.json +54 -56
  118. package/src/js/language/locale/cz.json +56 -63
  119. package/src/js/language/locale/da.json +54 -56
  120. package/src/js/language/locale/de.json +1 -3
  121. package/src/js/language/locale/el.json +54 -56
  122. package/src/js/language/locale/en-24hr.json +51 -57
  123. package/src/js/language/locale/en-week.json +51 -57
  124. package/src/js/language/locale/en.json +3 -8
  125. package/src/js/language/locale/eo.json +54 -56
  126. package/src/js/language/locale/es.json +55 -57
  127. package/src/js/language/locale/et.json +54 -56
  128. package/src/js/language/locale/eu.json +54 -56
  129. package/src/js/language/locale/fa.json +52 -54
  130. package/src/js/language/locale/fi.json +73 -75
  131. package/src/js/language/locale/fo.json +54 -56
  132. package/src/js/language/locale/fr.json +1 -8
  133. package/src/js/language/locale/fy.json +71 -73
  134. package/src/js/language/locale/ga.json +54 -56
  135. package/src/js/language/locale/gl.json +54 -56
  136. package/src/js/language/locale/he.json +54 -56
  137. package/src/js/language/locale/hi.json +72 -74
  138. package/src/js/language/locale/hr.json +54 -56
  139. package/src/js/language/locale/hu.json +91 -93
  140. package/src/js/language/locale/hy.json +54 -56
  141. package/src/js/language/locale/id.json +54 -56
  142. package/src/js/language/locale/is.json +54 -56
  143. package/src/js/language/locale/it.json +18 -20
  144. package/src/js/language/locale/iw.json +54 -56
  145. package/src/js/language/locale/ja.json +54 -56
  146. package/src/js/language/locale/ka.json +54 -56
  147. package/src/js/language/locale/ko.json +54 -56
  148. package/src/js/language/locale/lb.json +54 -56
  149. package/src/js/language/locale/lt.json +54 -56
  150. package/src/js/language/locale/lv.json +54 -56
  151. package/src/js/language/locale/ms.json +54 -56
  152. package/src/js/language/locale/my.json +31 -38
  153. package/src/js/language/locale/nb.json +54 -56
  154. package/src/js/language/locale/ne.json +54 -56
  155. package/src/js/language/locale/nl.json +54 -56
  156. package/src/js/language/locale/nn.json +54 -56
  157. package/src/js/language/locale/no.json +54 -56
  158. package/src/js/language/locale/pl.json +54 -56
  159. package/src/js/language/locale/pt-br.json +45 -47
  160. package/src/js/language/locale/pt.json +57 -59
  161. package/src/js/language/locale/rm.json +54 -56
  162. package/src/js/language/locale/ro.json +54 -56
  163. package/src/js/language/locale/ru.json +54 -56
  164. package/src/js/language/locale/si.json +53 -55
  165. package/src/js/language/locale/sk.json +54 -56
  166. package/src/js/language/locale/sl.json +54 -56
  167. package/src/js/language/locale/sr-cy.json +54 -56
  168. package/src/js/language/locale/sr.json +54 -56
  169. package/src/js/language/locale/sv.json +11 -13
  170. package/src/js/language/locale/ta.json +54 -56
  171. package/src/js/language/locale/te.json +53 -55
  172. package/src/js/language/locale/th.json +55 -62
  173. package/src/js/language/locale/tl.json +54 -56
  174. package/src/js/language/locale/tr.json +54 -56
  175. package/src/js/language/locale/uk.json +54 -56
  176. package/src/js/language/locale/ur.json +2 -9
  177. package/src/js/language/locale/vi.json +33 -35
  178. package/src/js/language/locale/zh-cn.json +1 -3
  179. package/src/js/language/locale/zh-tw.json +54 -56
  180. package/src/js/media/Media.js +6 -2
  181. package/src/js/media/MediaType.js +1 -1
  182. package/src/js/media/types/DailyMotion.js +9 -1
  183. package/src/js/media/types/Text.js +33 -31
  184. package/src/js/media/types/Vimeo.js +58 -57
  185. package/src/js/slider/Slide.js +17 -2
  186. package/src/js/slider/SlideNav.js +12 -7
  187. package/src/js/slider/StorySlider.js +8 -12
  188. package/src/js/timeline/Timeline.js +47 -13
  189. package/src/js/timenav/TimeAxis.js +20 -1
  190. package/src/js/timenav/TimeMarker.js +48 -3
  191. package/src/js/timenav/TimeNav.js +140 -15
  192. package/src/js/ui/MenuBar.js +206 -149
  193. package/src/js/ui/Swipable.js +1 -1
  194. package/src/less/TL.Timeline.Base.less +38 -1
  195. package/src/less/Typography.less +2 -3
  196. package/src/less/Variables.less +4 -1
  197. package/src/less/icons/Icons.less +9 -0
  198. package/src/less/media/types/TL.Media.Text.less +5 -0
  199. package/src/less/slider/TL.Slide.less +40 -45
  200. package/src/less/slider/TL.SlideNav.less +82 -55
  201. package/src/less/themes/contrast/Variables.less +7 -4
  202. package/src/less/themes/dark/TL.Theme.Dark.less +2 -2
  203. package/src/less/themes/dark/Variables.less +4 -1
  204. package/src/less/timenav/TL.TimeMarker.less +16 -10
  205. package/src/less/timenav/TL.TimeNav.less +2 -50
  206. package/src/less/ui/TL.MenuBar.Button.less +8 -6
  207. package/src/template/all-media-types.json +52 -2
  208. package/src/template/index.html +2 -1
  209. package/webpack.common.js +13 -10
  210. package/webpack.dev.js +16 -6
  211. package/dist/js/timeline-min.js +0 -4
  212. package/dist/timeline3.zip +0 -0
  213. package/src/less/core/Reset.less +0 -115
@@ -177,7 +177,6 @@ export class TimelineConfig {
177
177
  trace("Missing start date, skipping event")
178
178
  console.log(data)
179
179
  return null
180
- // throw new TLError("missing_start_date_err", event_id);
181
180
  }
182
181
 
183
182
  this._processDates(data);
@@ -5,21 +5,21 @@
5
5
  ================================================== */
6
6
 
7
7
  function hasClass(el, name) {
8
- return (el.className.length > 0) &&
9
- new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
8
+ return (el.className.length > 0) &&
9
+ new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
10
10
  }
11
11
 
12
12
  export function addClass(el, name) {
13
- if (!hasClass(el, name)) {
14
- el.className += (el.className ? ' ' : '') + name;
15
- }
13
+ if (!hasClass(el, name)) {
14
+ el.className += (el.className ? ' ' : '') + name;
15
+ }
16
16
  }
17
17
 
18
18
  export function removeClass(el, name) {
19
- el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
20
- if (match === name) {
21
- return '';
22
- }
23
- return w;
24
- }).replace(/^\s+/, '');
25
- }
19
+ el.className = el.className.replace(/(\S+)\s*/g, function(w, match) {
20
+ if (match === name) {
21
+ return '';
22
+ }
23
+ return w;
24
+ }).replace(/^\s+/, '');
25
+ }
@@ -1,5 +1,5 @@
1
1
  /* I18NMixins
2
- assumes that its class has an options object with a Language instance
2
+ assumes that its class has an attribute `language` with a Language instance
3
3
  ================================================== */
4
4
  import { trace } from "../core/Util"
5
5
  import { fallback } from "../language/Language"
@@ -24,8 +24,18 @@ class I18NMixins {
24
24
  return fallback;
25
25
  }
26
26
 
27
- _(msg) {
28
- return this.getLanguage()._(msg);
27
+ /**
28
+ * Look up a localized version of a standard message using the Language instance
29
+ * that was previously set with {@link setLanguage}.
30
+ *
31
+ * @see {@link Language#_}
32
+ * @param {string} msg - a message key
33
+ * @param {Object} [context] - a dictionary with string keys appropriate to message `k`
34
+ * and string values which will be interpolated into the message.
35
+ * @returns {string} - a localized string appropriate to the message key
36
+ */
37
+ _(msg, context) {
38
+ return this.getLanguage()._(msg, context);
29
39
  }
30
40
  }
31
41
 
@@ -1,19 +1,21 @@
1
1
  import { mergeData, pad, trace } from "../core/Util"
2
2
  import { fetchJSON } from "../net/Net"
3
3
  import { BigYear } from "../date/TLDate"
4
+ import TLError from "../core/TLError";
4
5
 
5
- /**
6
- * Instantiate a Language object to manage I18N.
7
- * WARNING: In general, this should not be called directly, because it doesn't block while
8
- * the language file is loaded, which can lead to race conditions in some cases. In most
9
- * cases, language objects other than the fallback should be gotten by calling the
10
- * async function loadLanguage defined elsewhere in this file.
11
- *
12
- * @param {String} [language=en] - a language code or a URL to a
13
- * translation file
14
- * @param {string} [script_path] - if `language` is not a URL, this is used
15
- * to construct a fully-qualified URL to load a translation file.
16
- */
6
+ const MESSAGE_VARIABLE_PATTERN = new RegExp(/\$\{(.+?)\}/g)
7
+ /**
8
+ * Instantiate a Language object to manage I18N.
9
+ * WARNING: In general, this should not be called directly, because it doesn't block while
10
+ * the language file is loaded, which can lead to race conditions in some cases. In most
11
+ * cases, language objects other than the fallback should be gotten by calling the
12
+ * async function loadLanguage defined elsewhere in this file.
13
+ *
14
+ * @param {String} [language=en] - a language code or a URL to a
15
+ * translation file
16
+ * @param {string} [script_path] - if `language` is not a URL, this is used
17
+ * to construct a fully-qualified URL to load a translation file.
18
+ */
17
19
  class Language {
18
20
  constructor(language, script_path) {
19
21
  // borrowed from http://stackoverflow.com/a/14446414/102476
@@ -73,8 +75,28 @@ class Language {
73
75
  }
74
76
  }
75
77
 
76
- _(k) {
77
- return this.messages[k] || Language.fallback.messages[k] || k;
78
+ /**
79
+ * Look up a localized version of a standard message. While using `_` for the
80
+ * method name is not exactly idiomatic javascript, it was inspired by Python's
81
+ * {@link https://docs.python.org/3/library/gettext.html|gettext} module, with
82
+ * the intention of reducing clutter in places where, in a non-I18N'd app, you'd
83
+ * simply have a quoted string.
84
+ *
85
+ * @param {string} k - a message key
86
+ * @param {Object} [context] - a dictionary with string keys appropriate to message `k`
87
+ * and string values which will be interpolated into the message.
88
+ * @returns {string} - a localized string appropriate to the message key
89
+ */
90
+ _(k, context) {
91
+ let msg = this.messages[k] || Language.fallback.messages[k] || k;
92
+ if (msg.match(MESSAGE_VARIABLE_PATTERN)) {
93
+ if (!context) throw new TLError("template_message_without_context")
94
+ for (let match of msg.matchAll(MESSAGE_VARIABLE_PATTERN)) {
95
+ if (!(match[1] in context)) throw new TLError("template_message_without_context")
96
+ msg = msg.replace(match[0], context[match[1]])
97
+ }
98
+ }
99
+ return msg
78
100
  }
79
101
 
80
102
  formatDate(date, format_name) {
@@ -267,19 +289,17 @@ var LANGUAGES = {
267
289
  loading: "Loading",
268
290
  wikipedia: "From Wikipedia, the free encyclopedia",
269
291
  error: "Error",
270
- contract_timeline: "Contract Timeline",
271
292
  return_to_title: "Return to Title",
293
+ go_to_end: "Go to the last slide",
272
294
  loading_content: "Loading Content",
273
- expand_timeline: "Expand Timeline",
274
295
  loading_timeline: "Loading Timeline... ",
275
296
  swipe_to_navigate: "Swipe to Navigate<br><span class='tl-button'>OK</span>",
297
+ zoom_in: "Zoom in",
298
+ zoom_out: "Zoom out",
276
299
  unknown_read_err: "An unexpected error occurred trying to read your spreadsheet data",
277
300
  invalid_url_err: "Unable to read Timeline data. Make sure your URL is for a Google Spreadsheet or a Timeline JSON file.",
278
- invalid_url_share_required: "Because of unexpected changes to Google's data access API, the creator of this timeline must enable 'anyone with the url can read' access for this spreadsheet. See timeline.knightlab.com for more information.",
279
301
  network_err: "Unable to read your Google Spreadsheet. Make sure you have published it to the web.",
280
- empty_feed_err: "No data entries found",
281
302
  missing_start_date_err: "Missing start_date",
282
- invalid_data_format_err: "Header row has been modified.",
283
303
  invalid_start_time_without_date: "Invalid configuration: time cannot be used without date.",
284
304
  invalid_end_time_without_date: "Invalid configuration: end time cannot be used without end date.",
285
305
  date_compare_err: "Can't compare timeline date objects on different scales",
@@ -295,19 +315,26 @@ var LANGUAGES = {
295
315
  flickr_notfound_err: "Photo not found or private",
296
316
  flickr_invalidurl_err: "Invalid Flickr URL",
297
317
  imgur_invalidurl_err: "Invalid Imgur URL",
298
- twitter_invalidurl_err: "Invalid Twitter URL",
299
318
  twitter_load_err: "Unable to load Tweet",
300
319
  twitterembed_invalidurl_err: "Invalid Twitter Embed url",
301
320
  wikipedia_load_err: "Unable to load Wikipedia entry",
302
- youtube_invalidurl_err: "Invalid YouTube URL",
303
321
  spotify_invalid_url: "Invalid Spotify URL",
304
- template_value_err: "No value provided for variable",
305
322
  invalid_rgb_err: "Invalid RGB argument",
306
323
  time_scale_scale_err: "Don't know how to get date from time for scale",
307
324
  axis_helper_no_options_err: "Axis helper must be configured with options",
308
325
  axis_helper_scale_err: "No AxisHelper available for scale",
309
326
  invalid_integer_option: "Invalid option value—must be a whole number.",
310
- instagram_bad_request: "Invalid or private Instagram URL"
327
+ instagram_bad_request: "Invalid or private Instagram URL",
328
+ template_message_without_context: "Required variables not provided for template translation message",
329
+ aria_label_timeline: "Timeline",
330
+ aria_label_timeline_navigation: "Timeline navigation",
331
+ aria_label_timeline_content: "Timeline content",
332
+ // The following message keys are pseudo-template literal.
333
+ // Do not surround with backticks (`) since evaluation is deferred
334
+ // (and backticks wouldn't be allowed in JSON localization files)
335
+ // for each, document typical values for variable components
336
+ aria_label_zoomin: "Show less than ${start} to ${end}", // 'start' and 'end' should be numeric years
337
+ aria_label_zoomout: "Show more than ${start} to ${end}" // 'start' and 'end' should be numeric years
311
338
  },
312
339
  date: {
313
340
  month: [
@@ -0,0 +1,32 @@
1
+ import { fallback } from "../Language"
2
+ import { classMixin } from "../../core/Util"
3
+ import { I18NMixins } from "../I18NMixins"
4
+ class MixinTest {
5
+
6
+ }
7
+
8
+ classMixin(MixinTest, I18NMixins)
9
+
10
+ test("Test variable interpolation", () => {
11
+ let msg = fallback._("aria_label_zoomin", { start: 1900, end: 2000 })
12
+ expect(msg).toBe('Show less than 1900 to 2000')
13
+ })
14
+
15
+ test("Test variable interpolation error checking with no context", () => {
16
+ expect(() => {
17
+ let msg = fallback._("aria_label_zoomin")
18
+ }).toThrow()
19
+ })
20
+
21
+ test("Test variable interpolation error checking with partial context", () => {
22
+ expect(() => {
23
+ let msg = fallback._("aria_label_zoomin", { start: 1900 })
24
+ }).toThrow()
25
+ })
26
+
27
+ test("Test interpolation through a mixin", () => {
28
+ let mixin = new MixinTest()
29
+ mixin.setLanguage(fallback)
30
+ let msg = mixin._("aria_label_zoomin", { start: 1900, end: 2000 })
31
+ expect(msg).toBe('Show less than 1900 to 2000')
32
+ })
@@ -1,75 +1,73 @@
1
1
  {
2
- "lang": "af",
2
+ "lang": "af",
3
3
  "date": {
4
4
  "month_abbr": [
5
- "Jan.",
6
- "Feb.",
7
- "Maart",
8
- "April",
9
- "Mei",
10
- "Junei",
11
- "Julie",
12
- "Aug.",
13
- "Sept.",
14
- "Okt.",
15
- "Nov.",
5
+ "Jan.",
6
+ "Feb.",
7
+ "Maart",
8
+ "April",
9
+ "Mei",
10
+ "Junei",
11
+ "Julie",
12
+ "Aug.",
13
+ "Sept.",
14
+ "Okt.",
15
+ "Nov.",
16
16
  "Des."
17
- ],
17
+ ],
18
18
  "day_abbr": [
19
- "Son.",
20
- "Maan.",
21
- "Dins.",
22
- "Woen.",
23
- "Don.",
24
- "Vry.",
19
+ "Son.",
20
+ "Maan.",
21
+ "Dins.",
22
+ "Woen.",
23
+ "Don.",
24
+ "Vry.",
25
25
  "Sat."
26
- ],
26
+ ],
27
27
  "day": [
28
- "Sondag",
29
- "Maandag",
30
- "Dinsdag",
31
- "Woensdag",
32
- "Donderdag",
33
- "Vrydag",
28
+ "Sondag",
29
+ "Maandag",
30
+ "Dinsdag",
31
+ "Woensdag",
32
+ "Donderdag",
33
+ "Vrydag",
34
34
  "Saterdag"
35
- ],
35
+ ],
36
36
  "month": [
37
- "Januarie",
38
- "Februarie",
39
- "Maart",
40
- "April",
41
- "Mei",
42
- "Junie",
43
- "Julie",
44
- "Augustus",
45
- "September",
46
- "Oktober",
47
- "November",
37
+ "Januarie",
38
+ "Februarie",
39
+ "Maart",
40
+ "April",
41
+ "Mei",
42
+ "Junie",
43
+ "Julie",
44
+ "Augustus",
45
+ "September",
46
+ "Oktober",
47
+ "November",
48
48
  "Desember"
49
49
  ]
50
- },
50
+ },
51
51
  "api": {
52
52
  "wikipedia": "af"
53
- },
53
+ },
54
54
  "messages": {
55
- "loading": "Aan't laai",
56
- "contract_timeline": "Krimp die tydlyn",
57
- "return_to_title": "Begin voor",
58
- "wikipedia": "Van Wikipedia, die gratis ensiklopedie",
59
- "loading_content": "Die inhoud laai",
60
- "expand_timeline": "Rek die tydlyn",
55
+ "loading": "Aan't laai",
56
+ "return_to_title": "Begin voor",
57
+ "wikipedia": "Van Wikipedia, die gratis ensiklopedie",
58
+ "loading_content": "Die inhoud laai",
61
59
  "loading_timeline": "Die tydlyn laai... "
62
- },
60
+ },
63
61
  "dateformats": {
64
- "full_long": "d mmm',' yyyy 'om' HH:MM",
65
- "full_short": "d mmm",
66
- "full": "d mmmm yyyy",
67
- "month_short": "mmm",
68
- "time_no_seconds_small_date": "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
69
- "month": "mmmm yyyy",
70
- "time_no_seconds_short": "HH:MM",
71
- "time_short": "HH:MM:ss",
72
- "year": "yyyy",
62
+ "full_long": "d mmm',' yyyy 'om' HH:MM",
63
+ "full_short": "d mmm",
64
+ "full": "d mmmm yyyy",
65
+ "month_short": "mmm",
66
+ "time_no_seconds_small_date": "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
67
+ "month": "mmmm yyyy",
68
+ "time_no_seconds_short": "HH:MM",
69
+ "time_short": "HH:MM:ss",
70
+ "year": "yyyy",
73
71
  "full_long_small_date": "HH:MM'<br/><small>d mmm yyyy'</small>'"
74
72
  }
75
73
  }
@@ -1,76 +1,74 @@
1
1
  {
2
- "lang": "ar",
2
+ "lang": "ar",
3
3
  "direction": "rtl",
4
4
  "messages": {
5
- "loading": "تحميل",
6
- "contract_timeline": "الاتفاقية",
7
- "return_to_title": "العودة",
8
- "wikipedia": "من ويكيبيديا, الموسوعة الحرة",
9
- "loading_content": "تحميل المحتوى",
10
- "expand_timeline": "تكبير العرض",
5
+ "loading": "تحميل",
6
+ "return_to_title": "العودة",
7
+ "wikipedia": "من ويكيبيديا, الموسوعة الحرة",
8
+ "loading_content": "تحميل المحتوى",
11
9
  "loading_timeline": "جاري التحميل... "
12
- },
10
+ },
13
11
  "api": {
14
12
  "wikipedia": "ar"
15
- },
13
+ },
16
14
  "date": {
17
15
  "month_abbr": [
18
- "كانون الثاني",
19
- "شباط",
20
- "آذار",
21
- "نيسان",
22
- "أيار",
23
- "حزيران",
24
- "تموز",
25
- "آب",
26
- "أيلول",
27
- "تشرين الأول",
28
- "تشرين الثاني",
16
+ "كانون الثاني",
17
+ "شباط",
18
+ "آذار",
19
+ "نيسان",
20
+ "أيار",
21
+ "حزيران",
22
+ "تموز",
23
+ "آب",
24
+ "أيلول",
25
+ "تشرين الأول",
26
+ "تشرين الثاني",
29
27
  "كانون الأول"
30
- ],
28
+ ],
31
29
  "day_abbr": [
32
- "الأحد",
33
- "الإثنين",
34
- "الثلاثاء",
35
- "الأربعاء",
36
- "الخميس",
37
- "الجمعة",
30
+ "الأحد",
31
+ "الإثنين",
32
+ "الثلاثاء",
33
+ "الأربعاء",
34
+ "الخميس",
35
+ "الجمعة",
38
36
  "السبت"
39
- ],
37
+ ],
40
38
  "day": [
41
- "الأحد",
42
- "الإثنين",
43
- "الثلاثاء",
44
- "الأربعاء",
45
- "الخميس",
46
- "الجمعة",
39
+ "الأحد",
40
+ "الإثنين",
41
+ "الثلاثاء",
42
+ "الأربعاء",
43
+ "الخميس",
44
+ "الجمعة",
47
45
  "السبت"
48
- ],
46
+ ],
49
47
  "month": [
50
- "كانون الثاني",
51
- "شباط",
52
- "آذار",
53
- "نيسان",
54
- "أيار",
55
- "حزيران",
56
- "تموز",
57
- "آب",
58
- "أيلول",
59
- "تشرين الأول",
60
- "تشرين الثاني",
48
+ "كانون الثاني",
49
+ "شباط",
50
+ "آذار",
51
+ "نيسان",
52
+ "أيار",
53
+ "حزيران",
54
+ "تموز",
55
+ "آب",
56
+ "أيلول",
57
+ "تشرين الأول",
58
+ "تشرين الثاني",
61
59
  "كانون الأول"
62
60
  ]
63
- },
61
+ },
64
62
  "dateformats": {
65
- "full_long": "mmm d',' yyyy 'at' hh:MM TT",
66
- "full_short": "mmm d",
67
- "full": "mmmm d',' yyyy",
68
- "month_short": "mmm",
69
- "time_no_seconds_small_date": "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
70
- "month": "mmmm yyyy",
71
- "time_no_seconds_short": "h:MM TT",
72
- "time_short": "h:MM:ss TT",
73
- "year": "yyyy",
63
+ "full_long": "mmm d',' yyyy 'at' hh:MM TT",
64
+ "full_short": "mmm d",
65
+ "full": "mmmm d',' yyyy",
66
+ "month_short": "mmm",
67
+ "time_no_seconds_small_date": "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
68
+ "month": "mmmm yyyy",
69
+ "time_no_seconds_short": "h:MM TT",
70
+ "time_short": "h:MM:ss TT",
71
+ "year": "yyyy",
74
72
  "full_long_small_date": "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
75
73
  }
76
74
  }
@@ -1,75 +1,73 @@
1
1
  {
2
- "lang": "be",
3
- "date": {
4
- "month_abbr": [
5
- "стд",
6
- "лют",
7
- "скв",
8
- "крс",
9
- "май",
10
- "чрв",
11
- "лпн",
12
- "жнв",
13
- "врс",
14
- "кст",
15
- "лст",
16
- "снж"
17
- ],
18
- "day_abbr": [
19
- "Нд.",
20
- "Пн.",
21
- "Аўт.",
22
- "Ср.",
23
- "Чц.",
24
- "Пт.",
25
- "Сб."
26
- ],
27
- "day": [
28
- "нядзеля",
29
- "панядзелак",
30
- "аўторак",
31
- "серада",
32
- "чацвер",
33
- "пятніца",
34
- "субота"
35
- ],
36
- "month": [
37
- "студзень",
38
- "люты",
39
- "сакавік",
40
- "красавік",
41
- "май",
42
- "чэрвень",
43
- "ліпень",
44
- "жнівень",
45
- "верасень",
46
- "кастрычнік",
47
- "лістапад",
48
- "снежань"
49
- ]
50
- },
51
- "api": {
52
- "wikipedia": "be"
53
- },
54
- "messages": {
55
- "loading": "Загрузка",
56
- "contract_timeline": "Аддаліць лінію часу",
57
- "return_to_title": "Вярнуцца ў пачатак",
58
- "wikipedia": "З Вікіпедыі, свабоднай энцыклапедыі",
59
- "loading_content": "Загрузка зместу",
60
- "expand_timeline": "Наблізіць лінію часу",
61
- "loading_timeline": "Загрузка лініі часу... "
62
- },
63
- "dateformats": {
64
- "full_long": "d mmm yyyy 'at' h:MM TT",
65
- "full_short": "d mmm",
66
- "full": "d mmmm yyyy",
67
- "time_short": "h:MM:ss TT",
68
- "year": "yyyy",
69
- "time_no_seconds_short": "h:MM TT",
70
- "month_short": "mmm",
71
- "full_long_small_date": "h:MM TT'<br/><small>d mmm yyyy'</small>'",
72
- "time_no_seconds_small_date": "h:MM TT'<br/><small>'d mmmm yyyy'</small>'",
73
- "month": "mmmm yyyy"
74
- }
2
+ "lang": "be",
3
+ "date": {
4
+ "month_abbr": [
5
+ "стд",
6
+ "лют",
7
+ "скв",
8
+ "крс",
9
+ "май",
10
+ "чрв",
11
+ "лпн",
12
+ "жнв",
13
+ "врс",
14
+ "кст",
15
+ "лст",
16
+ "снж"
17
+ ],
18
+ "day_abbr": [
19
+ "Нд.",
20
+ "Пн.",
21
+ "Аўт.",
22
+ "Ср.",
23
+ "Чц.",
24
+ "Пт.",
25
+ "Сб."
26
+ ],
27
+ "day": [
28
+ "нядзеля",
29
+ "панядзелак",
30
+ "аўторак",
31
+ "серада",
32
+ "чацвер",
33
+ "пятніца",
34
+ "субота"
35
+ ],
36
+ "month": [
37
+ "студзень",
38
+ "люты",
39
+ "сакавік",
40
+ "красавік",
41
+ "май",
42
+ "чэрвень",
43
+ "ліпень",
44
+ "жнівень",
45
+ "верасень",
46
+ "кастрычнік",
47
+ "лістапад",
48
+ "снежань"
49
+ ]
50
+ },
51
+ "api": {
52
+ "wikipedia": "be"
53
+ },
54
+ "messages": {
55
+ "loading": "Загрузка",
56
+ "return_to_title": "Вярнуцца ў пачатак",
57
+ "wikipedia": "З Вікіпедыі, свабоднай энцыклапедыі",
58
+ "loading_content": "Загрузка зместу",
59
+ "loading_timeline": "Загрузка лініі часу... "
60
+ },
61
+ "dateformats": {
62
+ "full_long": "d mmm yyyy 'at' h:MM TT",
63
+ "full_short": "d mmm",
64
+ "full": "d mmmm yyyy",
65
+ "time_short": "h:MM:ss TT",
66
+ "year": "yyyy",
67
+ "time_no_seconds_short": "h:MM TT",
68
+ "month_short": "mmm",
69
+ "full_long_small_date": "h:MM TT'<br/><small>d mmm yyyy'</small>'",
70
+ "time_no_seconds_small_date": "h:MM TT'<br/><small>'d mmmm yyyy'</small>'",
71
+ "month": "mmmm yyyy"
72
+ }
75
73
  }