localize.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.js";
  2. const eraValues = {
  3. narrow: ["e.ə", "b.e"],
  4. abbreviated: ["e.ə", "b.e"],
  5. wide: ["eramızdan əvvəl", "bizim era"],
  6. };
  7. const quarterValues = {
  8. narrow: ["1", "2", "3", "4"],
  9. abbreviated: ["K1", "K2", "K3", "K4"],
  10. wide: ["1ci kvartal", "2ci kvartal", "3cü kvartal", "4cü kvartal"],
  11. };
  12. const monthValues = {
  13. narrow: ["Y", "F", "M", "A", "M", "İ", "İ", "A", "S", "O", "N", "D"],
  14. abbreviated: [
  15. "Yan",
  16. "Fev",
  17. "Mar",
  18. "Apr",
  19. "May",
  20. "İyun",
  21. "İyul",
  22. "Avq",
  23. "Sen",
  24. "Okt",
  25. "Noy",
  26. "Dek",
  27. ],
  28. wide: [
  29. "Yanvar",
  30. "Fevral",
  31. "Mart",
  32. "Aprel",
  33. "May",
  34. "İyun",
  35. "İyul",
  36. "Avqust",
  37. "Sentyabr",
  38. "Oktyabr",
  39. "Noyabr",
  40. "Dekabr",
  41. ],
  42. };
  43. const dayValues = {
  44. narrow: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
  45. short: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
  46. abbreviated: ["Baz", "Baz.e", "Çər.a", "Çər", "Cüm.a", "Cüm", "Şə"],
  47. wide: [
  48. "Bazar",
  49. "Bazar ertəsi",
  50. "Çərşənbə axşamı",
  51. "Çərşənbə",
  52. "Cümə axşamı",
  53. "Cümə",
  54. "Şənbə",
  55. ],
  56. };
  57. const dayPeriodValues = {
  58. narrow: {
  59. am: "am",
  60. pm: "pm",
  61. midnight: "gecəyarı",
  62. noon: "gün",
  63. morning: "səhər",
  64. afternoon: "gündüz",
  65. evening: "axşam",
  66. night: "gecə",
  67. },
  68. abbreviated: {
  69. am: "AM",
  70. pm: "PM",
  71. midnight: "gecəyarı",
  72. noon: "gün",
  73. morning: "səhər",
  74. afternoon: "gündüz",
  75. evening: "axşam",
  76. night: "gecə",
  77. },
  78. wide: {
  79. am: "a.m.",
  80. pm: "p.m.",
  81. midnight: "gecəyarı",
  82. noon: "gün",
  83. morning: "səhər",
  84. afternoon: "gündüz",
  85. evening: "axşam",
  86. night: "gecə",
  87. },
  88. };
  89. const formattingDayPeriodValues = {
  90. narrow: {
  91. am: "a",
  92. pm: "p",
  93. midnight: "gecəyarı",
  94. noon: "gün",
  95. morning: "səhər",
  96. afternoon: "gündüz",
  97. evening: "axşam",
  98. night: "gecə",
  99. },
  100. abbreviated: {
  101. am: "AM",
  102. pm: "PM",
  103. midnight: "gecəyarı",
  104. noon: "gün",
  105. morning: "səhər",
  106. afternoon: "gündüz",
  107. evening: "axşam",
  108. night: "gecə",
  109. },
  110. wide: {
  111. am: "a.m.",
  112. pm: "p.m.",
  113. midnight: "gecəyarı",
  114. noon: "gün",
  115. morning: "səhər",
  116. afternoon: "gündüz",
  117. evening: "axşam",
  118. night: "gecə",
  119. },
  120. };
  121. const suffixes = {
  122. 1: "-inci",
  123. 5: "-inci",
  124. 8: "-inci",
  125. 70: "-inci",
  126. 80: "-inci",
  127. 2: "-nci",
  128. 7: "-nci",
  129. 20: "-nci",
  130. 50: "-nci",
  131. 3: "-üncü",
  132. 4: "-üncü",
  133. 100: "-üncü",
  134. 6: "-ncı",
  135. 9: "-uncu",
  136. 10: "-uncu",
  137. 30: "-uncu",
  138. 60: "-ıncı",
  139. 90: "-ıncı",
  140. };
  141. const getSuffix = (number) => {
  142. if (number === 0) {
  143. // special case for zero
  144. return number + "-ıncı";
  145. }
  146. const a = number % 10;
  147. const b = (number % 100) - a;
  148. const c = number >= 100 ? 100 : null;
  149. if (suffixes[a]) {
  150. return suffixes[a];
  151. } else if (suffixes[b]) {
  152. return suffixes[b];
  153. } else if (c !== null) {
  154. return suffixes[c];
  155. }
  156. return "";
  157. };
  158. const ordinalNumber = (dirtyNumber, _options) => {
  159. const number = Number(dirtyNumber);
  160. const suffix = getSuffix(number);
  161. return number + suffix;
  162. };
  163. export const localize = {
  164. ordinalNumber,
  165. era: buildLocalizeFn({
  166. values: eraValues,
  167. defaultWidth: "wide",
  168. }),
  169. quarter: buildLocalizeFn({
  170. values: quarterValues,
  171. defaultWidth: "wide",
  172. argumentCallback: (quarter) => quarter - 1,
  173. }),
  174. month: buildLocalizeFn({
  175. values: monthValues,
  176. defaultWidth: "wide",
  177. }),
  178. day: buildLocalizeFn({
  179. values: dayValues,
  180. defaultWidth: "wide",
  181. }),
  182. dayPeriod: buildLocalizeFn({
  183. values: dayPeriodValues,
  184. defaultWidth: "wide",
  185. formattingValues: formattingDayPeriodValues,
  186. defaultFormattingWidth: "wide",
  187. }),
  188. };