@intlayer/docs 6.1.5 → 6.1.6

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 (284) hide show
  1. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +404 -173
  2. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +262 -113
  3. package/blog/en/intlayer_with_next-i18next.mdx +431 -0
  4. package/blog/en/intlayer_with_next-intl.mdx +335 -0
  5. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +463 -209
  6. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  7. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +185 -71
  8. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  9. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  10. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  11. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  12. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  13. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +36 -28
  14. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  15. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
  16. package/dist/cjs/generated/docs.entry.cjs +32 -0
  17. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  18. package/dist/esm/generated/docs.entry.mjs +32 -0
  19. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  20. package/dist/types/generated/docs.entry.d.ts +2 -0
  21. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  22. package/docs/ar/component_i18n.md +186 -0
  23. package/docs/ar/intlayer_with_angular.md +2 -2
  24. package/docs/ar/intlayer_with_astro.md +246 -0
  25. package/docs/ar/intlayer_with_create_react_app.md +3 -2
  26. package/docs/ar/intlayer_with_express.md +2 -2
  27. package/docs/ar/intlayer_with_nestjs.md +2 -2
  28. package/docs/ar/intlayer_with_nextjs_14.md +2 -2
  29. package/docs/ar/intlayer_with_nextjs_15.md +2 -2
  30. package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
  31. package/docs/ar/intlayer_with_nuxt.md +2 -2
  32. package/docs/ar/intlayer_with_react_native+expo.md +11 -20
  33. package/docs/ar/intlayer_with_react_router_v7.md +195 -241
  34. package/docs/ar/intlayer_with_tanstack.md +198 -272
  35. package/docs/ar/intlayer_with_vite+preact.md +9 -9
  36. package/docs/ar/intlayer_with_vite+react.md +7 -7
  37. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  38. package/docs/ar/vs_code_extension.md +48 -109
  39. package/docs/de/component_i18n.md +186 -0
  40. package/docs/de/intlayer_with_angular.md +2 -2
  41. package/docs/de/intlayer_with_astro.md +246 -0
  42. package/docs/de/intlayer_with_create_react_app.md +2 -2
  43. package/docs/de/intlayer_with_express.md +2 -2
  44. package/docs/de/intlayer_with_nestjs.md +2 -2
  45. package/docs/de/intlayer_with_nextjs_14.md +2 -2
  46. package/docs/de/intlayer_with_nextjs_15.md +2 -2
  47. package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
  48. package/docs/de/intlayer_with_nuxt.md +2 -2
  49. package/docs/de/intlayer_with_react_native+expo.md +11 -20
  50. package/docs/de/intlayer_with_react_router_v7.md +193 -242
  51. package/docs/de/intlayer_with_tanstack.md +194 -266
  52. package/docs/de/intlayer_with_vite+preact.md +9 -9
  53. package/docs/de/intlayer_with_vite+react.md +9 -9
  54. package/docs/de/intlayer_with_vite+vue.md +11 -11
  55. package/docs/de/packages/vite-intlayer/index.md +3 -3
  56. package/docs/de/vs_code_extension.md +46 -107
  57. package/docs/en/component_i18n.md +186 -0
  58. package/docs/en/how_works_intlayer.md +1 -1
  59. package/docs/en/index.md +1 -1
  60. package/docs/en/intlayer_cli.md +1 -1
  61. package/docs/en/intlayer_with_angular.md +4 -4
  62. package/docs/en/intlayer_with_astro.md +246 -0
  63. package/docs/en/intlayer_with_create_react_app.md +4 -4
  64. package/docs/en/intlayer_with_express.md +3 -3
  65. package/docs/en/intlayer_with_lynx+react.md +1 -1
  66. package/docs/en/intlayer_with_nestjs.md +2 -2
  67. package/docs/en/intlayer_with_nextjs_14.md +31 -5
  68. package/docs/en/intlayer_with_nextjs_15.md +31 -5
  69. package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
  70. package/docs/en/intlayer_with_nuxt.md +4 -4
  71. package/docs/en/intlayer_with_react_native+expo.md +46 -24
  72. package/docs/en/intlayer_with_react_router_v7.md +164 -211
  73. package/docs/en/intlayer_with_tanstack.md +166 -241
  74. package/docs/en/intlayer_with_vite+preact.md +12 -12
  75. package/docs/en/intlayer_with_vite+react.md +12 -12
  76. package/docs/en/intlayer_with_vite+solid.md +2 -2
  77. package/docs/en/intlayer_with_vite+svelte.md +2 -2
  78. package/docs/en/intlayer_with_vite+vue.md +12 -12
  79. package/docs/en/introduction.md +1 -1
  80. package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
  81. package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
  82. package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
  83. package/docs/en/packages/react-intlayer/useI18n.md +1 -1
  84. package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
  85. package/docs/en/releases/v6.md +1 -0
  86. package/docs/en/roadmap.md +1 -1
  87. package/docs/en/vs_code_extension.md +24 -114
  88. package/docs/en-GB/component_i18n.md +186 -0
  89. package/docs/en-GB/intlayer_with_angular.md +3 -3
  90. package/docs/en-GB/intlayer_with_astro.md +246 -0
  91. package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
  92. package/docs/en-GB/intlayer_with_express.md +2 -2
  93. package/docs/en-GB/intlayer_with_nestjs.md +2 -2
  94. package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
  95. package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
  96. package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
  97. package/docs/en-GB/intlayer_with_nuxt.md +2 -2
  98. package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
  99. package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
  100. package/docs/en-GB/intlayer_with_tanstack.md +174 -248
  101. package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
  102. package/docs/en-GB/intlayer_with_vite+react.md +9 -9
  103. package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
  104. package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
  105. package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
  106. package/docs/en-GB/vs_code_extension.md +42 -103
  107. package/docs/es/component_i18n.md +182 -0
  108. package/docs/es/intlayer_with_angular.md +2 -2
  109. package/docs/es/intlayer_with_astro.md +246 -0
  110. package/docs/es/intlayer_with_create_react_app.md +3 -2
  111. package/docs/es/intlayer_with_express.md +2 -2
  112. package/docs/es/intlayer_with_nextjs_14.md +2 -2
  113. package/docs/es/intlayer_with_nextjs_15.md +2 -2
  114. package/docs/es/intlayer_with_react_native+expo.md +11 -20
  115. package/docs/es/intlayer_with_react_router_v7.md +188 -232
  116. package/docs/es/intlayer_with_tanstack.md +203 -273
  117. package/docs/es/intlayer_with_vite+preact.md +7 -7
  118. package/docs/es/intlayer_with_vite+react.md +7 -7
  119. package/docs/es/intlayer_with_vite+vue.md +9 -9
  120. package/docs/es/vs_code_extension.md +53 -114
  121. package/docs/fr/component_i18n.md +186 -0
  122. package/docs/fr/intlayer_with_angular.md +2 -2
  123. package/docs/fr/intlayer_with_astro.md +246 -0
  124. package/docs/fr/intlayer_with_create_react_app.md +3 -2
  125. package/docs/fr/intlayer_with_express.md +2 -2
  126. package/docs/fr/intlayer_with_nestjs.md +2 -2
  127. package/docs/fr/intlayer_with_nextjs_14.md +2 -2
  128. package/docs/fr/intlayer_with_react_native+expo.md +11 -20
  129. package/docs/fr/intlayer_with_react_router_v7.md +188 -248
  130. package/docs/fr/intlayer_with_tanstack.md +192 -265
  131. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  132. package/docs/fr/intlayer_with_vite+react.md +7 -7
  133. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  134. package/docs/fr/vs_code_extension.md +50 -111
  135. package/docs/hi/component_i18n.md +186 -0
  136. package/docs/hi/intlayer_cli.md +1 -4
  137. package/docs/hi/intlayer_with_angular.md +2 -2
  138. package/docs/hi/intlayer_with_astro.md +246 -0
  139. package/docs/hi/intlayer_with_create_react_app.md +2 -2
  140. package/docs/hi/intlayer_with_express.md +2 -2
  141. package/docs/hi/intlayer_with_nestjs.md +2 -2
  142. package/docs/hi/intlayer_with_nextjs_14.md +2 -2
  143. package/docs/hi/intlayer_with_nextjs_15.md +2 -2
  144. package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
  145. package/docs/hi/intlayer_with_nuxt.md +2 -2
  146. package/docs/hi/intlayer_with_react_native+expo.md +11 -20
  147. package/docs/hi/intlayer_with_react_router_v7.md +199 -243
  148. package/docs/hi/intlayer_with_tanstack.md +210 -285
  149. package/docs/hi/intlayer_with_vite+preact.md +9 -9
  150. package/docs/hi/intlayer_with_vite+react.md +9 -9
  151. package/docs/hi/intlayer_with_vite+solid.md +1 -1
  152. package/docs/hi/intlayer_with_vite+vue.md +11 -11
  153. package/docs/hi/vs_code_extension.md +49 -110
  154. package/docs/it/component_i18n.md +186 -0
  155. package/docs/it/intlayer_with_angular.md +2 -2
  156. package/docs/it/intlayer_with_astro.md +246 -0
  157. package/docs/it/intlayer_with_create_react_app.md +3 -2
  158. package/docs/it/intlayer_with_express.md +2 -2
  159. package/docs/it/intlayer_with_nestjs.md +2 -2
  160. package/docs/it/intlayer_with_nextjs_14.md +2 -2
  161. package/docs/it/intlayer_with_nextjs_15.md +2 -2
  162. package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
  163. package/docs/it/intlayer_with_nuxt.md +2 -2
  164. package/docs/it/intlayer_with_react_native+expo.md +11 -21
  165. package/docs/it/intlayer_with_react_router_v7.md +195 -242
  166. package/docs/it/intlayer_with_tanstack.md +203 -267
  167. package/docs/it/intlayer_with_vite+preact.md +9 -9
  168. package/docs/it/intlayer_with_vite+react.md +13 -11
  169. package/docs/it/intlayer_with_vite+vue.md +11 -11
  170. package/docs/it/vs_code_extension.md +50 -111
  171. package/docs/ja/component_i18n.md +186 -0
  172. package/docs/ja/intlayer_with_angular.md +2 -2
  173. package/docs/ja/intlayer_with_astro.md +246 -0
  174. package/docs/ja/intlayer_with_create_react_app.md +3 -2
  175. package/docs/ja/intlayer_with_express.md +2 -2
  176. package/docs/ja/intlayer_with_nestjs.md +2 -2
  177. package/docs/ja/intlayer_with_nextjs_14.md +2 -2
  178. package/docs/ja/intlayer_with_nextjs_15.md +2 -2
  179. package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
  180. package/docs/ja/intlayer_with_nuxt.md +2 -2
  181. package/docs/ja/intlayer_with_react_native+expo.md +18 -29
  182. package/docs/ja/intlayer_with_react_router_v7.md +204 -250
  183. package/docs/ja/intlayer_with_tanstack.md +218 -286
  184. package/docs/ja/intlayer_with_vite+preact.md +9 -9
  185. package/docs/ja/intlayer_with_vite+react.md +11 -11
  186. package/docs/ja/intlayer_with_vite+vue.md +11 -11
  187. package/docs/ja/vs_code_extension.md +50 -111
  188. package/docs/ko/component_i18n.md +186 -0
  189. package/docs/ko/intlayer_with_angular.md +2 -2
  190. package/docs/ko/intlayer_with_astro.md +246 -0
  191. package/docs/ko/intlayer_with_create_react_app.md +3 -2
  192. package/docs/ko/intlayer_with_express.md +2 -2
  193. package/docs/ko/intlayer_with_nestjs.md +2 -2
  194. package/docs/ko/intlayer_with_nextjs_14.md +2 -2
  195. package/docs/ko/intlayer_with_nextjs_15.md +2 -2
  196. package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
  197. package/docs/ko/intlayer_with_nuxt.md +2 -2
  198. package/docs/ko/intlayer_with_react_native+expo.md +19 -28
  199. package/docs/ko/intlayer_with_react_router_v7.md +190 -244
  200. package/docs/ko/intlayer_with_tanstack.md +200 -270
  201. package/docs/ko/intlayer_with_vite+preact.md +9 -9
  202. package/docs/ko/intlayer_with_vite+react.md +9 -9
  203. package/docs/ko/intlayer_with_vite+vue.md +11 -11
  204. package/docs/ko/vs_code_extension.md +48 -109
  205. package/docs/pt/component_i18n.md +186 -0
  206. package/docs/pt/intlayer_with_angular.md +2 -2
  207. package/docs/pt/intlayer_with_astro.md +246 -0
  208. package/docs/pt/intlayer_with_create_react_app.md +3 -2
  209. package/docs/pt/intlayer_with_express.md +2 -2
  210. package/docs/pt/intlayer_with_nestjs.md +2 -2
  211. package/docs/pt/intlayer_with_nextjs_14.md +2 -2
  212. package/docs/pt/intlayer_with_nextjs_15.md +2 -2
  213. package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
  214. package/docs/pt/intlayer_with_nuxt.md +2 -2
  215. package/docs/pt/intlayer_with_react_native+expo.md +11 -20
  216. package/docs/pt/intlayer_with_react_router_v7.md +7 -13
  217. package/docs/pt/intlayer_with_tanstack.md +183 -258
  218. package/docs/pt/intlayer_with_vite+preact.md +9 -9
  219. package/docs/pt/intlayer_with_vite+react.md +9 -9
  220. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  221. package/docs/pt/vs_code_extension.md +46 -107
  222. package/docs/ru/component_i18n.md +186 -0
  223. package/docs/ru/intlayer_with_angular.md +2 -2
  224. package/docs/ru/intlayer_with_astro.md +246 -0
  225. package/docs/ru/intlayer_with_create_react_app.md +3 -2
  226. package/docs/ru/intlayer_with_express.md +2 -2
  227. package/docs/ru/intlayer_with_nestjs.md +2 -2
  228. package/docs/ru/intlayer_with_nextjs_14.md +2 -2
  229. package/docs/ru/intlayer_with_nextjs_15.md +2 -2
  230. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  231. package/docs/ru/intlayer_with_nuxt.md +2 -2
  232. package/docs/ru/intlayer_with_react_native+expo.md +11 -20
  233. package/docs/ru/intlayer_with_react_router_v7.md +192 -238
  234. package/docs/ru/intlayer_with_tanstack.md +197 -269
  235. package/docs/ru/intlayer_with_vite+preact.md +9 -9
  236. package/docs/ru/intlayer_with_vite+react.md +9 -9
  237. package/docs/ru/intlayer_with_vite+vue.md +11 -11
  238. package/docs/ru/vs_code_extension.md +48 -109
  239. package/docs/tr/component_i18n.md +186 -0
  240. package/docs/tr/how_works_intlayer.md +1 -1
  241. package/docs/tr/index.md +1 -1
  242. package/docs/tr/intlayer_cli.md +1 -1
  243. package/docs/tr/intlayer_with_angular.md +4 -4
  244. package/docs/tr/intlayer_with_astro.md +246 -0
  245. package/docs/tr/intlayer_with_create_react_app.md +4 -4
  246. package/docs/tr/intlayer_with_express.md +3 -3
  247. package/docs/tr/intlayer_with_lynx+react.md +1 -1
  248. package/docs/tr/intlayer_with_nestjs.md +2 -2
  249. package/docs/tr/intlayer_with_nextjs_14.md +2 -2
  250. package/docs/tr/intlayer_with_nextjs_15.md +4 -4
  251. package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
  252. package/docs/tr/intlayer_with_nuxt.md +4 -4
  253. package/docs/tr/intlayer_with_react_native+expo.md +12 -21
  254. package/docs/tr/intlayer_with_react_router_v7.md +222 -267
  255. package/docs/tr/intlayer_with_tanstack.md +400 -303
  256. package/docs/tr/intlayer_with_vite+preact.md +12 -12
  257. package/docs/tr/intlayer_with_vite+react.md +12 -12
  258. package/docs/tr/intlayer_with_vite+solid.md +2 -2
  259. package/docs/tr/intlayer_with_vite+svelte.md +2 -2
  260. package/docs/tr/intlayer_with_vite+vue.md +12 -12
  261. package/docs/tr/introduction.md +1 -1
  262. package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
  263. package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
  264. package/docs/tr/roadmap.md +1 -1
  265. package/docs/tr/vs_code_extension.md +54 -115
  266. package/docs/zh/component_i18n.md +186 -0
  267. package/docs/zh/intlayer_with_angular.md +2 -2
  268. package/docs/zh/intlayer_with_astro.md +246 -0
  269. package/docs/zh/intlayer_with_create_react_app.md +3 -2
  270. package/docs/zh/intlayer_with_express.md +2 -2
  271. package/docs/zh/intlayer_with_nestjs.md +2 -2
  272. package/docs/zh/intlayer_with_nextjs_14.md +2 -2
  273. package/docs/zh/intlayer_with_nextjs_15.md +2 -2
  274. package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
  275. package/docs/zh/intlayer_with_nuxt.md +2 -2
  276. package/docs/zh/intlayer_with_react_native+expo.md +19 -28
  277. package/docs/zh/intlayer_with_react_router_v7.md +200 -248
  278. package/docs/zh/intlayer_with_tanstack.md +208 -283
  279. package/docs/zh/intlayer_with_vite+preact.md +9 -9
  280. package/docs/zh/intlayer_with_vite+react.md +9 -9
  281. package/docs/zh/intlayer_with_vite+vue.md +9 -9
  282. package/docs/zh/vs_code_extension.md +51 -105
  283. package/package.json +10 -10
  284. package/src/generated/docs.entry.ts +32 -0
