Simplify i18n: remove old react-intl artifacts, rename formatMessage to t, replace FormattedMessage with t.rich().

- Rewrite messages.ts to plain string key maps (remove MessageDescriptor)
- Rewrite useMessages hook to expose t from useTranslations() directly
- Rename formatMessage → t across 193 consumer files
- Replace custom FormattedMessage component with next-intl t.rich()
- Update 52 language files to use rich text tags (<b>, <a>)
- Remove all direct imports from @/components/messages in favor of useMessages()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Mike Cao 2026-02-07 10:10:21 -08:00
parent 80cad6ea65
commit 50edb71687
247 changed files with 1660 additions and 2194 deletions

View file

@ -40,7 +40,7 @@ export function BoardProvider({
const { post, useMutation } = useApi();
const { touch } = useModified();
const { toast } = useToast();
const { formatMessage, labels, messages } = useMessages();
const { t, labels, messages } = useMessages();
const { router, renderUrl } = useNavigation();
const [board, setBoard] = useState<Partial<Board>>(data ?? createDefaultBoard());
@ -70,7 +70,7 @@ export function BoardProvider({
}, []);
const saveBoard = useCallback(async () => {
const defaultName = formatMessage(labels.untitled);
const defaultName = t(labels.untitled);
// Get current layout sizes from BoardBody if registered
const layoutData = layoutGetterRef.current?.();
@ -82,7 +82,7 @@ export function BoardProvider({
parameters,
});
toast(formatMessage(messages.saved));
toast(t(messages.saved));
touch('boards');
if (board.id) {
@ -92,17 +92,7 @@ export function BoardProvider({
}
return result;
}, [
board,
mutateAsync,
toast,
formatMessage,
labels.untitled,
messages.saved,
touch,
router,
renderUrl,
]);
}, [board, mutateAsync, toast, t, labels.untitled, messages.saved, touch, router, renderUrl]);
if (boardId && isFetching && isLoading) {
return <Loading placement="absolute" />;