<T> コンポーネント
<T> コンポーネントで JSX コンポーネントを国際化する方法
<T> コンポーネント は、Next.js アプリで JSX コンテンツを国際化するための主要な手段です。JSX 要素を包み、ユーザーの locale に応じて自動で翻訳します。
クイックスタート
任意の静的 JSX コンテンツを、<T> でラップして変換します:
import { T } from 'gt-next';
// 変更前
function Greeting() {
  return <p>Hello, world!</p>;
}
// 変更後
function Greeting() {
  return <T><p>Hello, world!</p></T>;
}<T> 内の動的コンテンツには、Variable Components と Branching Components を使用してください。
基本的な使い方
<T> コンポーネントは、任意の JSX の内容を children として受け取ります。
// シンプルなテキスト
<T>私たちのアプリへようこそ</T>
// HTML要素
<T><h1>ページタイトル</h1></T>
// 複雑なネストしたJSX
<T>
  <div className="alert">
    <span>重要:</span> 注意深くお読みください。
  </div>
</T>設定項目
コンテキストの追加
あいまいな用語に対する翻訳コンテキストを提供します:
<T context="notification popup, not bread">
  トーストをクリックして閉じる
</T>翻訳IDの設定
翻訳を一貫させるために、明示的なidを使用してください:
<T id="welcome-message">
  おかえりなさい、ユーザー!
</T><T> を使うタイミング
<T> は、静的なコンテンツのみに使用します。
// ✅ 静的コンテンツは動作します
<T><button>ここをクリック</button></T>
<T><h1>私たちのサイトへようこそ</h1></T>
// ❌ 動的コンテンツは動作しません
<T><p>こんにちは {username}</p></T>
<T><p>今日は {new Date()}</p></T>
// ✅ 動的コンテンツにはVariableコンポーネントを使用してください
<T>
  <p>こんにちは <Var>{username}</Var></p>
</T>Variable と Branching コンポーネントは、動的コンテンツを扱うために <T> 内で使用するよう設計されています。詳しくは、Variable Components と Branching Components のガイドをご覧ください。
例
シンプルな要素
// 基本的なテキスト
<T>こんにちは、世界!</T>
// テキスト付きボタン
<T><Button>フォームを送信</Button></T>
// スタイル付きヘッディング
<T><h1 className="text-2xl font-bold">ようこそ</h1></T>複合コンポーネント
// ナビゲーションメニュー
<T>
  <nav className="navbar">
    <a href="/about">私たちについて</a>
    <a href="/contact">お問い合わせ</a>
  </nav>
</T>
// アラートメッセージ
<T>
  <div className="alert alert-warning">
    <AlertIcon className="w-5 h-5" />
    <span>セッションの有効期限まで5分です</span>
  </div>
</T>variables を使う
// 静的テキストと動的な値の組み合わせ
<T>
  <p>おかえりなさい、<Var>{user.name}</Var>さん!</p>
</T>
// 混合コンテンツを含むフォーム
<T>
  <label>
    メール: <input type="email" placeholder="メールアドレスを入力してください" />
  </label>
</T><Var> コンポーネントの詳細は、Variable Components ガイドをご覧ください。
本番環境の構築
ビルドプロセス
ビルドパイプラインに翻訳を追加する:
{
  "scripts": {
    "build": "npx gtx-cli translate && <...YOUR_BUILD_COMMAND...>"
  }
}開発環境と本番環境の挙動
- 開発: Dev APIキーがあると、コンポーネントのレンダー時にオンデマンドで翻訳が実行されます。開発中は翻訳がリアルタイムに反映されます。
- 本番: すべての翻訳はビルド時に事前生成され、アプリケーションの公開後に表示されます。
開発中のライブ翻訳を有効にするには、環境変数に開発用のAPIキーを設定してください。Dashboard の API Keys で作成できます。
プライバシーに関する考慮事項
<T> コンポーネント内のコンテンツは、翻訳のために GT API に送信されます。機微なデータについては、Variable Components を使用して、個人情報や秘密情報をローカルに留めてください。
// 安全 - 機密データはローカルに保持されます
<T>
  おかえりなさい、<Var>{username}</Var>さん
</T>よくある問題
コンポーネントの境界
<T> は直下の children だけを翻訳し、他のコンポーネント内の内容は翻訳しません。
// ❌ 間違い - コンポーネント内のコンテンツは翻訳されません
function MyComponent() {
  return <p>これは翻訳されません</p>;
}
<T>
  <h1>これは翻訳されます</h1>
  <MyComponent /> {/* 内部のコンテンツは翻訳されません */}
</T>
// ✅ 正しい - 各コンポーネントを個別にラップします
function MyComponent() {
  return <T><p>これは翻訳されます</p></T>;
}
<T><h1>これは翻訳されます</h1></T>
<MyComponent /><T> コンポーネントの入れ子
// ❌ <T> コンポーネントをネストしないでください
<T>
  <T>Hello world</T> {/* これはしないでください */}
</T>動的コンテンツのエラー
CLI は、<T> 内の動的コンテンツを検出するとエラーを返します。動的な値は Variable コンポーネントでラップしてください。
// ❌ 間違い - 動的コンテンツが壊れる
<T><p>Hello {username}</p></T>
// ✅ 正しい - Variableコンポーネントを使用
<T><p>Hello <Var>{username}</Var></p></T>動的値の扱いはVariable Components Guide、条件分岐コンテンツはBranching Components Guideを参照してください。
次のステップ
- Variable Components ガイド - JSX の翻訳内で動的コンテンツを扱う
- Branching Components ガイド - 翻訳に条件分岐ロジックを追加する
このガイドはどうでしたか?

