戻る

gt-tanstack-start@0.1.0

Ernest McCarter avatarErnest McCarter
gt-tanstack-startv0.1.0tanstack-starttanstacki18ntranslationvite

概要

gt-tanstack-start は、TanStack Start 向けに最適化した i18n サポートを提供する初の試みです。

このライブラリは実験的です。 まだごく初期の段階にあり、フィードバックを歓迎しています。TanStack で本番環境向けの翻訳が必要な場合は、現時点では gt-react の使用をおすすめします。


含まれるもの

  • initializeGT() — TanStack Start 用に i18n マネージャーを設定します。ルートルートファイルの先頭で、一度だけ呼び出してください。
  • GTProvider — TanStack Start 向けに調整された、SSR の自動検出とロケール解決を備えた翻訳コンテキストでアプリをラップします。
  • getTranslations() — ルートローダー内で呼び出し、翻訳を provider に渡すための非同期関数です。
  • getLocale() — 現在のリクエストで解決されたロケールを返します。
  • <T>, <Var>, <LocaleSelector>gt-react から再エクスポートされているため、1 つのパッケージからまとめてインポートできます。

クイックスタート

インストール

npm install gt-tanstack-start

gt.config.json を設定する

{
  "defaultLocale": "en",
  "locales": ["fr", "zh"],
  "files": {
    "gt": {
      "output": "src/_gt/[locale].json"
    }
  }
}

環境変数を設定する

VITE_GT_PROJECT_ID=your-project-id
VITE_GT_DEV_API_KEY=your-dev-api-key

翻訳ローダーを作成する

// loadTranslations.ts
export async function loadTranslations(locale: string) {
  const translations = await import(`./src/_gt/${locale}.json`);
  return translations.default;
}

ルートルートをセットアップする

// __root.tsx
import { HeadContent, Scripts, createRootRoute } from '@tanstack/react-router';
import {
  initializeGT,
  GTProvider,
  getTranslations,
  getLocale,
} from 'gt-tanstack-start';
import gtConfig from '../../gt.config.json';
import { loadTranslations } from '../../loadTranslations';

initializeGT({
  ...gtConfig,
  projectId: import.meta.env.VITE_GT_PROJECT_ID,
  devApiKey: import.meta.env.VITE_GT_DEV_API_KEY,
  loadTranslations,
});

export const Route = createRootRoute({
  loader: async () => ({
    translations: await getTranslations(),
    locale: getLocale(),
  }),
  shellComponent: RootDocument,
});

function RootDocument({ children }: { children: React.ReactNode }) {
  const { translations, locale } = Route.useLoaderData();
  return (
    <html lang={locale}>
      <head>
        <HeadContent />
      </head>
      <body>
        <GTProvider translations={translations}>
          {children}
        </GTProvider>
        <Scripts />
      </body>
    </html>
  );
}

コンテンツを翻訳する

import { T } from 'gt-tanstack-start';

export default function Page() {
  return (
    <T>
      <p>This gets translated automatically.</p>
    </T>
  );
}

今後について

現在は v0.1.0 です。基盤はできていますが、まだ作るべきものはたくさんあります。 今後のリリースで追加予定の機能として、SSG やロケールルーティングがあります。

試してみたい方は、ぜひフィードバックをお寄せください。 Discord にぜひお越しください。あるいは、GitHub で issue を作成してください。