Retour

gt-tanstack-start@0.1.0

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

Aperçu

gt-tanstack-start est une première tentative pour offrir une prise en charge de l’i18n spécifiquement conçue pour TanStack Start.

Cette bibliothèque est expérimentale. Elle en est encore à ses débuts, et nous sommes très ouverts aux retours d’expérience. Si vous avez besoin de traduction dans un environnement de production avec TanStack, nous vous recommandons d’utiliser gt-react pour l’instant.


Ce qui est inclus

  • initializeGT() — Configure le gestionnaire d’i18n pour TanStack Start. Appelez cette fonction une fois, en haut de votre fichier de route racine.
  • GTProvider — Encapsule votre application avec le contexte de traduction, avec détection SSR intégrée et résolution de locale adaptée à TanStack Start.
  • getTranslations() — Une fonction asynchrone conçue pour être appelée dans votre root loader afin de transmettre les traductions au provider.
  • getLocale() — Renvoie la locale résolue pour la requête en cours.
  • <T>, <Var>, <LocaleSelector> — Réexportés depuis gt-react pour que vous puissiez tout importer depuis un seul package.

Démarrage rapide

Installation

npm install gt-tanstack-start

Configurer gt.config.json

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

Configurer les variables d’environnement

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

Créer un chargeur de traduction

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

Configurer la route racine

// __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>
  );
}

Traduction du contenu

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

export default function Page() {
  return (
    <T>
      <p>Ceci est traduit automatiquement.</p>
    </T>
  );
}

Perspectives d'avenir

Il s'agit de la v0.1.0 — les bases sont là, mais il reste encore beaucoup à construire. SSG et le routage par locale font partie des prochaines fonctionnalités que nous prévoyons d'ajouter dans les futures versions.

Si vous souhaitez l'essayer, vos retours sont les bienvenus. Rejoignez-nous sur notre Discord ou ouvrez une issue sur GitHub.