···11import './keyboard-shortcuts-help.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
44import { memo } from 'preact/compat';
55import { useHotkeys } from 'react-hotkeys-hook';
66import { useSnapshot } from 'valtio';
···1111import Modal from './modal';
12121313export default memo(function KeyboardShortcutsHelp() {
1414+ const { t } = useLingui();
1415 const snapStates = useSnapshot(states);
15161617 function onClose() {
+2-1
src/components/list-add-edit.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { useEffect, useRef, useState } from 'preact/hooks';
3344import { api } from '../utils/api';
···99import MenuConfirm from './menu-confirm';
10101111function ListAddEdit({ list, onClose }) {
1212+ const { t } = useLingui();
1213 const { masto } = api();
1314 const [uiState, setUIState] = useState('default');
1415 const editMode = !!list;
+2-1
src/components/media-alt-modal.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { Menu, MenuItem } from '@szhsin/react-menu';
33import { useState } from 'preact/hooks';
44import { useSnapshot } from 'valtio';
···1313import TranslationBlock from './translation-block';
14141515export default function MediaAltModal({ alt, lang, onClose }) {
1616+ const { t } = useLingui();
1617 const snapStates = useSnapshot(states);
1718 const [forceTranslate, setForceTranslate] = useState(false);
1819 const targetLanguage = getTranslateTargetLanguage(true);
+2-1
src/components/media-modal.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { MenuDivider, MenuItem } from '@szhsin/react-menu';
33import { getBlurHashAverageColor } from 'fast-blurhash';
44import {
···3232 index = 0,
3333 onClose = () => {},
3434}) {
3535+ const { t } = useLingui();
3536 const [uiState, setUIState] = useState('default');
3637 const carouselRef = useRef(null);
3738
+2-1
src/components/media-post.jsx
···11import './media-post.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
44import { memo } from 'preact/compat';
55import { useContext, useMemo } from 'preact/hooks';
66import { useSnapshot } from 'valtio';
···2222 // allowFilters,
2323 onMediaClick,
2424}) {
2525+ const { t } = useLingui();
2526 let sKey = statusKey(statusID, instance);
2627 const snapStates = useSnapshot(states);
2728 if (!status) {
+2-1
src/components/media.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { useLingui } from '@lingui/react/macro';
22import { getBlurHashAverageColor } from 'fast-blurhash';
33import { Fragment } from 'preact';
44import { memo } from 'preact/compat';
···32323333const dataAltLabel = 'ALT';
3434const AltBadge = (props) => {
3535+ const { t } = useLingui();
3536 const { alt, lang, index, ...rest } = props;
3637 if (!alt || !alt.trim()) return null;
3738 return (
+2-1
src/components/modals.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { useLingui } from '@lingui/react/macro';
22import { useEffect } from 'preact/hooks';
33import { useLocation, useNavigate } from 'react-router-dom';
44import { subscribe, useSnapshot } from 'valtio';
···3030});
31313232export default function Modals() {
3333+ const { t } = useLingui();
3334 const snapStates = useSnapshot(states);
3435 const navigate = useNavigate();
3536 const location = useLocation();
+2-1
src/components/nav-menu.jsx
···11import './nav-menu.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
44import { ControlledMenu, MenuDivider, MenuItem } from '@szhsin/react-menu';
55import { memo } from 'preact/compat';
66import { useEffect, useMemo, useRef, useState } from 'preact/hooks';
···2121import SubMenu2 from './submenu2';
22222323function NavMenu(props) {
2424+ const { t } = useLingui();
2425 const snapStates = useSnapshot(states);
2526 const { masto, instance, authenticated } = api();
2627
+2-1
src/components/notification-service.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { memo } from 'preact/compat';
33import { useLayoutEffect, useState } from 'preact/hooks';
44import { useSnapshot } from 'valtio';
···3333}
34343535export default memo(function NotificationService() {
3636+ const { t } = useLingui();
3637 if (!('serviceWorker' in navigator)) return null;
37383839 const snapStates = useSnapshot(states);
+2-2
src/components/notification.jsx
···11-import { msg, Plural, Select, t, Trans } from '@lingui/macro';
22-import { useLingui } from '@lingui/react';
11+import { msg, t } from '@lingui/core/macro';
22+import { Plural, Select, Trans, useLingui } from '@lingui/react/macro';
33import { Fragment } from 'preact';
44import { memo } from 'preact/compat';
55
+3-1
src/components/poll.jsx
···11-import { Plural, plural, t, Trans } from '@lingui/macro';
11+import { plural } from '@lingui/core/macro';
22+import { Plural, Trans, useLingui } from '@lingui/react/macro';
23import { useState } from 'preact/hooks';
3445import shortenNumber from '../utils/shorten-number';
···1415 refresh = () => {},
1516 votePoll = () => {},
1617}) {
1818+ const { t } = useLingui();
1719 const [uiState, setUIState] = useState('default');
1820 const {
1921 expired,
+1-1
src/components/relative-time.jsx
···11import { i18n } from '@lingui/core';
22-import { t, Trans } from '@lingui/macro';
22+import { t } from '@lingui/core/macro';
33import { useEffect, useMemo, useReducer } from 'preact/hooks';
4455import localeMatch from '../utils/locale-match';
+3-3
src/components/report-modal.jsx
···11import './report-modal.css';
2233-import { msg, t, Trans } from '@lingui/macro';
44-import { useLingui } from '@lingui/react';
33+import { msg } from '@lingui/core/macro';
44+import { Trans, useLingui } from '@lingui/react/macro';
55import { Fragment } from 'preact';
66import { useMemo, useRef, useState } from 'preact/hooks';
77···4646};
47474848function ReportModal({ account, post, onClose }) {
4949- const { _ } = useLingui();
4949+ const { _, t } = useLingui();
5050 const { masto } = api();
5151 const [uiState, setUIState] = useState('default');
5252 const [username, domain] = account.acct.split('@');
+2-1
src/components/search-form.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { forwardRef } from 'preact/compat';
33import { useImperativeHandle, useRef, useState } from 'preact/hooks';
44import { useSearchParams } from 'react-router-dom';
···99import Link from './link';
10101111const SearchForm = forwardRef((props, ref) => {
1212+ const { t } = useLingui();
1213 const { instance } = api();
1314 const [searchParams, setSearchParams] = useSearchParams();
1415 const [searchMenuOpen, setSearchMenuOpen] = useState(false);
+2-2
src/components/shortcuts-settings.jsx
···11import './shortcuts-settings.css';
2233import { useAutoAnimate } from '@formkit/auto-animate/preact';
44-import { msg, Plural, t, Trans } from '@lingui/macro';
55-import { useLingui } from '@lingui/react';
44+import { msg, t } from '@lingui/core/macro';
55+import { Plural, Trans, useLingui } from '@lingui/react/macro';
66import {
77 compressToEncodedURIComponent,
88 decompressFromEncodedURIComponent,
+2-2
src/components/shortcuts.jsx
···11import './shortcuts.css';
2233-import { t, Trans } from '@lingui/macro';
44-import { useLingui } from '@lingui/react';
33+import { Trans, useLingui } from '@lingui/react/macro';
54import { MenuDivider } from '@szhsin/react-menu';
65import { memo } from 'preact/compat';
76import { useRef, useState } from 'preact/hooks';
···2221import SubMenu2 from './submenu2';
23222423function Shortcuts() {
2424+ const { t } = useLingui();
2525 const { _ } = useLingui();
2626 const { instance } = api();
2727 const snapStates = useSnapshot(states);
···11import './accounts.css';
2233import { useAutoAnimate } from '@formkit/auto-animate/preact';
44-import { t, Trans } from '@lingui/macro';
44+import { Trans, useLingui } from '@lingui/react/macro';
55import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu';
66import { useReducer } from 'preact/hooks';
77···2020const isStandalone = window.matchMedia('(display-mode: standalone)').matches;
21212222function Accounts({ onClose }) {
2323+ const { t } = useLingui();
2324 const { masto } = api();
2425 // Accounts
2526 const accounts = store.local.getJSON('accounts');
+1-2
src/pages/annual-report.jsx
···11-import { t, Trans } from '@lingui/macro';
22-31import './annual-report.css';
4233+import { Trans } from '@lingui/react/macro';
54import { useEffect, useState } from 'preact/hooks';
65import { useParams } from 'react-router-dom';
76
+2-1
src/pages/bookmarks.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { useLingui } from '@lingui/react/macro';
22import { useRef } from 'preact/hooks';
3344import Timeline from '../components/timeline';
···88const LIMIT = 20;
991010function Bookmarks() {
1111+ const { t } = useLingui();
1112 useTitle(t`Bookmarks`, '/bookmarks');
1213 const { masto, instance } = api();
1314 const bookmarksIterator = useRef();
+5-3
src/pages/catchup.jsx
···22import './catchup.css';
3344import autoAnimate from '@formkit/auto-animate';
55-import { msg, Plural, select, t, Trans } from '@lingui/macro';
66-import { useLingui } from '@lingui/react';
55+import { msg, select } from '@lingui/core/macro';
66+import { Plural, Trans, useLingui } from '@lingui/react/macro';
77import { getBlurHashAverageColor } from 'fast-blurhash';
88import { Fragment } from 'preact';
99import { memo } from 'preact/compat';
···9595);
96969797function Catchup() {
9898- const { i18n, _ } = useLingui();
9898+ const { i18n, _, t } = useLingui();
9999 const dtf = DTF(i18n.locale);
100100101101 useTitle(`Catch-up`, '/catchup');
···18341834const MEDIA_SIZE = 48;
1835183518361836function PostPeek({ post, filterInfo }) {
18371837+ const { t } = useLingui();
18371838 const {
18381839 spoilerText,
18391840 sensitive,
···20482049}
2049205020502051function PostStats({ post }) {
20522052+ const { t } = useLingui();
20512053 const { reblogsCount, repliesCount, favouritesCount } = post;
20522054 return (
20532055 <span class="post-stats">
+2-1
src/pages/favourites.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { useRef } from 'preact/hooks';
3344import Timeline from '../components/timeline';
···88const LIMIT = 20;
991010function Favourites() {
1111+ const { t } = useLingui();
1112 useTitle(t`Likes`, '/favourites');
1213 const { masto, instance } = api();
1314 const favouritesIterator = useRef();
···11-import { Plural, t, Trans } from '@lingui/macro';
11+import { Plural, Trans, useLingui } from '@lingui/react/macro';
22import { useEffect, useState } from 'preact/hooks';
3344import Icon from '../components/icon';
···1010import useTitle from '../utils/useTitle';
11111212function FollowedHashtags() {
1313+ const { t } = useLingui();
1314 const { masto, instance } = api();
1415 useTitle(t`Followed Hashtags`, `/fh`);
1516 const [uiState, setUIState] = useState('default');
+2-1
src/pages/following.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { useLingui } from '@lingui/react/macro';
22import { useEffect, useRef } from 'preact/hooks';
33import { useSnapshot } from 'valtio';
44···1717const LIMIT = 20;
18181919function Following({ title, path, id, ...props }) {
2020+ const { t } = useLingui();
2021 useTitle(
2122 title ||
2223 t({
+3-2
src/pages/hashtag.jsx
···11-import { plural, t, Trans } from '@lingui/macro';
22-import { useLingui } from '@lingui/react';
11+import { plural } from '@lingui/core/macro';
22+import { Trans, useLingui } from '@lingui/react/macro';
33import {
44 FocusableItem,
55 MenuDivider,
···3131const TOTAL_TAGS_LIMIT = TAGS_LIMIT_PER_MODE + 1;
32323333function Hashtags({ media: mediaView, columnMode, ...props }) {
3434+ const { t } = useLingui();
3435 // const navigate = useNavigate();
3536 let { hashtag, ...params } = columnMode ? {} : useParams();
3637 if (props.hashtag) hashtag = props.hashtag;
+3-2
src/pages/home.jsx
···11import './notifications-menu.css';
2233-import { msg, t, Trans } from '@lingui/macro';
44-import { useLingui } from '@lingui/react';
33+import { msg } from '@lingui/core/macro';
44+import { Trans, useLingui } from '@lingui/react/macro';
55import { ControlledMenu } from '@szhsin/react-menu';
66import { memo } from 'preact/compat';
77import { useEffect, useRef, useState } from 'preact/hooks';
···6262}
63636464function NotificationsLink() {
6565+ const { t } = useLingui();
6566 const snapStates = useSnapshot(states);
6667 const notificationLinkRef = useRef();
6768 const [menuState, setMenuState] = useState(undefined);
+1-1
src/pages/http-route.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans } from '@lingui/react/macro';
22import { useLayoutEffect, useState } from 'preact/hooks';
33import { useLocation } from 'react-router-dom';
44
+4-1
src/pages/list.jsx
···11import './lists.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
44import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu';
55import { useEffect, useRef, useState } from 'preact/hooks';
66import { InView } from 'react-intersection-observer';
···2525const LIMIT = 20;
26262727function List(props) {
2828+ const { t } = useLingui();
2829 const snapStates = useSnapshot(states);
2930 const { masto, instance } = api();
3031 const id = props?.id || useParams()?.id;
···222223223224const MEMBERS_LIMIT = 40;
224225function ListManageMembers({ listID, onClose }) {
226226+ const { t } = useLingui();
225227 // Show list of members with [Remove] button
226228 // API only returns 40 members at a time, so this need to be paginated with infinite scroll
227229 // Show [Add] button after removing a member
···301303}
302304303305function RemoveAddButton({ account, listID }) {
306306+ const { t } = useLingui();
304307 const { masto } = api();
305308 const [uiState, setUIState] = useState('default');
306309 const [removed, setRemoved] = useState(false);
+2-1
src/pages/lists.jsx
···11import './lists.css';
2233-import { Plural, t, Trans } from '@lingui/macro';
33+import { Plural, Trans, useLingui } from '@lingui/react/macro';
44import { useEffect, useReducer, useState } from 'preact/hooks';
5566import Icon from '../components/icon';
···1313import useTitle from '../utils/useTitle';
14141515function Lists() {
1616+ const { t } = useLingui();
1617 useTitle(t`Lists`, `/l`);
1718 const [uiState, setUIState] = useState('default');
1819
+2-1
src/pages/login.jsx
···11import './login.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
44import Fuse from 'fuse.js';
55import { useEffect, useRef, useState } from 'preact/hooks';
66import { useSearchParams } from 'react-router-dom';
···2323const { PHANPY_DEFAULT_INSTANCE: DEFAULT_INSTANCE } = import.meta.env;
24242525function Login() {
2626+ const { t } = useLingui();
2627 useTitle('Log in');
2728 const instanceURLRef = useRef();
2829 const cachedInstanceURL = store.local.get('instanceURL');
+2-1
src/pages/mentions.jsx
···11-import { t, Trans } from '@lingui/macro';
11+import { Trans, useLingui } from '@lingui/react/macro';
22import { useMemo, useRef, useState } from 'preact/hooks';
33import { useSearchParams } from 'react-router-dom';
44···1313const emptySearchParams = new URLSearchParams();
14141515function Mentions({ columnMode, ...props }) {
1616+ const { t } = useLingui();
1617 const { masto, instance } = api();
1718 const [searchParams] = columnMode ? [emptySearchParams] : useSearchParams();
1819 const [stateType, setStateType] = useState(null);
···11import './welcome.css';
2233-import { t, Trans } from '@lingui/macro';
33+import { Trans, useLingui } from '@lingui/react/macro';
4455import boostsCarouselUrl from '../assets/features/boosts-carousel.jpg';
66import groupedNotificationsUrl from '../assets/features/grouped-notifications.jpg';
···3131 : null;
32323333function Welcome() {
3434+ const { t } = useLingui();
3435 useTitle(null, ['/', '/welcome']);
3536 return (
3637 <main id="welcome">
+1-1
src/utils/open-compose.js
···11-import { t, Trans } from '@lingui/macro';
11+import { t } from '@lingui/core/macro';
2233export default function openCompose(opts) {
44 const url = URL.parse('/compose/', window.location);
+1-1
src/utils/show-compose.js
···11-import { t, Trans } from '@lingui/macro';
11+import { t } from '@lingui/core/macro';
2233import openOSK from './open-osk';
44import showToast from './show-toast';