commit: da022e722ed55de376d6f0475c78405e3f9b0d7e
parent 2b10fe06fa0f518e61c507f09f6da6df760ffa30
Author: HJ <30-hj@users.noreply.git.pleroma.social>
Date: Sun, 19 Jun 2022 20:28:29 +0000
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
Diffstat:
4 files changed, 30 insertions(+), 44 deletions(-)
diff --git a/src/components/timeago/timeago.vue b/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>
diff --git a/src/i18n/en.json b/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",
diff --git a/src/services/date_utils/date_utils.js b/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
}
diff --git a/test/unit/specs/services/date_utils/date_utils.spec.js b/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' })
})
})
})