localize.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.js";
  2. const eraValues = {
  3. narrow: ["BC", "AC"],
  4. abbreviated: ["紀元前", "西暦"],
  5. wide: ["紀元前", "西暦"],
  6. };
  7. const quarterValues = {
  8. narrow: ["1", "2", "3", "4"],
  9. abbreviated: ["Q1", "Q2", "Q3", "Q4"],
  10. wide: ["第1四半期", "第2四半期", "第3四半期", "第4四半期"],
  11. };
  12. const monthValues = {
  13. narrow: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
  14. abbreviated: [
  15. "1月",
  16. "2月",
  17. "3月",
  18. "4月",
  19. "5月",
  20. "6月",
  21. "7月",
  22. "8月",
  23. "9月",
  24. "10月",
  25. "11月",
  26. "12月",
  27. ],
  28. wide: [
  29. "1月",
  30. "2月",
  31. "3月",
  32. "4月",
  33. "5月",
  34. "6月",
  35. "7月",
  36. "8月",
  37. "9月",
  38. "10月",
  39. "11月",
  40. "12月",
  41. ],
  42. };
  43. const dayValues = {
  44. narrow: ["日", "月", "火", "水", "木", "金", "土"],
  45. short: ["日", "月", "火", "水", "木", "金", "土"],
  46. abbreviated: ["日", "月", "火", "水", "木", "金", "土"],
  47. wide: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
  48. };
  49. const dayPeriodValues = {
  50. narrow: {
  51. am: "午前",
  52. pm: "午後",
  53. midnight: "深夜",
  54. noon: "正午",
  55. morning: "朝",
  56. afternoon: "午後",
  57. evening: "夜",
  58. night: "深夜",
  59. },
  60. abbreviated: {
  61. am: "午前",
  62. pm: "午後",
  63. midnight: "深夜",
  64. noon: "正午",
  65. morning: "朝",
  66. afternoon: "午後",
  67. evening: "夜",
  68. night: "深夜",
  69. },
  70. wide: {
  71. am: "午前",
  72. pm: "午後",
  73. midnight: "深夜",
  74. noon: "正午",
  75. morning: "朝",
  76. afternoon: "午後",
  77. evening: "夜",
  78. night: "深夜",
  79. },
  80. };
  81. const formattingDayPeriodValues = {
  82. narrow: {
  83. am: "午前",
  84. pm: "午後",
  85. midnight: "深夜",
  86. noon: "正午",
  87. morning: "朝",
  88. afternoon: "午後",
  89. evening: "夜",
  90. night: "深夜",
  91. },
  92. abbreviated: {
  93. am: "午前",
  94. pm: "午後",
  95. midnight: "深夜",
  96. noon: "正午",
  97. morning: "朝",
  98. afternoon: "午後",
  99. evening: "夜",
  100. night: "深夜",
  101. },
  102. wide: {
  103. am: "午前",
  104. pm: "午後",
  105. midnight: "深夜",
  106. noon: "正午",
  107. morning: "朝",
  108. afternoon: "午後",
  109. evening: "夜",
  110. night: "深夜",
  111. },
  112. };
  113. const ordinalNumber = (dirtyNumber, options) => {
  114. const number = Number(dirtyNumber);
  115. const unit = String(options?.unit);
  116. switch (unit) {
  117. case "year":
  118. return `${number}年`;
  119. case "quarter":
  120. return `第${number}四半期`;
  121. case "month":
  122. return `${number}月`;
  123. case "week":
  124. return `第${number}週`;
  125. case "date":
  126. return `${number}日`;
  127. case "hour":
  128. return `${number}時`;
  129. case "minute":
  130. return `${number}分`;
  131. case "second":
  132. return `${number}秒`;
  133. default:
  134. return `${number}`;
  135. }
  136. };
  137. export const localize = {
  138. ordinalNumber: ordinalNumber,
  139. era: buildLocalizeFn({
  140. values: eraValues,
  141. defaultWidth: "wide",
  142. }),
  143. quarter: buildLocalizeFn({
  144. values: quarterValues,
  145. defaultWidth: "wide",
  146. argumentCallback: (quarter) => Number(quarter) - 1,
  147. }),
  148. month: buildLocalizeFn({
  149. values: monthValues,
  150. defaultWidth: "wide",
  151. }),
  152. day: buildLocalizeFn({
  153. values: dayValues,
  154. defaultWidth: "wide",
  155. }),
  156. dayPeriod: buildLocalizeFn({
  157. values: dayPeriodValues,
  158. defaultWidth: "wide",
  159. formattingValues: formattingDayPeriodValues,
  160. defaultFormattingWidth: "wide",
  161. }),
  162. };