gt-next@6.15.0
概要
新しい <RelativeTime> コンポーネントが、すべての GT React パッケージで利用できるようになりました。ブラウザーに組み込まれている Intl.RelativeTimeFormat API を使用して、"2 hours ago" や "in 3 days" のようなローカライズされた相対時間文字列をレンダリングします。
| パッケージ | バージョン | エクスポート |
|---|---|---|
gt-next | 6.15.0 | <RelativeTime> (クライアント + サーバー) |
gt-react | 10.16.0 | <RelativeTime> (クライアント) |
gt-tanstack-start | 0.3.0 | <RelativeTime> (クライアント) |
generaltranslation | 8.2.0 | formatRelativeTimeFromDate() (コア) |
gt (CLI) | 2.14.0 | RelativeTime コンポーネントの検出 |
使い方
Date から単位を自動選択
Date を渡すと、コンポーネントが最適な単位 (秒、分、時間、日、週、月、年) を自動的に選択します。
import { RelativeTime } from 'gt-next';
export default function PostTimestamp({ post }) {
return <RelativeTime>{post.createdAt}</RelativeTime>;
// "2時間前"、"3日前"、"5分後" など
}明示的な値と単位
Intl.RelativeTimeFormat に直接対応する形で、正確な値と単位を指定します。
import { RelativeTime } from 'gt-next';
export default function Reminder() {
return (
<p>
Your trial ends <RelativeTime value={3} unit="day" />.
</p>
);
// "トライアルは3日後に終了します。"
}翻訳対象のコンテンツ内
<RelativeTime> を翻訳文に含めるには、<T> コンポーネントで囲みます。
import { T, RelativeTime } from 'gt-next';
export default function Comment({ comment }) {
return (
<T id="commentPosted">
Posted <RelativeTime>{comment.createdAt}</RelativeTime>
</T>
);
}コア関数
コンポーネント以外のコンテキストでは、スタンドアロン関数を使用します。
import { formatRelativeTimeFromDate } from 'generaltranslation';
const label = formatRelativeTimeFromDate(someDate, {
locales: ['en-US'],
baseDate: new Date(),
});
// "2時間前"ハイドレーションの安全性
<RelativeTime> は相対時間をローカルで計算するため、サーバーレンダリングされたアプリではハイドレーションの不整合が発生することがあります。サーバーとクライアントの同期を保つため、baseDate と locales を固定してください。
const now = new Date();
<RelativeTime baseDate={now} locales={['en-US']}>
{post.createdAt}
</RelativeTime>