gt-tanstack-start@0.1.0
概览
gt-tanstack-start 是为 TanStack Start 提供专门 i18n 支持的初次尝试。
这个库目前是实验性的。 它仍处于起步阶段,我们非常欢迎反馈。如果你在基于 TanStack 的生产环境中需要 i18n 支持,目前推荐先使用
gt-react。
包含内容
initializeGT()— 为 TanStack Start 配置 i18n 管理器。在根路由文件顶部调用一次即可。GTProvider— 使用翻译上下文包裹你的应用,内置 SSR 检测和针对 TanStack Start 定制的 locale 解析。getTranslations()— 一个异步函数,供在根级 loader 中调用,将翻译数据传入 Provider。getLocale()— 返回当前请求解析得到的语言环境(locale)。<T>,<Var>,<LocaleSelector>— 从gt-react重新导出,便于你从单个包中导入所有内容。
快速上手
安装
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>这会自动翻译。</p>
</T>
);
}展望未来
当前版本为 v0.1.0 —— 基础能力已经具备,但还有很多功能有待完善和扩展。 SSG 和 locale 路由是我们计划在后续版本中加入的一些下一步特性。