Refactor RelativeTimeFormat

pull/1254/head
Lim Chee Aun 2025-08-25 11:56:25 +08:00
rodzic 1318424c77
commit 2cd3f7a579
5 zmienionych plików z 151 dodań i 149 usunięć

Wyświetl plik

@ -42,6 +42,7 @@ import openCompose from '../utils/open-compose';
import pmem from '../utils/pmem';
import prettyBytes from '../utils/pretty-bytes';
import { fetchRelationships } from '../utils/relationships';
import RTF from '../utils/relative-time-format';
import shortenNumber from '../utils/shorten-number';
import showToast from '../utils/show-toast';
import states, { saveStatus } from '../utils/states';
@ -196,7 +197,6 @@ function highlightText(text, { maxCharacters = Infinity }) {
}
// const rtf = new Intl.RelativeTimeFormat();
const RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));
const LF = mem((locale) => new Intl.ListFormat(locale || undefined));
const CUSTOM_EMOJIS_COUNT = 100;

Wyświetl plik

@ -3,7 +3,7 @@ import { t } from '@lingui/core/macro';
import { useEffect, useMemo, useReducer } from 'preact/hooks';
import DateTimeFormat from '../utils/date-time-format';
import mem from '../utils/mem';
import RTF from '../utils/relative-time-format';
function isValidDate(value) {
if (value instanceof Date) {
@ -14,8 +14,6 @@ function isValidDate(value) {
}
}
const RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));
const minute = 60;
const hour = 60 * minute;
const day = 24 * hour;

Wyświetl plik

