2024-10-08

i18n対応でテキスト中にリンクを埋め込む方法(react-i18nextの場合)

react-i18next
i18n

利用規約やプライバシーポリシーの確認を促す文章の場合、利用規約プライバシーポリシーの部分を該当ページのリンクにしたい時がある。

i18n対応の場合、言語によってリンクにする箇所が異なるのでどうやるのか調べた。

Transコンポーネントを使う

翻訳ファイルに記述したタグをTransコンポーネントのcomponentsプロパティで指定して置換するコンポーネントを設定する。

https://react.i18next.com/latest/trans-component

json
{
  "termsOfService": "<TermsLink>利用規約</TermsLink>に同意する。",
}
json
{
  "termsOfService": "I accept and agree to <TermsLink>the Terms of Use</TermsLink>.",
}
import { Trans, useTranslation } from 'react-i18next';

function MyComponent() {
  const { t } = useTranslation();

  return (
    <Trans
      i18nKey={t("termsOfService")}
      components={{
        TermsLink: <Link href="https://hoge.app/terms" target="_blank"></Link>
      }}
    />
  );
}