@@ -0,0 +1,186 @@
1
+ ---
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2025-09-30
4
+ title: 在 React 和 Next.js 中制作多语言(i18n)组件
5
+ description: 学习如何声明和获取本地化内容,以使用 Intlayer 构建多语言 React 或 Next.js 组件。
6
+ keywords:
7
+ - i18n
8
+ - 组件
9
+ - react
10
+ - 多语言
11
+ - next.js
12
+ - intlayer
13
+ slugs:
14
+ - doc
15
+ - component
16
+ - i18n
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
18
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
19
+ ---
20
+
21
+ # 如何使用 Intlayer 制作多语言(i18n)组件
22
+
23
+ 本指南展示了在两种常见环境中制作多语言 UI 组件的最简步骤:
24
+
25
+ - React(Vite/单页应用)
26
+ - Next.js(应用路由)
27
+
28
+ 您将首先声明内容,然后在组件中获取内容。
29
+
30
+ ## 1) 声明您的内容(适用于 React 和 Next.js)
31
+
32
+ 在组件附近创建一个内容声明文件。这可以让翻译内容靠近使用位置,并且支持类型安全。
33
+
34
+ ```ts fileName="component.content.ts"
35
+ import { t, type Dictionary } from "intlayer";
36
+
37
+ const componentContent = {
38
+ key: "component-example",
39
+ content: {
40
+ title: t({
41
+ en: "Hello",
42
+ fr: "Bonjour",
43
+ es: "Hola",
44
+ }),
45
+ description: t({
46
+ en: "A multilingual React component",
47
+ fr: "Un composant React multilingue",
48
+ es: "Un componente React multilingüe",
49
+ }),
50
+ },
51
+ } satisfies Dictionary;
52
+
53
+ export default componentContent;
54
+ ```
55
+
56
+ 如果您更喜欢配置文件,也支持 JSON 格式。
57
+
58
+ ```json fileName="component.content.json"
59
+ {
60
+ "$schema": "https://intlayer.org/schema.json",
61
+ "key": "component-example",
62
+ "content": {
63
+ "title": {
64
+ "nodeType": "translation",
65
+ "translation": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }
66
+ },
67
+ "description": {
68
+ "nodeType": "translation",
69
+ "translation": {
70
+ "en": "一个多语言的 React 组件",
71
+ "fr": "Un composant React multilingue",
72
+ "es": "Un componente React multilingüe"
73
+ }
74
+ }
75
+ }
76
+ }
77
+ ```
78
+
79
+ ## 2) 获取您的内容
80
+
81
+ ### 情况 A — React 应用 (Vite/SPA)
82
+
83
+ 默认方法:使用 `useIntlayer` 通过键来获取内容。这使组件保持简洁且类型安全。
84
+
85
+ ```tsx fileName="ComponentExample.tsx"
86
+ import { useIntlayer } from "react-intlayer";
87
+
88
+ export function ComponentExample() {
89
+ const content = useIntlayer("component-example");
90
+ return (
91
+ <div>
92
+ <h1>{content.title}</h1>
93
+ <p>{content.description}</p>
94
+ </div>
95
+ );
96
+ }
97
+ ```
98
+
99
+ 服务器端渲染或在提供者外部使用时:使用 `react-intlayer/server`,并在需要时传入明确的 `locale`。
100
+
101
+ ```tsx fileName="ServerRenderedExample.tsx"
102
+ import { useIntlayer } from "react-intlayer/server";
103
+
104
+ export function ServerRenderedExample({ locale }: { locale: string }) {
105
+ const content = useIntlayer("component-example", locale);
106
+ return (
107
+ <>
108
+ <h1>{content.title}</h1>
109
+ <p>{content.description}</p>
110
+ </>
111
+ );
112
+ }
113
+ ```
114
+
115
+ 另一种方式:如果你更喜欢在调用处组织结构,可以使用 `useDictionary` 读取整个声明的对象。
116
+
117
+ ```tsx fileName="ComponentWithDictionary.tsx"
118
+ import { useDictionary } from "react-intlayer";
119
+ import componentContent from "./component.content";
120
+
121
+ export function ComponentWithDictionary() {
122
+ const { title, description } = useDictionary(componentContent);
123
+ return (
124
+ <div>
125
+ <h1>{title}</h1>
126
+ <p>{description}</p>
127
+ </div>
128
+ );
129
+ }
130
+ ```
131
+
132
+ ### 方案 B — Next.js(App 路由)
133
+
134
+ 优先使用服务器组件以确保数据安全和性能。在服务器文件中使用来自 `next-intlayer/server` 的 `useIntlayer`,在客户端组件中使用来自 `next-intlayer` 的 `useIntlayer`。
135
+
136
+ ```tsx fileName="app/[locale]/example/ServerComponent.tsx"
137
+ import { useIntlayer } from "next-intlayer/server";
138
+
139
+ export default function ServerComponent() {
140
+ const content = useIntlayer("component-example");
141
+ return (
142
+ <>
143
+ <h1>{content.title}</h1>
144
+ <p>{content.description}</p>
145
+ </>
146
+ );
147
+ }
148
+ ```
149
+
150
+ ```tsx fileName="app/[locale]/example/ClientComponent.tsx"
151
+ "use client";
152
+
153
+ import { useIntlayer } from "next-intlayer";
154
+
155
+ export function ClientComponent() {
156
+ const content = useIntlayer("component-example");
157
+ return (
158
+ <div>
159
+ <h1>{content.title}</h1>
160
+ <p>{content.description}</p>
161
+ </div>
162
+ );
163
+ }
164
+ ```
165
+
166
+ 提示:对于页面元数据和 SEO,您还可以使用 `getIntlayer` 获取内容,并通过 `getMultilingualUrls` 生成多语言 URL。
167
+
168
+ ## 为什么 Intlayer 的组件方法是最佳选择
169
+
170
+ - **内容共置**:内容声明与组件紧密相邻,减少偏差并提升设计系统中的复用性。
171
+ - **类型安全**:键和值结构均为强类型;缺失的翻译会在构建时而非运行时暴露。
172
+ - **服务器优先**:原生支持服务器组件,提升安全性和性能;客户端钩子依然保持良好的使用体验。
173
+ - **摇树优化**:仅打包组件实际使用的内容,保持大型应用的负载体积小。
174
+ - **开发体验与工具**:内置中间件、SEO助手,以及可选的可视化编辑器/AI翻译,简化日常工作流程。
175
+
176
+ 请参阅针对 Next.js 的对比和模式总结:https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
177
+
178
+ ## 相关指南和参考资料
179
+
180
+ - React 设置(Vite):https://intlayer.org/doc/environment/vite-and-react
181
+ - React Router v7:https://intlayer.org/doc/environment/vite-and-react/react-router-v7
182
+ - TanStack 入门:https://intlayer.org/doc/environment/vite-and-react/tanstack-start
183
+ - Next.js 设置:https://intlayer.org/doc/environment/nextjs
184
+ - 为什么选择 Intlayer 而不是 next-intl 或 next-i18next:https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
185
+
186
+ 这些页面包含端到端的设置、提供者、路由和 SEO 辅助工具。
@@ -664,9 +664,9 @@ export const appConfig: ApplicationConfig = {
664
664
 
665
665
  Intlayer 使用模块增强来利用 TypeScript 的优势,使你的代码库更健壮。
666
666
 
667
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
667
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
668
668
 
669
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
669
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
670
670
 
671
671
  确保你的 TypeScript 配置包含自动生成的类型。
672
672
 
@@ -0,0 +1,246 @@
1
+ ---
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2025-10-03
4
+ title: 在 Astro 中使用 Intlayer 入门
5
+ description: 学习如何使用 Intlayer 为您的 Vite 和 React 应用添加国际化(i18n)。按照本指南使您的应用支持多语言。
6
+ keywords:
7
+ - 国际化
8
+ - 文档
9
+ - Intlayer
10
+ - Vite
11
+ - React
12
+ - i18n
13
+ - JavaScript
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - astro
18
+ applicationTemplate: https://github.com/aymericzip/intlayer-astro-template
19
+ ---
20
+
21
+ # 使用 Intlayer 和 Astro 开始国际化(i18n)
22
+
23
+ 请参阅 GitHub 上的[应用模板](https://github.com/aymericzip/intlayer-astro-template)。
24
+
25
+ ## 什么是 Intlayer?
26
+
27
+ **Intlayer** 是一个创新的开源国际化(i18n)库,旨在简化现代 Web 应用中的多语言支持。
28
+
29
+ 使用 Intlayer,您可以:
30
+
31
+ - **通过组件级声明式字典轻松管理翻译**。
32
+ - **动态本地化元数据、路由和内容**。
33
+ - **确保 TypeScript 支持**,通过自动生成类型,提升自动补全和错误检测能力。
34
+ - **享受高级功能**,如动态语言环境检测和切换。
35
+
36
+ ---
37
+
38
+ ## 在 Astro 中设置 Intlayer 的分步指南
39
+
40
+ ### 第一步:安装依赖
41
+
42
+ 使用您的包管理器安装必要的包:
43
+
44
+ ```bash packageManager="npm"
45
+ npm install intlayer astro-intlayer
46
+ # 可选:添加 React 岛屿支持
47
+ npm install react react-dom react-intlayer @astrojs/react
48
+ ```
49
+
50
+ ```bash packageManager="pnpm"
51
+ pnpm add intlayer astro-intlayer
52
+ # 可选:添加 React 岛屿支持
53
+ pnpm add react react-dom react-intlayer @astrojs/react
54
+ ```
55
+
56
+ ```bash packageManager="yarn"
57
+ yarn add intlayer astro-intlayer
58
+ # 可选:添加 React 岛屿支持
59
+ yarn add react react-dom react-intlayer @astrojs/react
60
+ ```
61
+
62
+ - **intlayer**
63
+ 核心包,提供国际化工具,用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/get_started.md)、转译以及[命令行工具](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_cli.md)。
64
+
65
+ - **astro-intlayer**
66
+ 包括用于将 Intlayer 与 [Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production) 集成的 Astro 集成插件,以及用于检测用户首选语言环境、管理 Cookie 和处理 URL 重定向的中间件。
67
+
68
+ ### 第 2 步:配置您的项目
69
+
70
+ 创建一个配置文件来配置您的应用程序语言:
71
+
72
+ ```typescript fileName="intlayer.config.ts"
73
+ import { Locales, type IntlayerConfig } from "intlayer";
74
+
75
+ const config: IntlayerConfig = {
76
+ internationalization: {
77
+ locales: [
78
+ Locales.ENGLISH,
79
+ Locales.FRENCH,
80
+ Locales.SPANISH,
81
+ // 您的其他语言环境
82
+ ],
83
+ defaultLocale: Locales.ENGLISH,
84
+ },
85
+ };
86
+
87
+ export default config;
88
+ ```
89
+
90
+ > 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
91
+
92
+ ### 第三步:在您的 Astro 配置中集成 Intlayer
93
+
94
+ 将 intlayer 插件添加到您的配置中。
95
+
96
+ ```typescript fileName="astro.config.ts"
97
+ // @ts-check
98
+
99
+ import { intlayer } from "astro-intlayer";
100
+ import { defineConfig } from "astro/config";
101
+
102
+ // https://astro.build/config
103
+ export default defineConfig({
104
+ integrations: [intlayer()],
105
+ });
106
+ ```
107
+
108
+ > `intlayer()` Astro 集成插件用于将 Intlayer 与 Astro 集成。它确保内容声明文件的构建,并在开发模式下监控这些文件。在 Astro 应用中定义了 Intlayer 环境变量。此外,它还提供别名以优化性能。
109
+
110
+ ### 第4步:声明您的内容
111
+
112
+ 创建并管理您的内容声明以存储翻译:
113
+
114
+ ```tsx fileName="src/app.content.tsx"
115
+ import { t, type Dictionary } from "intlayer";
116
+ import type { ReactNode } from "react";
117
+
118
+ const appContent = {
119
+ key: "app",
120
+ content: {
121
+ title: t({
122
+ en: "Hello World",
123
+ fr: "Bonjour le monde",
124
+ es: "Hola mundo",
125
+ }),
126
+ },
127
+ } satisfies Dictionary;
128
+
129
+ export default appContent;
130
+ ```
131
+
132
+ > 您的内容声明可以定义在应用程序中的任何位置,只要它们被包含在 `contentDir` 目录中(默认是 `./src`)。并且文件扩展名需匹配内容声明文件扩展名(默认是 `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)。
133
+
134
+ > 更多详情,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/get_started.md)。
135
+
136
+ ### 第5步:在 Astro 中使用您的内容
137
+
138
+ 您可以直接在 `.astro` 文件中使用 `intlayer` 导出的核心辅助函数来消费字典。
139
+
140
+ ```astro fileName="src/pages/index.astro"
141
+ <!-- astro -->
142
+ ---
143
+ import { getIntlayer } from "intlayer";
144
+ import appContent from "../app.content";
145
+
146
+ const { title } = getIntlayer('app');
147
+ ---
148
+
149
+ <html lang="en">
150
+ <head>
151
+ <meta charset="utf-8" />
152
+ <meta name="viewport" content="width=device-width" />
153
+ <title>{title}</title>
154
+ </head>
155
+ <body>
156
+ <h1>{title}</h1>
157
+ </body>
158
+ </html>
159
+ ```
160
+
161
+ ### 第6步:本地化路由
162
+
163
+ 创建一个动态路由段来服务本地化页面,例如 `src/pages/[locale]/index.astro`:
164
+
165
+ ```astro fileName="src/pages/[locale]/index.astro"
166
+ <!-- astro -->
167
+ ---
168
+ import { getIntlayer } from "intlayer";
169
+
170
+ const { title } = getIntlayer('app');
171
+ ---
172
+
173
+ <h1>{title}</h1>
174
+ ```
175
+
176
+ Astro 集成在开发期间添加了一个 Vite 中间件,帮助处理基于语言环境的路由和环境定义。你仍然可以使用自己的逻辑或 `intlayer` 提供的工具函数如 `getLocalizedUrl` 来实现语言环境间的链接。
177
+
178
+ ### 第7步:继续使用你喜欢的框架
179
+
180
+ 继续使用您喜欢的框架来构建您的应用程序。
181
+
182
+ - Intlayer + React: [Intlayer 与 React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+react.md)
183
+ - Intlayer + Vue: [Intlayer 与 Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+vue.md)
184
+ - Intlayer + Svelte: [Intlayer 与 Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+svelte.md)
185
+ - Intlayer + Solid: [Intlayer 与 Solid](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+solid.md)
186
+ - Intlayer + Preact: [Intlayer 与 Preact](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+preact.md)
187
+
188
+ ### 配置 TypeScript
189
+
190
+ Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更强大。
191
+
192
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
193
+
194
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
195
+
196
+ 确保您的 TypeScript 配置包含自动生成的类型。
197
+
198
+ ```json5 fileName="tsconfig.json"
199
+ {
200
+ // ... 您现有的 TypeScript 配置
201
+ "include": [
202
+ // ... 您现有的 TypeScript 配置
203
+ ".intlayer/**/*.ts", // 包含自动生成的类型
204
+ ],
205
+ }
206
+ ```
207
+
208
+ ### Git 配置
209
+
210
+ 建议忽略 Intlayer 生成的文件。这样可以避免将它们提交到您的 Git 仓库中。
211
+
212
+ 要做到这一点,您可以将以下指令添加到您的 `.gitignore` 文件中:
213
+
214
+ ```plaintext
215
+ # 忽略 Intlayer 生成的文件
216
+ .intlayer
217
+ ```
218
+
219
+ ### VS Code 扩展
220
+
221
+ 为了提升您使用 Intlayer 的开发体验,您可以安装官方的 **Intlayer VS Code 扩展**。
222
+
223
+ [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
224
+
225
+ 该扩展提供:
226
+
227
+ - 翻译键的 **自动补全**。
228
+ - 缺失翻译的 **实时错误检测**。
229
+ - 翻译内容的 **内联预览**。
230
+ - 轻松创建和更新翻译的 **快速操作**。
231
+
232
+ 有关如何使用该扩展的更多详细信息,请参阅 [Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension)。
233
+
234
+ ---
235
+
236
+ ### 深入探索
237
+
238
+ 要进一步使用,您可以实现[可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)或使用[内容管理系统(CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)将内容外部化。
239
+
240
+ ---
241
+
242
+ ## 文档历史
243
+
244
+ | 版本 | 日期 | 变更内容 |
245
+ | ----- | ---------- | ------------------------------------- |
246
+ | 6.2.0 | 2025-10-03 | 针对 Astro 集成、配置和使用进行了更新 |
@@ -1195,9 +1195,10 @@ module.exports = App;
1195
1195
 
1196
1196
  Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更强大。
1197
1197
 
1198
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1198
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1199
+
1200
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1199
1201
 
1200
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1201
1202
  确保您的 TypeScript 配置包含自动生成的类型。
1202
1203
 
1203
1204
  ```json5 fileName="tsconfig.json"
@@ -367,9 +367,9 @@ module.exports = config;
367
367
 
368
368
  `express-intlayer` 利用 TypeScript 强大的功能来增强国际化过程。TypeScript 的静态类型确保每个翻译键都被考虑到,减少遗漏翻译的风险并提升可维护性。
369
369
 
370
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
370
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
371
371
 
372
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
372
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
373
373
 
374
374
  确保自动生成的类型(默认位于 ./types/intlayer.d.ts)已包含在你的 tsconfig.json 文件中。
375
375
 
@@ -219,9 +219,9 @@ export default config;
219
219
 
220
220
  `express-intlayer` 利用 TypeScript 强大的功能来增强国际化过程。TypeScript 的静态类型确保每个翻译键都被考虑到,减少了缺失翻译的风险,并提升了可维护性。
221
221
 
222
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
222
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
223
223
 
224
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
224
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
225
225
 
226
226
  确保自动生成的类型(默认位于 ./types/intlayer.d.ts)已包含在你的 tsconfig.json 文件中。
227
227
 
@@ -1427,9 +1427,9 @@ yarn add @intlayer/swc --save-dev
1427
1427
 
1428
1428
  Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更健壮。
1429
1429
 
1430
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1430
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1431
1431
 
1432
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1432
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1433
1433
 
1434
1434
  确保您的 TypeScript 配置包含自动生成的类型。
1435
1435
 
@@ -1483,9 +1483,9 @@ yarn add @intlayer/swc --save-dev
1483
1483
 
1484
1484
  Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更健壮。
1485
1485
 
1486
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1486
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1487
1487
 
1488
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1488
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1489
1489
 
1490
1490
  确保您的 TypeScript 配置包含自动生成的类型。
1491
1491
 
@@ -1425,9 +1425,9 @@ yarn add @intlayer/swc --save-dev
1425
1425
 
1426
1426
  Intlayer 使用模块增强(module augmentation)来利用 TypeScript 的优势,使您的代码库更健壮。
1427
1427
 
1428
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1428
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1429
1429
 
1430
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1430
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1431
1431
 
1432
1432
  确保您的 TypeScript 配置包含自动生成的类型。
1433
1433
 
@@ -785,9 +785,9 @@ module.exports = aboutMetaContent;
785
785
 
786
786
  Intlayer 使用模块增强来利用 TypeScript 的优势,使您的代码库更加强大。
787
787
 
788
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
788
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
789
789
 
790
- ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
790
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
791
791
 
792
792
  确保您的 TypeScript 配置包含自动生成的类型。
793
793
 
@@ -148,24 +148,23 @@ module.exports = (async () => {
148
148
 
149
149
  ## 第4步:添加 Intlayer 提供者
150
150
 
151
- 为了在整个应用程序中保持用户语言的同步,您需要使用 `react-intlayer` 中的 `IntlayerProvider` 组件包裹您的根组件。
151
+ 为了在您的应用程序中保持用户语言的同步,您需要使用来自 `react-intlayer-native` `IntlayerProvider` 组件包裹您的根组件。
152
152
 
153
- 此外,您还需要在 `index.js` 文件中添加 `intlayerPolyfill` 函数,以确保 Intlayer 能够正常工作。
153
+ > 请确保使用来自 `react-native-intlayer` 而不是 `react-intlayer` 的提供者。来自 `react-native-intlayer` 的导出包含了 web API 的 polyfills。
154
154
 
155
155
  ````tsx fileName="app/_layout.tsx" codeFormat="typescript"
156
156
  import { Stack } from "expo-router";
157
157
  import { getLocales } from "expo-localization";
158
- import { IntlayerProviderContent } from "react-intlayer";
159
- import { intlayerPolyfill } from "react-native-intlayer";
158
+ import { IntlayerProvider } from "react-native-intlayer";
160
159
  import { type FC } from "react";
161
160
 
162
- intlayerPolyfill();
161
+
163
162
 
164
163
  const getDeviceLocale = () => getLocales()[0]?.languageTag;
165
164
 
166
165
  const RootLayout: FC = () => {
167
166
  return (
168
- <IntlayerProviderContent defaultLocale={getDeviceLocale()}>
167
+ <IntlayerProvider defaultLocale={getDeviceLocale()}>
169
168
  <Stack>
170
169
  为了在您的应用程序中保持用户语言的同步,您需要使用来自 `react-intlayer` 的 `IntlayerProvider` 组件包裹您的根组件。
171
170
 
@@ -174,21 +173,20 @@ const RootLayout: FC = () => {
174
173
  ```tsx fileName="app/_layout.tsx" codeFormat="typescript"
175
174
  import { Stack } from "expo-router";
176
175
  import { getLocales } from "expo-localization";
177
- import { IntlayerProviderContent } from "react-intlayer";
178
- import { intlayerPolyfill } from "react-native-intlayer";
176
+ import { IntlayerProvider } from "react-native-intlayer";
179
177
  import { type FC } from "react";
180
178
 
181
- intlayerPolyfill();
179
+
182
180
 
183
181
  const getDeviceLocale = () => getLocales()[0]?.languageTag;
184
182
 
185
183
  const RootLayout: FC = () => {
186
184
  return (
187
- <IntlayerProviderContent defaultLocale={getDeviceLocale()}>
185
+ <IntlayerProvider defaultLocale={getDeviceLocale()}>
188
186
  <Stack>
189
187
  <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
190
188
  </Stack>
191
- </IntlayerProviderContent>
189
+ </IntlayerProvider>
192
190
  );
193
191
  };
194
192
 
@@ -198,20 +196,17 @@ export default RootLayout;
198
196
  ```jsx fileName="app/_layout.mjx" codeFormat="esm"
199
197
  import { Stack } from "expo-router";
200
198
  import { getLocales } from "expo-localization";
201
- import { IntlayerProviderContent } from "react-intlayer";
202
- import { intlayerPolyfill } from "react-native-intlayer";
203
-
204
- intlayerPolyfill();
199
+ import { IntlayerProvider } from "react-native-intlayer";
205
200
 
206
201
  const getDeviceLocale = () => getLocales()[0]?.languageTag;
207
202
 
208
203
  const RootLayout = () => {
209
204
  return (
210
- <IntlayerProviderContent defaultLocale={getDeviceLocale()}>
205
+ <IntlayerProvider defaultLocale={getDeviceLocale()}>
211
206
  <Stack>
212
207
  <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
213
208
  </Stack>
214
- </IntlayerProviderContent>
209
+ </IntlayerProvider>
215
210
  );
216
211
  };
217
212
 
@@ -221,20 +216,17 @@ export default RootLayout;
221
216
  ```jsx fileName="app/_layout.cjx" codeFormat="commonjs"
222
217
  const { Stack } = require("expo-router");
223
218
  const { getLocales } = require("expo-localization");
224
- const { IntlayerProviderContent } = require("react-intlayer");
225
- const { intlayerPolyfill } = require("react-native-intlayer");
226
-
227
- intlayerPolyfill();
219
+ const { IntlayerProvider } = require("react-native-intlayer");
228
220
 
229
221
  const getDeviceLocale = () => getLocales()[0]?.languageTag;
230
222
 
231
223
  const RootLayout = () => {
232
224
  return (
233
- <IntlayerProviderContent defaultLocale={getDeviceLocale()}>
225
+ <IntlayerProvider defaultLocale={getDeviceLocale()}>
234
226
  <Stack>
235
227
  <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
236
228
  </Stack>
237
- </IntlayerProviderContent>
229
+ </IntlayerProvider>
238
230
  );
239
231
  };
240
232
 
@@ -248,21 +240,20 @@ module.exports = RootLayout;
248
240
  ```jsx fileName="app/_layout.cjx" codeFormat="commonjs"
249
241
  const { Stack } = require("expo-router");
250
242
  const { getLocales } = require("expo-localization");
251
- const { IntlayerProviderContent } = require("react-intlayer");
252
- const { intlayerPolyfill } = require("react-native-intlayer");
243
+ const { IntlayerProvider } = require("react-native-intlayer");
244
+
253
245
 
254
- intlayerPolyfill();
255
246
 
256
247
  // 获取设备的语言环境
257
248
  const getDeviceLocale = () => getLocales()[0]?.languageTag;
258
249
 
259
250
  const RootLayout = () => {
260
251
  return (
261
- <IntlayerProviderContent defaultLocale={getDeviceLocale()}>
252
+ <IntlayerProvider defaultLocale={getDeviceLocale()}>
262
253
  <Stack>
263
254
  <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
264
255
  </Stack>
265
- </IntlayerProviderContent>
256
+ </IntlayerProvider>
266
257
  );
267
258
  };
268
259