localize.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.js";
  2. const eraValues = {
  3. narrow: ["v.Chr.", "n.Chr."],
  4. abbreviated: ["v.Chr.", "n.Chr."],
  5. wide: ["vor Christus", "nach Christus"],
  6. };
  7. const quarterValues = {
  8. narrow: ["1", "2", "3", "4"],
  9. abbreviated: ["Q1", "Q2", "Q3", "Q4"],
  10. wide: ["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"],
  11. };
  12. // Note: in German, 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. const monthValues = {
  17. narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
  18. abbreviated: [
  19. "Jän",
  20. "Feb",
  21. "Mär",
  22. "Apr",
  23. "Mai",
  24. "Jun",
  25. "Jul",
  26. "Aug",
  27. "Sep",
  28. "Okt",
  29. "Nov",
  30. "Dez",
  31. ],
  32. wide: [
  33. "Jänner",
  34. "Februar",
  35. "März",
  36. "April",
  37. "Mai",
  38. "Juni",
  39. "Juli",
  40. "August",
  41. "September",
  42. "Oktober",
  43. "November",
  44. "Dezember",
  45. ],
  46. };
  47. // https://st.unicode.org/cldr-apps/v#/de_AT/Gregorian/
  48. const formattingMonthValues = {
  49. narrow: monthValues.narrow,
  50. abbreviated: [
  51. "Jän.",
  52. "Feb.",
  53. "März",
  54. "Apr.",
  55. "Mai",
  56. "Juni",
  57. "Juli",
  58. "Aug.",
  59. "Sep.",
  60. "Okt.",
  61. "Nov.",
  62. "Dez.",
  63. ],
  64. wide: monthValues.wide,
  65. };
  66. const dayValues = {
  67. narrow: ["S", "M", "D", "M", "D", "F", "S"],
  68. short: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
  69. abbreviated: ["So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."],
  70. wide: [
  71. "Sonntag",
  72. "Montag",
  73. "Dienstag",
  74. "Mittwoch",
  75. "Donnerstag",
  76. "Freitag",
  77. "Samstag",
  78. ],
  79. };
  80. // https://www.unicode.org/cldr/charts/32/summary/de.html#1881
  81. const dayPeriodValues = {
  82. narrow: {
  83. am: "vm.",
  84. pm: "nm.",
  85. midnight: "Mitternacht",
  86. noon: "Mittag",
  87. morning: "Morgen",
  88. afternoon: "Nachm.",
  89. evening: "Abend",
  90. night: "Nacht",
  91. },
  92. abbreviated: {
  93. am: "vorm.",
  94. pm: "nachm.",
  95. midnight: "Mitternacht",
  96. noon: "Mittag",
  97. morning: "Morgen",
  98. afternoon: "Nachmittag",
  99. evening: "Abend",
  100. night: "Nacht",
  101. },
  102. wide: {
  103. am: "vormittags",
  104. pm: "nachmittags",
  105. midnight: "Mitternacht",
  106. noon: "Mittag",
  107. morning: "Morgen",
  108. afternoon: "Nachmittag",
  109. evening: "Abend",
  110. night: "Nacht",
  111. },
  112. };
  113. const formattingDayPeriodValues = {
  114. narrow: {
  115. am: "vm.",
  116. pm: "nm.",
  117. midnight: "Mitternacht",
  118. noon: "Mittag",
  119. morning: "morgens",
  120. afternoon: "nachm.",
  121. evening: "abends",
  122. night: "nachts",
  123. },
  124. abbreviated: {
  125. am: "vorm.",
  126. pm: "nachm.",
  127. midnight: "Mitternacht",
  128. noon: "Mittag",
  129. morning: "morgens",
  130. afternoon: "nachmittags",
  131. evening: "abends",
  132. night: "nachts",
  133. },
  134. wide: {
  135. am: "vormittags",
  136. pm: "nachmittags",
  137. midnight: "Mitternacht",
  138. noon: "Mittag",
  139. morning: "morgens",
  140. afternoon: "nachmittags",
  141. evening: "abends",
  142. night: "nachts",
  143. },
  144. };
  145. const ordinalNumber = (dirtyNumber) => {
  146. const number = Number(dirtyNumber);
  147. return number + ".";
  148. };
  149. export const localize = {
  150. ordinalNumber,
  151. era: buildLocalizeFn({
  152. values: eraValues,
  153. defaultWidth: "wide",
  154. }),
  155. quarter: buildLocalizeFn({
  156. values: quarterValues,
  157. defaultWidth: "wide",
  158. argumentCallback: (quarter) => quarter - 1,
  159. }),
  160. month: buildLocalizeFn({
  161. values: monthValues,
  162. formattingValues: formattingMonthValues,
  163. defaultWidth: "wide",
  164. }),
  165. day: buildLocalizeFn({
  166. values: dayValues,
  167. defaultWidth: "wide",
  168. }),
  169. dayPeriod: buildLocalizeFn({
  170. values: dayPeriodValues,
  171. defaultWidth: "wide",
  172. formattingValues: formattingDayPeriodValues,
  173. defaultFormattingWidth: "wide",
  174. }),
  175. };