浏览代码

Merge branch 'from/develop/tusooa/unit-pl' into 'develop'

Use vue-i18n to determine plural forms of time units

Closes #1164

See merge request pleroma/pleroma-fe!1535
HJ 2 年之前
父节点
当前提交
da022e722e

+ 1 - 1
src/components/timeago/timeago.vue

@@ -3,7 +3,7 @@
     :datetime="time"
     :title="localeDateString"
   >
-    {{ $t(relativeTime.key, [relativeTime.num]) }}
+    {{ $tc(relativeTime.key, relativeTime.num, [relativeTime.num]) }}
   </time>
 </template>
 

+ 17 - 29
src/i18n/en.json

@@ -692,38 +692,26 @@
     }
   },
   "time": {
-    "day": "{0} day",
-    "days": "{0} days",
-    "day_short": "{0}d",
-    "days_short": "{0}d",
-    "hour": "{0} hour",
-    "hours": "{0} hours",
-    "hour_short": "{0}h",
-    "hours_short": "{0}h",
+    "unit": {
+      "days": "{0} day | {0} days",
+      "days_short": "{0}d",
+      "hours": "{0} hour | {0} hours",
+      "hours_short": "{0}h",
+      "minutes": "{0} minute | {0} minutes",
+      "minutes_short": "{0}min",
+      "months": "{0} month | {0} months",
+      "months_short": "{0}mo",
+      "seconds": "{0} second | {0} seconds",
+      "seconds_short": "{0}s",
+      "weeks": "{0} week | {0} weeks",
+      "weeks_short": "{0}w",
+      "years": "{0} year | {0} years",
+      "years_short": "{0}y"
+    },
     "in_future": "in {0}",
     "in_past": "{0} ago",
-    "minute": "{0} minute",
-    "minutes": "{0} minutes",
-    "minute_short": "{0}min",
-    "minutes_short": "{0}min",
-    "month": "{0} month",
-    "months": "{0} months",
-    "month_short": "{0}mo",
-    "months_short": "{0}mo",
     "now": "just now",
-    "now_short": "now",
-    "second": "{0} second",
-    "seconds": "{0} seconds",
-    "second_short": "{0}s",
-    "seconds_short": "{0}s",
-    "week": "{0} week",
-    "weeks": "{0} weeks",
-    "week_short": "{0}w",
-    "weeks_short": "{0}w",
-    "year": "{0} year",
-    "years": "{0} years",
-    "year_short": "{0}y",
-    "years_short": "{0}y"
+    "now_short": "now"
   },
   "timeline": {
     "collapse": "Collapse",

+ 7 - 9
src/services/date_utils/date_utils.js

@@ -10,31 +10,29 @@ export const relativeTime = (date, nowThreshold = 1) => {
   if (typeof date === 'string') date = Date.parse(date)
   const round = Date.now() > date ? Math.floor : Math.ceil
   const d = Math.abs(Date.now() - date)
-  let r = { num: round(d / YEAR), key: 'time.years' }
+  let r = { num: round(d / YEAR), key: 'time.unit.years' }
   if (d < nowThreshold * SECOND) {
     r.num = 0
     r.key = 'time.now'
   } else if (d < MINUTE) {
     r.num = round(d / SECOND)
-    r.key = 'time.seconds'
+    r.key = 'time.unit.seconds'
   } else if (d < HOUR) {
     r.num = round(d / MINUTE)
-    r.key = 'time.minutes'
+    r.key = 'time.unit.minutes'
   } else if (d < DAY) {
     r.num = round(d / HOUR)
-    r.key = 'time.hours'
+    r.key = 'time.unit.hours'
   } else if (d < WEEK) {
     r.num = round(d / DAY)
-    r.key = 'time.days'
+    r.key = 'time.unit.days'
   } else if (d < MONTH) {
     r.num = round(d / WEEK)
-    r.key = 'time.weeks'
+    r.key = 'time.unit.weeks'
   } else if (d < YEAR) {
     r.num = round(d / MONTH)
-    r.key = 'time.months'
+    r.key = 'time.unit.months'
   }
-  // Remove plural form when singular
-  if (r.num === 1) r.key = r.key.slice(0, -1)
   return r
 }
 

+ 5 - 5
test/unit/specs/services/date_utils/date_utils.spec.js

@@ -11,30 +11,30 @@ describe('DateUtils', () => {
 
     it('rounds down for past', () => {
       const time = Date.now() - 1.8 * DateUtils.HOUR
-      expect(DateUtils.relativeTime(time)).to.eql({ num: 1, key: 'time.hour' })
+      expect(DateUtils.relativeTime(time)).to.eql({ num: 1, key: 'time.unit.hours' })
     })
 
     it('rounds up for future', () => {
       const time = Date.now() + 1.8 * DateUtils.HOUR
-      expect(DateUtils.relativeTime(time)).to.eql({ num: 2, key: 'time.hours' })
+      expect(DateUtils.relativeTime(time)).to.eql({ num: 2, key: 'time.unit.hours' })
     })
 
     it('uses plural when necessary', () => {
       const time = Date.now() - 3.8 * DateUtils.WEEK
-      expect(DateUtils.relativeTime(time)).to.eql({ num: 3, key: 'time.weeks' })
+      expect(DateUtils.relativeTime(time)).to.eql({ num: 3, key: 'time.unit.weeks' })
     })
 
     it('works with date string', () => {
       const time = Date.now() - 4 * DateUtils.MONTH
       const dateString = new Date(time).toISOString()
-      expect(DateUtils.relativeTime(dateString)).to.eql({ num: 4, key: 'time.months' })
+      expect(DateUtils.relativeTime(dateString)).to.eql({ num: 4, key: 'time.unit.months' })
     })
   })
 
   describe('relativeTimeShort', () => {
     it('returns the short version of the same relative time', () => {
       const time = Date.now() + 2 * DateUtils.YEAR
-      expect(DateUtils.relativeTimeShort(time)).to.eql({ num: 2, key: 'time.years_short' })
+      expect(DateUtils.relativeTimeShort(time)).to.eql({ num: 2, key: 'time.unit.years_short' })
     })
   })
 })