@intlayer/docs 8.5.2 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/docs/ar/intlayer_with_react_router_v7.md +2 -4
  2. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +2 -4
  3. package/docs/ar/intlayer_with_svelte_kit.md +2 -2
  4. package/docs/ar/intlayer_with_tanstack+solid.md +0 -17
  5. package/docs/ar/intlayer_with_tanstack.md +0 -8
  6. package/docs/ar/intlayer_with_vite+lit.md +0 -1
  7. package/docs/ar/intlayer_with_vite+solid.md +0 -1
  8. package/docs/ar/intlayer_with_vite+svelte.md +1 -1
  9. package/docs/bn/intlayer_with_vite+lit.md +0 -1
  10. package/docs/cs/intlayer_with_vite+lit.md +0 -1
  11. package/docs/de/intlayer_with_react_router_v7.md +2 -4
  12. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +1 -2
  13. package/docs/de/intlayer_with_svelte_kit.md +2 -2
  14. package/docs/de/intlayer_with_tanstack+solid.md +80 -21
  15. package/docs/de/intlayer_with_tanstack.md +96 -28
  16. package/docs/de/intlayer_with_vite+lit.md +0 -1
  17. package/docs/de/intlayer_with_vite+solid.md +0 -1
  18. package/docs/de/intlayer_with_vite+svelte.md +1 -1
  19. package/docs/en/intlayer_with_react_router_v7.md +1 -2
  20. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +2 -4
  21. package/docs/en/intlayer_with_svelte_kit.md +2 -2
  22. package/docs/en/intlayer_with_tanstack+solid.md +81 -19
  23. package/docs/en/intlayer_with_tanstack.md +81 -10
  24. package/docs/en/intlayer_with_vite+lit.md +0 -1
  25. package/docs/en/intlayer_with_vite+solid.md +0 -1
  26. package/docs/en/intlayer_with_vite+svelte.md +5 -6
  27. package/docs/en-GB/intlayer_with_react_router_v7.md +2 -4
  28. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +2 -4
  29. package/docs/en-GB/intlayer_with_svelte_kit.md +2 -2
  30. package/docs/en-GB/intlayer_with_tanstack+solid.md +73 -17
  31. package/docs/en-GB/intlayer_with_tanstack.md +74 -9
  32. package/docs/en-GB/intlayer_with_vite+lit.md +0 -1
  33. package/docs/en-GB/intlayer_with_vite+solid.md +0 -1
  34. package/docs/en-GB/intlayer_with_vite+svelte.md +1 -1
  35. package/docs/es/intlayer_with_react_router_v7.md +2 -4
  36. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +2 -4
  37. package/docs/es/intlayer_with_svelte_kit.md +2 -2
  38. package/docs/es/intlayer_with_tanstack+solid.md +80 -21
  39. package/docs/es/intlayer_with_tanstack.md +96 -28
  40. package/docs/es/intlayer_with_vite+lit.md +0 -1
  41. package/docs/es/intlayer_with_vite+solid.md +0 -1
  42. package/docs/es/intlayer_with_vite+svelte.md +1 -1
  43. package/docs/fr/intlayer_with_react_router_v7.md +2 -4
  44. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +2 -4
  45. package/docs/fr/intlayer_with_svelte_kit.md +3 -3
  46. package/docs/fr/intlayer_with_tanstack+solid.md +80 -21
  47. package/docs/fr/intlayer_with_tanstack.md +96 -28
  48. package/docs/fr/intlayer_with_vite+lit.md +0 -1
  49. package/docs/fr/intlayer_with_vite+solid.md +0 -1
  50. package/docs/fr/intlayer_with_vite+svelte.md +1 -1
  51. package/docs/hi/intlayer_with_react_router_v7.md +2 -4
  52. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +2 -4
  53. package/docs/hi/intlayer_with_svelte_kit.md +2 -2
  54. package/docs/hi/intlayer_with_tanstack+solid.md +0 -17
  55. package/docs/hi/intlayer_with_tanstack.md +0 -8
  56. package/docs/hi/intlayer_with_vite+lit.md +0 -1
  57. package/docs/hi/intlayer_with_vite+solid.md +0 -1
  58. package/docs/hi/intlayer_with_vite+svelte.md +1 -1
  59. package/docs/id/intlayer_with_react_router_v7.md +2 -4
  60. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +2 -4
  61. package/docs/id/intlayer_with_svelte_kit.md +2 -2
  62. package/docs/id/intlayer_with_tanstack+solid.md +0 -17
  63. package/docs/id/intlayer_with_tanstack.md +0 -8
  64. package/docs/id/intlayer_with_vite+lit.md +0 -1
  65. package/docs/id/intlayer_with_vite+solid.md +0 -1
  66. package/docs/id/intlayer_with_vite+svelte.md +1 -1
  67. package/docs/it/intlayer_with_react_router_v7.md +2 -4
  68. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +2 -4
  69. package/docs/it/intlayer_with_svelte_kit.md +3 -3
  70. package/docs/it/intlayer_with_tanstack+solid.md +78 -19
  71. package/docs/it/intlayer_with_tanstack.md +96 -30
  72. package/docs/it/intlayer_with_vite+lit.md +0 -1
  73. package/docs/it/intlayer_with_vite+solid.md +0 -1
  74. package/docs/it/intlayer_with_vite+svelte.md +1 -1
  75. package/docs/ja/intlayer_with_react_router_v7.md +1 -2
  76. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +2 -4
  77. package/docs/ja/intlayer_with_tanstack+solid.md +83 -22
  78. package/docs/ja/intlayer_with_tanstack.md +779 -93
  79. package/docs/ja/intlayer_with_vite+lit.md +0 -1
  80. package/docs/ja/intlayer_with_vite+solid.md +0 -1
  81. package/docs/ja/intlayer_with_vite+svelte.md +1 -1
  82. package/docs/ko/intlayer_with_react_router_v7.md +2 -4
  83. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +2 -4
  84. package/docs/ko/intlayer_with_svelte_kit.md +2 -2
  85. package/docs/ko/intlayer_with_tanstack+solid.md +81 -22
  86. package/docs/ko/intlayer_with_tanstack.md +95 -101
  87. package/docs/ko/intlayer_with_vite+lit.md +0 -1
  88. package/docs/ko/intlayer_with_vite+solid.md +0 -1
  89. package/docs/ko/intlayer_with_vite+svelte.md +1 -1
  90. package/docs/nl/intlayer_with_vite+lit.md +0 -1
  91. package/docs/pl/intlayer_with_react_router_v7.md +2 -4
  92. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +2 -4
  93. package/docs/pl/intlayer_with_svelte_kit.md +2 -2
  94. package/docs/pl/intlayer_with_tanstack+solid.md +0 -17
  95. package/docs/pl/intlayer_with_tanstack.md +0 -8
  96. package/docs/pl/intlayer_with_vite+lit.md +0 -1
  97. package/docs/pl/intlayer_with_vite+solid.md +0 -1
  98. package/docs/pl/intlayer_with_vite+svelte.md +1 -1
  99. package/docs/pt/intlayer_with_react_router_v7.md +1 -2
  100. package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +2 -4
  101. package/docs/pt/intlayer_with_svelte_kit.md +3 -3
  102. package/docs/pt/intlayer_with_tanstack+solid.md +78 -19
  103. package/docs/pt/intlayer_with_tanstack.md +96 -30
  104. package/docs/pt/intlayer_with_vite+lit.md +0 -1
  105. package/docs/pt/intlayer_with_vite+solid.md +0 -1
  106. package/docs/pt/intlayer_with_vite+svelte.md +1 -1
  107. package/docs/ru/intlayer_with_react_router_v7.md +2 -4
  108. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +2 -4
  109. package/docs/ru/intlayer_with_svelte_kit.md +2 -2
  110. package/docs/ru/intlayer_with_tanstack+solid.md +80 -21
  111. package/docs/ru/intlayer_with_tanstack.md +99 -33
  112. package/docs/ru/intlayer_with_vite+lit.md +0 -1
  113. package/docs/ru/intlayer_with_vite+solid.md +0 -1
  114. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  115. package/docs/tr/intlayer_with_react_router_v7.md +2 -4
  116. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +2 -4
  117. package/docs/tr/intlayer_with_svelte_kit.md +2 -2
  118. package/docs/tr/intlayer_with_tanstack+solid.md +0 -17
  119. package/docs/tr/intlayer_with_tanstack.md +0 -8
  120. package/docs/tr/intlayer_with_vite+lit.md +0 -1
  121. package/docs/tr/intlayer_with_vite+solid.md +0 -1
  122. package/docs/tr/intlayer_with_vite+svelte.md +1 -1
  123. package/docs/uk/intlayer_with_react_router_v7.md +1 -2
  124. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +2 -4
  125. package/docs/uk/intlayer_with_svelte_kit.md +2 -2
  126. package/docs/uk/intlayer_with_tanstack+solid.md +0 -17
  127. package/docs/uk/intlayer_with_tanstack.md +0 -8
  128. package/docs/uk/intlayer_with_vite+lit.md +0 -1
  129. package/docs/uk/intlayer_with_vite+solid.md +0 -1
  130. package/docs/uk/intlayer_with_vite+svelte.md +1 -1
  131. package/docs/ur/intlayer_with_vite+lit.md +0 -1
  132. package/docs/vi/intlayer_with_react_router_v7.md +2 -4
  133. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +2 -4
  134. package/docs/vi/intlayer_with_svelte_kit.md +2 -2
  135. package/docs/vi/intlayer_with_tanstack+solid.md +0 -17
  136. package/docs/vi/intlayer_with_tanstack.md +0 -8
  137. package/docs/vi/intlayer_with_vite+lit.md +0 -1
  138. package/docs/vi/intlayer_with_vite+solid.md +0 -1
  139. package/docs/vi/intlayer_with_vite+svelte.md +1 -1
  140. package/docs/zh/intlayer_with_react_router_v7.md +2 -4
  141. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +2 -4
  142. package/docs/zh/intlayer_with_svelte_kit.md +2 -2
  143. package/docs/zh/intlayer_with_tanstack+solid.md +82 -23
  144. package/docs/zh/intlayer_with_tanstack.md +96 -104
  145. package/docs/zh/intlayer_with_vite+lit.md +0 -1
  146. package/docs/zh/intlayer_with_vite+solid.md +0 -1
  147. package/docs/zh/intlayer_with_vite+svelte.md +1 -1
  148. package/package.json +8 -8
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  createdAt: 2025-03-25
3
- updatedAt: 2026-03-25
3
+ updatedAt: 2026-03-29
4
4
  title: Tanstack Start i18n - 如何在 2026 年使用 Solid.js 翻译 Tanstack Start 应用
