# General Translation React SDKs (gt-react, gt-next, gt-react-native): TanStack Start のセットアップ URL: https://generaltranslation.com/ja/docs/react/tanstack-start/setup.mdx --- title: TanStack Start のセットアップ description: General Translation のリクエスト ミドルウェアを登録し、TanStack Start アプリを初期化して、ロケールを解決し、provider をハイドレートします。 --- `gt-tanstack-start` はグローバルなリクエスト ミドルウェア、モジュールレベルのルーター初期化、および root route loader を使用します。ミドルウェアはサーバーコード用のリクエストローカルな state を作成し、root loader はロケールと翻訳で [``](/docs/react/reference/components/gt-provider) をハイドレートします。 このページでは、TanStack Start 固有のセットアップについて説明します。インストールや CLI を含む一連の手順については、[TanStack Start Quickstart](/docs/react/tanstack-start-quickstart) を参照してください。 **警告:** `gt-tanstack-start` は実験的機能であり、破壊的変更が加わる可能性があります。 *メモ: `gt-tanstack-start` は ESM 専用です。CommonJS の `require()` ではなく `import` 構文を使用してください。* ## 翻訳を読み込む [#load-translations] ロケールの翻訳ファイルをインポートする [`loadTranslations`](/docs/react/reference/functions/load-translations) 関数を作成します。Vite でインポートできるように、ファイルは `src/` 配下に置いてください。 ```ts title="loadTranslations.ts" export default async function loadTranslations(locale: string) { const translations = await import(`./src/_gt/${locale}.json`); return translations.default; } ``` [`npx gt translate`](/docs/cli/reference/commands/translate) を実行すると、CLI がこれらのファイルを生成します。 ## リクエストミドルウェアを登録する [#middleware] `src/start.ts` を作成し、[`gtMiddleware`](/docs/react/tanstack-start/reference/functions/gt-middleware) をグローバルリクエストミドルウェアとして登録します。カスタムの start インスタンスを定義する場合は、TanStack Start の Cross-Site Request Forgery (CSRF) ミドルウェアを維持してください。 ```ts title="src/start.ts" import { createCsrfMiddleware, createStart } from '@tanstack/react-start'; import { gtMiddleware } from 'gt-tanstack-start'; const csrfMiddleware = createCsrfMiddleware({ filter: ({ handlerType }) => handlerType === 'serverFn', }); export const startInstance = createStart(() => ({ requestMiddleware: [csrfMiddleware, gtMiddleware], })); ``` ミドルウェアは、リクエストごとに一度、ロケール、リージョン、および国際化設定を解決します。解決されたロケールをロケール cookie に保持し、リクエスト状態をサーバー上の[isomorphic runtime 関数](/docs/react/tanstack-start/using-server-functions)で利用できるようにします。 ## ロケールを初期化して解決する [#initialize] [`initializeGT`](/docs/react/reference/config#initialize)、[`getLocale`](/docs/react/tanstack-start/reference/functions/get-locale)、および [`getTranslationsSnapshot`](/docs/react/reference/functions/get-translations-snapshot) は、いずれも `gt-tanstack-start` からインポートします。 * **[`initializeGT`](/docs/react/reference/config#initialize)** — `src/router.tsx` のモジュールスコープで一度だけ呼び出します。`gt.config.json` をスプレッドし、[`loadTranslations`](/docs/react/reference/functions/load-translations) を渡します。 * **[`getLocale`](/docs/react/tanstack-start/reference/functions/get-locale)** — サーバーではアクティブなミドルウェアのスコープからロケールを返し、クライアントでは初期化済みのブラウザー条件ストアから返します。 * **[`getTranslationsSnapshot`](/docs/react/reference/functions/get-translations-snapshot)** — [``](/docs/react/reference/components/gt-provider) が想定する形式でロケールの翻訳を読み込むため、コンテンツが読み込み時にちらつかずにレンダリングされます。詳しくは [リファレンス](/docs/react/reference/functions/get-translations-snapshot) を参照してください。 ## ロケールルーティングを有効にする [#locale-routing] ロケールルーティングはオプトインです。有効にする前に、TanStack Router を設定して、`/about` のようなプレフィックスなしのデフォルトロケール URL と、`/es/about` のようなロケールプレフィックス付き URL の両方に対応させます。 ファイルベースまたはコードベースのルートに[任意の `/{-$locale}` セグメント](https://tanstack.com/router/v1/docs/guide/internationalization-i18n#i18n-with-optional-path-parameters)を追加するか、TanStack Router's [`rewrite` オプション](https://tanstack.com/router/v1/docs/guide/internationalization-i18n#url-localization-via-router-rewrite)を使用して、ロケールプレフィックス付きの公開 URL を既存のルートツリーにマッピングできます。たとえば、任意のルートパス `/{-$locale}/about` は、`/about`、`/es/about`、`/ja/about` に一致します。 ルーターが両方の URL 形式を受け入れるようになったら、`gt.config.json` で `localeRouting` を `true` に設定します。 ```json title="gt.config.json" { "defaultLocale": "en", "locales": ["es", "ja"], "localeRouting": true } ``` `gt-tanstack-start` は、アプリケーションのルートを作成または再構成しません。このオプションを指定すると、サポートされている path プレフィックスからロケールを解決し、ロケールの変更時に pathname を更新します。デフォルトロケールは、`/about` のようにプレフィックスなしのままですが、その他のロケールでは、`/es/about` のようにプレフィックスを使用します。 サーバー側では、[`gtMiddleware`](/docs/react/tanstack-start/reference/functions/gt-middleware) が path、次にロケール cookie、`Accept-Language` header、`defaultLocale` の順にロケールを解決します。クライアント側では、ロケールを変更すると対応する pathname で再読み込みされ、query string と hash は保持されます。 TanStack Router の base path は `TSS_ROUTER_BASEPATH` を通じて反映されます。 ## ルーターを初期化し、root routeを設定する [#root-route] 既存の `src/router.tsx` ファイルに、[`initializeGT`](/docs/react/reference/config#initialize) のインポートと初期化処理を追加します。 ```tsx title="src/router.tsx" import { initializeGT } from 'gt-tanstack-start'; import gtConfig from '../gt.config.json'; import loadTranslations from '../loadTranslations'; initializeGT({ ...gtConfig, loadTranslations }); ``` 次に、`src/routes/__root.tsx` の loader でロケールを解決してスナップショットを読み込みます。`locale` と `translations` をシェルコンポーネント内の [``](/docs/react/reference/components/gt-provider) に渡します。 ```tsx title="src/routes/__root.tsx" import { HeadContent, Scripts, createRootRoute, } from '@tanstack/react-router'; import { GTProvider, getLocale, getTranslationsSnapshot, LocaleSelector, } from 'gt-tanstack-start'; export const Route = createRootRoute({ loader: async () => { const locale = getLocale(); return { locale, translations: await getTranslationsSnapshot(locale), }; }, shellComponent: RootDocument, }); function RootDocument({ children }: { children: React.ReactNode }) { const { locale, translations } = Route.useLoaderData(); return ( {children} ); } ``` ここでは、[``](/docs/react/reference/components/gt-provider) に `locale` と `translations` の両方を指定する必要があります。Next.js ではサーバー側でそれらが解決され、React Native では provider 自身が読み込むため、それらとは異なります。 [`initializeGT`](/docs/react/reference/config#initialize) は、[`gtMiddleware`](/docs/react/tanstack-start/reference/functions/gt-middleware) がリクエストを処理する前に実行する必要があります。開発サーバーを起動する前に、ルーター と root-route のセットアップを完了してください。 ## 翻訳対象のコンテンツとしてマークする [#content] ルートコンポーネントでは、JSX を [``](/docs/react/reference/components/t) で囲み、[`useGT`](/docs/react/reference/hooks/use-gt) を使って文字列を翻訳します。CLI がソースのスキャン時に検出できるよう、これらは `gt-react` からインポートしてください。 ```tsx title="src/routes/index.tsx" import { createFileRoute } from '@tanstack/react-router'; import { T, useGT } from 'gt-react'; export const Route = createFileRoute('/')({ component: Home }); function Home() { const gt = useGT(); return (

Welcome to my app

This content is translated automatically.

); } ```