Add "Copy post text" menu

pull/1124/head
Lim Chee Aun 2025-04-18 18:17:51 +08:00
rodzic b9fcd4d054
commit e45b4a84c6
2 zmienionych plików z 183 dodań i 150 usunięć

Wyświetl plik

@ -1105,51 +1105,72 @@ function Status({
</MenuItem>
</>
)}
{(isSizeLarge ||
(!mediaFirst &&
(enableTranslate || !language || differentLanguage))) && (
<MenuDivider />
)}
{!mediaFirst && (enableTranslate || !language || differentLanguage) && (
<>
<MenuDivider />
<div class={supportsTTS ? 'menu-horizontal' : ''}>
{enableTranslate ? (
<MenuItem
disabled={forceTranslate}
onClick={() => setForceTranslate(true)}
>
<Icon icon="translate" />
<span>
<Trans>Translate</Trans>
</span>
</MenuItem>
) : (
<MenuLink
to={`${instance ? `/${instance}` : ''}/s/${id}?translate=1`}
>
<Icon icon="translate" />
<span>
<Trans>Translate</Trans>
</span>
</MenuLink>
)}
{supportsTTS && (
<MenuItem
onClick={() => {
try {
const postText = getPostText(status);
if (postText) {
speak(postText, language);
}
} catch (error) {
console.error('Failed to speak text:', error);
<div class={supportsTTS ? 'menu-horizontal' : ''}>
{enableTranslate ? (
<MenuItem
disabled={forceTranslate}
onClick={() => setForceTranslate(true)}
>
<Icon icon="translate" />
<span>
<Trans>Translate</Trans>
</span>
</MenuItem>
) : (
<MenuLink
to={`${instance ? `/${instance}` : ''}/s/${id}?translate=1`}
>
<Icon icon="translate" />
<span>
<Trans>Translate</Trans>
</span>
</MenuLink>
)}
{supportsTTS && (
<MenuItem
onClick={() => {
try {
const postText = getPostText(status);
if (postText) {
speak(postText, language);
}
}}
>
<Icon icon="speak" />
<span>
<Trans>Speak</Trans>
</span>
</MenuItem>
)}
</div>
</>
} catch (error) {
console.error('Failed to speak text:', error);
}
}}
>
<Icon icon="speak" />
<span>
<Trans>Speak</Trans>
</span>
</MenuItem>
)}
</div>
)}
{isSizeLarge && (
<MenuItem
onClick={() => {
try {
const postText = getPostText(status);
navigator.clipboard.writeText(postText);
showToast(t`Post text copied`);
} catch (e) {
console.error(e);
showToast(t`Unable to copy post text`);
}
}}
>
<Icon icon="clipboard" />
<span>
<Trans>Copy post text</Trans>
</span>
</MenuItem>
)}
{((!isSizeLarge && sameInstance) ||
enableTranslate ||

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

@ -111,11 +111,11 @@ msgstr ""
#: src/components/compose.jsx:2772
#: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358
#: src/components/status.jsx:1775
#: src/components/status.jsx:1792
#: src/components/status.jsx:1917
#: src/components/status.jsx:2535
#: src/components/status.jsx:2538
#: src/components/status.jsx:1796
#: src/components/status.jsx:1813
#: src/components/status.jsx:1938
#: src/components/status.jsx:2556
#: src/components/status.jsx:2559
#: src/pages/account-statuses.jsx:523
#: src/pages/accounts.jsx:110
#: src/pages/hashtag.jsx:200
@ -203,7 +203,7 @@ msgid "Original"
msgstr ""
#: src/components/account-info.jsx:926
#: src/components/status.jsx:2319
#: src/components/status.jsx:2340
#: src/pages/catchup.jsx:72
#: src/pages/catchup.jsx:1442
#: src/pages/catchup.jsx:2057
@ -300,30 +300,30 @@ msgid "Add/Remove from Lists"
msgstr ""
#: src/components/account-info.jsx:1384
#: src/components/status.jsx:1215
#: src/components/status.jsx:1236
msgid "Link copied"
msgstr ""
#: src/components/account-info.jsx:1387
#: src/components/status.jsx:1218
#: src/components/status.jsx:1239
msgid "Unable to copy link"
msgstr ""
#: src/components/account-info.jsx:1393
#: src/components/shortcuts-settings.jsx:1059
#: src/components/status.jsx:1224
#: src/components/status.jsx:3306
#: src/components/status.jsx:1245
#: src/components/status.jsx:3327
msgid "Copy"
msgstr ""
#: src/components/account-info.jsx:1408
#: src/components/shortcuts-settings.jsx:1077
#: src/components/status.jsx:1240
#: src/components/status.jsx:1261
msgid "Sharing doesn't seem to work."
msgstr ""
#: src/components/account-info.jsx:1414
#: src/components/status.jsx:1246
#: src/components/status.jsx:1267
msgid "Share…"
msgstr ""
@ -437,9 +437,9 @@ msgstr ""
#: src/components/shortcuts-settings.jsx:230
#: src/components/shortcuts-settings.jsx:583
#: src/components/shortcuts-settings.jsx:783
#: src/components/status.jsx:3030
#: src/components/status.jsx:3270
#: src/components/status.jsx:3779
#: src/components/status.jsx:3051
#: src/components/status.jsx:3291
#: src/components/status.jsx:3800
#: src/pages/accounts.jsx:37
#: src/pages/catchup.jsx:1578
#: src/pages/filters.jsx:225
@ -680,7 +680,7 @@ msgid "Attachment #{i} failed"
msgstr "Attachment #{i} failed"
#: src/components/compose.jsx:1211
#: src/components/status.jsx:2105
#: src/components/status.jsx:2126
#: src/components/timeline.jsx:993
msgid "Content warning"
msgstr ""
@ -716,7 +716,7 @@ msgstr ""
#: src/components/compose.jsx:1278
#: src/components/status.jsx:100
#: src/components/status.jsx:1981
#: src/components/status.jsx:2002
msgid "Private mention"
msgstr ""
@ -754,9 +754,9 @@ msgstr "Schedule"
#: src/components/compose.jsx:1664
#: src/components/keyboard-shortcuts-help.jsx:154
#: src/components/status.jsx:1008
#: src/components/status.jsx:1755
#: src/components/status.jsx:1756
#: src/components/status.jsx:2439
#: src/components/status.jsx:1776
#: src/components/status.jsx:1777
#: src/components/status.jsx:2460
msgid "Reply"
msgstr ""
@ -978,7 +978,7 @@ msgstr ""
#: src/components/drafts.jsx:128
#: src/components/list-add-edit.jsx:186
#: src/components/status.jsx:1390
#: src/components/status.jsx:1411
#: src/pages/filters.jsx:603
#: src/pages/scheduled-posts.jsx:367
msgid "Delete…"
@ -1188,9 +1188,9 @@ msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:175
#: src/components/status.jsx:1016
#: src/components/status.jsx:2466
#: src/components/status.jsx:2489
#: src/components/status.jsx:2490
#: src/components/status.jsx:2487
#: src/components/status.jsx:2510
#: src/components/status.jsx:2511
msgid "Boost"
msgstr ""
@ -1200,8 +1200,8 @@ msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:183
#: src/components/status.jsx:1079
#: src/components/status.jsx:2514
#: src/components/status.jsx:2515
#: src/components/status.jsx:2535
#: src/components/status.jsx:2536
msgid "Bookmark"
msgstr ""
@ -1260,14 +1260,14 @@ msgid "Media description"
msgstr ""
#: src/components/media-alt-modal.jsx:58
#: src/components/status.jsx:1119
#: src/components/status.jsx:1128
#: src/components/status.jsx:1122
#: src/components/status.jsx:1131
#: src/components/translation-block.jsx:215
msgid "Translate"
msgstr ""
#: src/components/media-alt-modal.jsx:69
#: src/components/status.jsx:1147
#: src/components/status.jsx:1150
msgid "Speak"
msgstr ""
@ -1304,9 +1304,9 @@ msgid "Filtered: {filterTitleStr}"
msgstr ""
#: src/components/media-post.jsx:134
#: src/components/status.jsx:3609
#: src/components/status.jsx:3705
#: src/components/status.jsx:3783
#: src/components/status.jsx:3630
#: src/components/status.jsx:3726
#: src/components/status.jsx:3804
#: src/components/timeline.jsx:982
#: src/pages/catchup.jsx:76
#: src/pages/catchup.jsx:1876
@ -1947,7 +1947,7 @@ msgid "Move down"
msgstr ""
#: src/components/shortcuts-settings.jsx:379
#: src/components/status.jsx:1352
#: src/components/status.jsx:1373
#: src/pages/list.jsx:171
msgid "Edit"
msgstr ""
@ -2185,25 +2185,25 @@ msgstr ""
#: src/components/status.jsx:1016
#: src/components/status.jsx:1056
#: src/components/status.jsx:2466
#: src/components/status.jsx:2489
#: src/components/status.jsx:2487
#: src/components/status.jsx:2510
msgid "Unboost"
msgstr ""
#: src/components/status.jsx:1032
#: src/components/status.jsx:2481
#: src/components/status.jsx:2502
msgid "Quote"
msgstr ""
#. placeholder {0}: username || acct
#: src/components/status.jsx:1044
#: src/components/status.jsx:1480
#: src/components/status.jsx:1501
msgid "Unboosted @{0}'s post"
msgstr "Unboosted @{0}'s post"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1045
#: src/components/status.jsx:1481
#: src/components/status.jsx:1502
msgid "Boosted @{0}'s post"
msgstr "Boosted @{0}'s post"
@ -2212,247 +2212,259 @@ msgid "Boost…"
msgstr ""
#: src/components/status.jsx:1069
#: src/components/status.jsx:1765
#: src/components/status.jsx:2502
#: src/components/status.jsx:1786
#: src/components/status.jsx:2523
msgid "Unlike"
msgstr ""
#: src/components/status.jsx:1070
#: src/components/status.jsx:1765
#: src/components/status.jsx:1766
#: src/components/status.jsx:2502
#: src/components/status.jsx:2503
#: src/components/status.jsx:1786
#: src/components/status.jsx:1787
#: src/components/status.jsx:2523
#: src/components/status.jsx:2524
msgid "Like"
msgstr ""
#: src/components/status.jsx:1079
#: src/components/status.jsx:2514
#: src/components/status.jsx:2535
msgid "Unbookmark"
msgstr ""
#: src/components/status.jsx:1162
msgid "Post text copied"
msgstr "Post text copied"
#: src/components/status.jsx:1165
msgid "Unable to copy post text"
msgstr "Unable to copy post text"
#: src/components/status.jsx:1171
msgid "Copy post text"
msgstr "Copy post text"
#. placeholder {0}: username || acct
#: src/components/status.jsx:1168
#: src/components/status.jsx:1189
msgid "View post by <0>@{0}</0>"
msgstr ""
#: src/components/status.jsx:1189
#: src/components/status.jsx:1210
msgid "Show Edit History"
msgstr ""
#: src/components/status.jsx:1192
#: src/components/status.jsx:1213
msgid "Edited: {editedDateText}"
msgstr ""
#: src/components/status.jsx:1259
#: src/components/status.jsx:3275
#: src/components/status.jsx:1280
#: src/components/status.jsx:3296
msgid "Embed post"
msgstr ""
#: src/components/status.jsx:1273
#: src/components/status.jsx:1294
msgid "Conversation unmuted"
msgstr ""
#: src/components/status.jsx:1273
#: src/components/status.jsx:1294
msgid "Conversation muted"
msgstr ""
#: src/components/status.jsx:1279
#: src/components/status.jsx:1300
msgid "Unable to unmute conversation"
msgstr ""
#: src/components/status.jsx:1280
#: src/components/status.jsx:1301
msgid "Unable to mute conversation"
msgstr ""
#: src/components/status.jsx:1289
#: src/components/status.jsx:1310
msgid "Unmute conversation"
msgstr ""
#: src/components/status.jsx:1296
#: src/components/status.jsx:1317
msgid "Mute conversation"
msgstr ""
#: src/components/status.jsx:1312
#: src/components/status.jsx:1333
msgid "Post unpinned from profile"
msgstr ""
#: src/components/status.jsx:1313
#: src/components/status.jsx:1334
msgid "Post pinned to profile"
msgstr ""
#: src/components/status.jsx:1318
#: src/components/status.jsx:1339
msgid "Unable to unpin post"
msgstr ""
#: src/components/status.jsx:1318
#: src/components/status.jsx:1339
msgid "Unable to pin post"
msgstr ""
#: src/components/status.jsx:1327
#: src/components/status.jsx:1348
msgid "Unpin from profile"
msgstr ""
#: src/components/status.jsx:1334
#: src/components/status.jsx:1355
msgid "Pin to profile"
msgstr ""
#: src/components/status.jsx:1363
#: src/components/status.jsx:1384
msgid "Delete this post?"
msgstr ""
#: src/components/status.jsx:1379
#: src/components/status.jsx:1400
msgid "Post deleted"
msgstr ""
#: src/components/status.jsx:1382
#: src/components/status.jsx:1403
msgid "Unable to delete post"
msgstr ""
#: src/components/status.jsx:1410
#: src/components/status.jsx:1431
msgid "Report post…"
msgstr ""
#: src/components/status.jsx:1766
#: src/components/status.jsx:1802
#: src/components/status.jsx:2503
#: src/components/status.jsx:1787
#: src/components/status.jsx:1823
#: src/components/status.jsx:2524
msgid "Liked"
msgstr ""
#: src/components/status.jsx:1799
#: src/components/status.jsx:2490
#: src/components/status.jsx:1820
#: src/components/status.jsx:2511
msgid "Boosted"
msgstr ""
#: src/components/status.jsx:1809
#: src/components/status.jsx:2515
#: src/components/status.jsx:1830
#: src/components/status.jsx:2536
msgid "Bookmarked"
msgstr ""
#: src/components/status.jsx:1813
#: src/components/status.jsx:1834
msgid "Pinned"
msgstr ""
#: src/components/status.jsx:1859
#: src/components/status.jsx:2327
#: src/components/status.jsx:1880
#: src/components/status.jsx:2348
msgid "Deleted"
msgstr ""
#: src/components/status.jsx:1900
#: src/components/status.jsx:1921
msgid "{repliesCount, plural, one {# reply} other {# replies}}"
msgstr ""
#. placeholder {0}: snapStates.statusThreadNumber[sKey] ? ` ${snapStates.statusThreadNumber[sKey]}/X` : ''
#: src/components/status.jsx:1990
#: src/components/status.jsx:2011
msgid "Thread{0}"
msgstr ""
#: src/components/status.jsx:2068
#: src/components/status.jsx:2130
#: src/components/status.jsx:2223
#: src/components/status.jsx:2089
#: src/components/status.jsx:2151
#: src/components/status.jsx:2244
msgid "Show less"
msgstr ""
#: src/components/status.jsx:2068
#: src/components/status.jsx:2130
#: src/components/status.jsx:2089
#: src/components/status.jsx:2151
msgid "Show content"
msgstr ""
#. placeholder {0}: filterInfo.titlesStr
#. placeholder {0}: filterInfo?.titlesStr
#: src/components/status.jsx:2219
#: src/components/status.jsx:2240
#: src/pages/catchup.jsx:1875
msgid "Filtered: {0}"
msgstr "Filtered: {0}"
#: src/components/status.jsx:2223
#: src/components/status.jsx:2244
msgid "Show media"
msgstr ""
#: src/components/status.jsx:2363
#: src/components/status.jsx:2384
msgid "Edited"
msgstr ""
#: src/components/status.jsx:2440
#: src/components/status.jsx:2461
msgid "Comments"
msgstr ""
#. More from [Author]
#: src/components/status.jsx:2733
#: src/components/status.jsx:2754
msgid "More from <0/>"
msgstr "More from <0/>"
#: src/components/status.jsx:3035
#: src/components/status.jsx:3056
msgid "Edit History"
msgstr ""
#: src/components/status.jsx:3039
#: src/components/status.jsx:3060
msgid "Failed to load history"
msgstr ""
#: src/components/status.jsx:3044
#: src/components/status.jsx:3065
#: src/pages/annual-report.jsx:45
msgid "Loading…"
msgstr ""
#: src/components/status.jsx:3280
#: src/components/status.jsx:3301
msgid "HTML Code"
msgstr ""
#: src/components/status.jsx:3297
#: src/components/status.jsx:3318
msgid "HTML code copied"
msgstr ""
#: src/components/status.jsx:3300
#: src/components/status.jsx:3321
msgid "Unable to copy HTML code"
msgstr ""
#: src/components/status.jsx:3312
#: src/components/status.jsx:3333
msgid "Media attachments:"
msgstr ""
#: src/components/status.jsx:3334
#: src/components/status.jsx:3355
msgid "Account Emojis:"
msgstr ""
#: src/components/status.jsx:3365
#: src/components/status.jsx:3410
#: src/components/status.jsx:3386
#: src/components/status.jsx:3431
msgid "static URL"
msgstr ""
#: src/components/status.jsx:3379
#: src/components/status.jsx:3400
msgid "Emojis:"
msgstr ""
#: src/components/status.jsx:3424
#: src/components/status.jsx:3445
msgid "Notes:"
msgstr ""
#: src/components/status.jsx:3428
#: src/components/status.jsx:3449
msgid "This is static, unstyled and scriptless. You may need to apply your own styles and edit as needed."
msgstr ""
#: src/components/status.jsx:3434
#: src/components/status.jsx:3455
msgid "Polls are not interactive, becomes a list with vote counts."
msgstr ""
#: src/components/status.jsx:3439
#: src/components/status.jsx:3460
msgid "Media attachments can be images, videos, audios or any file types."
msgstr ""
#: src/components/status.jsx:3445
#: src/components/status.jsx:3466
msgid "Post could be edited or deleted later."
msgstr ""
#: src/components/status.jsx:3451
#: src/components/status.jsx:3472
msgid "Preview"
msgstr ""
#: src/components/status.jsx:3460
#: src/components/status.jsx:3481
msgid "Note: This preview is lightly styled."
msgstr ""
#. [Name] [Visibility icon] boosted
#: src/components/status.jsx:3713
#: src/components/status.jsx:3734
msgid "<0/> <1/> boosted"
msgstr ""