@ -61,6 +61,7 @@ import mem from '../utils/mem';
import niceDateTime from '../utils/nice-date-time';
import openCompose from '../utils/open-compose';
import pmem from '../utils/pmem';
import RTF from '../utils/relative-time-format';
import safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';
import shortenNumber from '../utils/shorten-number';
import showCompose from '../utils/show-compose';
@ -108,8 +109,6 @@ const isIOS =
window.ontouchstart !== undefined &&
/iPad|iPhone|iPod/.test(navigator.userAgent);
const RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));
const REACTIONS_LIMIT = 80;
function getPollText(poll) {

286
src/locales/en.po wygenerowano
Wyświetl plik

@ -34,7 +34,7 @@ msgstr ""
#: src/components/account-block.jsx:190
#: src/components/account-info.jsx:710
#: src/components/status.jsx:749
#: src/components/status.jsx:748
msgid "Group"
msgstr ""
@ -108,11 +108,11 @@ msgstr ""
#: src/components/compose.jsx:2812
#: src/components/media-alt-modal.jsx:55
#: src/components/media-modal.jsx:363
#: src/components/status.jsx:1997
#: src/components/status.jsx:2014
#: src/components/status.jsx:2145
#: src/components/status.jsx:2769
#: src/components/status.jsx:2772
#: src/components/status.jsx:1996
#: src/components/status.jsx:2013
#: src/components/status.jsx:2144
#: src/components/status.jsx:2768
#: src/components/status.jsx:2771
#: src/pages/account-statuses.jsx:539
#: src/pages/accounts.jsx:118
#: src/pages/hashtag.jsx:203
@ -217,7 +217,7 @@ msgid "Original"
msgstr ""
#: src/components/account-info.jsx:978
#: src/components/status.jsx:2554
#: src/components/status.jsx:2553
#: src/pages/catchup.jsx:71
#: src/pages/catchup.jsx:1448
#: src/pages/catchup.jsx:2061
@ -343,30 +343,30 @@ msgid "Add/Remove from Lists"
msgstr ""
#: src/components/account-info.jsx:1522
#: src/components/status.jsx:1419
#: src/components/status.jsx:1418
msgid "Link copied"
msgstr ""
#: src/components/account-info.jsx:1525
#: src/components/status.jsx:1422
#: src/components/status.jsx:1421
msgid "Unable to copy link"
msgstr ""
#: src/components/account-info.jsx:1531
#: src/components/shortcuts-settings.jsx:1059
#: src/components/status.jsx:1428
#: src/components/status.jsx:3547
#: src/components/status.jsx:1427
#: src/components/status.jsx:3546
msgid "Copy"
msgstr ""
#: src/components/account-info.jsx:1546
#: src/components/shortcuts-settings.jsx:1077
#: src/components/status.jsx:1444
#: src/components/status.jsx:1443
msgid "Sharing doesn't seem to work."
msgstr ""
#: src/components/account-info.jsx:1552
#: src/components/status.jsx:1450
#: src/components/status.jsx:1449
msgid "Share…"
msgstr ""
@ -480,9 +480,9 @@ msgstr ""
#: src/components/shortcuts-settings.jsx:230
#: src/components/shortcuts-settings.jsx:583
#: src/components/shortcuts-settings.jsx:783
#: src/components/status.jsx:3271
#: src/components/status.jsx:3511
#: src/components/status.jsx:4020
#: src/components/status.jsx:3270
#: src/components/status.jsx:3510
#: src/components/status.jsx:4019
#: src/pages/accounts.jsx:45
#: src/pages/catchup.jsx:1584
#: src/pages/filters.jsx:225
@ -732,7 +732,7 @@ msgid "Attachment #{i} failed"
msgstr "Attachment #{i} failed"
#: src/components/compose.jsx:1215
#: src/components/status.jsx:2329
#: src/components/status.jsx:2328
#: src/components/timeline.jsx:1015
msgid "Content warning"
msgstr ""
@ -742,7 +742,7 @@ msgid "Content warning or sensitive media"
msgstr "Content warning or sensitive media"
#: src/components/compose.jsx:1267
#: src/components/status.jsx:100
#: src/components/status.jsx:101
#: src/pages/settings.jsx:318
msgid "Public"
msgstr ""
@ -750,25 +750,25 @@ msgstr ""
#: src/components/compose.jsx:1272
#: src/components/nav-menu.jsx:349
#: src/components/shortcuts-settings.jsx:165
#: src/components/status.jsx:101
#: src/components/status.jsx:102
msgid "Local"
msgstr ""
#: src/components/compose.jsx:1276
#: src/components/status.jsx:102
#: src/components/status.jsx:103
#: src/pages/settings.jsx:321
msgid "Unlisted"
msgstr ""
#: src/components/compose.jsx:1279
#: src/components/status.jsx:103
#: src/components/status.jsx:104
#: src/pages/settings.jsx:324
msgid "Followers only"
msgstr ""
#: src/components/compose.jsx:1282
#: src/components/status.jsx:104
#: src/components/status.jsx:2209
#: src/components/status.jsx:105
#: src/components/status.jsx:2208
msgid "Private mention"
msgstr ""
@ -805,10 +805,10 @@ msgstr "Schedule"
#: src/components/compose.jsx:1671
#: src/components/keyboard-shortcuts-help.jsx:155
#: src/components/status.jsx:1191
#: src/components/status.jsx:1190
#: src/components/status.jsx:1976
#: src/components/status.jsx:1977
#: src/components/status.jsx:1978
#: src/components/status.jsx:2673
#: src/components/status.jsx:2672
msgid "Reply"
msgstr ""
@ -1030,7 +1030,7 @@ msgstr ""
#: src/components/drafts.jsx:126
#: src/components/list-add-edit.jsx:188
#: src/components/status.jsx:1594
#: src/components/status.jsx:1593
#: src/pages/filters.jsx:603
#: src/pages/scheduled-posts.jsx:368
msgid "Delete…"
@ -1239,10 +1239,10 @@ msgid "<0>l</0> or <1>f</1>"
msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:176
#: src/components/status.jsx:1199
#: src/components/status.jsx:2700
#: src/components/status.jsx:1198
#: src/components/status.jsx:2699
#: src/components/status.jsx:2722
#: src/components/status.jsx:2723
#: src/components/status.jsx:2724
msgid "Boost"
msgstr ""
@ -1251,9 +1251,9 @@ msgid "<0>Shift</0> + <1>b</1>"
msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:184
#: src/components/status.jsx:1262
#: src/components/status.jsx:1261
#: src/components/status.jsx:2747
#: src/components/status.jsx:2748
#: src/components/status.jsx:2749
msgid "Bookmark"
msgstr ""
@ -1318,14 +1318,14 @@ msgid "Media description"
msgstr ""
#: src/components/media-alt-modal.jsx:67
#: src/components/status.jsx:1305
#: src/components/status.jsx:1314
#: src/components/status.jsx:1304
#: src/components/status.jsx:1313
#: src/components/translation-block.jsx:239
msgid "Translate"
msgstr ""
#: src/components/media-alt-modal.jsx:78
#: src/components/status.jsx:1333
#: src/components/status.jsx:1332
msgid "Speak"
msgstr ""
@ -1362,9 +1362,9 @@ msgid "Filtered: {filterTitleStr}"
msgstr ""
#: src/components/media-post.jsx:133
#: src/components/status.jsx:3850
#: src/components/status.jsx:3946
#: src/components/status.jsx:4024
#: src/components/status.jsx:3849
#: src/components/status.jsx:3945
#: src/components/status.jsx:4023
#: src/components/timeline.jsx:1004
#: src/pages/catchup.jsx:75
#: src/pages/catchup.jsx:1880
@ -1676,8 +1676,8 @@ msgid "[Unknown notification type: {type}]"
msgstr ""
#: src/components/notification.jsx:451
#: src/components/status.jsx:1276
#: src/components/status.jsx:1286
#: src/components/status.jsx:1275
#: src/components/status.jsx:1285
msgid "Boosted/Liked by…"
msgstr ""
@ -1703,7 +1703,7 @@ msgid "View #Wrapstodon"
msgstr "View #Wrapstodon"
#: src/components/notification.jsx:801
#: src/components/status.jsx:487
#: src/components/status.jsx:486
msgid "Read more →"
msgstr ""
@ -1786,19 +1786,19 @@ msgstr ""
#. Relative time in seconds, as short as possible
#. placeholder {0}: seconds < 1 ? 1 : Math.floor(seconds)
#: src/components/relative-time.jsx:47
#: src/components/relative-time.jsx:45
msgid "{0}s"
msgstr ""
#. Relative time in minutes, as short as possible
#. placeholder {0}: Math.floor(seconds / minute)
#: src/components/relative-time.jsx:52
#: src/components/relative-time.jsx:50
msgid "{0}m"
msgstr ""
#. Relative time in hours, as short as possible
#. placeholder {0}: Math.floor(seconds / hour)
#: src/components/relative-time.jsx:57
#: src/components/relative-time.jsx:55
msgid "{0}h"
msgstr ""
@ -2030,7 +2030,7 @@ msgid "Move down"
msgstr ""
#: src/components/shortcuts-settings.jsx:379
#: src/components/status.jsx:1556
#: src/components/status.jsx:1555
#: src/pages/list.jsx:195
msgid "Edit"
msgstr ""
@ -2229,353 +2229,353 @@ msgstr ""
msgid "Import/export settings from/to instance server (Very experimental)"
msgstr ""
#: src/components/status.jsx:352
#: src/components/status.jsx:351
msgid "Unable to format math"
msgstr "Unable to format math"
#: src/components/status.jsx:366
#: src/components/status.jsx:365
msgid "Math expressions found."
msgstr "Math expressions found."
#. Action to switch from rendered math back to raw (LaTeX) markup
#: src/components/status.jsx:369
#: src/components/status.jsx:368
msgid "Show markup"
msgstr "Show markup"
#. Action to render math expressions from raw (LaTeX) markup
#: src/components/status.jsx:374
#: src/components/status.jsx:373
msgid "Format math"
msgstr "Format math"
#: src/components/status.jsx:773
#: src/components/status.jsx:772
msgid "<0/> <1>boosted</1>"
msgstr "<0/> <1>boosted</1>"
#: src/components/status.jsx:876
#: src/components/status.jsx:875
msgid "Sorry, your current logged-in instance can't interact with this post from another instance."
msgstr ""
#. placeholder {0}: username || acct
#: src/components/status.jsx:1030
#: src/components/status.jsx:1029
msgid "Unliked @{0}'s post"
msgstr ""
#. placeholder {0}: username || acct
#: src/components/status.jsx:1031
#: src/components/status.jsx:1030
msgid "Liked @{0}'s post"
msgstr "Liked @{0}'s post"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1070
#: src/components/status.jsx:1069
msgid "Unbookmarked @{0}'s post"
msgstr "Unbookmarked @{0}'s post"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1071
#: src/components/status.jsx:1070
msgid "Bookmarked @{0}'s post"
msgstr "Bookmarked @{0}'s post"
#: src/components/status.jsx:1168
#: src/components/status.jsx:1167
msgid "Some media have no descriptions."
msgstr ""
#. placeholder {0}: rtf.format(-statusMonthsAgo, 'month')
#: src/components/status.jsx:1175
#: src/components/status.jsx:1174
msgid "Old post (<0>{0}</0>)"
msgstr ""
#: src/components/status.jsx:1199
#: src/components/status.jsx:1239
#: src/components/status.jsx:2700
#: src/components/status.jsx:2723
#: src/components/status.jsx:1198
#: src/components/status.jsx:1238
#: src/components/status.jsx:2699
#: src/components/status.jsx:2722
msgid "Unboost"
msgstr ""
#: src/components/status.jsx:1215
#: src/components/status.jsx:2715
#: src/components/status.jsx:1214
#: src/components/status.jsx:2714
msgid "Quote"
msgstr ""
#. placeholder {0}: username || acct
#: src/components/status.jsx:1227
#: src/components/status.jsx:1693
#: src/components/status.jsx:1226
#: src/components/status.jsx:1692
msgid "Unboosted @{0}'s post"
msgstr "Unboosted @{0}'s post"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1228
#: src/components/status.jsx:1694
#: src/components/status.jsx:1227
#: src/components/status.jsx:1693
msgid "Boosted @{0}'s post"
msgstr "Boosted @{0}'s post"
#: src/components/status.jsx:1240
#: src/components/status.jsx:1239
msgid "Boost…"
msgstr ""
#: src/components/status.jsx:1252
#: src/components/status.jsx:1987
#: src/components/status.jsx:2736
#: src/components/status.jsx:1251
#: src/components/status.jsx:1986
#: src/components/status.jsx:2735
msgid "Unlike"
msgstr ""
#: src/components/status.jsx:1253
#: src/components/status.jsx:1252
#: src/components/status.jsx:1986
#: src/components/status.jsx:1987
#: src/components/status.jsx:1988
#: src/components/status.jsx:2735
#: src/components/status.jsx:2736
#: src/components/status.jsx:2737
msgid "Like"
msgstr ""
#: src/components/status.jsx:1262
#: src/components/status.jsx:2748
#: src/components/status.jsx:1261
#: src/components/status.jsx:2747
msgid "Unbookmark"
msgstr ""
#: src/components/status.jsx:1345
#: src/components/status.jsx:1344
msgid "Post text copied"
msgstr "Post text copied"
#: src/components/status.jsx:1348
#: src/components/status.jsx:1347
msgid "Unable to copy post text"
msgstr "Unable to copy post text"
#: src/components/status.jsx:1354
#: src/components/status.jsx:1353
msgid "Copy post text"
msgstr "Copy post text"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1372
#: src/components/status.jsx:1371
msgid "View post by <0>@{0}</0>"
msgstr ""
#: src/components/status.jsx:1393
#: src/components/status.jsx:1392
msgid "Show Edit History"
msgstr ""
#: src/components/status.jsx:1396
#: src/components/status.jsx:1395
msgid "Edited: {editedDateText}"
msgstr ""
#: src/components/status.jsx:1463
#: src/components/status.jsx:3516
#: src/components/status.jsx:1462
#: src/components/status.jsx:3515
msgid "Embed post"
msgstr ""
#: src/components/status.jsx:1477
#: src/components/status.jsx:1476
msgid "Conversation unmuted"
msgstr ""
#: src/components/status.jsx:1477
#: src/components/status.jsx:1476
msgid "Conversation muted"
msgstr ""
#: src/components/status.jsx:1483
#: src/components/status.jsx:1482
msgid "Unable to unmute conversation"
msgstr ""
#: src/components/status.jsx:1484
#: src/components/status.jsx:1483
msgid "Unable to mute conversation"
msgstr ""
#: src/components/status.jsx:1493
#: src/components/status.jsx:1492
msgid "Unmute conversation"
msgstr ""
#: src/components/status.jsx:1500
#: src/components/status.jsx:1499
msgid "Mute conversation"
msgstr ""
#: src/components/status.jsx:1516
#: src/components/status.jsx:1515
msgid "Post unpinned from profile"
msgstr ""
#: src/components/status.jsx:1517
#: src/components/status.jsx:1516
msgid "Post pinned to profile"
msgstr ""
#: src/components/status.jsx:1522
#: src/components/status.jsx:1521
msgid "Unable to unpin post"
msgstr ""
#: src/components/status.jsx:1522
#: src/components/status.jsx:1521
msgid "Unable to pin post"
msgstr ""
#: src/components/status.jsx:1531
#: src/components/status.jsx:1530
msgid "Unpin from profile"
msgstr ""
#: src/components/status.jsx:1538
#: src/components/status.jsx:1537
msgid "Pin to profile"
msgstr ""
#: src/components/status.jsx:1567
#: src/components/status.jsx:1566
msgid "Delete this post?"
msgstr ""
#: src/components/status.jsx:1583
#: src/components/status.jsx:1582
msgid "Post deleted"
msgstr ""
#: src/components/status.jsx:1586
#: src/components/status.jsx:1585
msgid "Unable to delete post"
msgstr ""
#: src/components/status.jsx:1614
#: src/components/status.jsx:1613
msgid "Report post…"
msgstr ""
#: src/components/status.jsx:1988
#: src/components/status.jsx:2024
#: src/components/status.jsx:2737
#: src/components/status.jsx:1987
#: src/components/status.jsx:2023
#: src/components/status.jsx:2736
msgid "Liked"
msgstr ""
#: src/components/status.jsx:2021
#: src/components/status.jsx:2724
#: src/components/status.jsx:2020
#: src/components/status.jsx:2723
msgid "Boosted"
msgstr ""
#: src/components/status.jsx:2031
#: src/components/status.jsx:2749
#: src/components/status.jsx:2030
#: src/components/status.jsx:2748
msgid "Bookmarked"
msgstr ""
#: src/components/status.jsx:2035
#: src/components/status.jsx:2034
msgid "Pinned"
msgstr ""
#: src/components/status.jsx:2087
#: src/components/status.jsx:2562
#: src/components/status.jsx:2086
#: src/components/status.jsx:2561
msgid "Deleted"
msgstr ""
#: src/components/status.jsx:2128
#: src/components/status.jsx:2127
msgid "{repliesCount, plural, one {# reply} other {# replies}}"
msgstr ""
#: src/components/status.jsx:2292
#: src/components/status.jsx:2354
#: src/components/status.jsx:2458
#: src/components/status.jsx:2291
#: src/components/status.jsx:2353
#: src/components/status.jsx:2457
msgid "Show less"
msgstr ""
#: src/components/status.jsx:2292
#: src/components/status.jsx:2354
#: src/components/status.jsx:2291
#: src/components/status.jsx:2353
msgid "Show content"
msgstr ""
#. placeholder {0}: filterInfo.titlesStr
#. placeholder {0}: filterInfo?.titlesStr
#: src/components/status.jsx:2454
#: src/components/status.jsx:2453
#: src/pages/catchup.jsx:1879
msgid "Filtered: {0}"
msgstr "Filtered: {0}"
#: src/components/status.jsx:2458
#: src/components/status.jsx:2457
msgid "Show media"
msgstr ""
#: src/components/status.jsx:2597
#: src/components/status.jsx:2596
msgid "Edited"
msgstr ""
#: src/components/status.jsx:2674
#: src/components/status.jsx:2673
msgid "Comments"
msgstr ""
#. More from [Author]
#: src/components/status.jsx:2974
#: src/components/status.jsx:2973
msgid "More from <0/>"
msgstr "More from <0/>"
#: src/components/status.jsx:3276
#: src/components/status.jsx:3275
msgid "Edit History"
msgstr ""
#: src/components/status.jsx:3280
#: src/components/status.jsx:3279
msgid "Failed to load history"
msgstr ""
#: src/components/status.jsx:3285
#: src/components/status.jsx:3284
#: src/pages/annual-report.jsx:45
msgid "Loading…"
msgstr ""
#: src/components/status.jsx:3521
#: src/components/status.jsx:3520
msgid "HTML Code"
msgstr ""
#: src/components/status.jsx:3538
#: src/components/status.jsx:3537
msgid "HTML code copied"
msgstr ""
#: src/components/status.jsx:3541
#: src/components/status.jsx:3540
msgid "Unable to copy HTML code"
msgstr ""
#: src/components/status.jsx:3553
#: src/components/status.jsx:3552
msgid "Media attachments:"
msgstr ""
#: src/components/status.jsx:3575
#: src/components/status.jsx:3574
msgid "Account Emojis:"
msgstr ""
#: src/components/status.jsx:3606
#: src/components/status.jsx:3651
#: src/components/status.jsx:3605
#: src/components/status.jsx:3650
msgid "static URL"
msgstr ""
#: src/components/status.jsx:3620
#: src/components/status.jsx:3619
msgid "Emojis:"
msgstr ""
#: src/components/status.jsx:3665
#: src/components/status.jsx:3664
msgid "Notes:"
msgstr ""
#: src/components/status.jsx:3669
#: src/components/status.jsx:3668
msgid "This is static, unstyled and scriptless. You may need to apply your own styles and edit as needed."
msgstr ""
#: src/components/status.jsx:3675
#: src/components/status.jsx:3674
msgid "Polls are not interactive, becomes a list with vote counts."
msgstr ""
#: src/components/status.jsx:3680
#: src/components/status.jsx:3679
msgid "Media attachments can be images, videos, audios or any file types."
msgstr ""
#: src/components/status.jsx:3686
#: src/components/status.jsx:3685
msgid "Post could be edited or deleted later."
msgstr ""
#: src/components/status.jsx:3692
#: src/components/status.jsx:3691
msgid "Preview"
msgstr ""
#: src/components/status.jsx:3701
#: src/components/status.jsx:3700
msgid "Note: This preview is lightly styled."
msgstr ""
#. [Name] [Visibility icon] boosted
#: src/components/status.jsx:3954
#: src/components/status.jsx:3953
msgid "<0/> <1/> boosted"
msgstr "<0/> <1/> boosted"
#: src/components/status.jsx:4056
#: src/components/status.jsx:4055
msgid "Post hidden by your filters"
msgstr "Post hidden by your filters"
#: src/components/status.jsx:4057
#: src/components/status.jsx:4056
msgid "Post pending"
msgstr "Post pending"
#: src/components/status.jsx:4057
#: src/components/status.jsx:4058
#: src/components/status.jsx:4059
#: src/components/status.jsx:4060
#: src/components/status.jsx:4061
msgid "Post unavailable"
msgstr "Post unavailable"

Wyświetl plik

@ -0,0 +1,5 @@
import mem from './mem.js';
export default mem(
(locale) => new Intl.RelativeTimeFormat(locale || undefined),
);