index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import buildLocalizeFn from "../../../_lib/buildLocalizeFn/index.js";
  2. var eraValues = {
  3. narrow: ['B', 'A'],
  4. abbreviated: ['BC', 'AD'],
  5. wide: ['Before Christ', 'Anno Domini']
  6. };
  7. var quarterValues = {
  8. narrow: ['1', '2', '3', '4'],
  9. abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
  10. wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
  11. };
  12. // Note: in English, the names of days of the week and months are capitalized.
  13. // If you are making a new locale based on this one, check if the same is true for the language you're working on.
  14. // Generally, formatted dates should look like they are in the middle of a sentence,
  15. // e.g. in Spanish language the weekdays and months should be in the lowercase.
  16. var monthValues = {
  17. narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
  18. abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
  19. wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
  20. };
  21. var dayValues = {
  22. narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
  23. short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
  24. abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  25. wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
  26. };
  27. var dayPeriodValues = {
  28. narrow: {
  29. am: 'a',
  30. pm: 'p',
  31. midnight: 'mi',
  32. noon: 'n',
  33. morning: 'morning',
  34. afternoon: 'afternoon',
  35. evening: 'evening',
  36. night: 'night'
  37. },
  38. abbreviated: {
  39. am: 'AM',
  40. pm: 'PM',
  41. midnight: 'midnight',
  42. noon: 'noon',
  43. morning: 'morning',
  44. afternoon: 'afternoon',
  45. evening: 'evening',
  46. night: 'night'
  47. },
  48. wide: {
  49. am: 'a.m.',
  50. pm: 'p.m.',
  51. midnight: 'midnight',
  52. noon: 'noon',
  53. morning: 'morning',
  54. afternoon: 'afternoon',
  55. evening: 'evening',
  56. night: 'night'
  57. }
  58. };
  59. var formattingDayPeriodValues = {
  60. narrow: {
  61. am: 'a',
  62. pm: 'p',
  63. midnight: 'mi',
  64. noon: 'n',
  65. morning: 'in the morning',
  66. afternoon: 'in the afternoon',
  67. evening: 'in the evening',
  68. night: 'at night'
  69. },
  70. abbreviated: {
  71. am: 'AM',
  72. pm: 'PM',
  73. midnight: 'midnight',
  74. noon: 'noon',
  75. morning: 'in the morning',
  76. afternoon: 'in the afternoon',
  77. evening: 'in the evening',
  78. night: 'at night'
  79. },
  80. wide: {
  81. am: 'a.m.',
  82. pm: 'p.m.',
  83. midnight: 'midnight',
  84. noon: 'noon',
  85. morning: 'in the morning',
  86. afternoon: 'in the afternoon',
  87. evening: 'in the evening',
  88. night: 'at night'
  89. }
  90. };
  91. var ordinalNumber = function ordinalNumber(dirtyNumber, _options) {
  92. var number = Number(dirtyNumber);
  93. // If ordinal numbers depend on context, for example,
  94. // if they are different for different grammatical genders,
  95. // use `options.unit`.
  96. //
  97. // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
  98. // 'day', 'hour', 'minute', 'second'.
  99. var rem100 = number % 100;
  100. if (rem100 > 20 || rem100 < 10) {
  101. switch (rem100 % 10) {
  102. case 1:
  103. return number + 'st';
  104. case 2:
  105. return number + 'nd';
  106. case 3:
  107. return number + 'rd';
  108. }
  109. }
  110. return number + 'th';
  111. };
  112. var localize = {
  113. ordinalNumber: ordinalNumber,
  114. era: buildLocalizeFn({
  115. values: eraValues,
  116. defaultWidth: 'wide'
  117. }),
  118. quarter: buildLocalizeFn({
  119. values: quarterValues,
  120. defaultWidth: 'wide',
  121. argumentCallback: function argumentCallback(quarter) {
  122. return quarter - 1;
  123. }
  124. }),
  125. month: buildLocalizeFn({
  126. values: monthValues,
  127. defaultWidth: 'wide'
  128. }),
  129. day: buildLocalizeFn({
  130. values: dayValues,
  131. defaultWidth: 'wide'
  132. }),
  133. dayPeriod: buildLocalizeFn({
  134. values: dayPeriodValues,
  135. defaultWidth: 'wide',
  136. formattingValues: formattingDayPeriodValues,
  137. defaultFormattingWidth: 'wide'
  138. })
  139. };
  140. export default localize;