5
- description: 了解如何使用 Intlayer 和 Solid.js 为您的 Tanstack Start 应用程序添加国际化 (i18n)。按照此综合指南创建具有本地化感知路由的多语言应用。
5
+ description: 了解如何使用 Intlayer 和 Solid.js 为您的 Tanstack Start 应用程序添加 internationalization (i18n)。按照此综合指南创建具有本地化感知路由的多语言应用。
6
6
  keywords:
7
7
  - 国际化
8
8
  - 文档
@@ -12,6 +12,7 @@ keywords:
12
12
  - i18n
13
13
  - TypeScript
14
14
  - 语言路由
15
+ - Sitemap
15
16
  slugs:
16
17
  - doc
17
18
  - environment
@@ -140,16 +141,12 @@ export default config;
140
141
  import { intlayer } from "vite-intlayer";
141
142
  import { defineConfig } from "vite";
142
143
  import { devtools } from "@tanstack/devtools-vite";
143
- import viteTsConfigPaths from "vite-tsconfig-paths";
144
144
  import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
145
145
  import solidPlugin from "vite-plugin-solid";
146
146
 
147
147
  export default defineConfig({
148
148
  plugins: [
149
149
  devtools(),
150
- viteTsConfigPaths({
151
- projects: ["./tsconfig.json"],
152
- }),
153
150
  tanstackStart({
154
151
  router: {
155
152
  routeFileIgnorePattern:
@@ -221,9 +218,6 @@ function RootComponent() {
221
218
  }
222
219
  ```
223
220
 
224
- > [!NOTE]
225
- > 在 Solid 中,`useMatches` 返回一个 **signal** (响应式访问器)。请使用 `matches()` (带括号) 来响应式地访问当前值。
226
-
227
221
  ### 第 6 步:创建语言布局 (可选)
228
222
 
229
223
  创建一个处理语言前缀并执行验证的布局。此布局将确保仅处理有效的语言。
@@ -415,7 +409,6 @@ function RouteComponent() {
415
409
  }
416
410
  ```
417
411
 
418
- > [!NOTE]
419
412
  > 在 Solid 中,`useIntlayer` 返回一个 **accessor** 函数 (例如:`content()`)。您必须调用该函数以访问响应式内容。
420
413
  >
421
414
  > 欲了解更多关于 `useIntlayer` 钩子的信息,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/solid-intlayer/useIntlayer.md)。
@@ -460,7 +453,6 @@ export const LocaleSwitcher = () => {
460
453
  export default LocaleSwitcher;
461
454
  ```
462
455
 
463
- > [!NOTE]
464
456
  > 在 Solid 中,来自 `useLocale` 的 `locale` 是一个 **signal accessor**。请使用 `locale()` (带括号) 来响应式地读取其当前值。
465
457
  >
466
458
  > 欲了解更多关于 `useLocale` 钩子的信息,请参考[文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/solid-intlayer/useLocale.md)。
@@ -502,15 +494,11 @@ import solid from "vite-plugin-solid";
502
494
  import { nitro } from "nitro/vite";
503
495
  import { defineConfig } from "vite";
504
496
  import { intlayer, intlayerProxy } from "vite-intlayer";
505
- import viteTsConfigPaths from "vite-tsconfig-paths";
506
497
 
507
498
  export default defineConfig({
508
499
  plugins: [
509
500
  intlayerProxy(), // 如果您使用 Nitro,Proxy 应放置在服务器之前
510
501
  nitro(),
511
- viteTsConfigPaths({
512
- projects: ["./tsconfig.json"],
513
- }),
514
502
  intlayer(),
515
503
  tanstackStart({
516
504
  router: {
@@ -525,7 +513,7 @@ export default defineConfig({
525
513
 
526
514
  ---
527
515
 
528
- ### 第 13 步:国际化您的元数据 (可选)
516
+ ### 第 12 步:国际化您的元数据 (可选)
529
517
 
530
518
  您还可以在 `head` 加载器中使用 `getIntlayer` 函数访问您的内容字典,以实现语言感知的元数据:
531
519
 
@@ -551,7 +539,7 @@ export const Route = createFileRoute("/{-$locale}/")({
551
539
 
552
540
  ---
553
541
 
554
- ### 第 14 步:在服务器操作中获取语言 (可选)
542
+ ### 第 13 步:在服务器操作中获取语言 (可选)
555
543
 
556
544
  您可能希望从服务器操作 (server actions) 或 API 端点中访问当前语言。
557
545
  您可以使用 `intlayer` 提供的 `getLocale` 助手函数来实现这一点。
@@ -588,7 +576,7 @@ export const getLocaleServer = createServerFn().handler(async () => {
588
576
 
589
577
  ---
590
578
 
591
- ### 第 15 步:管理“未找到”页面 (可选)
579
+ ### 第 14 步:管理“未找到”页面 (可选)
592
580
 
593
581
  当用户访问不存在的页面时,您可以显示自定义的 404 页面,而语言前缀可能会影响 404 页面的触发方式。
594
582
 
@@ -662,7 +650,7 @@ export const Route = createFileRoute("/{-$locale}/$")({
662
650
  });
663
651
  ```
664
652
 
665
- ### (可选) 16 步:提取组件中的内容
653
+ ### 第 15 步:提取组件中的内容 (可选)
666
654
 
667
655
  如果您拥有现有的代码库,转换数千个文件可能会非常耗时。
668
656
 
@@ -803,16 +791,12 @@ bun x intlayer extract
803
791
  import { intlayer, intlayerCompiler } from "vite-intlayer";
804
792
  import { defineConfig } from "vite";
805
793
  import { devtools } from "@tanstack/devtools-vite";
806
- import viteTsConfigPaths from "vite-tsconfig-paths";
807
794
  import { tanstackStart } from "@tanstack/solid-start/plugin/vite";
808
795
  import solidPlugin from "vite-plugin-solid";
809
796
 
810
797
  export default defineConfig({
811
798
  plugins: [
812
799
  devtools(),
813
- viteTsConfigPaths({
814
- projects: ["./tsconfig.json"],
815
- }),
816
800
  tanstackStart({
817
801
  router: {
818
802
  routeFileIgnorePattern:
@@ -847,6 +831,81 @@ bun run build # 或 bun run dev
847
831
 
848
832
  ---
849
833
 
834
+ ### 第 16 步:生成站点地图 (可选)
835
+
836
+ Intlayer 带有内置的站点地图生成器,可帮助您轻松为应用程序创建站点地图。它处理本地化路由并为搜索引擎添加必要的元数据。
837
+
838
+ > Intlayer 生成的站点地图支持 `xhtml:link` 命名空间(Hreflang XML 扩展)。与仅列出原始 URL 的默认站点地图生成器不同,Intlayer 会自动在页面的所有语言版本(例如 `/about`、`/about?lang=fr` 和 `/about?lang=es`)之间创建所需的双向链接。这确保了搜索引擎能够正确索引并向合适的受众提供正确的语言版本。
839
+
840
+ 要使用它,您首先需要配置 `vite.config.ts` 以启用本地化路由的预渲染,并禁用 TanStack Start 的默认站点地图生成。
841
+
842
+ ```typescript fileName="vite.config.ts"
843
+ import { localeMap, localeFlatMap } from "intlayer";
844
+ // ... 其他导入
845
+
846
+ export const pathList = ["", "/about", "/404"];
847
+
848
+ const localizedPages = localeFlatMap(({ urlPrefix }) =>
849
+ pathList.map((path) => ({
850
+ path: `${urlPrefix}${path}`,
851
+ prerender: {
852
+ enabled: true,
853
+ },
854
+ }))
855
+ );
856
+
857
+ export default defineConfig({
858
+ plugins: [
859
+ // ... 其他插件
860
+ tanstackStart({
861
+ // ... 其他配置
862
+ sitemap: {
863
+ enabled: false,
864
+ },
865
+ prerender: {
866
+ enabled: true,
867
+ crawlLinks: false,
868
+ concurrency: 10,
869
+ },
870
+ pages: localizedPages,
871
+ }),
872
+ ],
873
+ });
874
+ ```
875
+
876
+ 然后,创建一个使用 `generateSitemap` 函数的 `src/routes/sitemap[.]xml.ts` 路由:
877
+
878
+ ```typescript fileName="src/routes/sitemap[.]xml.ts"
879
+ import { createFileRoute } from "@tanstack/solid-router";
880
+ import { generateSitemap } from "intlayer";
881
+
882
+ const SITE_URL = (
883
+ import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
884
+ ).replace(/\/$/, "");
885
+
886
+ export const Route = createFileRoute("/sitemap.xml")({
887
+ server: {
888
+ handlers: {
889
+ GET: async () => {
890
+ const sitemap = generateSitemap(
891
+ [
892
+ { path: "/", changefreq: "daily", priority: 1.0 },
893
+ { path: "/about", changefreq: "monthly", priority: 0.8 },
894
+ ],
895
+ { siteUrl: SITE_URL }
896
+ );
897
+
898
+ return new Response(sitemap, {
899
+ headers: { "Content-Type": "application/xml" },
900
+ });
901
+ },
902
+ },
903
+ },
904
+ });
905
+ ```
906
+
907
+ ---
908
+
850
909
  ### 第 17 步:配置 TypeScript (可选)
851
910
 
852
911
  Intlayer 使用模块扩充 (module augmentation) 来利用 TypeScript 的优势,并使您的代码库更加健壮。
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-09
3
- updatedAt: 2026-03-12
3
+ updatedAt: 2026-03-29
4
4
  title: Tanstack Start i18n - 如何翻译Tanstack Start 应用 2026
5
5
  description: 学习如何使用 Intlayer 为您的 Tanstack Start 应用添加国际化 (i18n)。按照本综合指南,使您的应用支持多语言并具备基于区域设置的路由功能。
6
6
  keywords:
@@ -12,6 +12,7 @@ keywords:
12
12
  - i18n
13
13
  - TypeScript
14
14
  - 区域路由
15
+ - Sitemap
15
16
  slugs:
16
17
  - doc
17
18
  - environment
@@ -160,14 +161,10 @@ import viteReact from "@vitejs/plugin-react";
160
161
  import { nitro } from "nitro/vite";
161
162
  import { defineConfig } from "vite";
162
163
  import { intlayer } from "vite-intlayer";
163
- import viteTsConfigPaths from "vite-tsconfig-paths";
164
164
 
165
165
  const config = defineConfig({
166
166
  plugins: [
167
167
  nitro(),
168
- viteTsConfigPaths({
169
- projects: ["./tsconfig.json"],
170
- }),
171
168
  intlayer(),
172
169
  tanstackStart({
173
170
  router: {
@@ -597,15 +594,11 @@ import viteReact from "@vitejs/plugin-react";
597
594
  import { nitro } from "nitro/vite";
598
595
  import { defineConfig } from "vite";
599
596
  import { intlayer, intlayerProxy } from "vite-intlayer";
600
- import viteTsConfigPaths from "vite-tsconfig-paths";
601
597
 
602
598
  export default defineConfig({
603
599
  plugins: [
604
600
  intlayerProxy(), // 如果使用 Nitro,代理应放在服务器之前
605
601
  nitro(),
606
- viteTsConfigPaths({
607
- projects: ["./tsconfig.json"],
608
- }),
609
602
  intlayer(),
610
603
  tanstackStart({
611
604
  router: {
@@ -620,7 +613,7 @@ export default defineConfig({
620
613
 
621
614
  ---
622
615
 
623
- ### 第十三步:国际化您的元数据(可选)
616
+ ### 第十二步:国际化您的元数据(可选)
624
617
 
625
618
  您还可以使用 `getIntlayer` 钩子在整个应用程序中访问您的内容字典:
626
619
 
@@ -646,7 +639,7 @@ export const Route = createFileRoute("/{-$locale}/")({
646
639
 
647
640
  ---
648
641
 
649
- ### 第十四步:在您的 server actions 中获取 locale(可选)
642
+ ### 第十三步:在您的 server actions 中获取 locale(可选)
650
643
 
651
644
  您可能希望从 server actions 或 API 端点内部访问当前 locale。
652
645
  您可以使用 `intlayer` 中的 `getLocale` 辅助函数来实现这一点。
@@ -683,7 +676,7 @@ export const getLocaleServer = createServerFn().handler(async () => {
683
676
 
684
677
  ---
685
678
 
686
- ### 第十五步:管理未找到的页面(可选)
679
+ ### 第十四步:管理未找到的页面(可选)
687
680
 
688
681
  当用户访问不存在的页面时,您可以显示自定义的未找到页面,并且区域设置前缀可能会影响未找到页面的触发方式。
689
682
 
@@ -759,29 +752,11 @@ export const Route = createFileRoute("/{-$locale}/$")({
759
752
 
760
753
  ---
761
754
 
762
- ### 第十六步:配置 TypeScript(可选)
763
-
764
- Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更健壮。
765
-
766
- 确保您的 TypeScript 配置包含自动生成的类型:
767
-
768
- ```json5 fileName="tsconfig.json"
769
- {
770
- // ... 您现有的配置
771
- include: [
772
- // ... 您现有的包含项
773
- ".intlayer/**/*.ts", // 包含自动生成的类型
774
- ],
775
- }
776
- ```
777
-
778
- ---
779
-
780
- ### (可选) 步骤 1 : 提取组件内容
755
+ ### 第十五步:提取组件中的内容(可选)
781
756
 
782
757
  如果您有现有的代码库,转换数千个文件可能会非常耗时。
783
758
 
784
- 为了简化此过程,Intlayer 提出了 [编译器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md) / [提取器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md) 来转换您的组件并提取内容。
759
+ 为了简化此过程,Intlayer 提供了 [编译器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md) / [提取器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md) 来转换您的组件并提取内容。
785
760
 
786
761
  要进行设置,您可以在 `intlayer.config.ts` 文件中添加 `compiler` 部分:
787
762
 
@@ -816,66 +791,6 @@ const config: IntlayerConfig = {
816
791
  export default config;
817
792
  ```
818
793
 
819
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
820
- /** @type {import('intlayer').IntlayerConfig} */
821
- const config = {
822
- // ... 您的其他配置
823
- compiler: {
824
- /**
825
- * 指示是否应启用编译器。
826
- */
827
- enabled: true,
828
-
829
- /**
830
- * 定义输出文件路径
831
- */
832
- output: ({ fileName, extension }) => `./${fileName}${extension}`,
833
-
834
- /**
835
- * 指示在转换后是否应保存组件。这样,编译器只需运行一次即可转换应用程序,然后即可将其删除。
836
- */
837
- saveComponents: false,
838
-
839
- /**
840
- * 字典键前缀
841
- */
842
- dictionaryKeyPrefix: "",
843
- },
844
- };
845
-
846
- export default config;
847
- ```
848
-
849
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
850
- /** @type {import('intlayer').IntlayerConfig} */
851
- const config = {
852
- // ... 您的其他配置
853
- compiler: {
854
- /**
855
- * 指示是否应启用编译器。
856
- */
857
- enabled: true,
858
-
859
- /**
860
- * 定义输出文件路径
861
- */
862
- output: ({ fileName, extension }) => `./${fileName}${extension}`,
863
-
864
- /**
865
- * 指示在转换后是否应保存组件。这样,编译器只需运行一次即可转换应用程序,然后即可将其删除。
866
- */
867
- saveComponents: false,
868
-
869
- /**
870
- * 字典键前缀
871
- */
872
- dictionaryKeyPrefix: "",
873
- },
874
- };
875
-
876
- module.exports = config;
877
- ```
878
-
879
794
  <Tabs>
880
795
  <Tab value='提取命令'>
881
796
 
@@ -914,24 +829,101 @@ export default defineConfig({
914
829
  });
915
830
  ```
916
831
 
917
- ```bash packageManager="npm"
918
- npm run build # 或 npm run dev
919
- ```
832
+ </Tab>
833
+ </Tabs>
920
834
 
921
- ```bash packageManager="pnpm"
922
- pnpm run build # 或 pnpm run dev
923
- ```
835
+ ---
924
836
 
925
- ```bash packageManager="yarn"
926
- yarn build # 或 yarn dev
837
+ ### 第十六步:生成站点地图 (Sitemap)(可选)
838
+
839
+ Intlayer 附带一个内置的站点地图生成器,可帮助您轻松为应用程序创建站点地图。它能够处理本地化路由,并为搜索引擎添加必要的元数据。
840
+
841
+ > Intlayer 生成的站点地图支持 `xhtml:link` 命名空间(Hreflang XML 扩展)。与仅列出原始 URL 的默认站点地图生成器不同,Intlayer 会自动在页面的所有语言版本(例如 `/about`、`/about?lang=fr` 和 `/about?lang=es`)之间创建所需的双向链接。这确保了搜索引擎能够正确索引并向合适的受众提供正确的语言版本。
842
+
843
+ 要使用它,您首先需要配置 `vite.config.ts` 文件,以启用本地化路由的预渲染,并禁用默认的 TanStack Start 站点地图生成。
844
+
845
+ ```typescript fileName="vite.config.ts"
846
+ import { localeFlatMap } from "intlayer";
847
+ // ... 其他导入
848
+
849
+ export const pathList = ["", "/about", "/404"];
850
+
851
+ const localizedPages = localeFlatMap(({ urlPrefix }) =>
852
+ pathList.map((path) => ({
853
+ path: `${urlPrefix}${path}`,
854
+ prerender: {
855
+ enabled: true,
856
+ },
857
+ }))
858
+ );
859
+
860
+ export default defineConfig({
861
+ plugins: [
862
+ // ... 其他插件
863
+ tanstackStart({
864
+ // ... 其他配置
865
+ sitemap: {
866
+ enabled: false,
867
+ },
868
+ prerender: {
869
+ enabled: true,
870
+ crawlLinks: false,
871
+ concurrency: 10,
872
+ },
873
+ pages: localizedPages,
874
+ }),
875
+ ],
876
+ });
927
877
  ```
928
878
 
929
- ```bash packageManager="bun"
930
- bun run build # Or bun run dev
879
+ 然后,创建一个使用 `generateSitemap` 函数的路由 `src/routes/sitemap[.]xml.ts`:
880
+
881
+ ```typescript fileName="src/routes/sitemap[.]xml.ts"
882
+ import { createFileRoute } from "@tanstack/react-router";
883
+ import { generateSitemap } from "intlayer";
884
+
885
+ const SITE_URL = (
886
+ import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
887
+ ).replace(/\/$/, "");
888
+
889
+ export const Route = createFileRoute("/sitemap.xml")({
890
+ server: {
891
+ handlers: {
892
+ GET: async () => {
893
+ const sitemap = generateSitemap(
894
+ [
895
+ { path: "/", changefreq: "daily", priority: 1.0 },
896
+ { path: "/about", changefreq: "monthly", priority: 0.8 },
897
+ ],
898
+ { siteUrl: SITE_URL }
899
+ );
900
+
901
+ return new Response(sitemap, {
902
+ headers: { "Content-Type": "application/xml" },
903
+ });
904
+ },
905
+ },
906
+ },
907
+ });
931
908
  ```
932
909
 
933
- </Tab>
934
- </Tabs>
910
+ ---
911
+
912
+ ### 第十七步:TypeScript 配置 (可选)
913
+
914
+ Intlayer 通过模块扩充来利用 TypeScript 的优势,增强您的代码库。
915
+
916
+ 确保自动生成的类型已包含在您的 TypeScript 配置中。
917
+
918
+ ```json5 fileName="tsconfig.json"
919
+ {
920
+ // ... 现有配置
921
+ include: [
922
+ // ... 现有包含
923
+ ".intlayer/**/*.ts", // 包含自动生成的类型
924
+ ],
925
+ }
926
+ ```
935
927
 
936
928
  ---
937
929
 
@@ -409,7 +409,6 @@ export class MyElement extends LitElement {
409
409
  }
410
410
  ```
411
411
 
412
- > [!NOTE]
413
412
  > 当您在原生 HTML 属性(例如 `alt`、`aria-label`、`title`)中需要翻译后的字符串时,请在叶节点上调用 `.value`:
414
413
  >
415
414
  > ```typescript
@@ -313,7 +313,6 @@ const App: Component = () => (
313
313
  export default App;
314
314
  ```
315
315
 
316
- > [!NOTE]
317
316
  > 在 Solid 中,`useIntlayer` 返回一个 **accessor** 函数(例如,`content()`)。您必须调用此函数才能访问响应式内容。
318
317
 
319
318
  > 如果您想在 `string` 属性(如 `alt`、`title`、`href`、`aria-label` 等)中使用您的内容,必须调用函数的值,例如:
@@ -232,7 +232,7 @@ module.exports = appContent;
232
232
  <!-- 以简单内容渲染内容 -->
233
233
  <h1>{$content.title}</h1>
234
234
  <!-- 使用编辑器渲染可编辑内容 -->
235
- <h1><svelte:component this={$content.title} /></h1>
235
+ <h1>{@const Title = $content.title}<Title /></h1>
236
236
  <!-- 以字符串形式渲染内容 -->
237
237
  <div aria-label={$content.title.value}></div>
238
238
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/docs",
3
- "version": "8.5.2",
3
+ "version": "8.6.0",
4
4
  "private": false,
5
5
  "description": "Intlayer documentation",
6
6
  "keywords": [
@@ -72,22 +72,22 @@
72
72
  "watch": "webpack --config ./webpack.config.ts --watch"
73
73
  },
74
74
  "dependencies": {
75
- "@intlayer/config": "8.5.1",
76
- "@intlayer/core": "8.5.2",
77
- "@intlayer/types": "8.5.2"
75
+ "@intlayer/config": "8.6.0",
76
+ "@intlayer/core": "8.6.0",
77
+ "@intlayer/types": "8.6.0"
78
78
  },
79
79
  "devDependencies": {
80
- "@intlayer/api": "8.5.2",
81
- "@intlayer/cli": "8.5.2",
80
+ "@intlayer/api": "8.6.0",
81
+ "@intlayer/cli": "8.6.0",
82
82
  "@types/node": "25.5.0",
83
83
  "@utils/ts-config": "1.0.4",
84
84
  "@utils/ts-config-types": "1.0.4",
85
85
  "@utils/tsdown-config": "1.0.4",
86
86
  "fast-glob": "3.3.3",
87
87
  "rimraf": "6.1.3",
88
- "tsdown": "0.21.4",
88
+ "tsdown": "0.21.7",
89
89
  "typescript": "6.0.2",
90
- "vitest": "4.1.1"
90
+ "vitest": "4.1.2"
91
91
  },
92
92
  "engines": {
93
93
  "node": ">=14.18"