From acb7084d1844ee5576bc8f5bc84c077b9b70051b Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sat, 21 Dec 2024 15:03:44 +0800 Subject: [PATCH] All the updates for Lingui v5 Possibly might break if I accidentally miss something --- src/components/account-block.jsx | 3 +- src/components/account-info.jsx | 8 +- src/components/account-sheet.jsx | 3 +- src/components/background-service.jsx | 4 +- src/components/columns.jsx | 3 +- src/components/compose-button.jsx | 3 +- src/components/compose.jsx | 8 +- src/components/drafts.jsx | 3 +- src/components/embed-modal.jsx | 3 +- src/components/follow-request-buttons.jsx | 3 +- src/components/generic-accounts.jsx | 9 +- src/components/keyboard-shortcuts-help.jsx | 3 +- src/components/list-add-edit.jsx | 3 +- src/components/media-alt-modal.jsx | 3 +- src/components/media-modal.jsx | 3 +- src/components/media-post.jsx | 3 +- src/components/media.jsx | 3 +- src/components/modals.jsx | 3 +- src/components/nav-menu.jsx | 3 +- src/components/notification-service.jsx | 3 +- src/components/notification.jsx | 4 +- src/components/poll.jsx | 4 +- src/components/relative-time.jsx | 2 +- src/components/report-modal.jsx | 6 +- src/components/search-form.jsx | 3 +- src/components/shortcuts-settings.jsx | 4 +- src/components/shortcuts.jsx | 4 +- src/components/status.jsx | 10 +- src/components/timeline.jsx | 7 +- src/components/translation-block.jsx | 3 +- src/compose.jsx | 5 +- src/locales/en.po | 1540 +++++++++----------- src/pages/account-statuses.jsx | 5 +- src/pages/accounts.jsx | 3 +- src/pages/annual-report.jsx | 3 +- src/pages/bookmarks.jsx | 3 +- src/pages/catchup.jsx | 8 +- src/pages/favourites.jsx | 3 +- src/pages/filters.jsx | 9 +- src/pages/followed-hashtags.jsx | 3 +- src/pages/following.jsx | 3 +- src/pages/hashtag.jsx | 5 +- src/pages/home.jsx | 5 +- src/pages/http-route.jsx | 2 +- src/pages/list.jsx | 5 +- src/pages/lists.jsx | 3 +- src/pages/login.jsx | 3 +- src/pages/mentions.jsx | 3 +- src/pages/notifications.jsx | 7 +- src/pages/public.jsx | 3 +- src/pages/search.jsx | 3 +- src/pages/settings.jsx | 4 +- src/pages/status.jsx | 5 +- src/pages/trending.jsx | 3 +- src/pages/welcome.jsx | 3 +- src/utils/open-compose.js | 2 +- src/utils/show-compose.js | 2 +- 57 files changed, 845 insertions(+), 922 deletions(-) diff --git a/src/components/account-block.jsx b/src/components/account-block.jsx index 0d1f2faa..28589b67 100644 --- a/src/components/account-block.jsx +++ b/src/components/account-block.jsx @@ -1,6 +1,6 @@ import './account-block.css'; -import { Plural, t, Trans } from '@lingui/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; // import { useNavigate } from 'react-router-dom'; import enhanceContent from '../utils/enhance-content'; @@ -28,6 +28,7 @@ function AccountBlock({ relationship = {}, excludeRelationshipAttrs = [], }) { + const { t } = useLingui(); if (skeleton) { return (
diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index 226194c9..5b493aca 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -1,7 +1,7 @@ import './account-info.css'; -import { msg, plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, plural } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuDivider, MenuItem } from '@szhsin/react-menu'; import { useCallback, @@ -24,7 +24,7 @@ import pmem from '../utils/pmem'; import shortenNumber from '../utils/shorten-number'; import showCompose from '../utils/show-compose'; import showToast from '../utils/show-toast'; -import states, { hideAllModals } from '../utils/states'; +import states from '../utils/states'; import store from '../utils/store'; import { getCurrentAccountID, updateAccount } from '../utils/store-utils'; import supports from '../utils/supports'; @@ -135,7 +135,7 @@ function AccountInfo({ instance, authenticated, }) { - const { i18n } = useLingui(); + const { i18n, t } = useLingui(); const { masto } = api({ instance, }); diff --git a/src/components/account-sheet.jsx b/src/components/account-sheet.jsx index 593c0bfc..c9ec917b 100644 --- a/src/components/account-sheet.jsx +++ b/src/components/account-sheet.jsx @@ -1,4 +1,4 @@ -import { t } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useEffect } from 'preact/hooks'; import { api } from '../utils/api'; @@ -9,6 +9,7 @@ import AccountInfo from './account-info'; import Icon from './icon'; function AccountSheet({ account, instance: propInstance, onClose }) { + const { t } = useLingui(); const { masto, instance, authenticated } = api({ instance: propInstance }); const isString = typeof account === 'string'; diff --git a/src/components/background-service.jsx b/src/components/background-service.jsx index 64144832..94d5fda5 100644 --- a/src/components/background-service.jsx +++ b/src/components/background-service.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { memo } from 'preact/compat'; import { useEffect, useRef, useState } from 'preact/hooks'; import { useHotkeys } from 'react-hotkeys-hook'; @@ -13,6 +13,8 @@ const STREAMING_TIMEOUT = 1000 * 3; // 3 seconds const POLL_INTERVAL = 20_000; // 20 seconds export default memo(function BackgroundService({ isLoggedIn }) { + const { t } = useLingui(); + // Notifications service // - WebSocket to receive notifications when page is visible const [visible, setVisible] = useState(true); diff --git a/src/components/columns.jsx b/src/components/columns.jsx index 0449c780..1f578b42 100644 --- a/src/components/columns.jsx +++ b/src/components/columns.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useHotkeys } from 'react-hotkeys-hook'; import { useSnapshot } from 'valtio'; @@ -23,6 +23,7 @@ const scrollIntoViewOptions = { }; function Columns() { + const { t } = useLingui(); useTitle(t`Home`, '/'); const snapStates = useSnapshot(states); const { shortcuts } = snapStates; diff --git a/src/components/compose-button.jsx b/src/components/compose-button.jsx index 20a7e8d1..818430a7 100644 --- a/src/components/compose-button.jsx +++ b/src/components/compose-button.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useHotkeys } from 'react-hotkeys-hook'; import { useSnapshot } from 'valtio'; @@ -9,6 +9,7 @@ import states from '../utils/states'; import Icon from './icon'; export default function ComposeButton() { + const { t } = useLingui(); const snapStates = useSnapshot(states); function handleButton(e) { diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 775fd637..3eec47db 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -1,8 +1,8 @@ import './compose.css'; import '@github/text-expander-element'; -import { msg, plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, plural } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuItem } from '@szhsin/react-menu'; import { deepEqual } from 'fast-equals'; import Fuse from 'fuse.js'; @@ -217,7 +217,7 @@ function Compose({ standalone, hasOpener, }) { - const { i18n, _ } = useLingui(); + const { i18n, _, t } = useLingui(); const rtf = RTF(i18n.locale); const lf = LF(i18n.locale); @@ -2244,7 +2244,7 @@ function MediaAttachment({ onDescriptionChange = () => {}, onRemove = () => {}, }) { - const { i18n } = useLingui(); + const { i18n, t } = useLingui(); const [uiState, setUIState] = useState('default'); const supportsEdit = supports('@mastodon/edit-media-attributes'); const { type, id, file } = attachment; diff --git a/src/components/drafts.jsx b/src/components/drafts.jsx index 5c6182ad..21a0b8f1 100644 --- a/src/components/drafts.jsx +++ b/src/components/drafts.jsx @@ -1,6 +1,6 @@ import './drafts.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useMemo, useReducer, useState } from 'react'; import { api } from '../utils/api'; @@ -14,6 +14,7 @@ import Loader from './loader'; import MenuConfirm from './menu-confirm'; function Drafts({ onClose }) { + const { t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [drafts, setDrafts] = useState([]); diff --git a/src/components/embed-modal.jsx b/src/components/embed-modal.jsx index 66215ae1..28bf22d3 100644 --- a/src/components/embed-modal.jsx +++ b/src/components/embed-modal.jsx @@ -1,10 +1,11 @@ import './embed-modal.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import Icon from './icon'; function EmbedModal({ html, url, width, height, onClose = () => {} }) { + const { t } = useLingui(); return (
diff --git a/src/components/follow-request-buttons.jsx b/src/components/follow-request-buttons.jsx index d62e3c6d..1f64acf4 100644 --- a/src/components/follow-request-buttons.jsx +++ b/src/components/follow-request-buttons.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useState } from 'preact/hooks'; import { api } from '../utils/api'; @@ -7,6 +7,7 @@ import Icon from './icon'; import Loader from './loader'; function FollowRequestButtons({ accountID, onChange }) { + const { t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [requestState, setRequestState] = useState(null); // accept, reject diff --git a/src/components/generic-accounts.jsx b/src/components/generic-accounts.jsx index 498dc12f..5f0e3e98 100644 --- a/src/components/generic-accounts.jsx +++ b/src/components/generic-accounts.jsx @@ -1,6 +1,6 @@ import './generic-accounts.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useRef, useState } from 'preact/hooks'; import { InView } from 'react-intersection-observer'; import { useSnapshot } from 'valtio'; @@ -21,8 +21,9 @@ export default function GenericAccounts({ excludeRelationshipAttrs = [], postID, onClose = () => {}, - blankCopy = t`Nothing to show`, + blankCopy, }) { + const { t } = useLingui(); const { masto, instance: currentInstance } = api(); const isCurrentInstance = instance ? instance === currentInstance : true; const snapStates = useSnapshot(states); @@ -227,7 +228,9 @@ export default function GenericAccounts({ Error loading accounts

) : ( -

{blankCopy}

+

+ {blankCopy || t`Nothing to show`} +

)}
diff --git a/src/components/keyboard-shortcuts-help.jsx b/src/components/keyboard-shortcuts-help.jsx index 523093e3..7d717aa5 100644 --- a/src/components/keyboard-shortcuts-help.jsx +++ b/src/components/keyboard-shortcuts-help.jsx @@ -1,6 +1,6 @@ import './keyboard-shortcuts-help.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { memo } from 'preact/compat'; import { useHotkeys } from 'react-hotkeys-hook'; import { useSnapshot } from 'valtio'; @@ -11,6 +11,7 @@ import Icon from './icon'; import Modal from './modal'; export default memo(function KeyboardShortcutsHelp() { + const { t } = useLingui(); const snapStates = useSnapshot(states); function onClose() { diff --git a/src/components/list-add-edit.jsx b/src/components/list-add-edit.jsx index 17279b7b..c8823a36 100644 --- a/src/components/list-add-edit.jsx +++ b/src/components/list-add-edit.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useRef, useState } from 'preact/hooks'; import { api } from '../utils/api'; @@ -9,6 +9,7 @@ import Icon from './icon'; import MenuConfirm from './menu-confirm'; function ListAddEdit({ list, onClose }) { + const { t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const editMode = !!list; diff --git a/src/components/media-alt-modal.jsx b/src/components/media-alt-modal.jsx index 9f4cfeba..6188ea86 100644 --- a/src/components/media-alt-modal.jsx +++ b/src/components/media-alt-modal.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Menu, MenuItem } from '@szhsin/react-menu'; import { useState } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -13,6 +13,7 @@ import Menu2 from './menu2'; import TranslationBlock from './translation-block'; export default function MediaAltModal({ alt, lang, onClose }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const [forceTranslate, setForceTranslate] = useState(false); const targetLanguage = getTranslateTargetLanguage(true); diff --git a/src/components/media-modal.jsx b/src/components/media-modal.jsx index 89309e1b..b93d37d8 100644 --- a/src/components/media-modal.jsx +++ b/src/components/media-modal.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuDivider, MenuItem } from '@szhsin/react-menu'; import { getBlurHashAverageColor } from 'fast-blurhash'; import { @@ -32,6 +32,7 @@ function MediaModal({ index = 0, onClose = () => {}, }) { + const { t } = useLingui(); const [uiState, setUIState] = useState('default'); const carouselRef = useRef(null); diff --git a/src/components/media-post.jsx b/src/components/media-post.jsx index 58c3495b..14313447 100644 --- a/src/components/media-post.jsx +++ b/src/components/media-post.jsx @@ -1,6 +1,6 @@ import './media-post.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { memo } from 'preact/compat'; import { useContext, useMemo } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -22,6 +22,7 @@ function MediaPost({ // allowFilters, onMediaClick, }) { + const { t } = useLingui(); let sKey = statusKey(statusID, instance); const snapStates = useSnapshot(states); if (!status) { diff --git a/src/components/media.jsx b/src/components/media.jsx index fc92df69..d4fae620 100644 --- a/src/components/media.jsx +++ b/src/components/media.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { getBlurHashAverageColor } from 'fast-blurhash'; import { Fragment } from 'preact'; import { memo } from 'preact/compat'; @@ -32,6 +32,7 @@ audio = Audio track const dataAltLabel = 'ALT'; const AltBadge = (props) => { + const { t } = useLingui(); const { alt, lang, index, ...rest } = props; if (!alt || !alt.trim()) return null; return ( diff --git a/src/components/modals.jsx b/src/components/modals.jsx index e961f585..362e6e1f 100644 --- a/src/components/modals.jsx +++ b/src/components/modals.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useEffect } from 'preact/hooks'; import { useLocation, useNavigate } from 'react-router-dom'; import { subscribe, useSnapshot } from 'valtio'; @@ -30,6 +30,7 @@ subscribe(states, (changes) => { }); export default function Modals() { + const { t } = useLingui(); const snapStates = useSnapshot(states); const navigate = useNavigate(); const location = useLocation(); diff --git a/src/components/nav-menu.jsx b/src/components/nav-menu.jsx index 6e46072c..6a07c0e6 100644 --- a/src/components/nav-menu.jsx +++ b/src/components/nav-menu.jsx @@ -1,6 +1,6 @@ import './nav-menu.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { ControlledMenu, MenuDivider, MenuItem } from '@szhsin/react-menu'; import { memo } from 'preact/compat'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; @@ -21,6 +21,7 @@ import MenuLink from './menu-link'; import SubMenu2 from './submenu2'; function NavMenu(props) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const { masto, instance, authenticated } = api(); diff --git a/src/components/notification-service.jsx b/src/components/notification-service.jsx index a46574d5..dd0a5c56 100644 --- a/src/components/notification-service.jsx +++ b/src/components/notification-service.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { memo } from 'preact/compat'; import { useLayoutEffect, useState } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -33,6 +33,7 @@ import Notification from './notification'; } export default memo(function NotificationService() { + const { t } = useLingui(); if (!('serviceWorker' in navigator)) return null; const snapStates = useSnapshot(states); diff --git a/src/components/notification.jsx b/src/components/notification.jsx index 1becf77c..6e3f93fa 100644 --- a/src/components/notification.jsx +++ b/src/components/notification.jsx @@ -1,5 +1,5 @@ -import { msg, Plural, Select, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, t } from '@lingui/core/macro'; +import { Plural, Select, Trans, useLingui } from '@lingui/react/macro'; import { Fragment } from 'preact'; import { memo } from 'preact/compat'; diff --git a/src/components/poll.jsx b/src/components/poll.jsx index 92b57a1d..91a1426e 100644 --- a/src/components/poll.jsx +++ b/src/components/poll.jsx @@ -1,4 +1,5 @@ -import { Plural, plural, t, Trans } from '@lingui/macro'; +import { plural } from '@lingui/core/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { useState } from 'preact/hooks'; import shortenNumber from '../utils/shorten-number'; @@ -14,6 +15,7 @@ export default function Poll({ refresh = () => {}, votePoll = () => {}, }) { + const { t } = useLingui(); const [uiState, setUIState] = useState('default'); const { expired, diff --git a/src/components/relative-time.jsx b/src/components/relative-time.jsx index 8ab9f646..9b588ed5 100644 --- a/src/components/relative-time.jsx +++ b/src/components/relative-time.jsx @@ -1,5 +1,5 @@ import { i18n } from '@lingui/core'; -import { t, Trans } from '@lingui/macro'; +import { t } from '@lingui/core/macro'; import { useEffect, useMemo, useReducer } from 'preact/hooks'; import localeMatch from '../utils/locale-match'; diff --git a/src/components/report-modal.jsx b/src/components/report-modal.jsx index ee1c889a..af2c6183 100644 --- a/src/components/report-modal.jsx +++ b/src/components/report-modal.jsx @@ -1,7 +1,7 @@ import './report-modal.css'; -import { msg, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Fragment } from 'preact'; import { useMemo, useRef, useState } from 'preact/hooks'; @@ -46,7 +46,7 @@ const CATEGORIES_INFO = { }; function ReportModal({ account, post, onClose }) { - const { _ } = useLingui(); + const { _, t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [username, domain] = account.acct.split('@'); diff --git a/src/components/search-form.jsx b/src/components/search-form.jsx index 6f231c61..d6f39146 100644 --- a/src/components/search-form.jsx +++ b/src/components/search-form.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { forwardRef } from 'preact/compat'; import { useImperativeHandle, useRef, useState } from 'preact/hooks'; import { useSearchParams } from 'react-router-dom'; @@ -9,6 +9,7 @@ import Icon from './icon'; import Link from './link'; const SearchForm = forwardRef((props, ref) => { + const { t } = useLingui(); const { instance } = api(); const [searchParams, setSearchParams] = useSearchParams(); const [searchMenuOpen, setSearchMenuOpen] = useState(false); diff --git a/src/components/shortcuts-settings.jsx b/src/components/shortcuts-settings.jsx index f92e2761..a7e6e48b 100644 --- a/src/components/shortcuts-settings.jsx +++ b/src/components/shortcuts-settings.jsx @@ -1,8 +1,8 @@ import './shortcuts-settings.css'; import { useAutoAnimate } from '@formkit/auto-animate/preact'; -import { msg, Plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, t } from '@lingui/core/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { compressToEncodedURIComponent, decompressFromEncodedURIComponent, diff --git a/src/components/shortcuts.jsx b/src/components/shortcuts.jsx index 0fea57d7..3997717a 100644 --- a/src/components/shortcuts.jsx +++ b/src/components/shortcuts.jsx @@ -1,7 +1,6 @@ import './shortcuts.css'; -import { t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuDivider } from '@szhsin/react-menu'; import { memo } from 'preact/compat'; import { useRef, useState } from 'preact/hooks'; @@ -22,6 +21,7 @@ import Menu2 from './menu2'; import SubMenu2 from './submenu2'; function Shortcuts() { + const { t } = useLingui(); const { _ } = useLingui(); const { instance } = api(); const snapStates = useSnapshot(states); diff --git a/src/components/status.jsx b/src/components/status.jsx index e527d39d..924bfcd6 100644 --- a/src/components/status.jsx +++ b/src/components/status.jsx @@ -1,8 +1,8 @@ import './status.css'; import '@justinribeiro/lite-youtube'; -import { msg, plural, Plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, plural } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { ControlledMenu, Menu, @@ -308,7 +308,7 @@ function Status({ showReplyParent, mediaFirst, }) { - const { _ } = useLingui(); + const { _, t } = useLingui(); if (skeleton) { return ( @@ -2967,6 +2967,7 @@ function EditedAtModal({ fetchStatusHistory = () => {}, onClose, }) { + const { t } = useLingui(); const [uiState, setUIState] = useState('default'); const [editHistory, setEditHistory] = useState([]); @@ -3202,6 +3203,7 @@ function generateHTMLCode(post, instance, level = 0) { } function EmbedModal({ post, instance, onClose }) { + const { t } = useLingui(); const { account: { url: accountURL, @@ -3578,7 +3580,7 @@ function FilteredStatus({ showFollowedTags, quoted, }) { - const { _ } = useLingui(); + const { _, t } = useLingui(); const snapStates = useSnapshot(states); const { id: statusID, diff --git a/src/components/timeline.jsx b/src/components/timeline.jsx index 978763bb..526cbbc0 100644 --- a/src/components/timeline.jsx +++ b/src/components/timeline.jsx @@ -1,4 +1,5 @@ -import { plural, t, Trans } from '@lingui/macro'; +import { plural } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { memo } from 'preact/compat'; import { useCallback, @@ -60,6 +61,7 @@ function Timeline({ showReplyParent, clearWhenRefresh, }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const [items, setItems] = useState([]); const [uiState, setUIState] = useState('start'); @@ -573,6 +575,7 @@ const TimelineItem = memo( showReplyParent, mediaFirst, }) => { + const { t } = useLingui(); console.debug('RENDER TimelineItem', status.id); const { id: statusID, reblog, items, type, _pinned } = status; if (_pinned) useItemID = false; @@ -836,6 +839,7 @@ const TimelineItem = memo( ); function StatusCarousel({ title, class: className, children }) { + const { t } = useLingui(); const carouselRef = useRef(); // const { reachStart, reachEnd, init } = useScroll({ // scrollableRef: carouselRef, @@ -929,6 +933,7 @@ function StatusCarousel({ title, class: className, children }) { } function TimelineStatusCompact({ status, instance, filterContext }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const { id, visibility, language } = status; const statusPeekText = statusPeek(status); diff --git a/src/components/translation-block.jsx b/src/components/translation-block.jsx index 7e4f10ca..65936838 100644 --- a/src/components/translation-block.jsx +++ b/src/components/translation-block.jsx @@ -1,6 +1,6 @@ import './translation-block.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import pRetry from 'p-retry'; import pThrottle from 'p-throttle'; import { useEffect, useRef, useState } from 'preact/hooks'; @@ -80,6 +80,7 @@ function TranslationBlock({ mini, autoDetected, }) { + const { t } = useLingui(); const targetLang = getTranslateTargetLanguage(true); const [uiState, setUIState] = useState('default'); const [pronunciationContent, setPronunciationContent] = useState(null); diff --git a/src/compose.jsx b/src/compose.jsx index 709275e7..13c04924 100644 --- a/src/compose.jsx +++ b/src/compose.jsx @@ -3,8 +3,8 @@ import './app.css'; import './polyfills'; import { i18n } from '@lingui/core'; -import { t, Trans } from '@lingui/macro'; import { I18nProvider } from '@lingui/react'; +import { Trans, useLingui } from '@lingui/react/macro'; import { render } from 'preact'; import { useEffect, useState } from 'preact/hooks'; @@ -12,7 +12,7 @@ import ComposeSuspense from './components/compose-suspense'; import Loader from './components/loader'; import { initActivateLang } from './utils/lang'; import { initStates } from './utils/states'; -import { getCurrentAccount, setCurrentAccountID } from './utils/store-utils'; +import { getCurrentAccount } from './utils/store-utils'; import useTitle from './utils/useTitle'; initActivateLang(); @@ -22,6 +22,7 @@ if (window.opener) { } function App() { + const { t } = useLingui(); const [uiState, setUIState] = useState('default'); const [isLoggedIn, setIsLoggedIn] = useState(null); diff --git a/src/locales/en.po b/src/locales/en.po index d7901ea1..25378788 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -13,62 +13,62 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: src/components/account-block.jsx:135 +#: src/components/account-block.jsx:136 msgid "Locked" msgstr "" #. placeholder {0}: shortenNumber(statusesCount) -#: src/components/account-block.jsx:141 +#: src/components/account-block.jsx:142 msgid "Posts: {0}" msgstr "" #. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, }) -#: src/components/account-block.jsx:146 +#: src/components/account-block.jsx:147 msgid "Last posted: {0}" msgstr "" -#: src/components/account-block.jsx:161 +#: src/components/account-block.jsx:162 #: src/components/account-info.jsx:636 msgid "Automated" msgstr "" -#: src/components/account-block.jsx:168 +#: src/components/account-block.jsx:169 #: src/components/account-info.jsx:641 #: src/components/status.jsx:514 msgid "Group" msgstr "" -#: src/components/account-block.jsx:178 +#: src/components/account-block.jsx:179 msgid "Mutual" msgstr "" -#: src/components/account-block.jsx:182 +#: src/components/account-block.jsx:183 #: src/components/account-info.jsx:1682 msgid "Requested" msgstr "" -#: src/components/account-block.jsx:186 +#: src/components/account-block.jsx:187 #: src/components/account-info.jsx:1673 msgid "Following" msgstr "" -#: src/components/account-block.jsx:190 +#: src/components/account-block.jsx:191 #: src/components/account-info.jsx:1064 msgid "Follows you" msgstr "" -#: src/components/account-block.jsx:198 +#: src/components/account-block.jsx:199 msgid "{followersCount, plural, one {# follower} other {# followers}}" msgstr "" -#: src/components/account-block.jsx:207 +#: src/components/account-block.jsx:208 #: src/components/account-info.jsx:682 msgid "Verified" msgstr "" #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) -#: src/components/account-block.jsx:222 +#: src/components/account-block.jsx:223 #: src/components/account-info.jsx:782 msgid "Joined <0>{0}" msgstr "" @@ -100,29 +100,28 @@ msgstr "Following" #: src/components/account-info.jsx:421 #: src/components/account-info.jsx:778 -#: src/pages/account-statuses.jsx:484 -#: src/pages/search.jsx:327 -#: src/pages/search.jsx:474 +#: src/pages/account-statuses.jsx:483 +#: src/pages/search.jsx:328 +#: src/pages/search.jsx:475 msgid "Posts" msgstr "" #: src/components/account-info.jsx:429 -#: src/components/account-info.jsx:1120 #: src/components/compose.jsx:2591 -#: src/components/media-alt-modal.jsx:45 -#: src/components/media-modal.jsx:357 +#: src/components/media-alt-modal.jsx:46 +#: src/components/media-modal.jsx:358 #: src/components/status.jsx:1737 #: src/components/status.jsx:1754 #: src/components/status.jsx:1878 #: src/components/status.jsx:2490 #: src/components/status.jsx:2493 -#: src/pages/account-statuses.jsx:528 -#: src/pages/accounts.jsx:109 -#: src/pages/hashtag.jsx:199 -#: src/pages/list.jsx:157 -#: src/pages/public.jsx:114 -#: src/pages/status.jsx:1212 -#: src/pages/trending.jsx:471 +#: src/pages/account-statuses.jsx:527 +#: src/pages/accounts.jsx:110 +#: src/pages/hashtag.jsx:200 +#: src/pages/list.jsx:158 +#: src/pages/public.jsx:115 +#: src/pages/status.jsx:1214 +#: src/pages/trending.jsx:472 msgid "More" msgstr "" @@ -131,14 +130,12 @@ msgid "<0>{displayName} has indicated that their new account is now:" msgstr "" #: src/components/account-info.jsx:586 -#: src/components/account-info.jsx:1278 msgid "Handle copied" -msgstr "" +msgstr "Handle copied" #: src/components/account-info.jsx:589 -#: src/components/account-info.jsx:1281 msgid "Unable to copy handle" -msgstr "" +msgstr "Unable to copy handle" #: src/components/account-info.jsx:595 #: src/components/account-info.jsx:1287 @@ -164,14 +161,14 @@ msgstr "" #: src/components/account-info.jsx:711 #: src/components/account-info.jsx:752 msgid "This user has chosen to not make this information available." -msgstr "" +msgstr "This user has chosen to not make this information available." #. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #. placeholder {2}: ( postingStats.boosts / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) #: src/components/account-info.jsx:807 msgid "{0} original posts, {1} replies, {2} boosts" -msgstr "" +msgstr "{0} original posts, {1} replies, {2} boosts" #. placeholder {0}: postingStats.total #. placeholder {1}: postingStats.daysSinceLastPost @@ -199,17 +196,17 @@ msgstr "" #: src/components/status.jsx:2268 #: src/pages/catchup.jsx:71 #: src/pages/catchup.jsx:1445 -#: src/pages/catchup.jsx:2056 -#: src/pages/status.jsx:935 -#: src/pages/status.jsx:1557 +#: src/pages/catchup.jsx:2058 +#: src/pages/status.jsx:937 +#: src/pages/status.jsx:1560 msgid "Replies" msgstr "" #: src/components/account-info.jsx:868 #: src/pages/catchup.jsx:72 #: src/pages/catchup.jsx:1447 -#: src/pages/catchup.jsx:2068 -#: src/pages/settings.jsx:1153 +#: src/pages/catchup.jsx:2070 +#: src/pages/settings.jsx:1155 msgid "Boosts" msgstr "" @@ -234,10 +231,6 @@ msgstr "" msgid "Blocked" msgstr "" -#: src/components/account-info.jsx:1096 -msgid "Private note" -msgstr "" - #: src/components/account-info.jsx:1153 msgid "Mention <0>@{username}" msgstr "" @@ -246,84 +239,24 @@ msgstr "" msgid "Translate bio" msgstr "" -#: src/components/account-info.jsx:1176 -msgid "Edit private note" -msgstr "" - -#: src/components/account-info.jsx:1176 -msgid "Add private note" -msgstr "" - -#: src/components/account-info.jsx:1196 -msgid "Notifications enabled for @{username}'s posts." -msgstr "" - -#: src/components/account-info.jsx:1197 -msgid " Notifications disabled for @{username}'s posts." -msgstr " Notifications disabled for @{username}'s posts." - -#: src/components/account-info.jsx:1209 -msgid "Disable notifications" -msgstr "" - -#: src/components/account-info.jsx:1210 -msgid "Enable notifications" -msgstr "" - -#: src/components/account-info.jsx:1227 -msgid "Boosts from @{username} enabled." -msgstr "" - -#: src/components/account-info.jsx:1228 -msgid "Boosts from @{username} disabled." -msgstr "" - -#: src/components/account-info.jsx:1239 -msgid "Disable boosts" -msgstr "" - -#: src/components/account-info.jsx:1239 -msgid "Enable boosts" -msgstr "" - #: src/components/account-info.jsx:1255 #: src/components/account-info.jsx:1265 #: src/components/account-info.jsx:1866 msgid "Add/Remove from Lists" msgstr "" -#: src/components/account-info.jsx:1304 -#: src/components/status.jsx:1177 -msgid "Link copied" -msgstr "" - -#: src/components/account-info.jsx:1307 -#: src/components/status.jsx:1180 -msgid "Unable to copy link" -msgstr "" - #: src/components/account-info.jsx:1313 #: src/components/shortcuts-settings.jsx:1059 #: src/components/status.jsx:1186 -#: src/components/status.jsx:3267 +#: src/components/status.jsx:3269 msgid "Copy" msgstr "" -#: src/components/account-info.jsx:1328 -#: src/components/shortcuts-settings.jsx:1077 -#: src/components/status.jsx:1202 -msgid "Sharing doesn't seem to work." -msgstr "" - #: src/components/account-info.jsx:1334 #: src/components/status.jsx:1208 msgid "Share…" msgstr "" -#: src/components/account-info.jsx:1354 -msgid "Unmuted @{username}" -msgstr "" - #: src/components/account-info.jsx:1366 msgid "Unmute <0>@{username}" msgstr "" @@ -332,23 +265,10 @@ msgstr "" msgid "Mute <0>@{username}…" msgstr "" -#. placeholder {0}: typeof MUTE_DURATIONS_LABELS[duration] === 'function' ? MUTE_DURATIONS_LABELS[duration]() : _(MUTE_DURATIONS_LABELS[duration]) -#: src/components/account-info.jsx:1414 -msgid "Muted @{username} for {0}" -msgstr "" - -#: src/components/account-info.jsx:1426 -msgid "Unable to mute @{username}" -msgstr "" - #: src/components/account-info.jsx:1447 msgid "Remove <0>@{username} from followers?" msgstr "" -#: src/components/account-info.jsx:1467 -msgid "@{username} removed from followers" -msgstr "" - #: src/components/account-info.jsx:1479 msgid "Remove follower…" msgstr "" @@ -357,22 +277,6 @@ msgstr "" msgid "Block <0>@{username}?" msgstr "" -#: src/components/account-info.jsx:1514 -msgid "Unblocked @{username}" -msgstr "" - -#: src/components/account-info.jsx:1522 -msgid "Blocked @{username}" -msgstr "" - -#: src/components/account-info.jsx:1530 -msgid "Unable to unblock @{username}" -msgstr "" - -#: src/components/account-info.jsx:1532 -msgid "Unable to block @{username}" -msgstr "" - #: src/components/account-info.jsx:1542 msgid "Unblock <0>@{username}" msgstr "" @@ -390,15 +294,6 @@ msgstr "" msgid "Edit profile" msgstr "" -#: src/components/account-info.jsx:1624 -msgid "Withdraw follow request?" -msgstr "" - -#. placeholder {0}: info.acct || info.username -#: src/components/account-info.jsx:1625 -msgid "Unfollow @{0}?" -msgstr "" - #: src/components/account-info.jsx:1676 msgid "Unfollow…" msgstr "" @@ -408,61 +303,16 @@ msgid "Withdraw…" msgstr "" #: src/components/account-info.jsx:1692 -#: src/components/account-info.jsx:1696 -#: src/pages/hashtag.jsx:261 +#: src/pages/hashtag.jsx:262 msgid "Follow" msgstr "" -#: src/components/account-info.jsx:1807 -#: src/components/account-info.jsx:1861 -#: src/components/account-info.jsx:1994 -#: src/components/account-info.jsx:2094 -#: src/components/account-sheet.jsx:37 -#: src/components/compose.jsx:859 -#: src/components/compose.jsx:2547 -#: src/components/compose.jsx:3020 -#: src/components/compose.jsx:3228 -#: src/components/compose.jsx:3458 -#: src/components/drafts.jsx:58 -#: src/components/embed-modal.jsx:12 -#: src/components/generic-accounts.jsx:142 -#: src/components/keyboard-shortcuts-help.jsx:39 -#: src/components/list-add-edit.jsx:35 -#: src/components/media-alt-modal.jsx:33 -#: src/components/media-modal.jsx:321 -#: src/components/notification-service.jsx:156 -#: src/components/report-modal.jsx:75 -#: src/components/shortcuts-settings.jsx:230 -#: src/components/shortcuts-settings.jsx:583 -#: src/components/shortcuts-settings.jsx:783 -#: src/components/status.jsx:2992 -#: src/components/status.jsx:3231 -#: src/components/status.jsx:3731 -#: src/pages/accounts.jsx:36 -#: src/pages/catchup.jsx:1581 -#: src/pages/filters.jsx:224 -#: src/pages/list.jsx:274 -#: src/pages/notifications.jsx:915 -#: src/pages/notifications.jsx:1129 -#: src/pages/settings.jsx:77 -#: src/pages/status.jsx:1299 -msgid "Close" -msgstr "" - #: src/components/account-info.jsx:1812 msgid "Translated Bio" msgstr "" -#: src/components/account-info.jsx:1906 -msgid "Unable to remove from list." -msgstr "" - -#: src/components/account-info.jsx:1907 -msgid "Unable to add to list." -msgstr "" - #: src/components/account-info.jsx:1926 -#: src/pages/lists.jsx:104 +#: src/pages/lists.jsx:105 msgid "Unable to load lists." msgstr "" @@ -471,8 +321,8 @@ msgid "No lists." msgstr "" #: src/components/account-info.jsx:1941 -#: src/components/list-add-edit.jsx:39 -#: src/pages/lists.jsx:58 +#: src/components/list-add-edit.jsx:40 +#: src/pages/lists.jsx:59 msgid "New list" msgstr "" @@ -481,10 +331,6 @@ msgstr "" msgid "Private note about <0>@{0}" msgstr "" -#: src/components/account-info.jsx:2029 -msgid "Unable to update private note." -msgstr "" - #: src/components/account-info.jsx:2052 #: src/components/account-info.jsx:2222 msgid "Cancel" @@ -494,12 +340,8 @@ msgstr "" msgid "Save & close" msgstr "" -#: src/components/account-info.jsx:2150 -msgid "Unable to update profile." -msgstr "" - #: src/components/account-info.jsx:2157 -#: src/components/list-add-edit.jsx:104 +#: src/components/list-add-edit.jsx:105 msgid "Name" msgstr "" @@ -520,7 +362,7 @@ msgid "Content" msgstr "" #: src/components/account-info.jsx:2225 -#: src/components/list-add-edit.jsx:149 +#: src/components/list-add-edit.jsx:150 #: src/components/shortcuts-settings.jsx:715 #: src/pages/filters.jsx:554 #: src/pages/notifications.jsx:981 @@ -535,28 +377,56 @@ msgstr "" msgid "server domain name" msgstr "" -#: src/components/background-service.jsx:149 +#: src/components/account-sheet.jsx:38 +#: src/components/compose.jsx:859 +#: src/components/compose.jsx:2547 +#: src/components/drafts.jsx:59 +#: src/components/embed-modal.jsx:13 +#: src/components/generic-accounts.jsx:143 +#: src/components/keyboard-shortcuts-help.jsx:40 +#: src/components/list-add-edit.jsx:36 +#: src/components/media-alt-modal.jsx:34 +#: src/components/media-modal.jsx:322 +#: src/components/notification-service.jsx:157 +#: src/components/report-modal.jsx:75 +#: src/components/shortcuts-settings.jsx:230 +#: src/components/shortcuts-settings.jsx:583 +#: src/components/shortcuts-settings.jsx:783 +#: src/components/status.jsx:2993 +#: src/components/status.jsx:3233 +#: src/components/status.jsx:3733 +#: src/pages/accounts.jsx:37 +#: src/pages/catchup.jsx:1581 +#: src/pages/filters.jsx:224 +#: src/pages/list.jsx:276 +#: src/pages/notifications.jsx:915 +#: src/pages/settings.jsx:78 +#: src/pages/status.jsx:1301 +msgid "Close" +msgstr "" + +#: src/components/background-service.jsx:151 msgid "Cloak mode disabled" msgstr "" -#: src/components/background-service.jsx:149 +#: src/components/background-service.jsx:151 msgid "Cloak mode enabled" msgstr "" -#: src/components/columns.jsx:26 -#: src/components/nav-menu.jsx:175 +#: src/components/columns.jsx:27 +#: src/components/nav-menu.jsx:176 #: src/components/shortcuts-settings.jsx:139 -#: src/components/timeline.jsx:437 +#: src/components/timeline.jsx:439 #: src/pages/catchup.jsx:876 #: src/pages/filters.jsx:89 -#: src/pages/followed-hashtags.jsx:40 +#: src/pages/followed-hashtags.jsx:41 #: src/pages/home.jsx:53 #: src/pages/notifications.jsx:560 msgid "Home" msgstr "" -#: src/components/compose-button.jsx:49 -#: src/compose.jsx:37 +#: src/components/compose-button.jsx:50 +#: src/compose.jsx:38 msgid "Compose" msgstr "" @@ -578,7 +448,7 @@ msgstr "" #: src/components/compose.jsx:402 msgid "You have unsaved changes. Discard this post?" -msgstr "" +msgstr "You have unsaved changes. Discard this post?" #. placeholder {0}: unsupportedFiles.length #. placeholder {1}: unsupportedFiles[0].name @@ -596,27 +466,27 @@ msgstr "" #: src/components/compose.jsx:840 msgid "Pop out" -msgstr "" +msgstr "Pop out" #: src/components/compose.jsx:847 msgid "Minimize" -msgstr "" +msgstr "Minimize" #: src/components/compose.jsx:883 msgid "Looks like you closed the parent window." -msgstr "" +msgstr "Looks like you closed the parent window." #: src/components/compose.jsx:890 msgid "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later." -msgstr "" +msgstr "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later." #: src/components/compose.jsx:895 msgid "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?" -msgstr "" +msgstr "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?" #: src/components/compose.jsx:937 msgid "Pop in" -msgstr "" +msgstr "Pop in" #. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username #. placeholder {1}: rtf.format(-replyToStatusMonthsAgo, 'month') @@ -635,38 +505,38 @@ msgstr "" #: src/components/compose.jsx:1017 msgid "Poll must have at least 2 options" -msgstr "" +msgstr "Poll must have at least 2 options" #: src/components/compose.jsx:1021 msgid "Some poll choices are empty" -msgstr "" +msgstr "Some poll choices are empty" #: src/components/compose.jsx:1034 msgid "Some media have no descriptions. Continue?" -msgstr "" +msgstr "Some media have no descriptions. Continue?" #: src/components/compose.jsx:1086 msgid "Attachment #{i} failed" -msgstr "" +msgstr "Attachment #{i} failed" #: src/components/compose.jsx:1180 #: src/components/status.jsx:2063 -#: src/components/timeline.jsx:984 +#: src/components/timeline.jsx:989 msgid "Content warning" msgstr "" #: src/components/compose.jsx:1196 msgid "Content warning or sensitive media" -msgstr "" +msgstr "Content warning or sensitive media" #: src/components/compose.jsx:1232 #: src/components/status.jsx:93 -#: src/pages/settings.jsx:305 +#: src/pages/settings.jsx:306 msgid "Public" msgstr "" #: src/components/compose.jsx:1237 -#: src/components/nav-menu.jsx:337 +#: src/components/nav-menu.jsx:338 #: src/components/shortcuts-settings.jsx:165 #: src/components/status.jsx:94 msgid "Local" @@ -674,13 +544,13 @@ msgstr "" #: src/components/compose.jsx:1241 #: src/components/status.jsx:95 -#: src/pages/settings.jsx:308 +#: src/pages/settings.jsx:309 msgid "Unlisted" msgstr "" #: src/components/compose.jsx:1244 #: src/components/status.jsx:96 -#: src/pages/settings.jsx:311 +#: src/pages/settings.jsx:312 msgid "Followers only" msgstr "" @@ -692,29 +562,28 @@ msgstr "" #: src/components/compose.jsx:1256 msgid "Post your reply" -msgstr "" +msgstr "Post your reply" #: src/components/compose.jsx:1258 msgid "Edit your post" -msgstr "" +msgstr "Edit your post" #: src/components/compose.jsx:1259 msgid "What are you doing?" -msgstr "" +msgstr "What are you doing?" #: src/components/compose.jsx:1337 msgid "Mark media as sensitive" msgstr "" #: src/components/compose.jsx:1381 -#: src/components/compose.jsx:3078 #: src/components/shortcuts-settings.jsx:715 -#: src/pages/list.jsx:359 +#: src/pages/list.jsx:362 msgid "Add" msgstr "" #: src/components/compose.jsx:1555 -#: src/components/keyboard-shortcuts-help.jsx:151 +#: src/components/keyboard-shortcuts-help.jsx:152 #: src/components/status.jsx:929 #: src/components/status.jsx:1717 #: src/components/status.jsx:1718 @@ -724,26 +593,20 @@ msgstr "" #: src/components/compose.jsx:1557 msgid "Update" -msgstr "" +msgstr "Update" #: src/components/compose.jsx:1558 msgctxt "Submit button in composer" msgid "Post" -msgstr "" +msgstr "Post" #: src/components/compose.jsx:1686 msgid "Downloading GIF…" -msgstr "" +msgstr "Downloading GIF…" #: src/components/compose.jsx:1714 msgid "Failed to download GIF" -msgstr "" - -#: src/components/compose.jsx:1878 -#: src/components/compose.jsx:1955 -#: src/components/nav-menu.jsx:238 -msgid "More…" -msgstr "" +msgstr "Failed to download GIF" #: src/components/compose.jsx:2360 msgid "Uploaded" @@ -751,40 +614,49 @@ msgstr "" #: src/components/compose.jsx:2373 msgid "Image description" -msgstr "" +msgstr "Image description" #: src/components/compose.jsx:2374 msgid "Video description" -msgstr "" +msgstr "Video description" #: src/components/compose.jsx:2375 msgid "Audio description" -msgstr "" +msgstr "Audio description" #. placeholder {0}: prettyBytes( imageSize, ) -#. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {1}: prettyBytes(imageSizeLimit) -#. placeholder {1}: prettyBytes(videoSizeLimit) #: src/components/compose.jsx:2411 -#: src/components/compose.jsx:2431 msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." -msgstr "" +msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." -#. placeholder {0}: i18n.number( width, ) -#. placeholder {1}: i18n.number(height) -#. placeholder {2}: i18n.number(newWidth) -#. placeholder {3}: i18n.number( newHeight, ) +#. placeholder {2}: i18n.number( width, ) +#. placeholder {3}: i18n.number(height) +#. placeholder {4}: i18n.number(newWidth) +#. placeholder {5}: i18n.number( newHeight, ) #: src/components/compose.jsx:2423 +msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." +msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." + +#. placeholder {6}: prettyBytes( videoSize, ) +#. placeholder {7}: prettyBytes(videoSizeLimit) +#: src/components/compose.jsx:2431 +msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." +msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." + +#. placeholder {8}: i18n.number( width, ) +#. placeholder {9}: i18n.number(height) +#. placeholder {10}: i18n.number(newWidth) +#. placeholder {11}: i18n.number( newHeight, ) #: src/components/compose.jsx:2443 -msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." -msgstr "" +msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." +msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." #: src/components/compose.jsx:2451 msgid "Frame rate too high. Uploading might encounter issues." -msgstr "" +msgstr "Frame rate too high. Uploading might encounter issues." #: src/components/compose.jsx:2511 -#: src/components/compose.jsx:2761 #: src/components/shortcuts-settings.jsx:726 #: src/pages/catchup.jsx:1074 #: src/pages/filters.jsx:412 @@ -792,35 +664,35 @@ msgid "Remove" msgstr "" #: src/components/compose.jsx:2528 -#: src/compose.jsx:83 +#: src/compose.jsx:84 msgid "Error" msgstr "" #: src/components/compose.jsx:2553 msgid "Edit image description" -msgstr "" +msgstr "Edit image description" #: src/components/compose.jsx:2554 msgid "Edit video description" -msgstr "" +msgstr "Edit video description" #: src/components/compose.jsx:2555 msgid "Edit audio description" -msgstr "" +msgstr "Edit audio description" #: src/components/compose.jsx:2600 #: src/components/compose.jsx:2649 msgid "Generating description. Please wait…" -msgstr "" +msgstr "Generating description. Please wait…" -#. placeholder {0}: e.message +#. placeholder {12}: e.message #: src/components/compose.jsx:2620 -msgid "Failed to generate description: {0}" -msgstr "" +msgid "Failed to generate description: {12}" +msgstr "Failed to generate description: {12}" #: src/components/compose.jsx:2621 msgid "Failed to generate description" -msgstr "" +msgstr "Failed to generate description" #: src/components/compose.jsx:2633 #: src/components/compose.jsx:2639 @@ -828,10 +700,10 @@ msgstr "" msgid "Generate description…" msgstr "" -#. placeholder {0}: e?.message ? `: ${e.message}` : '' +#. placeholder {13}: e?.message ? `: ${e.message}` : '' #: src/components/compose.jsx:2672 -msgid "Failed to generate description{0}" -msgstr "" +msgid "Failed to generate description{13}" +msgstr "Failed to generate description{13}" #. placeholder {0}: localeCode2Text(lang) #: src/components/compose.jsx:2687 @@ -842,11 +714,6 @@ msgstr "" msgid "Done" msgstr "" -#. placeholder {0}: i + 1 -#: src/components/compose.jsx:2742 -msgid "Choice {0}" -msgstr "" - #: src/components/compose.jsx:2789 msgid "Multiple choices" msgstr "" @@ -859,12 +726,8 @@ msgstr "" msgid "Remove poll" msgstr "" -#: src/components/compose.jsx:3037 -msgid "Search accounts" -msgstr "" - #: src/components/compose.jsx:3091 -#: src/components/generic-accounts.jsx:227 +#: src/components/generic-accounts.jsx:228 msgid "Error loading accounts" msgstr "" @@ -872,48 +735,28 @@ msgstr "" msgid "Custom emojis" msgstr "" -#: src/components/compose.jsx:3254 -msgid "Search emoji" -msgstr "" - #: src/components/compose.jsx:3285 msgid "Error loading custom emojis" msgstr "" -#: src/components/compose.jsx:3296 -msgid "Recently used" -msgstr "" - -#: src/components/compose.jsx:3297 -msgid "Others" -msgstr "" - #. placeholder {0}: i18n.number(emojis.length - max) #: src/components/compose.jsx:3335 msgid "{0} more…" msgstr "" -#: src/components/compose.jsx:3473 -msgid "Search GIFs" -msgstr "" - -#: src/components/compose.jsx:3488 -msgid "Powered by GIPHY" -msgstr "" - #: src/components/compose.jsx:3496 msgid "Type to search GIFs" msgstr "" #: src/components/compose.jsx:3594 -#: src/components/media-modal.jsx:461 -#: src/components/timeline.jsx:889 +#: src/components/media-modal.jsx:462 +#: src/components/timeline.jsx:893 msgid "Previous" msgstr "" #: src/components/compose.jsx:3612 -#: src/components/media-modal.jsx:480 -#: src/components/timeline.jsx:906 +#: src/components/media-modal.jsx:481 +#: src/components/timeline.jsx:910 msgid "Next" msgstr "" @@ -921,233 +764,223 @@ msgstr "" msgid "Error loading GIFs" msgstr "" -#: src/components/drafts.jsx:63 -#: src/pages/settings.jsx:692 +#: src/components/drafts.jsx:64 +#: src/pages/settings.jsx:693 msgid "Unsent drafts" msgstr "" -#: src/components/drafts.jsx:68 +#: src/components/drafts.jsx:69 msgid "Looks like you have unsent drafts. Let's continue where you left off." msgstr "" -#: src/components/drafts.jsx:102 +#: src/components/drafts.jsx:103 msgid "Delete this draft?" msgstr "" -#: src/components/drafts.jsx:117 +#: src/components/drafts.jsx:118 msgid "Error deleting draft! Please try again." msgstr "" -#: src/components/drafts.jsx:127 -#: src/components/list-add-edit.jsx:185 +#: src/components/drafts.jsx:128 +#: src/components/list-add-edit.jsx:186 #: src/components/status.jsx:1352 #: src/pages/filters.jsx:587 msgid "Delete…" msgstr "" -#: src/components/drafts.jsx:146 +#: src/components/drafts.jsx:147 msgid "Error fetching reply-to status!" msgstr "" -#: src/components/drafts.jsx:171 +#: src/components/drafts.jsx:172 msgid "Delete all drafts?" msgstr "" -#: src/components/drafts.jsx:189 +#: src/components/drafts.jsx:190 msgid "Error deleting drafts! Please try again." msgstr "" -#: src/components/drafts.jsx:201 +#: src/components/drafts.jsx:202 msgid "Delete all…" msgstr "" -#: src/components/drafts.jsx:209 +#: src/components/drafts.jsx:210 msgid "No drafts found." msgstr "" -#: src/components/drafts.jsx:245 -#: src/pages/catchup.jsx:1928 -msgid "Poll" -msgstr "" - -#: src/components/drafts.jsx:248 -#: src/pages/account-statuses.jsx:365 -msgid "Media" -msgstr "" - -#: src/components/embed-modal.jsx:22 +#: src/components/embed-modal.jsx:23 msgid "Open in new window" msgstr "" -#: src/components/follow-request-buttons.jsx:42 +#: src/components/follow-request-buttons.jsx:43 #: src/pages/notifications.jsx:965 msgid "Accept" msgstr "" -#: src/components/follow-request-buttons.jsx:68 +#: src/components/follow-request-buttons.jsx:69 msgid "Reject" msgstr "" -#: src/components/follow-request-buttons.jsx:75 -#: src/pages/notifications.jsx:1248 +#: src/components/follow-request-buttons.jsx:76 +#: src/pages/notifications.jsx:1249 msgid "Accepted" msgstr "" -#: src/components/follow-request-buttons.jsx:79 +#: src/components/follow-request-buttons.jsx:80 msgid "Rejected" msgstr "" -#: src/components/generic-accounts.jsx:24 -msgid "Nothing to show" -msgstr "" - -#: src/components/generic-accounts.jsx:145 +#: src/components/generic-accounts.jsx:146 #: src/components/notification.jsx:445 -#: src/pages/accounts.jsx:41 -#: src/pages/search.jsx:317 -#: src/pages/search.jsx:350 +#: src/pages/accounts.jsx:42 +#: src/pages/search.jsx:318 +#: src/pages/search.jsx:351 msgid "Accounts" msgstr "" -#: src/components/generic-accounts.jsx:205 -#: src/components/timeline.jsx:519 -#: src/pages/list.jsx:293 +#: src/components/generic-accounts.jsx:206 +#: src/components/timeline.jsx:521 +#: src/pages/list.jsx:295 #: src/pages/notifications.jsx:895 -#: src/pages/search.jsx:544 -#: src/pages/status.jsx:1332 +#: src/pages/search.jsx:545 +#: src/pages/status.jsx:1334 msgid "Show more…" msgstr "" -#: src/components/generic-accounts.jsx:210 -#: src/components/timeline.jsx:524 -#: src/pages/search.jsx:549 +#: src/components/generic-accounts.jsx:211 +#: src/components/timeline.jsx:526 +#: src/pages/search.jsx:550 msgid "The end." msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:43 -#: src/components/nav-menu.jsx:356 +#: src/components/generic-accounts.jsx:232 +msgid "Nothing to show" +msgstr "" + +#: src/components/keyboard-shortcuts-help.jsx:44 +#: src/components/nav-menu.jsx:357 #: src/pages/catchup.jsx:1619 msgid "Keyboard shortcuts" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:51 +#: src/components/keyboard-shortcuts-help.jsx:52 msgid "Keyboard shortcuts help" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:55 +#: src/components/keyboard-shortcuts-help.jsx:56 #: src/pages/catchup.jsx:1644 msgid "Next post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:59 +#: src/components/keyboard-shortcuts-help.jsx:60 #: src/pages/catchup.jsx:1652 msgid "Previous post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:63 +#: src/components/keyboard-shortcuts-help.jsx:64 msgid "Skip carousel to next post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:65 +#: src/components/keyboard-shortcuts-help.jsx:66 msgid "<0>Shift + <1>j" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:71 +#: src/components/keyboard-shortcuts-help.jsx:72 msgid "Skip carousel to previous post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:73 +#: src/components/keyboard-shortcuts-help.jsx:74 msgid "<0>Shift + <1>k" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:79 +#: src/components/keyboard-shortcuts-help.jsx:80 msgid "Load new posts" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:83 +#: src/components/keyboard-shortcuts-help.jsx:84 #: src/pages/catchup.jsx:1676 msgid "Open post details" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:85 +#: src/components/keyboard-shortcuts-help.jsx:86 msgid "<0>Enter or <1>o" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:92 +#: src/components/keyboard-shortcuts-help.jsx:93 msgid "Expand content warning or<0/>toggle expanded/collapsed thread" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:101 +#: src/components/keyboard-shortcuts-help.jsx:102 msgid "Close post or dialogs" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:103 +#: src/components/keyboard-shortcuts-help.jsx:104 msgid "<0>Esc or <1>Backspace" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:109 +#: src/components/keyboard-shortcuts-help.jsx:110 msgid "Focus column in multi-column mode" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:111 +#: src/components/keyboard-shortcuts-help.jsx:112 msgid "<0>1 to <1>9" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:117 +#: src/components/keyboard-shortcuts-help.jsx:118 msgid "Focus next column in multi-column mode" msgstr "Focus next column in multi-column mode" -#: src/components/keyboard-shortcuts-help.jsx:121 +#: src/components/keyboard-shortcuts-help.jsx:122 msgid "Focus previous column in multi-column mode" msgstr "Focus previous column in multi-column mode" -#: src/components/keyboard-shortcuts-help.jsx:125 +#: src/components/keyboard-shortcuts-help.jsx:126 msgid "Compose new post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:129 +#: src/components/keyboard-shortcuts-help.jsx:130 msgid "Compose new post (new window)" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:132 +#: src/components/keyboard-shortcuts-help.jsx:133 msgid "<0>Shift + <1>c" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:138 +#: src/components/keyboard-shortcuts-help.jsx:139 msgid "Send post" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:140 +#: src/components/keyboard-shortcuts-help.jsx:141 msgid "<0>Ctrl + <1>Enter or <2>⌘ + <3>Enter" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:147 -#: src/components/nav-menu.jsx:325 -#: src/components/search-form.jsx:72 +#: src/components/keyboard-shortcuts-help.jsx:148 +#: src/components/nav-menu.jsx:326 +#: src/components/search-form.jsx:73 #: src/components/shortcuts-settings.jsx:52 #: src/components/shortcuts-settings.jsx:179 -#: src/pages/search.jsx:45 -#: src/pages/search.jsx:299 +#: src/pages/search.jsx:46 +#: src/pages/search.jsx:300 msgid "Search" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:155 +#: src/components/keyboard-shortcuts-help.jsx:156 msgid "Reply (new window)" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:158 +#: src/components/keyboard-shortcuts-help.jsx:159 msgid "<0>Shift + <1>r" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:164 +#: src/components/keyboard-shortcuts-help.jsx:165 msgid "Like (favourite)" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:166 +#: src/components/keyboard-shortcuts-help.jsx:167 msgid "<0>l or <1>f" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:172 +#: src/components/keyboard-shortcuts-help.jsx:173 #: src/components/status.jsx:937 #: src/components/status.jsx:2413 #: src/components/status.jsx:2444 @@ -1155,299 +988,303 @@ msgstr "" msgid "Boost" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:174 +#: src/components/keyboard-shortcuts-help.jsx:175 msgid "<0>Shift + <1>b" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:180 +#: src/components/keyboard-shortcuts-help.jsx:181 #: src/components/status.jsx:1022 #: src/components/status.jsx:2469 #: src/components/status.jsx:2470 msgid "Bookmark" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:184 +#: src/components/keyboard-shortcuts-help.jsx:185 msgid "Toggle Cloak mode" msgstr "" -#: src/components/keyboard-shortcuts-help.jsx:186 +#: src/components/keyboard-shortcuts-help.jsx:187 msgid "<0>Shift + <1>Alt + <2>k" msgstr "" -#: src/components/list-add-edit.jsx:39 +#: src/components/list-add-edit.jsx:40 msgid "Edit list" msgstr "" -#: src/components/list-add-edit.jsx:95 +#: src/components/list-add-edit.jsx:96 msgid "Unable to edit list." msgstr "" -#: src/components/list-add-edit.jsx:96 +#: src/components/list-add-edit.jsx:97 msgid "Unable to create list." msgstr "" -#: src/components/list-add-edit.jsx:124 +#: src/components/list-add-edit.jsx:125 msgid "Show replies to list members" msgstr "" -#: src/components/list-add-edit.jsx:127 +#: src/components/list-add-edit.jsx:128 msgid "Show replies to people I follow" msgstr "" -#: src/components/list-add-edit.jsx:130 +#: src/components/list-add-edit.jsx:131 msgid "Don't show replies" msgstr "" -#: src/components/list-add-edit.jsx:143 +#: src/components/list-add-edit.jsx:144 msgid "Hide posts on this list from Home/Following" msgstr "" -#: src/components/list-add-edit.jsx:149 +#: src/components/list-add-edit.jsx:150 #: src/pages/filters.jsx:554 msgid "Create" msgstr "" -#: src/components/list-add-edit.jsx:156 +#: src/components/list-add-edit.jsx:157 msgid "Delete this list?" msgstr "" -#: src/components/list-add-edit.jsx:175 +#: src/components/list-add-edit.jsx:176 msgid "Unable to delete list." msgstr "" -#: src/components/media-alt-modal.jsx:38 -#: src/components/media.jsx:50 +#: src/components/media-alt-modal.jsx:39 +#: src/components/media.jsx:51 msgid "Media description" msgstr "" -#: src/components/media-alt-modal.jsx:57 +#: src/components/media-alt-modal.jsx:58 #: src/components/status.jsx:1066 #: src/components/status.jsx:1093 -#: src/components/translation-block.jsx:195 +#: src/components/translation-block.jsx:196 msgid "Translate" msgstr "" -#: src/components/media-alt-modal.jsx:68 +#: src/components/media-alt-modal.jsx:69 #: src/components/status.jsx:1080 #: src/components/status.jsx:1107 msgid "Speak" msgstr "" -#: src/components/media-modal.jsx:368 +#: src/components/media-modal.jsx:369 msgid "Open original media in new window" msgstr "" -#: src/components/media-modal.jsx:372 +#: src/components/media-modal.jsx:373 msgid "Open original media" msgstr "" -#: src/components/media-modal.jsx:388 +#: src/components/media-modal.jsx:389 msgid "Attempting to describe image. Please wait…" msgstr "" -#: src/components/media-modal.jsx:403 +#: src/components/media-modal.jsx:404 msgid "Failed to describe image" msgstr "" -#: src/components/media-modal.jsx:413 +#: src/components/media-modal.jsx:414 msgid "Describe image…" msgstr "" -#: src/components/media-modal.jsx:436 +#: src/components/media-modal.jsx:437 msgid "View post" msgstr "" -#: src/components/media-post.jsx:127 +#: src/components/media-post.jsx:128 msgid "Sensitive media" msgstr "" -#: src/components/media-post.jsx:132 +#: src/components/media-post.jsx:133 msgid "Filtered: {filterTitleStr}" msgstr "" -#: src/components/media-post.jsx:133 -#: src/components/status.jsx:3561 -#: src/components/status.jsx:3657 -#: src/components/status.jsx:3735 -#: src/components/timeline.jsx:973 +#: src/components/media-post.jsx:134 +#: src/components/status.jsx:3563 +#: src/components/status.jsx:3659 +#: src/components/status.jsx:3737 +#: src/components/timeline.jsx:978 #: src/pages/catchup.jsx:75 -#: src/pages/catchup.jsx:1876 +#: src/pages/catchup.jsx:1877 msgid "Filtered" msgstr "" -#: src/components/modals.jsx:72 +#: src/components/modals.jsx:73 msgid "Post published. Check it out." msgstr "" -#: src/components/modals.jsx:73 +#: src/components/modals.jsx:74 msgid "Reply posted. Check it out." msgstr "" -#: src/components/modals.jsx:74 +#: src/components/modals.jsx:75 msgid "Post updated. Check it out." msgstr "" -#: src/components/nav-menu.jsx:117 +#: src/components/nav-menu.jsx:118 msgid "Menu" msgstr "" -#: src/components/nav-menu.jsx:153 +#: src/components/nav-menu.jsx:154 msgid "Reload page now to update?" msgstr "" -#: src/components/nav-menu.jsx:165 +#: src/components/nav-menu.jsx:166 msgid "New update available…" msgstr "" #. js-lingui-explicit-id -#: src/components/nav-menu.jsx:184 +#: src/components/nav-menu.jsx:185 #: src/components/shortcuts-settings.jsx:140 -#: src/pages/following.jsx:22 -#: src/pages/following.jsx:141 +#: src/pages/following.jsx:23 +#: src/pages/following.jsx:142 msgid "following.title" msgstr "Following" -#: src/components/nav-menu.jsx:191 +#: src/components/nav-menu.jsx:192 #: src/pages/catchup.jsx:871 msgid "Catch-up" msgstr "" -#: src/components/nav-menu.jsx:198 +#: src/components/nav-menu.jsx:199 #: src/components/shortcuts-settings.jsx:58 #: src/components/shortcuts-settings.jsx:146 -#: src/pages/home.jsx:224 -#: src/pages/mentions.jsx:20 -#: src/pages/mentions.jsx:167 -#: src/pages/settings.jsx:1145 -#: src/pages/trending.jsx:381 +#: src/pages/home.jsx:225 +#: src/pages/mentions.jsx:21 +#: src/pages/mentions.jsx:168 +#: src/pages/settings.jsx:1147 +#: src/pages/trending.jsx:382 msgid "Mentions" msgstr "" -#: src/components/nav-menu.jsx:205 +#: src/components/nav-menu.jsx:206 #: src/components/shortcuts-settings.jsx:49 #: src/components/shortcuts-settings.jsx:152 -#: src/pages/filters.jsx:24 -#: src/pages/home.jsx:84 -#: src/pages/home.jsx:184 +#: src/pages/filters.jsx:23 +#: src/pages/home.jsx:85 +#: src/pages/home.jsx:185 #: src/pages/notifications.jsx:113 #: src/pages/notifications.jsx:564 msgid "Notifications" msgstr "" -#: src/components/nav-menu.jsx:208 +#: src/components/nav-menu.jsx:209 msgid "New" msgstr "" -#: src/components/nav-menu.jsx:219 +#: src/components/nav-menu.jsx:220 msgid "Profile" msgstr "" -#: src/components/nav-menu.jsx:227 +#: src/components/nav-menu.jsx:228 #: src/components/shortcuts-settings.jsx:54 #: src/components/shortcuts-settings.jsx:195 -#: src/pages/bookmarks.jsx:11 -#: src/pages/bookmarks.jsx:23 +#: src/pages/bookmarks.jsx:12 +#: src/pages/bookmarks.jsx:24 msgid "Bookmarks" msgstr "" -#: src/components/nav-menu.jsx:247 +#: src/components/nav-menu.jsx:239 +msgid "More…" +msgstr "" + +#: src/components/nav-menu.jsx:248 #: src/components/shortcuts-settings.jsx:55 #: src/components/shortcuts-settings.jsx:201 #: src/pages/catchup.jsx:1446 -#: src/pages/catchup.jsx:2062 -#: src/pages/favourites.jsx:11 -#: src/pages/favourites.jsx:23 -#: src/pages/settings.jsx:1149 +#: src/pages/catchup.jsx:2064 +#: src/pages/favourites.jsx:12 +#: src/pages/favourites.jsx:24 +#: src/pages/settings.jsx:1151 msgid "Likes" msgstr "" -#: src/components/nav-menu.jsx:253 -#: src/pages/followed-hashtags.jsx:14 -#: src/pages/followed-hashtags.jsx:44 +#: src/components/nav-menu.jsx:254 +#: src/pages/followed-hashtags.jsx:15 +#: src/pages/followed-hashtags.jsx:45 msgid "Followed Hashtags" msgstr "" -#: src/components/nav-menu.jsx:261 -#: src/pages/account-statuses.jsx:331 +#: src/components/nav-menu.jsx:262 +#: src/pages/account-statuses.jsx:330 #: src/pages/filters.jsx:54 #: src/pages/filters.jsx:93 -#: src/pages/hashtag.jsx:339 +#: src/pages/hashtag.jsx:340 msgid "Filters" msgstr "" -#: src/components/nav-menu.jsx:269 +#: src/components/nav-menu.jsx:270 msgid "Muted users" msgstr "" -#: src/components/nav-menu.jsx:277 +#: src/components/nav-menu.jsx:278 msgid "Muted users…" msgstr "" -#: src/components/nav-menu.jsx:284 +#: src/components/nav-menu.jsx:285 msgid "Blocked users" msgstr "" -#: src/components/nav-menu.jsx:292 +#: src/components/nav-menu.jsx:293 msgid "Blocked users…" msgstr "" -#: src/components/nav-menu.jsx:304 +#: src/components/nav-menu.jsx:305 msgid "Accounts…" msgstr "" -#: src/components/nav-menu.jsx:314 -#: src/pages/login.jsx:189 -#: src/pages/status.jsx:835 -#: src/pages/welcome.jsx:64 +#: src/components/nav-menu.jsx:315 +#: src/pages/login.jsx:190 +#: src/pages/status.jsx:837 +#: src/pages/welcome.jsx:65 msgid "Log in" msgstr "" -#: src/components/nav-menu.jsx:331 +#: src/components/nav-menu.jsx:332 #: src/components/shortcuts-settings.jsx:57 #: src/components/shortcuts-settings.jsx:172 -#: src/pages/trending.jsx:441 +#: src/pages/trending.jsx:442 msgid "Trending" msgstr "" -#: src/components/nav-menu.jsx:343 +#: src/components/nav-menu.jsx:344 #: src/components/shortcuts-settings.jsx:165 msgid "Federated" msgstr "" -#: src/components/nav-menu.jsx:366 +#: src/components/nav-menu.jsx:367 msgid "Shortcuts / Columns…" msgstr "" -#: src/components/nav-menu.jsx:376 -#: src/components/nav-menu.jsx:390 +#: src/components/nav-menu.jsx:377 +#: src/components/nav-menu.jsx:391 msgid "Settings…" msgstr "" -#: src/components/nav-menu.jsx:420 -#: src/components/nav-menu.jsx:447 +#: src/components/nav-menu.jsx:421 +#: src/components/nav-menu.jsx:448 #: src/components/shortcuts-settings.jsx:50 #: src/components/shortcuts-settings.jsx:158 -#: src/pages/list.jsx:126 -#: src/pages/lists.jsx:16 -#: src/pages/lists.jsx:50 +#: src/pages/list.jsx:127 +#: src/pages/lists.jsx:17 +#: src/pages/lists.jsx:51 msgid "Lists" msgstr "" -#: src/components/nav-menu.jsx:428 +#: src/components/nav-menu.jsx:429 #: src/components/shortcuts.jsx:215 -#: src/pages/list.jsx:133 +#: src/pages/list.jsx:134 msgid "All Lists" msgstr "" -#: src/components/notification-service.jsx:160 +#: src/components/notification-service.jsx:161 msgid "Notification" msgstr "" -#: src/components/notification-service.jsx:166 +#: src/components/notification-service.jsx:167 msgid "This notification is from your other account." msgstr "" -#: src/components/notification-service.jsx:195 +#: src/components/notification-service.jsx:196 msgid "View all notifications" msgstr "" @@ -1598,61 +1435,61 @@ msgstr "View #Wrapstodon" msgid "Read more →" msgstr "" -#: src/components/poll.jsx:110 +#: src/components/poll.jsx:112 msgid "Voted" msgstr "" -#: src/components/poll.jsx:116 +#: src/components/poll.jsx:118 msgid "{optionVotesCount, plural, one {# vote} other {# votes}}" msgstr "{optionVotesCount, plural, one {# vote} other {# votes}}" -#: src/components/poll.jsx:136 -#: src/components/poll.jsx:219 -#: src/components/poll.jsx:223 +#: src/components/poll.jsx:138 +#: src/components/poll.jsx:221 +#: src/components/poll.jsx:225 msgid "Hide results" msgstr "" -#: src/components/poll.jsx:185 +#: src/components/poll.jsx:187 msgid "Vote" msgstr "" -#: src/components/poll.jsx:205 #: src/components/poll.jsx:207 -#: src/pages/status.jsx:1201 -#: src/pages/status.jsx:1224 +#: src/components/poll.jsx:209 +#: src/pages/status.jsx:1203 +#: src/pages/status.jsx:1226 msgid "Refresh" msgstr "" -#: src/components/poll.jsx:219 -#: src/components/poll.jsx:223 +#: src/components/poll.jsx:221 +#: src/components/poll.jsx:225 msgid "Show results" msgstr "" #. placeholder {0}: shortenNumber(votesCount) #. placeholder {1}: shortenNumber(votesCount) -#: src/components/poll.jsx:228 +#: src/components/poll.jsx:230 msgid "{votesCount, plural, one {<0>{0} vote} other {<1>{1} votes}}" msgstr "" #. placeholder {0}: shortenNumber(votersCount) #. placeholder {1}: shortenNumber(votersCount) -#: src/components/poll.jsx:245 +#: src/components/poll.jsx:247 msgid "{votersCount, plural, one {<0>{0} voter} other {<1>{1} voters}}" msgstr "" -#: src/components/poll.jsx:265 +#: src/components/poll.jsx:267 msgid "Ended <0/>" msgstr "" -#: src/components/poll.jsx:269 +#: src/components/poll.jsx:271 msgid "Ended" msgstr "" -#: src/components/poll.jsx:272 +#: src/components/poll.jsx:274 msgid "Ending <0/>" msgstr "" -#: src/components/poll.jsx:276 +#: src/components/poll.jsx:278 msgid "Ending" msgstr "" @@ -1782,24 +1619,24 @@ msgstr "" msgid "Send Report <0>+ Block profile" msgstr "" -#: src/components/search-form.jsx:202 +#: src/components/search-form.jsx:203 msgid "{query} <0>‒ accounts, hashtags & posts" msgstr "" -#: src/components/search-form.jsx:215 +#: src/components/search-form.jsx:216 msgid "Posts with <0>{query}" msgstr "" #. placeholder {0}: query.replace(/^#/, '') -#: src/components/search-form.jsx:227 +#: src/components/search-form.jsx:228 msgid "Posts tagged with <0>#{0}" msgstr "" -#: src/components/search-form.jsx:241 +#: src/components/search-form.jsx:242 msgid "Look up <0>{query}" msgstr "" -#: src/components/search-form.jsx:252 +#: src/components/search-form.jsx:253 msgid "Accounts with <0>{query}" msgstr "" @@ -1830,7 +1667,7 @@ msgstr "" #: src/components/shortcuts-settings.jsx:75 #: src/components/shortcuts-settings.jsx:84 #: src/components/shortcuts-settings.jsx:122 -#: src/pages/login.jsx:193 +#: src/pages/login.jsx:194 msgid "Instance" msgstr "" @@ -1853,7 +1690,7 @@ msgid "e.g. PixelArt (Max 5, space-separated)" msgstr "" #: src/components/shortcuts-settings.jsx:117 -#: src/pages/hashtag.jsx:355 +#: src/pages/hashtag.jsx:356 msgid "Media only" msgstr "" @@ -1896,7 +1733,7 @@ msgstr "" #: src/components/shortcuts-settings.jsx:379 #: src/components/status.jsx:1314 -#: src/pages/list.jsx:170 +#: src/pages/list.jsx:171 msgid "Edit" msgstr "" @@ -2061,6 +1898,11 @@ msgstr "" msgid "Unable to copy shortcut settings" msgstr "" +#: src/components/shortcuts-settings.jsx:1077 +#: src/components/status.jsx:1202 +msgid "Sharing doesn't seem to work." +msgstr "" + #: src/components/shortcuts-settings.jsx:1083 msgid "Share" msgstr "" @@ -2107,20 +1949,20 @@ msgstr "" msgid "Unliked @{0}'s post" msgstr "" -#. placeholder {0}: username || acct +#. placeholder {1}: username || acct #: src/components/status.jsx:791 -msgid "Liked @{0}'s post" -msgstr "" +msgid "Liked @{1}'s post" +msgstr "Liked @{1}'s post" -#. placeholder {0}: username || acct +#. placeholder {2}: username || acct #: src/components/status.jsx:830 -msgid "Unbookmarked @{0}'s post" -msgstr "" +msgid "Unbookmarked @{2}'s post" +msgstr "Unbookmarked @{2}'s post" -#. placeholder {0}: username || acct +#. placeholder {3}: username || acct #: src/components/status.jsx:831 -msgid "Bookmarked @{0}'s post" -msgstr "" +msgid "Bookmarked @{3}'s post" +msgstr "Bookmarked @{3}'s post" #: src/components/status.jsx:937 #: src/components/status.jsx:999 @@ -2144,17 +1986,15 @@ msgstr "" msgid "Old post (<0>{0})" msgstr "" -#. placeholder {0}: username || acct +#. placeholder {4}: username || acct #: src/components/status.jsx:987 -#: src/components/status.jsx:1442 -msgid "Unboosted @{0}'s post" -msgstr "" +msgid "Unboosted @{4}'s post" +msgstr "Unboosted @{4}'s post" -#. placeholder {0}: username || acct +#. placeholder {5}: username || acct #: src/components/status.jsx:988 -#: src/components/status.jsx:1443 -msgid "Boosted @{0}'s post" -msgstr "" +msgid "Boosted @{5}'s post" +msgstr "Boosted @{5}'s post" #: src/components/status.jsx:1000 msgid "Boost…" @@ -2192,8 +2032,16 @@ msgstr "" msgid "Edited: {editedDateText}" msgstr "" +#: src/components/status.jsx:1177 +msgid "Link copied" +msgstr "" + +#: src/components/status.jsx:1180 +msgid "Unable to copy link" +msgstr "" + #: src/components/status.jsx:1221 -#: src/components/status.jsx:3236 +#: src/components/status.jsx:3238 msgid "Embed post" msgstr "" @@ -2261,6 +2109,16 @@ msgstr "" msgid "Report post…" msgstr "" +#. placeholder {6}: username || acct +#: src/components/status.jsx:1442 +msgid "Unboosted @{6}'s post" +msgstr "Unboosted @{6}'s post" + +#. placeholder {7}: username || acct +#: src/components/status.jsx:1443 +msgid "Boosted @{7}'s post" +msgstr "Boosted @{7}'s post" + #: src/components/status.jsx:1728 #: src/components/status.jsx:1764 #: src/components/status.jsx:2458 @@ -2323,303 +2181,307 @@ msgstr "" msgid "More from <0/>" msgstr "More from <0/>" -#: src/components/status.jsx:2997 +#: src/components/status.jsx:2998 msgid "Edit History" msgstr "" -#: src/components/status.jsx:3001 +#: src/components/status.jsx:3002 msgid "Failed to load history" msgstr "" -#: src/components/status.jsx:3006 -#: src/pages/annual-report.jsx:46 +#: src/components/status.jsx:3007 +#: src/pages/annual-report.jsx:45 msgid "Loading…" msgstr "" -#: src/components/status.jsx:3241 +#: src/components/status.jsx:3243 msgid "HTML Code" msgstr "" -#: src/components/status.jsx:3258 +#: src/components/status.jsx:3260 msgid "HTML code copied" msgstr "" -#: src/components/status.jsx:3261 +#: src/components/status.jsx:3263 msgid "Unable to copy HTML code" msgstr "" -#: src/components/status.jsx:3273 +#: src/components/status.jsx:3275 msgid "Media attachments:" msgstr "" -#: src/components/status.jsx:3295 +#: src/components/status.jsx:3297 msgid "Account Emojis:" msgstr "" -#: src/components/status.jsx:3326 -#: src/components/status.jsx:3371 +#: src/components/status.jsx:3328 +#: src/components/status.jsx:3373 msgid "static URL" msgstr "" -#: src/components/status.jsx:3340 +#: src/components/status.jsx:3342 msgid "Emojis:" msgstr "" -#: src/components/status.jsx:3385 +#: src/components/status.jsx:3387 msgid "Notes:" msgstr "" -#: src/components/status.jsx:3389 +#: src/components/status.jsx:3391 msgid "This is static, unstyled and scriptless. You may need to apply your own styles and edit as needed." msgstr "" -#: src/components/status.jsx:3395 +#: src/components/status.jsx:3397 msgid "Polls are not interactive, becomes a list with vote counts." msgstr "" -#: src/components/status.jsx:3400 +#: src/components/status.jsx:3402 msgid "Media attachments can be images, videos, audios or any file types." msgstr "" -#: src/components/status.jsx:3406 +#: src/components/status.jsx:3408 msgid "Post could be edited or deleted later." msgstr "" -#: src/components/status.jsx:3412 +#: src/components/status.jsx:3414 msgid "Preview" msgstr "" -#: src/components/status.jsx:3421 +#: src/components/status.jsx:3423 msgid "Note: This preview is lightly styled." msgstr "" #. [Name] [Visibility icon] boosted -#: src/components/status.jsx:3665 +#: src/components/status.jsx:3667 msgid "<0/> <1/> boosted" msgstr "" -#: src/components/timeline.jsx:453 -#: src/pages/settings.jsx:1173 +#: src/components/timeline.jsx:455 +#: src/pages/settings.jsx:1175 msgid "New posts" msgstr "" -#: src/components/timeline.jsx:554 -#: src/pages/home.jsx:213 +#: src/components/timeline.jsx:556 +#: src/pages/home.jsx:214 #: src/pages/notifications.jsx:871 -#: src/pages/status.jsx:988 -#: src/pages/status.jsx:1361 +#: src/pages/status.jsx:990 +#: src/pages/status.jsx:1363 msgid "Try again" msgstr "" #. placeholder {0}: fItems.length -#: src/components/timeline.jsx:588 +#: src/components/timeline.jsx:591 msgid "{0, plural, one {# Boost} other {# Boosts}}" msgstr "{0, plural, one {# Boost} other {# Boosts}}" -#: src/components/timeline.jsx:593 +#: src/components/timeline.jsx:596 msgid "Pinned posts" msgstr "Pinned posts" -#: src/components/timeline.jsx:946 -#: src/components/timeline.jsx:953 -#: src/pages/catchup.jsx:1893 +#: src/components/timeline.jsx:951 +#: src/components/timeline.jsx:958 +#: src/pages/catchup.jsx:1894 msgid "Thread" msgstr "" #. placeholder {0}: filterInfo.titlesStr -#: src/components/timeline.jsx:968 +#: src/components/timeline.jsx:973 msgid "<0>Filtered: <1>{0}" msgstr "" -#: src/components/translation-block.jsx:152 +#: src/components/translation-block.jsx:153 msgid "Auto-translated from {sourceLangText}" msgstr "" -#: src/components/translation-block.jsx:190 +#: src/components/translation-block.jsx:191 msgid "Translating…" msgstr "" -#: src/components/translation-block.jsx:193 +#: src/components/translation-block.jsx:194 msgid "Translate from {sourceLangText} (auto-detected)" msgstr "" -#: src/components/translation-block.jsx:194 +#: src/components/translation-block.jsx:195 msgid "Translate from {sourceLangText}" msgstr "" #. placeholder {0}: detectedLang ?? '…' -#: src/components/translation-block.jsx:222 +#: src/components/translation-block.jsx:223 msgid "Auto ({0})" msgstr "" -#: src/components/translation-block.jsx:235 +#: src/components/translation-block.jsx:236 msgid "Failed to translate" msgstr "" -#: src/compose.jsx:32 +#: src/compose.jsx:33 msgid "Editing source status" msgstr "" #. placeholder {0}: replyToStatus.account?.acct || replyToStatus.account?.username -#: src/compose.jsx:34 +#: src/compose.jsx:35 msgid "Replying to @{0}" msgstr "" -#: src/compose.jsx:62 +#: src/compose.jsx:63 msgid "You may close this page now." msgstr "" -#: src/compose.jsx:70 +#: src/compose.jsx:71 msgid "Close window" msgstr "" -#: src/compose.jsx:86 +#: src/compose.jsx:87 msgid "Login required." msgstr "Login required." -#: src/compose.jsx:90 -#: src/pages/annual-report.jsx:165 +#: src/compose.jsx:91 +#: src/pages/annual-report.jsx:164 #: src/pages/http-route.jsx:91 -#: src/pages/login.jsx:270 +#: src/pages/login.jsx:271 msgid "Go home" msgstr "" -#: src/pages/account-statuses.jsx:233 +#: src/pages/account-statuses.jsx:232 msgid "Account posts" msgstr "" -#: src/pages/account-statuses.jsx:240 +#: src/pages/account-statuses.jsx:239 msgid "{accountDisplay} (+ Replies)" msgstr "" -#: src/pages/account-statuses.jsx:242 +#: src/pages/account-statuses.jsx:241 msgid "{accountDisplay} (- Boosts)" msgstr "" -#: src/pages/account-statuses.jsx:244 +#: src/pages/account-statuses.jsx:243 msgid "{accountDisplay} (#{tagged})" msgstr "" -#: src/pages/account-statuses.jsx:246 +#: src/pages/account-statuses.jsx:245 msgid "{accountDisplay} (Media)" msgstr "" -#: src/pages/account-statuses.jsx:252 +#: src/pages/account-statuses.jsx:251 msgid "{accountDisplay} ({monthYear})" msgstr "" -#: src/pages/account-statuses.jsx:321 +#: src/pages/account-statuses.jsx:320 msgid "Clear filters" msgstr "" -#: src/pages/account-statuses.jsx:324 +#: src/pages/account-statuses.jsx:323 msgid "Clear" msgstr "" -#: src/pages/account-statuses.jsx:338 +#: src/pages/account-statuses.jsx:337 msgid "Showing post with replies" msgstr "" -#: src/pages/account-statuses.jsx:343 +#: src/pages/account-statuses.jsx:342 msgid "+ Replies" msgstr "" -#: src/pages/account-statuses.jsx:349 +#: src/pages/account-statuses.jsx:348 msgid "Showing posts without boosts" msgstr "" -#: src/pages/account-statuses.jsx:354 +#: src/pages/account-statuses.jsx:353 msgid "- Boosts" msgstr "" -#: src/pages/account-statuses.jsx:360 +#: src/pages/account-statuses.jsx:359 msgid "Showing posts with media" msgstr "" +#: src/pages/account-statuses.jsx:364 +msgid "Media" +msgstr "" + #. placeholder {0}: tag.name -#: src/pages/account-statuses.jsx:377 +#: src/pages/account-statuses.jsx:376 msgid "Showing posts tagged with #{0}" msgstr "" -#. placeholder {0}: date.toLocaleString(i18n.locale, { month: 'long', year: 'numeric', }) -#: src/pages/account-statuses.jsx:416 -msgid "Showing posts in {0}" -msgstr "" +#. placeholder {1}: date.toLocaleString(i18n.locale, { month: 'long', year: 'numeric', }) +#: src/pages/account-statuses.jsx:415 +msgid "Showing posts in {1}" +msgstr "Showing posts in {1}" -#: src/pages/account-statuses.jsx:505 +#: src/pages/account-statuses.jsx:504 msgid "Nothing to see here yet." msgstr "" -#: src/pages/account-statuses.jsx:506 -#: src/pages/public.jsx:97 -#: src/pages/trending.jsx:449 +#: src/pages/account-statuses.jsx:505 +#: src/pages/public.jsx:98 +#: src/pages/trending.jsx:450 msgid "Unable to load posts" msgstr "" -#: src/pages/account-statuses.jsx:547 -#: src/pages/account-statuses.jsx:577 +#: src/pages/account-statuses.jsx:546 +#: src/pages/account-statuses.jsx:576 msgid "Unable to fetch account info" msgstr "" #. placeholder {0}: accountInstance ? ( <> {' '} ({punycode.toUnicode(accountInstance)}) ) : null -#: src/pages/account-statuses.jsx:554 +#: src/pages/account-statuses.jsx:553 msgid "Switch to account's instance {0}" msgstr "" -#: src/pages/account-statuses.jsx:584 +#: src/pages/account-statuses.jsx:583 msgid "Switch to my instance (<0>{currentInstance})" msgstr "" -#: src/pages/account-statuses.jsx:646 +#: src/pages/account-statuses.jsx:645 msgid "Month" msgstr "" -#: src/pages/accounts.jsx:55 +#: src/pages/accounts.jsx:56 msgid "Current" msgstr "" -#: src/pages/accounts.jsx:101 +#: src/pages/accounts.jsx:102 msgid "Default" msgstr "" -#: src/pages/accounts.jsx:123 +#: src/pages/accounts.jsx:124 msgid "Switch to this account" msgstr "Switch to this account" -#: src/pages/accounts.jsx:132 +#: src/pages/accounts.jsx:133 msgid "Switch in new tab/window" msgstr "Switch in new tab/window" -#: src/pages/accounts.jsx:146 +#: src/pages/accounts.jsx:147 msgid "View profile…" msgstr "" -#: src/pages/accounts.jsx:163 +#: src/pages/accounts.jsx:164 msgid "Set as default" msgstr "" #. placeholder {0}: account.info.acct -#: src/pages/accounts.jsx:173 +#: src/pages/accounts.jsx:174 msgid "Log out <0>@{0}?" msgstr "" -#: src/pages/accounts.jsx:196 +#: src/pages/accounts.jsx:197 msgid "Log out…" msgstr "" -#: src/pages/accounts.jsx:209 +#: src/pages/accounts.jsx:210 msgid "Add an existing account" msgstr "" -#: src/pages/accounts.jsx:216 +#: src/pages/accounts.jsx:217 msgid "Note: <0>Default account will always be used for first load. Switched accounts will persist during the session." msgstr "" -#: src/pages/bookmarks.jsx:25 +#: src/pages/bookmarks.jsx:26 msgid "No bookmarks yet. Go bookmark something!" msgstr "No bookmarks yet. Go bookmark something!" -#: src/pages/bookmarks.jsx:26 +#: src/pages/bookmarks.jsx:27 msgid "Unable to load bookmarks." msgstr "" @@ -2685,7 +2547,7 @@ msgstr "" #: src/pages/catchup.jsx:596 msgid "Showing {selectedFilterCategory, select, all {all posts} original {original posts} replies {replies} boosts {boosts} followedTags {followed tags} groups {groups} filtered {filtered posts}}, {sortBy, select, createdAt {{sortOrder, select, asc {oldest} desc {latest}}} reblogsCount {{sortOrder, select, asc {fewest boosts} desc {most boosts}}} favouritesCount {{sortOrder, select, asc {fewest likes} desc {most likes}}} repliesCount {{sortOrder, select, asc {fewest replies} desc {most replies}}} density {{sortOrder, select, asc {least dense} desc {most dense}}}} first{groupBy, select, account {, grouped by authors} other {}}" -msgstr "" +msgstr "Showing {selectedFilterCategory, select, all {all posts} original {original posts} replies {replies} boosts {boosts} followedTags {followed tags} groups {groups} filtered {filtered posts}}, {sortBy, select, createdAt {{sortOrder, select, asc {oldest} desc {latest}}} reblogsCount {{sortOrder, select, asc {fewest boosts} desc {most boosts}}} favouritesCount {{sortOrder, select, asc {fewest likes} desc {most likes}}} repliesCount {{sortOrder, select, asc {fewest replies} desc {most replies}}} density {{sortOrder, select, asc {least dense} desc {most dense}}}} first{groupBy, select, account {, grouped by authors} other {}}" #: src/pages/catchup.jsx:882 #: src/pages/catchup.jsx:906 @@ -2707,7 +2569,7 @@ msgstr "" #: src/pages/catchup.jsx:926 msgid "Preview of Catch-up UI" -msgstr "" +msgstr "Preview of Catch-up UI" #: src/pages/catchup.jsx:935 msgid "Let's catch up" @@ -2723,7 +2585,7 @@ msgstr "" #: src/pages/catchup.jsx:967 msgid "until the max" -msgstr "" +msgstr "until the max" #: src/pages/catchup.jsx:997 msgid "Catch up" @@ -2753,17 +2615,17 @@ msgstr "" #: src/pages/catchup.jsx:1062 msgid "Remove this catch-up?" -msgstr "" +msgstr "Remove this catch-up?" #. placeholder {0}: pc.id #: src/pages/catchup.jsx:1065 msgid "Removing Catch-up {0}" msgstr "Removing Catch-up {0}" -#. placeholder {0}: pc.id +#. placeholder {1}: pc.id #: src/pages/catchup.jsx:1069 -msgid "Catch-up {0} removed" -msgstr "Catch-up {0} removed" +msgid "Catch-up {1} removed" +msgstr "Catch-up {1} removed" #: src/pages/catchup.jsx:1083 msgid "Note: Only max 3 will be stored. The rest will be automatically removed." @@ -2792,8 +2654,8 @@ msgid "Shared by {0}" msgstr "" #: src/pages/catchup.jsx:1316 -#: src/pages/mentions.jsx:147 -#: src/pages/search.jsx:312 +#: src/pages/mentions.jsx:148 +#: src/pages/search.jsx:313 msgid "All" msgstr "" @@ -2808,11 +2670,11 @@ msgstr "" #: src/pages/catchup.jsx:1444 msgid "Date" -msgstr "" +msgstr "Date" #: src/pages/catchup.jsx:1448 msgid "Density" -msgstr "" +msgstr "Density" #. js-lingui-explicit-id #: src/pages/catchup.jsx:1471 @@ -2821,11 +2683,11 @@ msgstr "Group" #: src/pages/catchup.jsx:1486 msgid "Authors" -msgstr "" +msgstr "Authors" #: src/pages/catchup.jsx:1487 msgid "None" -msgstr "" +msgstr "None" #: src/pages/catchup.jsx:1503 msgid "Show all authors" @@ -2833,11 +2695,11 @@ msgstr "" #: src/pages/catchup.jsx:1554 msgid "You don't have to read everything." -msgstr "" +msgstr "You don't have to read everything." #: src/pages/catchup.jsx:1555 msgid "That's all." -msgstr "" +msgstr "That's all." #: src/pages/catchup.jsx:1563 msgid "Back to top" @@ -2876,35 +2738,39 @@ msgid "Scroll to top" msgstr "" #. placeholder {0}: filterInfo.titlesStr -#: src/pages/catchup.jsx:1875 +#: src/pages/catchup.jsx:1876 msgid "Filtered: {0}" +msgstr "Filtered: {0}" + +#: src/pages/catchup.jsx:1929 +msgid "Poll" msgstr "" -#: src/pages/favourites.jsx:25 +#: src/pages/favourites.jsx:26 msgid "No likes yet. Go like something!" msgstr "No likes yet. Go like something!" -#: src/pages/favourites.jsx:26 +#: src/pages/favourites.jsx:27 msgid "Unable to load likes." msgstr "" -#: src/pages/filters.jsx:23 +#: src/pages/filters.jsx:22 msgid "Home and lists" msgstr "" -#: src/pages/filters.jsx:25 +#: src/pages/filters.jsx:24 msgid "Public timelines" msgstr "" -#: src/pages/filters.jsx:26 +#: src/pages/filters.jsx:25 msgid "Conversations" msgstr "" -#: src/pages/filters.jsx:27 +#: src/pages/filters.jsx:26 msgid "Profiles" msgstr "" -#: src/pages/filters.jsx:42 +#: src/pages/filters.jsx:41 msgid "Never" msgstr "" @@ -3003,158 +2869,158 @@ msgstr "" msgid "Unable to delete filter." msgstr "" -#: src/pages/filters.jsx:608 +#: src/pages/filters.jsx:609 msgid "Expired" msgstr "" -#: src/pages/filters.jsx:610 +#: src/pages/filters.jsx:611 msgid "Expiring <0/>" msgstr "" -#: src/pages/filters.jsx:614 +#: src/pages/filters.jsx:615 msgid "Never expires" msgstr "" #. placeholder {0}: followedHashtags.length -#: src/pages/followed-hashtags.jsx:70 +#: src/pages/followed-hashtags.jsx:71 msgid "{0, plural, one {# hashtag} other {# hashtags}}" msgstr "" -#: src/pages/followed-hashtags.jsx:85 +#: src/pages/followed-hashtags.jsx:86 msgid "Unable to load followed hashtags." msgstr "" -#: src/pages/followed-hashtags.jsx:89 +#: src/pages/followed-hashtags.jsx:90 msgid "No hashtags followed yet." msgstr "" -#: src/pages/following.jsx:143 +#: src/pages/following.jsx:144 msgid "Nothing to see here." msgstr "" -#: src/pages/following.jsx:144 -#: src/pages/list.jsx:108 +#: src/pages/following.jsx:145 +#: src/pages/list.jsx:109 msgid "Unable to load posts." msgstr "" -#: src/pages/hashtag.jsx:55 +#: src/pages/hashtag.jsx:56 msgid "{hashtagTitle} (Media only) on {instance}" msgstr "" -#: src/pages/hashtag.jsx:56 +#: src/pages/hashtag.jsx:57 msgid "{hashtagTitle} on {instance}" msgstr "" -#: src/pages/hashtag.jsx:58 +#: src/pages/hashtag.jsx:59 msgid "{hashtagTitle} (Media only)" msgstr "" -#: src/pages/hashtag.jsx:59 +#: src/pages/hashtag.jsx:60 msgid "{hashtagTitle}" msgstr "" -#: src/pages/hashtag.jsx:181 +#: src/pages/hashtag.jsx:182 msgid "No one has posted anything with this tag yet." msgstr "" -#: src/pages/hashtag.jsx:182 +#: src/pages/hashtag.jsx:183 msgid "Unable to load posts with this tag" msgstr "" -#: src/pages/hashtag.jsx:208 +#: src/pages/hashtag.jsx:209 msgid "Unfollow #{hashtag}?" msgstr "Unfollow #{hashtag}?" -#: src/pages/hashtag.jsx:223 +#: src/pages/hashtag.jsx:224 msgid "Unfollowed #{hashtag}" msgstr "" -#: src/pages/hashtag.jsx:238 +#: src/pages/hashtag.jsx:239 msgid "Followed #{hashtag}" msgstr "" -#: src/pages/hashtag.jsx:254 +#: src/pages/hashtag.jsx:255 msgid "Following…" msgstr "" -#: src/pages/hashtag.jsx:282 +#: src/pages/hashtag.jsx:283 msgid "Unfeatured on profile" msgstr "" -#: src/pages/hashtag.jsx:296 +#: src/pages/hashtag.jsx:297 msgid "Unable to unfeature on profile" msgstr "" -#: src/pages/hashtag.jsx:305 -#: src/pages/hashtag.jsx:321 +#: src/pages/hashtag.jsx:306 +#: src/pages/hashtag.jsx:322 msgid "Featured on profile" msgstr "" -#: src/pages/hashtag.jsx:328 +#: src/pages/hashtag.jsx:329 msgid "Feature on profile" msgstr "" -#: src/pages/hashtag.jsx:393 +#: src/pages/hashtag.jsx:394 msgid "{TOTAL_TAGS_LIMIT, plural, other {Max # tags}}" msgstr "" -#: src/pages/hashtag.jsx:396 +#: src/pages/hashtag.jsx:397 msgid "Add hashtag" msgstr "" -#: src/pages/hashtag.jsx:428 +#: src/pages/hashtag.jsx:429 msgid "Remove hashtag" msgstr "" -#: src/pages/hashtag.jsx:442 +#: src/pages/hashtag.jsx:443 msgid "{SHORTCUTS_LIMIT, plural, one {Max # shortcut reached. Unable to add shortcut.} other {Max # shortcuts reached. Unable to add shortcut.}}" msgstr "" -#: src/pages/hashtag.jsx:471 +#: src/pages/hashtag.jsx:472 msgid "This shortcut already exists" msgstr "" -#: src/pages/hashtag.jsx:474 +#: src/pages/hashtag.jsx:475 msgid "Hashtag shortcut added" msgstr "" -#: src/pages/hashtag.jsx:480 +#: src/pages/hashtag.jsx:481 msgid "Add to Shortcuts" msgstr "" -#: src/pages/hashtag.jsx:486 -#: src/pages/public.jsx:139 -#: src/pages/trending.jsx:478 +#: src/pages/hashtag.jsx:487 +#: src/pages/public.jsx:140 +#: src/pages/trending.jsx:479 msgid "Enter a new instance e.g. \"mastodon.social\"" msgstr "" -#: src/pages/hashtag.jsx:489 -#: src/pages/public.jsx:142 -#: src/pages/trending.jsx:481 +#: src/pages/hashtag.jsx:490 +#: src/pages/public.jsx:143 +#: src/pages/trending.jsx:482 msgid "Invalid instance" msgstr "" -#: src/pages/hashtag.jsx:503 -#: src/pages/public.jsx:156 -#: src/pages/trending.jsx:493 +#: src/pages/hashtag.jsx:504 +#: src/pages/public.jsx:157 +#: src/pages/trending.jsx:494 msgid "Go to another instance…" msgstr "" -#: src/pages/hashtag.jsx:516 -#: src/pages/public.jsx:169 -#: src/pages/trending.jsx:504 +#: src/pages/hashtag.jsx:517 +#: src/pages/public.jsx:170 +#: src/pages/trending.jsx:505 msgid "Go to my instance (<0>{currentInstance})" msgstr "" -#: src/pages/home.jsx:209 +#: src/pages/home.jsx:210 msgid "Unable to fetch notifications." msgstr "" -#: src/pages/home.jsx:229 +#: src/pages/home.jsx:230 msgid "<0>New <1>Follow Requests" msgstr "" -#: src/pages/home.jsx:235 +#: src/pages/home.jsx:236 msgid "See all" msgstr "" @@ -3166,75 +3032,75 @@ msgstr "" msgid "Unable to resolve URL" msgstr "" -#: src/pages/list.jsx:107 +#: src/pages/list.jsx:108 msgid "Nothing yet." msgstr "" -#: src/pages/list.jsx:176 -#: src/pages/list.jsx:279 +#: src/pages/list.jsx:177 +#: src/pages/list.jsx:281 msgid "Manage members" msgstr "" #. placeholder {0}: account.username -#: src/pages/list.jsx:313 +#: src/pages/list.jsx:316 msgid "Remove <0>@{0} from list?" msgstr "" -#: src/pages/list.jsx:359 +#: src/pages/list.jsx:362 msgid "Remove…" msgstr "" #. placeholder {0}: lists.length -#: src/pages/lists.jsx:93 +#: src/pages/lists.jsx:94 msgid "{0, plural, one {# list} other {# lists}}" msgstr "" -#: src/pages/lists.jsx:108 +#: src/pages/lists.jsx:109 msgid "No lists yet." msgstr "" -#: src/pages/login.jsx:109 -#: src/pages/login.jsx:122 +#: src/pages/login.jsx:110 +#: src/pages/login.jsx:123 msgid "Failed to register application" msgstr "Failed to register application" -#: src/pages/login.jsx:208 +#: src/pages/login.jsx:209 msgid "instance domain" msgstr "instance domain" -#: src/pages/login.jsx:232 +#: src/pages/login.jsx:233 msgid "e.g. “mastodon.social”" msgstr "" -#: src/pages/login.jsx:243 +#: src/pages/login.jsx:244 msgid "Failed to log in. Please try again or try another instance." msgstr "" -#: src/pages/login.jsx:255 +#: src/pages/login.jsx:256 msgid "Continue with {selectedInstanceText}" msgstr "" -#: src/pages/login.jsx:256 +#: src/pages/login.jsx:257 msgid "Continue" msgstr "" -#: src/pages/login.jsx:264 +#: src/pages/login.jsx:265 msgid "Don't have an account? Create one!" msgstr "" -#: src/pages/mentions.jsx:20 +#: src/pages/mentions.jsx:21 msgid "Private mentions" msgstr "" -#: src/pages/mentions.jsx:159 +#: src/pages/mentions.jsx:160 msgid "Private" msgstr "" -#: src/pages/mentions.jsx:169 +#: src/pages/mentions.jsx:170 msgid "No one mentioned you :(" msgstr "" -#: src/pages/mentions.jsx:170 +#: src/pages/mentions.jsx:171 msgid "Unable to load mentions." msgstr "" @@ -3273,7 +3139,7 @@ msgid "{0, plural, one {Announcement} other {Announcements}}" msgstr "" #: src/pages/notifications.jsx:654 -#: src/pages/settings.jsx:1161 +#: src/pages/settings.jsx:1163 msgid "Follow requests" msgstr "" @@ -3339,555 +3205,555 @@ msgid "Notifications from <0>@{0}" msgstr "" #. placeholder {0}: request.account.username -#: src/pages/notifications.jsx:1200 +#: src/pages/notifications.jsx:1201 msgid "Notifications from @{0} will not be filtered from now on." msgstr "" -#: src/pages/notifications.jsx:1205 +#: src/pages/notifications.jsx:1206 msgid "Unable to accept notification request" msgstr "" -#: src/pages/notifications.jsx:1210 +#: src/pages/notifications.jsx:1211 msgid "Allow" msgstr "" -#. placeholder {0}: request.account.username -#: src/pages/notifications.jsx:1230 -msgid "Notifications from @{0} will not show up in Filtered notifications from now on." -msgstr "" +#. placeholder {1}: request.account.username +#: src/pages/notifications.jsx:1231 +msgid "Notifications from @{1} will not show up in Filtered notifications from now on." +msgstr "Notifications from @{1} will not show up in Filtered notifications from now on." -#: src/pages/notifications.jsx:1235 +#: src/pages/notifications.jsx:1236 msgid "Unable to dismiss notification request" msgstr "" -#: src/pages/notifications.jsx:1240 +#: src/pages/notifications.jsx:1241 msgid "Dismiss" msgstr "" -#: src/pages/notifications.jsx:1255 +#: src/pages/notifications.jsx:1256 msgid "Dismissed" msgstr "" -#: src/pages/public.jsx:27 +#: src/pages/public.jsx:28 msgid "Local timeline ({instance})" msgstr "" -#: src/pages/public.jsx:28 +#: src/pages/public.jsx:29 msgid "Federated timeline ({instance})" msgstr "" -#: src/pages/public.jsx:90 +#: src/pages/public.jsx:91 msgid "Local timeline" msgstr "" -#: src/pages/public.jsx:90 +#: src/pages/public.jsx:91 msgid "Federated timeline" msgstr "" -#: src/pages/public.jsx:96 +#: src/pages/public.jsx:97 msgid "No one has posted anything yet." msgstr "" -#: src/pages/public.jsx:123 +#: src/pages/public.jsx:124 msgid "Switch to Federated" -msgstr "" +msgstr "Switch to Federated" -#: src/pages/public.jsx:130 +#: src/pages/public.jsx:131 msgid "Switch to Local" -msgstr "" +msgstr "Switch to Local" -#: src/pages/search.jsx:49 +#: src/pages/search.jsx:50 msgid "Search: {q} (Posts)" msgstr "" -#: src/pages/search.jsx:52 +#: src/pages/search.jsx:53 msgid "Search: {q} (Accounts)" msgstr "" -#: src/pages/search.jsx:55 +#: src/pages/search.jsx:56 msgid "Search: {q} (Hashtags)" msgstr "" -#: src/pages/search.jsx:58 +#: src/pages/search.jsx:59 msgid "Search: {q}" msgstr "" -#: src/pages/search.jsx:322 -#: src/pages/search.jsx:404 +#: src/pages/search.jsx:323 +#: src/pages/search.jsx:405 msgid "Hashtags" msgstr "" -#: src/pages/search.jsx:354 -#: src/pages/search.jsx:408 -#: src/pages/search.jsx:478 +#: src/pages/search.jsx:355 +#: src/pages/search.jsx:409 +#: src/pages/search.jsx:479 msgid "See more" msgstr "" -#: src/pages/search.jsx:380 +#: src/pages/search.jsx:381 msgid "See more accounts" msgstr "" -#: src/pages/search.jsx:394 +#: src/pages/search.jsx:395 msgid "No accounts found." msgstr "" -#: src/pages/search.jsx:450 +#: src/pages/search.jsx:451 msgid "See more hashtags" msgstr "" -#: src/pages/search.jsx:464 +#: src/pages/search.jsx:465 msgid "No hashtags found." msgstr "" -#: src/pages/search.jsx:508 +#: src/pages/search.jsx:509 msgid "See more posts" msgstr "" -#: src/pages/search.jsx:522 +#: src/pages/search.jsx:523 msgid "No posts found." msgstr "" -#: src/pages/search.jsx:566 +#: src/pages/search.jsx:567 msgid "Enter your search term or paste a URL above to get started." msgstr "" -#: src/pages/settings.jsx:82 +#: src/pages/settings.jsx:83 msgid "Settings" msgstr "" -#: src/pages/settings.jsx:91 +#: src/pages/settings.jsx:92 msgid "Appearance" msgstr "" -#: src/pages/settings.jsx:167 +#: src/pages/settings.jsx:168 msgid "Light" msgstr "" -#: src/pages/settings.jsx:178 +#: src/pages/settings.jsx:179 msgid "Dark" msgstr "" -#: src/pages/settings.jsx:191 +#: src/pages/settings.jsx:192 msgid "Auto" msgstr "" -#: src/pages/settings.jsx:201 +#: src/pages/settings.jsx:202 msgid "Text size" msgstr "" #. Preview of one character, in smallest size #. Preview of one character, in largest size -#: src/pages/settings.jsx:206 -#: src/pages/settings.jsx:231 +#: src/pages/settings.jsx:207 +#: src/pages/settings.jsx:232 msgid "A" msgstr "" -#: src/pages/settings.jsx:245 +#: src/pages/settings.jsx:246 msgid "Display language" msgstr "" -#: src/pages/settings.jsx:254 +#: src/pages/settings.jsx:255 msgid "Volunteer translations" msgstr "Volunteer translations" -#: src/pages/settings.jsx:265 +#: src/pages/settings.jsx:266 msgid "Posting" msgstr "" -#: src/pages/settings.jsx:272 +#: src/pages/settings.jsx:273 msgid "Default visibility" msgstr "" -#: src/pages/settings.jsx:273 -#: src/pages/settings.jsx:319 +#: src/pages/settings.jsx:274 +#: src/pages/settings.jsx:320 msgid "Synced" msgstr "" -#: src/pages/settings.jsx:298 +#: src/pages/settings.jsx:299 msgid "Failed to update posting privacy" msgstr "" -#: src/pages/settings.jsx:321 +#: src/pages/settings.jsx:322 msgid "Synced to your instance server's settings. <0>Go to your instance ({instance}) for more settings." msgstr "" -#: src/pages/settings.jsx:336 +#: src/pages/settings.jsx:337 msgid "Experiments" msgstr "" -#: src/pages/settings.jsx:349 +#: src/pages/settings.jsx:350 msgid "Auto refresh timeline posts" msgstr "" -#: src/pages/settings.jsx:361 +#: src/pages/settings.jsx:362 msgid "Boosts carousel" msgstr "" -#: src/pages/settings.jsx:377 +#: src/pages/settings.jsx:378 msgid "Post translation" msgstr "" -#: src/pages/settings.jsx:388 +#: src/pages/settings.jsx:389 msgid "Translate to " msgstr "Translate to " -#: src/pages/settings.jsx:399 +#: src/pages/settings.jsx:400 msgid "System language ({systemTargetLanguageText})" msgstr "" #. placeholder {0}: snapStates.settings.contentTranslationHideLanguages.length -#: src/pages/settings.jsx:425 +#: src/pages/settings.jsx:426 msgid "{0, plural, =0 {Hide \"Translate\" button for:} other {Hide \"Translate\" button for (#):}}" msgstr "" -#: src/pages/settings.jsx:479 +#: src/pages/settings.jsx:480 msgid "Note: This feature uses external translation services, powered by <0>Lingva API & <1>Lingva Translate." msgstr "" -#: src/pages/settings.jsx:513 +#: src/pages/settings.jsx:514 msgid "Auto inline translation" msgstr "" -#: src/pages/settings.jsx:517 +#: src/pages/settings.jsx:518 msgid "Automatically show translation for posts in timeline. Only works for <0>short posts without content warning, media and poll." msgstr "" -#: src/pages/settings.jsx:537 +#: src/pages/settings.jsx:538 msgid "GIF Picker for composer" msgstr "" -#: src/pages/settings.jsx:541 +#: src/pages/settings.jsx:542 msgid "Note: This feature uses external GIF search service, powered by <0>GIPHY. G-rated (suitable for viewing by all ages), tracking parameters are stripped, referrer information is omitted from requests, but search queries and IP address information will still reach their servers." msgstr "" -#: src/pages/settings.jsx:570 +#: src/pages/settings.jsx:571 msgid "Image description generator" msgstr "" -#: src/pages/settings.jsx:575 +#: src/pages/settings.jsx:576 msgid "Only for new images while composing new posts." msgstr "" -#: src/pages/settings.jsx:582 +#: src/pages/settings.jsx:583 msgid "Note: This feature uses external AI service, powered by <0>img-alt-api. May not work well. Only for images and in English." msgstr "" -#: src/pages/settings.jsx:608 +#: src/pages/settings.jsx:609 msgid "Server-side grouped notifications" msgstr "" -#: src/pages/settings.jsx:612 +#: src/pages/settings.jsx:613 msgid "Alpha-stage feature. Potentially improved grouping window but basic grouping logic." msgstr "" -#: src/pages/settings.jsx:633 +#: src/pages/settings.jsx:634 msgid "\"Cloud\" import/export for shortcuts settings" msgstr "" -#: src/pages/settings.jsx:638 +#: src/pages/settings.jsx:639 msgid "⚠️⚠️⚠️ Very experimental.<0/>Stored in your own profile’s notes. Profile (private) notes are mainly used for other profiles, and hidden for own profile." msgstr "" -#: src/pages/settings.jsx:649 +#: src/pages/settings.jsx:650 msgid "Note: This feature uses currently-logged-in instance server API." msgstr "" -#: src/pages/settings.jsx:666 +#: src/pages/settings.jsx:667 msgid "Cloak mode <0>(<1>Text → <2>████)" msgstr "" -#: src/pages/settings.jsx:675 +#: src/pages/settings.jsx:676 msgid "Replace text as blocks, useful when taking screenshots, for privacy reasons." msgstr "" -#: src/pages/settings.jsx:700 +#: src/pages/settings.jsx:701 msgid "About" msgstr "" -#: src/pages/settings.jsx:739 +#: src/pages/settings.jsx:740 msgid "<0>Built by <1>@cheeaun" msgstr "" -#: src/pages/settings.jsx:768 +#: src/pages/settings.jsx:769 msgid "Sponsor" msgstr "" -#: src/pages/settings.jsx:776 +#: src/pages/settings.jsx:777 msgid "Donate" msgstr "Donate" -#: src/pages/settings.jsx:792 +#: src/pages/settings.jsx:793 msgid "Privacy Policy" msgstr "" #. placeholder {0}: WEBSITE.replace(/https?:\/\//g, '').replace(/\/$/, '') -#: src/pages/settings.jsx:799 +#: src/pages/settings.jsx:800 msgid "<0>Site: {0}" msgstr "" #. placeholder {0}: !__FAKE_COMMIT_HASH__ && ( ( ) ) -#: src/pages/settings.jsx:806 +#: src/pages/settings.jsx:807 msgid "<0>Version: <1/> {0}" msgstr "" -#: src/pages/settings.jsx:821 +#: src/pages/settings.jsx:822 msgid "Version string copied" msgstr "" -#: src/pages/settings.jsx:824 +#: src/pages/settings.jsx:825 msgid "Unable to copy version string" msgstr "" -#: src/pages/settings.jsx:1058 -#: src/pages/settings.jsx:1063 +#: src/pages/settings.jsx:1060 +#: src/pages/settings.jsx:1065 msgid "Failed to update subscription. Please try again." msgstr "" -#: src/pages/settings.jsx:1069 +#: src/pages/settings.jsx:1071 msgid "Failed to remove subscription. Please try again." msgstr "" -#: src/pages/settings.jsx:1076 +#: src/pages/settings.jsx:1078 msgid "Push Notifications (beta)" msgstr "" -#: src/pages/settings.jsx:1098 +#: src/pages/settings.jsx:1100 msgid "Push notifications are blocked. Please enable them in your browser settings." msgstr "" #. placeholder {0}: [ { value: 'all', label: t`anyone`, }, { value: 'followed', label: t`people I follow`, }, { value: 'follower', label: t`followers`, }, ].map((type) => ( )) -#: src/pages/settings.jsx:1107 +#: src/pages/settings.jsx:1109 msgid "Allow from <0>{0}" msgstr "" -#: src/pages/settings.jsx:1116 +#: src/pages/settings.jsx:1118 msgid "anyone" msgstr "" -#: src/pages/settings.jsx:1120 +#: src/pages/settings.jsx:1122 msgid "people I follow" msgstr "" -#: src/pages/settings.jsx:1124 +#: src/pages/settings.jsx:1126 msgid "followers" msgstr "" -#: src/pages/settings.jsx:1157 +#: src/pages/settings.jsx:1159 msgid "Follows" msgstr "" -#: src/pages/settings.jsx:1165 +#: src/pages/settings.jsx:1167 msgid "Polls" msgstr "" -#: src/pages/settings.jsx:1169 +#: src/pages/settings.jsx:1171 msgid "Post edits" msgstr "" -#: src/pages/settings.jsx:1190 +#: src/pages/settings.jsx:1192 msgid "Push permission was not granted since your last login. You'll need to <0><1>log in again to grant push permission." msgstr "" -#: src/pages/settings.jsx:1206 +#: src/pages/settings.jsx:1208 msgid "NOTE: Push notifications only work for <0>one account." msgstr "" #. js-lingui-explicit-id -#: src/pages/status.jsx:597 -#: src/pages/status.jsx:1131 +#: src/pages/status.jsx:599 +#: src/pages/status.jsx:1133 msgid "post.title" msgstr "Post" -#: src/pages/status.jsx:822 +#: src/pages/status.jsx:824 msgid "You're not logged in. Interactions (reply, boost, etc) are not possible." msgstr "" -#: src/pages/status.jsx:842 +#: src/pages/status.jsx:844 msgid "This post is from another instance (<0>{instance}). Interactions (reply, boost, etc) are not possible." msgstr "" -#: src/pages/status.jsx:870 +#: src/pages/status.jsx:872 msgid "Error: {e}" msgstr "" -#: src/pages/status.jsx:877 +#: src/pages/status.jsx:879 msgid "Switch to my instance to enable interactions" msgstr "" -#: src/pages/status.jsx:979 +#: src/pages/status.jsx:981 msgid "Unable to load replies." msgstr "" -#: src/pages/status.jsx:1091 +#: src/pages/status.jsx:1093 msgid "Back" msgstr "" -#: src/pages/status.jsx:1122 +#: src/pages/status.jsx:1124 msgid "Go to main post" msgstr "" #. placeholder {0}: ancestors.length -#: src/pages/status.jsx:1145 +#: src/pages/status.jsx:1147 msgid "{0} posts above ‒ Go to top" msgstr "" -#: src/pages/status.jsx:1188 -#: src/pages/status.jsx:1251 +#: src/pages/status.jsx:1190 +#: src/pages/status.jsx:1253 msgid "Switch to Side Peek view" msgstr "" -#: src/pages/status.jsx:1252 +#: src/pages/status.jsx:1254 msgid "Switch to Full view" msgstr "" -#: src/pages/status.jsx:1270 +#: src/pages/status.jsx:1272 msgid "Show all sensitive content" msgstr "" -#: src/pages/status.jsx:1275 +#: src/pages/status.jsx:1277 msgid "Experimental" msgstr "" -#: src/pages/status.jsx:1284 +#: src/pages/status.jsx:1286 msgid "Unable to switch" msgstr "" -#. placeholder {0}: punycode.toUnicode( postInstance, ) -#: src/pages/status.jsx:1291 -msgid "Switch to post's instance ({0})" -msgstr "" +#. placeholder {1}: punycode.toUnicode( postInstance, ) +#: src/pages/status.jsx:1293 +msgid "Switch to post's instance ({1})" +msgstr "Switch to post's instance ({1})" -#: src/pages/status.jsx:1294 +#: src/pages/status.jsx:1296 msgid "Switch to post's instance" msgstr "" -#: src/pages/status.jsx:1352 +#: src/pages/status.jsx:1354 msgid "Unable to load post" msgstr "" #. placeholder {0}: replies.length #. placeholder {1}: shortenNumber(replies.length) -#: src/pages/status.jsx:1487 +#: src/pages/status.jsx:1490 msgid "{0, plural, one {# reply} other {<0>{1} replies}}" msgstr "" #. placeholder {0}: shortenNumber(totalComments) -#: src/pages/status.jsx:1505 +#: src/pages/status.jsx:1508 msgid "{totalComments, plural, one {# comment} other {<0>{0} comments}}" msgstr "" -#: src/pages/status.jsx:1527 +#: src/pages/status.jsx:1530 msgid "View post with its replies" msgstr "" -#: src/pages/trending.jsx:71 +#: src/pages/trending.jsx:72 msgid "Trending ({instance})" msgstr "" -#: src/pages/trending.jsx:228 +#: src/pages/trending.jsx:229 msgid "Trending News" msgstr "" #. By [Author] #. placeholder {0}: author ? ( ) : authorUrl ? ( {authorName} ) : ( authorName ) -#: src/pages/trending.jsx:347 +#: src/pages/trending.jsx:348 msgid "By {0}" msgstr "By {0}" -#: src/pages/trending.jsx:408 +#: src/pages/trending.jsx:409 msgid "Back to showing trending posts" msgstr "" #. placeholder {0}: currentLink .replace(/^https?:\/\/(www\.)?/i, '') .replace(/\/$/, '') -#: src/pages/trending.jsx:413 +#: src/pages/trending.jsx:414 msgid "Showing posts mentioning <0>{0}" msgstr "" -#: src/pages/trending.jsx:425 +#: src/pages/trending.jsx:426 msgid "Trending posts" msgstr "" -#: src/pages/trending.jsx:448 +#: src/pages/trending.jsx:449 msgid "No trending posts." msgstr "" -#: src/pages/welcome.jsx:53 +#: src/pages/welcome.jsx:54 msgid "A minimalistic opinionated Mastodon web client." msgstr "" -#: src/pages/welcome.jsx:64 +#: src/pages/welcome.jsx:65 msgid "Log in with Mastodon" msgstr "" -#: src/pages/welcome.jsx:70 +#: src/pages/welcome.jsx:71 msgid "Sign up" msgstr "" -#: src/pages/welcome.jsx:77 +#: src/pages/welcome.jsx:78 msgid "Connect your existing Mastodon/Fediverse account.<0/>Your credentials are not stored on this server." msgstr "" -#: src/pages/welcome.jsx:94 +#: src/pages/welcome.jsx:95 msgid "<0>Built by <1>@cheeaun. <2>Privacy Policy." msgstr "" -#: src/pages/welcome.jsx:125 +#: src/pages/welcome.jsx:126 msgid "Screenshot of Boosts Carousel" msgstr "" -#: src/pages/welcome.jsx:129 +#: src/pages/welcome.jsx:130 msgid "Boosts Carousel" msgstr "" -#: src/pages/welcome.jsx:132 +#: src/pages/welcome.jsx:133 msgid "Visually separate original posts and re-shared posts (boosted posts)." msgstr "" -#: src/pages/welcome.jsx:141 +#: src/pages/welcome.jsx:142 msgid "Screenshot of nested comments thread" msgstr "" -#: src/pages/welcome.jsx:145 +#: src/pages/welcome.jsx:146 msgid "Nested comments thread" msgstr "" -#: src/pages/welcome.jsx:148 +#: src/pages/welcome.jsx:149 msgid "Effortlessly follow conversations. Semi-collapsible replies." msgstr "" -#: src/pages/welcome.jsx:156 +#: src/pages/welcome.jsx:157 msgid "Screenshot of grouped notifications" msgstr "" -#: src/pages/welcome.jsx:160 +#: src/pages/welcome.jsx:161 msgid "Grouped notifications" msgstr "" -#: src/pages/welcome.jsx:163 +#: src/pages/welcome.jsx:164 msgid "Similar notifications are grouped and collapsed to reduce clutter." msgstr "" -#: src/pages/welcome.jsx:172 +#: src/pages/welcome.jsx:173 msgid "Screenshot of multi-column UI" msgstr "" -#: src/pages/welcome.jsx:176 +#: src/pages/welcome.jsx:177 msgid "Single or multi-column" msgstr "" -#: src/pages/welcome.jsx:179 +#: src/pages/welcome.jsx:180 msgid "By default, single column for zen-mode seekers. Configurable multi-column for power users." msgstr "" -#: src/pages/welcome.jsx:188 +#: src/pages/welcome.jsx:189 msgid "Screenshot of multi-hashtag timeline with a form to add more hashtags" msgstr "" -#: src/pages/welcome.jsx:192 +#: src/pages/welcome.jsx:193 msgid "Multi-hashtag timeline" msgstr "" -#: src/pages/welcome.jsx:195 +#: src/pages/welcome.jsx:196 msgid "Up to 5 hashtags combined into a single timeline." msgstr "" diff --git a/src/pages/account-statuses.jsx b/src/pages/account-statuses.jsx index 453e1477..f97a5985 100644 --- a/src/pages/account-statuses.jsx +++ b/src/pages/account-statuses.jsx @@ -1,5 +1,4 @@ -import { t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuItem } from '@szhsin/react-menu'; import { useCallback, @@ -51,6 +50,7 @@ async function _isSearchEnabled(instance) { const isSearchEnabled = pmem(_isSearchEnabled); function AccountStatuses() { + const { i18n, t } = useLingui(); const snapStates = useSnapshot(states); const { id, ...params } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); @@ -229,7 +229,6 @@ function AccountStatuses() { } const [featuredTags, setFeaturedTags] = useState([]); - const { i18n } = useLingui(); let title = t`Account posts`; if (account?.acct) { const acctDisplay = (/@/.test(account.acct) ? '' : '@') + account.acct; diff --git a/src/pages/accounts.jsx b/src/pages/accounts.jsx index 2391898b..bdb5c13d 100644 --- a/src/pages/accounts.jsx +++ b/src/pages/accounts.jsx @@ -1,7 +1,7 @@ import './accounts.css'; import { useAutoAnimate } from '@formkit/auto-animate/preact'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu'; import { useReducer } from 'preact/hooks'; @@ -20,6 +20,7 @@ import { getCurrentAccountID, setCurrentAccountID } from '../utils/store-utils'; const isStandalone = window.matchMedia('(display-mode: standalone)').matches; function Accounts({ onClose }) { + const { t } = useLingui(); const { masto } = api(); // Accounts const accounts = store.local.getJSON('accounts'); diff --git a/src/pages/annual-report.jsx b/src/pages/annual-report.jsx index 3483e0c2..ef26cadd 100644 --- a/src/pages/annual-report.jsx +++ b/src/pages/annual-report.jsx @@ -1,7 +1,6 @@ -import { t, Trans } from '@lingui/macro'; - import './annual-report.css'; +import { Trans } from '@lingui/react/macro'; import { useEffect, useState } from 'preact/hooks'; import { useParams } from 'react-router-dom'; diff --git a/src/pages/bookmarks.jsx b/src/pages/bookmarks.jsx index eaec0e1a..ed65e9a4 100644 --- a/src/pages/bookmarks.jsx +++ b/src/pages/bookmarks.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useRef } from 'preact/hooks'; import Timeline from '../components/timeline'; @@ -8,6 +8,7 @@ import useTitle from '../utils/useTitle'; const LIMIT = 20; function Bookmarks() { + const { t } = useLingui(); useTitle(t`Bookmarks`, '/bookmarks'); const { masto, instance } = api(); const bookmarksIterator = useRef(); diff --git a/src/pages/catchup.jsx b/src/pages/catchup.jsx index 1af5aad2..b5aa39b5 100644 --- a/src/pages/catchup.jsx +++ b/src/pages/catchup.jsx @@ -2,8 +2,8 @@ import '../components/links-bar.css'; import './catchup.css'; import autoAnimate from '@formkit/auto-animate'; -import { msg, Plural, select, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg, select } from '@lingui/core/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { getBlurHashAverageColor } from 'fast-blurhash'; import { Fragment } from 'preact'; import { memo } from 'preact/compat'; @@ -95,7 +95,7 @@ const DTF = mem( ); function Catchup() { - const { i18n, _ } = useLingui(); + const { i18n, _, t } = useLingui(); const dtf = DTF(i18n.locale); useTitle(`Catch-up`, '/catchup'); @@ -1834,6 +1834,7 @@ function postDensity(post) { const MEDIA_SIZE = 48; function PostPeek({ post, filterInfo }) { + const { t } = useLingui(); const { spoilerText, sensitive, @@ -2048,6 +2049,7 @@ function PostPeek({ post, filterInfo }) { } function PostStats({ post }) { + const { t } = useLingui(); const { reblogsCount, repliesCount, favouritesCount } = post; return ( diff --git a/src/pages/favourites.jsx b/src/pages/favourites.jsx index 08b805f2..d4a5cb3c 100644 --- a/src/pages/favourites.jsx +++ b/src/pages/favourites.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useRef } from 'preact/hooks'; import Timeline from '../components/timeline'; @@ -8,6 +8,7 @@ import useTitle from '../utils/useTitle'; const LIMIT = 20; function Favourites() { + const { t } = useLingui(); useTitle(t`Likes`, '/favourites'); const { masto, instance } = api(); const favouritesIterator = useRef(); diff --git a/src/pages/filters.jsx b/src/pages/filters.jsx index 5cebc956..f9eaee98 100644 --- a/src/pages/filters.jsx +++ b/src/pages/filters.jsx @@ -1,8 +1,7 @@ import './filters.css'; -import { i18n } from '@lingui/core'; -import { msg, Plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg } from '@lingui/core/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useReducer, useRef, useState } from 'preact/hooks'; import Icon from '../components/icon'; @@ -50,6 +49,7 @@ const EXPIRY_DURATIONS_LABELS = { }; function Filters() { + const { t } = useLingui(); const { masto } = api(); useTitle(t`Filters`, `/ft`); const [uiState, setUIState] = useState('default'); @@ -197,7 +197,7 @@ function Filters() { let _id = 1; const incID = () => _id++; function FiltersAddEdit({ filter, onClose }) { - const { _ } = useLingui(); + const { _, t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const editMode = !!filter; @@ -596,6 +596,7 @@ function FiltersAddEdit({ filter, onClose }) { } function ExpiryStatus({ expiresAt, showNeverExpires }) { + const { t } = useLingui(); const hasExpiry = !!expiresAt; const expiresAtDate = hasExpiry && new Date(expiresAt); const expired = hasExpiry && expiresAtDate <= new Date(); diff --git a/src/pages/followed-hashtags.jsx b/src/pages/followed-hashtags.jsx index dcfb612e..d5a15046 100644 --- a/src/pages/followed-hashtags.jsx +++ b/src/pages/followed-hashtags.jsx @@ -1,4 +1,4 @@ -import { Plural, t, Trans } from '@lingui/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useState } from 'preact/hooks'; import Icon from '../components/icon'; @@ -10,6 +10,7 @@ import { fetchFollowedTags } from '../utils/followed-tags'; import useTitle from '../utils/useTitle'; function FollowedHashtags() { + const { t } = useLingui(); const { masto, instance } = api(); useTitle(t`Followed Hashtags`, `/fh`); const [uiState, setUIState] = useState('default'); diff --git a/src/pages/following.jsx b/src/pages/following.jsx index 27544546..66e9adfc 100644 --- a/src/pages/following.jsx +++ b/src/pages/following.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { useLingui } from '@lingui/react/macro'; import { useEffect, useRef } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -17,6 +17,7 @@ import useTitle from '../utils/useTitle'; const LIMIT = 20; function Following({ title, path, id, ...props }) { + const { t } = useLingui(); useTitle( title || t({ diff --git a/src/pages/hashtag.jsx b/src/pages/hashtag.jsx index 8a9ca319..1f54da43 100644 --- a/src/pages/hashtag.jsx +++ b/src/pages/hashtag.jsx @@ -1,5 +1,5 @@ -import { plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { plural } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { FocusableItem, MenuDivider, @@ -31,6 +31,7 @@ const TAGS_LIMIT_PER_MODE = 4; const TOTAL_TAGS_LIMIT = TAGS_LIMIT_PER_MODE + 1; function Hashtags({ media: mediaView, columnMode, ...props }) { + const { t } = useLingui(); // const navigate = useNavigate(); let { hashtag, ...params } = columnMode ? {} : useParams(); if (props.hashtag) hashtag = props.hashtag; diff --git a/src/pages/home.jsx b/src/pages/home.jsx index 408add69..debc9675 100644 --- a/src/pages/home.jsx +++ b/src/pages/home.jsx @@ -1,7 +1,7 @@ import './notifications-menu.css'; -import { msg, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { ControlledMenu } from '@szhsin/react-menu'; import { memo } from 'preact/compat'; import { useEffect, useRef, useState } from 'preact/hooks'; @@ -62,6 +62,7 @@ function Home() { } function NotificationsLink() { + const { t } = useLingui(); const snapStates = useSnapshot(states); const notificationLinkRef = useRef(); const [menuState, setMenuState] = useState(undefined); diff --git a/src/pages/http-route.jsx b/src/pages/http-route.jsx index 277b81b3..c0fe500f 100644 --- a/src/pages/http-route.jsx +++ b/src/pages/http-route.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans } from '@lingui/react/macro'; import { useLayoutEffect, useState } from 'preact/hooks'; import { useLocation } from 'react-router-dom'; diff --git a/src/pages/list.jsx b/src/pages/list.jsx index 8fe9e295..2da2217e 100644 --- a/src/pages/list.jsx +++ b/src/pages/list.jsx @@ -1,6 +1,6 @@ import './lists.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu'; import { useEffect, useRef, useState } from 'preact/hooks'; import { InView } from 'react-intersection-observer'; @@ -25,6 +25,7 @@ import useTitle from '../utils/useTitle'; const LIMIT = 20; function List(props) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const { masto, instance } = api(); const id = props?.id || useParams()?.id; @@ -222,6 +223,7 @@ function List(props) { const MEMBERS_LIMIT = 40; function ListManageMembers({ listID, onClose }) { + const { t } = useLingui(); // Show list of members with [Remove] button // API only returns 40 members at a time, so this need to be paginated with infinite scroll // Show [Add] button after removing a member @@ -301,6 +303,7 @@ function ListManageMembers({ listID, onClose }) { } function RemoveAddButton({ account, listID }) { + const { t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [removed, setRemoved] = useState(false); diff --git a/src/pages/lists.jsx b/src/pages/lists.jsx index 575e4872..85593e4e 100644 --- a/src/pages/lists.jsx +++ b/src/pages/lists.jsx @@ -1,6 +1,6 @@ import './lists.css'; -import { Plural, t, Trans } from '@lingui/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useReducer, useState } from 'preact/hooks'; import Icon from '../components/icon'; @@ -13,6 +13,7 @@ import { fetchLists } from '../utils/lists'; import useTitle from '../utils/useTitle'; function Lists() { + const { t } = useLingui(); useTitle(t`Lists`, `/l`); const [uiState, setUIState] = useState('default'); diff --git a/src/pages/login.jsx b/src/pages/login.jsx index b0f339e4..9d9980ca 100644 --- a/src/pages/login.jsx +++ b/src/pages/login.jsx @@ -1,6 +1,6 @@ import './login.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import Fuse from 'fuse.js'; import { useEffect, useRef, useState } from 'preact/hooks'; import { useSearchParams } from 'react-router-dom'; @@ -23,6 +23,7 @@ import useTitle from '../utils/useTitle'; const { PHANPY_DEFAULT_INSTANCE: DEFAULT_INSTANCE } = import.meta.env; function Login() { + const { t } = useLingui(); useTitle('Log in'); const instanceURLRef = useRef(); const cachedInstanceURL = store.local.get('instanceURL'); diff --git a/src/pages/mentions.jsx b/src/pages/mentions.jsx index 32a85fc7..0949c99c 100644 --- a/src/pages/mentions.jsx +++ b/src/pages/mentions.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useMemo, useRef, useState } from 'preact/hooks'; import { useSearchParams } from 'react-router-dom'; @@ -13,6 +13,7 @@ const LIMIT = 20; const emptySearchParams = new URLSearchParams(); function Mentions({ columnMode, ...props }) { + const { t } = useLingui(); const { masto, instance } = api(); const [searchParams] = columnMode ? [emptySearchParams] : useSearchParams(); const [stateType, setStateType] = useState(null); diff --git a/src/pages/notifications.jsx b/src/pages/notifications.jsx index 149fe4ab..e023602e 100644 --- a/src/pages/notifications.jsx +++ b/src/pages/notifications.jsx @@ -1,7 +1,7 @@ import './notifications.css'; -import { msg, Plural, t, Trans } from '@lingui/macro'; -import { useLingui } from '@lingui/react'; +import { msg } from '@lingui/core/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { Fragment } from 'preact'; import { memo } from 'preact/compat'; import { @@ -109,7 +109,7 @@ const NOTIFICATIONS_POLICIES_TEXT = { }; function Notifications({ columnMode }) { - const { _ } = useLingui(); + const { _, t } = useLingui(); useTitle(t`Notifications`, '/notifications'); const { masto, instance } = api(); const snapStates = useSnapshot(states); @@ -1173,6 +1173,7 @@ function NotificationRequestModalButton({ request }) { } function NotificationRequestButtons({ request, onChange }) { + const { t } = useLingui(); const { masto } = api(); const [uiState, setUIState] = useState('default'); const [requestState, setRequestState] = useState(null); // accept, dismiss diff --git a/src/pages/public.jsx b/src/pages/public.jsx index 4663c544..2988510a 100644 --- a/src/pages/public.jsx +++ b/src/pages/public.jsx @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu'; import { useRef } from 'preact/hooks'; import { useNavigate, useParams } from 'react-router-dom'; @@ -16,6 +16,7 @@ import useTitle from '../utils/useTitle'; const LIMIT = 20; function Public({ local, columnMode, ...props }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const isLocal = !!local; const params = columnMode ? {} : useParams(); diff --git a/src/pages/search.jsx b/src/pages/search.jsx index 61deb3d2..29b65f44 100644 --- a/src/pages/search.jsx +++ b/src/pages/search.jsx @@ -1,7 +1,7 @@ import './search.css'; import { useAutoAnimate } from '@formkit/auto-animate/preact'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useLayoutEffect, useRef, useState } from 'preact/hooks'; import { useHotkeys } from 'react-hotkeys-hook'; import { InView } from 'react-intersection-observer'; @@ -31,6 +31,7 @@ const scrollIntoViewOptions = { }; function Search({ columnMode, ...props }) { + const { t } = useLingui(); const params = columnMode ? {} : useParams(); const { masto, instance, authenticated } = api({ instance: params.instance, diff --git a/src/pages/settings.jsx b/src/pages/settings.jsx index 8f847ba4..bd9d4940 100644 --- a/src/pages/settings.jsx +++ b/src/pages/settings.jsx @@ -1,6 +1,6 @@ import './settings.css'; -import { Plural, t, Trans } from '@lingui/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useRef, useState } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -36,6 +36,7 @@ const { } = import.meta.env; function Settings({ onClose }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const currentTheme = store.local.get('theme') || 'auto'; const themeFormRef = useRef(); @@ -957,6 +958,7 @@ async function clearCaches() { } function PushNotificationsSection({ onClose }) { + const { t } = useLingui(); if (!isPushSupported()) return null; const { instance } = api(); diff --git a/src/pages/status.jsx b/src/pages/status.jsx index 311a3439..98f3c34d 100644 --- a/src/pages/status.jsx +++ b/src/pages/status.jsx @@ -1,6 +1,6 @@ import './status.css'; -import { Plural, t, Trans } from '@lingui/macro'; +import { Plural, Trans, useLingui } from '@lingui/react/macro'; import { Menu, MenuDivider, MenuHeader, MenuItem } from '@szhsin/react-menu'; import debounce from 'just-debounce-it'; import pRetry from 'p-retry'; @@ -73,6 +73,7 @@ const STATUSES_SELECTOR = const STATUS_URL_REGEX = /\/s\//i; function StatusPage(params) { + const { t } = useLingui(); const { id } = params; const { masto, instance } = api({ instance: params.instance }); const snapStates = useSnapshot(states); @@ -214,6 +215,7 @@ function createdAtSort(a, b) { } function StatusThread({ id, closeLink = '/', instance: propInstance }) { + const { t } = useLingui(); const [searchParams, setSearchParams] = useSearchParams(); const mediaParam = searchParams.get('media'); const mediaStatusID = searchParams.get('mediaStatusID'); @@ -1377,6 +1379,7 @@ function SubComments({ openAll, parentLink, }) { + const { t } = useLingui(); const [searchParams, setSearchParams] = useSearchParams(); // Total comments count, including sub-replies diff --git a/src/pages/trending.jsx b/src/pages/trending.jsx index 09231fc6..a8f5f10a 100644 --- a/src/pages/trending.jsx +++ b/src/pages/trending.jsx @@ -1,7 +1,7 @@ import '../components/links-bar.css'; import './trending.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import { MenuItem } from '@szhsin/react-menu'; import { getBlurHashAverageColor } from 'fast-blurhash'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; @@ -62,6 +62,7 @@ function fetchLinkList(masto, params) { } function Trending({ columnMode, ...props }) { + const { t } = useLingui(); const snapStates = useSnapshot(states); const params = columnMode ? {} : useParams(); const { masto, instance } = api({ diff --git a/src/pages/welcome.jsx b/src/pages/welcome.jsx index dbaa90cf..d1cbec36 100644 --- a/src/pages/welcome.jsx +++ b/src/pages/welcome.jsx @@ -1,6 +1,6 @@ import './welcome.css'; -import { t, Trans } from '@lingui/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; import boostsCarouselUrl from '../assets/features/boosts-carousel.jpg'; import groupedNotificationsUrl from '../assets/features/grouped-notifications.jpg'; @@ -31,6 +31,7 @@ const appVersion = __BUILD_TIME__ : null; function Welcome() { + const { t } = useLingui(); useTitle(null, ['/', '/welcome']); return (
diff --git a/src/utils/open-compose.js b/src/utils/open-compose.js index a5478b0b..9034f9e6 100644 --- a/src/utils/open-compose.js +++ b/src/utils/open-compose.js @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { t } from '@lingui/core/macro'; export default function openCompose(opts) { const url = URL.parse('/compose/', window.location); diff --git a/src/utils/show-compose.js b/src/utils/show-compose.js index 9e2b7bde..a77f0bf0 100644 --- a/src/utils/show-compose.js +++ b/src/utils/show-compose.js @@ -1,4 +1,4 @@ -import { t, Trans } from '@lingui/macro'; +import { t } from '@lingui/core/macro'; import openOSK from './open-osk'; import showToast from './show-toast';