戻る

gt-next@6.6.0

Ernest McCarter avatarErnest McCarter
gt-next6.6.0辞書翻訳翻訳

概要

gt-next 6.6.0 では、「ブラウンフィールド」のアプリを国際化するための新たなアプローチを導入します。翻訳済みの辞書構造を返せる t.obj() 関数を追加しました。


背景

"ブラウンフィールド" と "グリーンフィールド" は、不動産開発に由来する用語です。グリーンフィールド は既存の建物や構造物がない土地、ブラウンフィールド は既存の建物や構造物がある土地を指します。i18n の文脈では、これは i18n の基盤がないアプリ (グリーンフィールド) と、すでに i18n の基盤があるアプリ (ブラウンフィールド) を意味します。

これまで私たちのライブラリは、"グリーンフィールド" アプリの国際化に強くフォーカスしてきました。たとえば、<T> コンポーネントや useGT() フックがその例です。

一方で、"ブラウンフィールド" アプリ向けに私たちが特に用意してきた仕組みは、next-intl の辞書パターンをもとにした const t = useTranslations()const t = getTranslations() だけでした。ただし、これまでの t() 関数には制限があり、返せるのは文字列だけで、辞書のサブツリーは返せませんでした。

私たちがわかったのは、開発者は i18n ライブラリに対して、文字列だけでなく辞書のサブツリーも返せることを期待している場合が多い、ということです。そのため、他の i18n ライブラリから移行する開発者にとって、gt-next がこの機能をサポートしていることは重要です。


使い方

反復処理したい項目のリストを含む、次のような辞書構造を考えてみましょう。

{
  "cards": [
    {
      "title": "Card 1",
      "description": "Card 1 description"
    },
    {
      "title": "Card 2",
      "description": "Card 2 description"
    },
    {
      "title": "Card 3",
      "description": "Card 3 description"
    }
  ]
}

従来の方法では、各項目にはそれぞれの正確なキーを使って個別にアクセスする必要がありました。

import { useTranslations } from 'gt-next'

export default function Page() {
  const t = useTranslations()

  return (
    <>
      <div>
        {t('cards.0.title')}
        {t('cards.0.description')}
      </div>
      <div>
        {t('cards.1.title')}
        {t('cards.1.description')}
      </div>
      <div>
        {t('cards.2.title')}
        {t('cards.2.description')}
      </div>
    </>
  )
}

このやり方は、明らかにスケールせず、保守性もありません。

新しい t.obj() 関数を使うと、辞書構造をサブツリーとして扱ってアクセスできます。

import { useTranslations } from 'gt-next'

export default function Page() {
  const t = useTranslations()

  return (
    <>
      <div>
        {t.obj('cards').map((card) => (
          <div key={card.title}>
            {card.title}
            {card.description}
          </div>
        ))}
      </div>
    </>
  )
}

結論

t.obj() 関数は、gt-next をグリーンフィールドとブラウンフィールドの両方のアプリケーションで、より柔軟に活用できるようにする大きな前進です。開発者が辞書のサブツリーを直接扱えるようになることで、既存アプリケーションの国際化における大きな障壁が取り除かれます。

この機能強化により、gt-next は、チームが最新の i18n ライブラリに求める開発者体験にさらに近づき、翻訳済みコンテンツを扱いながら繰り返し改善を進めたり、より動的で保守しやすい国際化アプリケーションを構築したりしやすくなります。