@intlayer/docs 7.0.5 → 7.0.7

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 (145) hide show
  1. package/blog/ar/intlayer_with_i18next.md +72 -19
  2. package/blog/ar/intlayer_with_next-i18next.md +61 -36
  3. package/blog/ar/intlayer_with_next-intl.md +61 -13
  4. package/blog/ar/intlayer_with_react-i18next.md +67 -18
  5. package/blog/ar/intlayer_with_react-intl.md +66 -13
  6. package/blog/ar/intlayer_with_vue-i18n.md +180 -0
  7. package/blog/de/intlayer_with_i18next.md +61 -26
  8. package/blog/de/intlayer_with_next-i18next.md +66 -17
  9. package/blog/de/intlayer_with_next-intl.md +62 -13
  10. package/blog/de/intlayer_with_react-i18next.md +66 -17
  11. package/blog/de/intlayer_with_react-intl.md +66 -14
  12. package/blog/de/intlayer_with_vue-i18n.md +178 -0
  13. package/blog/en/intlayer_with_i18next.md +53 -2
  14. package/blog/en/intlayer_with_next-i18next.md +52 -16
  15. package/blog/en/intlayer_with_next-intl.md +49 -0
  16. package/blog/en/intlayer_with_react-i18next.md +50 -1
  17. package/blog/en/intlayer_with_react-intl.md +53 -0
  18. package/blog/en/intlayer_with_vue-i18n.md +178 -0
  19. package/blog/en-GB/intlayer_with_i18next.md +58 -7
  20. package/blog/en-GB/intlayer_with_next-i18next.md +55 -9
  21. package/blog/en-GB/intlayer_with_next-intl.md +55 -6
  22. package/blog/en-GB/intlayer_with_react-i18next.md +55 -6
  23. package/blog/en-GB/intlayer_with_react-intl.md +56 -3
  24. package/blog/en-GB/intlayer_with_vue-i18n.md +180 -0
  25. package/blog/es/intlayer_with_i18next.md +69 -18
  26. package/blog/es/intlayer_with_next-i18next.md +70 -24
  27. package/blog/es/intlayer_with_next-intl.md +64 -13
  28. package/blog/es/intlayer_with_react-i18next.md +61 -12
  29. package/blog/es/intlayer_with_react-intl.md +65 -12
  30. package/blog/es/intlayer_with_vue-i18n.md +178 -0
  31. package/blog/fr/intlayer_with_i18next.md +77 -16
  32. package/blog/fr/intlayer_with_next-i18next.md +55 -31
  33. package/blog/fr/intlayer_with_next-intl.md +57 -7
  34. package/blog/fr/intlayer_with_react-i18next.md +64 -7
  35. package/blog/fr/intlayer_with_react-intl.md +63 -10
  36. package/blog/fr/intlayer_with_vue-i18n.md +178 -0
  37. package/blog/hi/intlayer_with_i18next.md +67 -16
  38. package/blog/hi/intlayer_with_next-i18next.md +69 -23
  39. package/blog/hi/intlayer_with_next-intl.md +61 -8
  40. package/blog/hi/intlayer_with_react-i18next.md +63 -14
  41. package/blog/hi/intlayer_with_react-intl.md +66 -13
  42. package/blog/hi/intlayer_with_vue-i18n.md +180 -0
  43. package/blog/id/intlayer_with_i18next.md +65 -14
  44. package/blog/id/intlayer_with_next-i18next.md +58 -12
  45. package/blog/id/intlayer_with_next-intl.md +60 -11
  46. package/blog/id/intlayer_with_react-i18next.md +59 -10
  47. package/blog/id/intlayer_with_react-intl.md +66 -13
  48. package/blog/id/intlayer_with_vue-i18n.md +178 -0
  49. package/blog/it/intlayer_with_i18next.md +70 -19
  50. package/blog/it/intlayer_with_next-i18next.md +68 -22
  51. package/blog/it/intlayer_with_next-intl.md +62 -12
  52. package/blog/it/intlayer_with_react-i18next.md +65 -16
  53. package/blog/it/intlayer_with_react-intl.md +67 -14
  54. package/blog/it/intlayer_with_vue-i18n.md +178 -0
  55. package/blog/ja/intlayer_with_i18next.md +74 -24
  56. package/blog/ja/intlayer_with_next-i18next.md +60 -37
  57. package/blog/ja/intlayer_with_next-intl.md +63 -15
  58. package/blog/ja/intlayer_with_react-i18next.md +70 -21
  59. package/blog/ja/intlayer_with_react-intl.md +73 -21
  60. package/blog/ja/intlayer_with_vue-i18n.md +180 -0
  61. package/blog/ko/intlayer_with_i18next.md +60 -29
  62. package/blog/ko/intlayer_with_next-i18next.md +59 -32
  63. package/blog/ko/intlayer_with_next-intl.md +52 -23
  64. package/blog/ko/intlayer_with_react-i18next.md +65 -16
  65. package/blog/ko/intlayer_with_react-intl.md +74 -22
  66. package/blog/ko/intlayer_with_vue-i18n.md +180 -0
  67. package/blog/pl/intlayer_with_i18next.md +63 -12
  68. package/blog/pl/intlayer_with_next-i18next.md +74 -17
  69. package/blog/pl/intlayer_with_next-intl.md +59 -8
  70. package/blog/pl/intlayer_with_react-i18next.md +59 -10
  71. package/blog/pl/intlayer_with_react-intl.md +65 -12
  72. package/blog/pl/intlayer_with_vue-i18n.md +180 -0
  73. package/blog/pt/intlayer_with_i18next.md +67 -16
  74. package/blog/pt/intlayer_with_next-i18next.md +65 -19
  75. package/blog/pt/intlayer_with_next-intl.md +62 -12
  76. package/blog/pt/intlayer_with_react-i18next.md +67 -18
  77. package/blog/pt/intlayer_with_react-intl.md +62 -10
  78. package/blog/pt/intlayer_with_vue-i18n.md +178 -0
  79. package/blog/ru/intlayer_with_i18next.md +68 -15
  80. package/blog/ru/intlayer_with_next-i18next.md +71 -25
  81. package/blog/ru/intlayer_with_next-intl.md +56 -7
  82. package/blog/ru/intlayer_with_react-i18next.md +65 -16
  83. package/blog/ru/intlayer_with_react-intl.md +69 -16
  84. package/blog/ru/intlayer_with_vue-i18n.md +180 -0
  85. package/blog/tr/intlayer_with_i18next.md +67 -16
  86. package/blog/tr/intlayer_with_next-i18next.md +78 -21
  87. package/blog/tr/intlayer_with_next-intl.md +69 -18
  88. package/blog/tr/intlayer_with_react-i18next.md +65 -16
  89. package/blog/tr/intlayer_with_react-intl.md +71 -19
  90. package/blog/tr/intlayer_with_vue-i18n.md +180 -0
  91. package/blog/vi/intlayer_with_i18next.md +64 -13
  92. package/blog/vi/intlayer_with_next-i18next.md +72 -26
  93. package/blog/vi/intlayer_with_next-intl.md +62 -11
  94. package/blog/vi/intlayer_with_react-i18next.md +66 -17
  95. package/blog/vi/intlayer_with_react-intl.md +70 -17
  96. package/blog/vi/intlayer_with_vue-i18n.md +180 -0
  97. package/blog/zh/intlayer_with_i18next.md +67 -17
  98. package/blog/zh/intlayer_with_next-i18next.md +67 -22
  99. package/blog/zh/intlayer_with_next-intl.md +61 -13
  100. package/blog/zh/intlayer_with_react-i18next.md +67 -18
  101. package/blog/zh/intlayer_with_react-intl.md +69 -17
  102. package/blog/zh/intlayer_with_vue-i18n.md +180 -0
  103. package/dist/cjs/generated/blog.entry.cjs +19 -0
  104. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  105. package/dist/esm/generated/blog.entry.mjs +19 -0
  106. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  107. package/dist/types/generated/blog.entry.d.ts +1 -0
  108. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  109. package/docs/ar/intlayer_with_nextjs_15.md +36 -9
  110. package/docs/ar/intlayer_with_nextjs_16.md +36 -9
  111. package/docs/de/intlayer_with_nextjs_15.md +36 -9
  112. package/docs/de/intlayer_with_nextjs_16.md +24 -6
  113. package/docs/en/intlayer_with_nextjs_14.md +37 -9
  114. package/docs/en/intlayer_with_nextjs_15.md +40 -10
  115. package/docs/en/intlayer_with_nextjs_16.md +40 -10
  116. package/docs/en/plugins/sync-json.md +152 -55
  117. package/docs/en/releases/v7.md +1 -1
  118. package/docs/en-GB/intlayer_with_nextjs_15.md +36 -9
  119. package/docs/en-GB/intlayer_with_nextjs_16.md +36 -9
  120. package/docs/en-GB/releases/v7.md +1 -1
  121. package/docs/es/intlayer_with_nextjs_15.md +36 -9
  122. package/docs/es/intlayer_with_nextjs_16.md +36 -9
  123. package/docs/fr/intlayer_with_nextjs_15.md +36 -9
  124. package/docs/fr/intlayer_with_nextjs_16.md +37 -24
  125. package/docs/hi/intlayer_with_nextjs_15.md +36 -9
  126. package/docs/hi/intlayer_with_nextjs_16.md +36 -9
  127. package/docs/id/intlayer_with_nextjs_16.md +36 -9
  128. package/docs/it/intlayer_with_nextjs_15.md +36 -9
  129. package/docs/it/intlayer_with_nextjs_16.md +36 -9
  130. package/docs/ja/intlayer_with_nextjs_15.md +36 -9
  131. package/docs/ja/intlayer_with_nextjs_16.md +36 -9
  132. package/docs/ko/intlayer_with_nextjs_15.md +36 -9
  133. package/docs/ko/intlayer_with_nextjs_16.md +36 -9
  134. package/docs/pl/intlayer_with_nextjs_16.md +36 -9
  135. package/docs/pt/intlayer_with_nextjs_15.md +36 -9
  136. package/docs/pt/intlayer_with_nextjs_16.md +36 -9
  137. package/docs/ru/intlayer_with_nextjs_15.md +36 -9
  138. package/docs/ru/intlayer_with_nextjs_16.md +36 -9
  139. package/docs/tr/intlayer_with_nextjs_15.md +36 -9
  140. package/docs/tr/intlayer_with_nextjs_16.md +39 -21
  141. package/docs/vi/intlayer_with_nextjs_16.md +36 -9
  142. package/docs/zh/intlayer_with_nextjs_15.md +36 -9
  143. package/docs/zh/intlayer_with_nextjs_16.md +36 -9
  144. package/package.json +14 -14
  145. package/src/generated/blog.entry.ts +19 -0
@@ -18,6 +18,9 @@ slugs:
18
18
  - blog
19
19
  - intlayer-with-react-i18next
20
20
  history:
21
+ - version: 7.0.6
22
+ date: 2025-11-01
23
+ changes: 添加 loadJSON 插件
21
24
  - version: 7.0.0
22
25
  date: 2025-10-29
23
26
  changes: 更改为 syncJSON 插件
@@ -27,31 +30,32 @@ history:
27
30
 
28
31
  ## 什么是 Intlayer?
29
32
 
30
- **Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 React 应用提供了一种现代化的内容管理方法。
33
+ **Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 React 应用中的内容管理提供了一种现代化的方法。
31
34
 
32
- 请参阅我们博客文章中的具体对比:[react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md)。
35
+ 请参阅我们博客文章中的具体比较:[react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md)。
33
36
 
34
- ## 为什么要将 Intlayer 与 react-i18next 结合使用?
37
+ ## 为什么将 Intlayer 与 react-i18next 结合使用?
35
38
 
36
- 虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[React 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+react.md)),但您可能出于以下几个原因想将其与 react-i18next 结合使用:
39
+ 虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[React 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+react.md)),但您可能出于以下几个原因想要将其与 react-i18next 结合使用:
37
40
 
38
41
  1. **现有代码库**:您已经有一个成熟的 react-i18next 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
39
42
  2. **遗留需求**:您的项目需要兼容现有的 react-i18next 插件或工作流程。
40
43
  3. **团队熟悉度**:您的团队熟悉 react-i18next,但希望获得更好的内容管理。
44
+ 4. **使用 Intlayer 功能**:您希望使用 Intlayer 的内容声明、翻译自动化、翻译测试等功能。
41
45
 
42
- **为此,Intlayer 可以作为 react-i18next 的适配器来实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译、测试翻译等功能。**
46
+ **为此,Intlayer 可以作为 react-i18next 的适配器来实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译、测试翻译等。**
43
47
 
44
- 本指南将向您展示如何利用 Intlayer 优秀的内容声明系统,同时保持与 react-i18next 的兼容性。
48
+ 本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 react-i18next 的兼容性。
45
49
 
46
50
  ## 目录
47
51
 
48
52
  <TOC/>
49
53
 
50
- ## 使用 react-i18next 设置 Intlayer 的分步指南
54
+ ## 使用 Intlayer 配合 react-i18next 的逐步指南
51
55
 
52
56
  ### 第一步:安装依赖
53
57
 
54
- 安装必要的包:
58
+ 安装所需的包:
55
59
 
56
60
  ```bash packageManager="npm"
57
61
  npm install intlayer @intlayer/sync-json-plugin
@@ -65,16 +69,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
65
69
  yarn add intlayer @intlayer/sync-json-plugin
66
70
  ```
67
71
 
72
+ ```bash packageManager="bun"
73
+ bun add intlayer @intlayer/sync-json-plugin
74
+ ```
75
+
68
76
  **包描述:**
69
77
 
70
78
  - **intlayer**:用于国际化管理、内容声明和构建的核心库
71
- - **@intlayer/sync-json-plugin**:将 Intlayer 内容声明导出为兼容 react-i18next 的 JSON 格式的插件
79
+ - **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为兼容 react-i18next 的 JSON 格式的插件
72
80
 
73
- ### 第二步:实现 Intlayer 插件以包装 JSON
81
+ ### 2 步:实现 Intlayer 插件以包装 JSON
74
82
 
75
- 创建一个 Intlayer 配置文件来定义你支持的语言环境:
83
+ 创建一个 Intlayer 配置文件以定义支持的语言环境:
76
84
 
77
- **如果你还想导出适用于 react-i18next 的 JSON 字典**,请添加 `syncJSON` 插件:
85
+ **如果您还想导出用于 react-i18next 的 JSON 字典**,请添加 `syncJSON` 插件:
78
86
 
79
87
  ```typescript fileName="intlayer.config.ts"
80
88
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -87,7 +95,7 @@ const config: IntlayerConfig = {
87
95
  },
88
96
  plugins: [
89
97
  syncJSON({
90
- source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
98
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
91
99
  }),
92
100
  ],
93
101
  };
@@ -95,17 +103,58 @@ const config: IntlayerConfig = {
95
103
  export default config;
96
104
  ```
97
105
 
98
- `syncJSON` 插件会自动包装 JSON。它会读取和写入 JSON 文件,而不改变内容结构。
106
+ `syncJSON` 插件会自动包装 JSON。它会读取和写入 JSON 文件,而不会改变内容结构。
99
107
 
100
108
  如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
101
109
 
102
- 1. 加载 JSON 和内容声明文件,并将它们转换为 Intlayer 字典。
103
- 2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 将合并所有字典。合并的优先级取决于插件的优先级以及内容声明文件的优先级(所有均可配置)。
110
+ 1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
111
+ 2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 会合并所有字典。合并的优先级取决于插件的优先级和内容声明文件的优先级(所有均可配置)。
104
112
 
105
- 如果使用 CLI 翻译 JSON,或使用 CMS 进行更改,Intlayer 将使用新的翻译更新 JSON 文件。
113
+ 如果通过 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
106
114
 
107
115
  要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
108
116
 
117
+ ### (可选)步骤 3:实现按组件的 JSON 翻译
118
+
119
+ 默认情况下,Intlayer 会加载、合并并同步 JSON 文件和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
120
+
121
+ 为此,你可以使用 `loadJSON` 插件。
122
+
123
+ ```ts fileName="intlayer.config.ts"
124
+ import { Locales, type IntlayerConfig } from "intlayer";
125
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
126
+
127
+ const config: IntlayerConfig = {
128
+ internationalization: {
129
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+
133
+ // 保持当前的 JSON 文件与 Intlayer 字典同步
134
+ plugins: [
135
+ /**
136
+ * 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
137
+ */
138
+ loadJSON({
139
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
140
+ locale: Locales.ENGLISH,
141
+ priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
142
+ }),
143
+ /**
144
+ * 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
145
+ */
146
+ syncJSON({
147
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
148
+ priority: 0,
149
+ }),
150
+ ],
151
+ };
152
+
153
+ export default config;
154
+ ```
155
+
156
+ 这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
157
+
109
158
  ## Git 配置
110
159
 
111
160
  建议忽略自动生成的 Intlayer 文件:
@@ -119,6 +168,6 @@ export default config;
119
168
 
120
169
  ### VS Code 扩展
121
170
 
122
- 为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
171
+ 为了提升开发者体验,安装官方的 **Intlayer VS Code 扩展**:
123
172
 
124
173
  [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
@@ -16,6 +16,9 @@ slugs:
16
16
  - blog
17
17
  - intlayer-with-react-intl
18
18
  history:
19
+ - version: 7.0.6
20
+ date: 2025-11-01
21
+ changes: 添加 loadJSON 插件
19
22
  - version: 7.0.0
20
23
  date: 2025-10-29
21
24
  changes: 更改为 syncJSON 插件
@@ -23,21 +26,26 @@ history:
23
26
 
24
27
  # 如何使用 Intlayer 自动化您的 react-intl JSON 翻译
25
28
 
29
+ ## 目录
30
+
31
+ <TOC/>
32
+
26
33
  ## 什么是 Intlayer?
27
34
 
28
- **Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 React 应用中的内容管理提供了一种现代化的方法。
35
+ **Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 React 应用提供了一种现代化的内容管理方法。
29
36
 
30
37
  请参阅我们博客文章中的具体对比:[react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md)。
31
38
 
32
39
  ## 为什么要将 Intlayer 与 react-intl 结合使用?
33
40
 
34
- 虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[React 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+react.md)),但您可能出于以下几个原因想将其与 react-intl 结合使用:
41
+ 虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[React 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+react.md)),但您可能出于以下几个原因希望将其与 react-intl 结合使用:
35
42
 
36
- 1. **现有代码库**:您已经有了成熟的 react-intl 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
43
+ 1. **现有代码库**:您已经有一个成熟的 react-intl 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
37
44
  2. **遗留需求**:您的项目需要兼容现有的 react-intl 插件或工作流程。
38
- 3. **团队熟悉度**:您的团队对 react-intl 很熟悉,但希望获得更好的内容管理。
45
+ 3. **团队熟悉度**:您的团队熟悉 react-intl,但希望获得更好的内容管理。
46
+ 4. **使用 Intlayer 功能**:您想使用 Intlayer 的内容声明、翻译自动化、翻译测试等功能。
39
47
 
40
- **为此,Intlayer 可以作为 react-intl 的适配器实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译,测试翻译内容等。**
48
+ **为此,Intlayer 可以作为 react-intl 的适配器实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译、测试翻译等。**
41
49
 
42
50
  本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 react-intl 的兼容性。
43
51
 
@@ -47,9 +55,9 @@ history:
47
55
 
48
56
  ## 使用 react-intl 设置 Intlayer 的分步指南
49
57
 
50
- ### 第一步:安装依赖项
58
+ ### 第一步:安装依赖
51
59
 
52
- 安装必要的包:
60
+ 安装所需的包:
53
61
 
54
62
  ```bash packageManager="npm"
55
63
  npm install intlayer @intlayer/sync-json-plugin
@@ -63,14 +71,18 @@ pnpm add intlayer @intlayer/sync-json-plugin
63
71
  yarn add intlayer @intlayer/sync-json-plugin
64
72
  ```
65
73
 
66
- **包描述:**
74
+ ```bash packageManager="bun"
75
+ bun add intlayer @intlayer/sync-json-plugin
76
+ ```
77
+
78
+ **包说明:**
67
79
 
68
80
  - **intlayer**:用于国际化管理、内容声明和构建的核心库
69
- - **@intlayer/sync-json-plugin**:将 Intlayer 内容声明导出为兼容 react-intl 的 JSON 格式的插件
81
+ /// **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为兼容 react-intl 的 JSON 格式的插件
70
82
 
71
- ### 步骤 2:实现 Intlayer 插件以包装 JSON
83
+ ### 2 步:实现 Intlayer 插件以包装 JSON
72
84
 
73
- 创建一个 Intlayer 配置文件以定义支持的语言环境:
85
+ 创建一个 Intlayer 配置文件以定义您支持的语言环境:
74
86
 
75
87
  **如果您还想导出适用于 react-intl 的 JSON 字典**,请添加 `syncJSON` 插件:
76
88
 
@@ -95,15 +107,55 @@ export default config;
95
107
 
96
108
  `syncJSON` 插件会自动包装 JSON。它会读取和写入 JSON 文件,而不会改变内容结构。
97
109
 
98
- 如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
110
+ 如果你希望让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
111
+
112
+ 1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
113
+ 2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 会合并所有字典。具体合并方式取决于插件的优先级以及内容声明文件的优先级(所有优先级均可配置)。
99
114
 
100
- 1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
115
+ 如果通过 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
101
116
 
102
- 2. 如果 JSON 文件和内容声明文件之间存在冲突,Intlayer 将合并所有字典。合并的优先级取决于插件的优先级以及内容声明文件的优先级(所有这些都是可配置的)。
117
+ 要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
103
118
 
104
- 如果使用 CLI 翻译 JSON,或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
119
+ ### (可选)步骤 3:实现按组件的 JSON 翻译
120
+
121
+ 默认情况下,Intlayer 会加载、合并并同步 JSON 和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
122
+
123
+ 为此,你可以使用 `loadJSON` 插件。
124
+
125
+ ```ts fileName="intlayer.config.ts"
126
+ import { Locales, type IntlayerConfig } from "intlayer";
127
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
128
+
129
+ const config: IntlayerConfig = {
130
+ internationalization: {
131
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
132
+ defaultLocale: Locales.ENGLISH,
133
+ },
134
+
135
+ // 保持您当前的 JSON 文件与 Intlayer 字典同步
136
+ plugins: [
137
+ /**
138
+ * 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
139
+ */
140
+ loadJSON({
141
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
142
+ locale: Locales.ENGLISH,
143
+ priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
144
+ }),
145
+ /**
146
+ * 将加载并将输出和翻译写回 locales 目录中的 JSON 文件
147
+ */
148
+ syncJSON({
149
+ source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
150
+ priority: 0,
151
+ }),
152
+ ],
153
+ };
154
+
155
+ export default config;
156
+ ```
105
157
 
106
- 有关 `syncJSON` 插件的更多详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
158
+ 这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
107
159
 
108
160
  ## Git 配置
109
161
 
@@ -118,6 +170,6 @@ export default config;
118
170
 
119
171
  ### VS Code 扩展
120
172
 
121
- 为了提升开发者体验,建议安装官方的 **Intlayer VS Code 扩展**:
173
+ 为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
122
174
 
123
175
  [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
@@ -0,0 +1,180 @@
1
+ ---
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-10-29
4
+ title: Intlayer 与 vue-i18n
5
+ description: 将 Intlayer 与 vue-i18n 集成,实现全面的 Vue.js 国际化解决方案
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - 国际化
10
+ - 博客
11
+ - Vue.js
12
+ - Nuxt
13
+ - JavaScript
14
+ - Vue
15
+ slugs:
16
+ - blog
17
+ - intlayer-with-vue-i18n
18
+ history:
19
+ - version: 7.0.6
20
+ date: 2025-11-01
21
+ changes: 添加 loadJSON 插件
22
+ - version: 7.0.0
23
+ date: 2025-10-29
24
+ changes: 更改为 syncJSON 插件并全面重写
25
+ ---
26
+
27
+ # 使用 vue-i18n 和 Intlayer 的 Vue.js 国际化 (i18n)
28
+
29
+ ## 目录
30
+
31
+ <TOC/>
32
+
33
+ ## 什么是 Intlayer?
34
+
35
+ **Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 Vue.js 和 Nuxt 应用提供了一种现代化的内容管理方法。
36
+
37
+ 请参阅我们博客文章中的具体对比:[vue-i18n vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/vue-i18n_vs_intlayer.md)。
38
+
39
+ ## 为什么要将 Intlayer 与 vue-i18n 结合使用?
40
+
41
+ 虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[Vue.js 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_vite+vue.md)),但你可能出于以下几个原因想将其与 vue-i18n 结合使用:
42
+
43
+ 1. **现有代码库**:你已经有一个成熟的 vue-i18n 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
44
+ 2. **遗留需求**:你的项目需要兼容现有的 vue-i18n 插件或工作流程。
45
+ 3. **团队熟悉度**:你的团队对 vue-i18n 很熟悉,但希望获得更好的内容管理。
46
+ 4. **使用 Intlayer 功能**:你想使用 Intlayer 的内容声明、翻译自动化、翻译测试等功能。
47
+
48
+ **为此,Intlayer 可以作为 vue-i18n 的适配器来实现,帮助你在 CLI 或 CI/CD 流水线中自动化 JSON 翻译,测试翻译等。**
49
+
50
+ 本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 vue-i18n 的兼容性。
51
+
52
+ ---
53
+
54
+ ## 使用 vue-i18n 设置 Intlayer 的分步指南
55
+
56
+ ### 第一步:安装依赖
57
+
58
+ 使用您喜欢的包管理器安装必要的包:
59
+
60
+ ```bash packageManager="npm"
61
+ npm install intlayer @intlayer/sync-json-plugin
62
+ ```
63
+
64
+ ```bash packageManager="pnpm"
65
+ pnpm add intlayer @intlayer/sync-json-plugin
66
+ ```
67
+
68
+ ```bash packageManager="yarn"
69
+ yarn add intlayer @intlayer/sync-json-plugin
70
+ ```
71
+
72
+ ```bash packageManager="bun"
73
+ bun add intlayer @intlayer/sync-json-plugin
74
+ ```
75
+
76
+ **包说明:**
77
+
78
+ - **intlayer**:内容声明和管理的核心库
79
+ - **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明同步到 vue-i18n JSON 格式的插件
80
+
81
+ ### 第2步:实现 Intlayer 插件以封装 JSON
82
+
83
+ 创建一个 Intlayer 配置文件以定义您支持的语言环境:
84
+
85
+ **如果您还想导出用于 vue-i18n 的 JSON 字典**,请添加 `syncJSON` 插件:
86
+
87
+ ```typescript fileName="intlayer.config.ts"
88
+ import { Locales, type IntlayerConfig } from "intlayer";
89
+ import { syncJSON } from "@intlayer/sync-json-plugin";
90
+
91
+ const config: IntlayerConfig = {
92
+ internationalization: {
93
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
94
+ defaultLocale: Locales.ENGLISH,
95
+ },
96
+ plugins: [
97
+ syncJSON({
98
+ source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
99
+ }),
100
+ ],
101
+ };
102
+
103
+ export default config;
104
+ ```
105
+
106
+ `syncJSON` 插件会自动包装 JSON。它会读取和写入 JSON 文件,而不会改变内容结构。
107
+
108
+ 如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
109
+
110
+ 1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
111
+ 2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 会合并所有字典。具体合并方式取决于插件的优先级以及内容声明文件的优先级(所有优先级均可配置)。
112
+
113
+ 如果通过 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
114
+
115
+ 要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
116
+
117
+ ---
118
+
119
+ ### (可选)步骤3:实现按组件的 JSON 翻译
120
+
121
+ 默认情况下,Intlayer 会加载、合并并同步 JSON 和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
122
+
123
+ 为此,你可以使用 `loadJSON` 插件。
124
+
125
+ ```ts fileName="intlayer.config.ts"
126
+ import { Locales, type IntlayerConfig } from "intlayer";
127
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
128
+
129
+ const config: IntlayerConfig = {
130
+ internationalization: {
131
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
132
+ defaultLocale: Locales.ENGLISH,
133
+ },
134
+
135
+ // 保持您当前的 JSON 文件与 Intlayer 词典同步
136
+ plugins: [
137
+ /**
138
+ * 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
139
+ */
140
+ loadJSON({
141
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
142
+ locale: Locales.ENGLISH,
143
+ priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
144
+ }),
145
+ /**
146
+ * 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
147
+ */
148
+ syncJSON({
149
+ source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
150
+ priority: 0,
151
+ }),
152
+ ],
153
+ };
154
+
155
+ export default config;
156
+ ```
157
+
158
+ 这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
159
+
160
+ ---
161
+
162
+ ## Git 配置
163
+
164
+ 将生成的文件排除在版本控制之外:
165
+
166
+ ```plaintext fileName=".gitignore"
167
+ # 忽略 Intlayer 生成的文件
168
+ .intlayer
169
+ intl
170
+ ```
171
+
172
+ 这些文件会在构建过程中自动重新生成,无需提交到您的代码仓库。
173
+
174
+ ### VS Code 扩展
175
+
176
+ 为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
177
+
178
+ [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
179
+
180
+ [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
@@ -163,6 +163,25 @@ const blogEntry = {
163
163
  id: readLocale("intlayer_with_react-intl.md", "id"),
164
164
  vi: readLocale("intlayer_with_react-intl.md", "vi")
165
165
  },
166
+ "./blog/en/intlayer_with_vue-i18n.md": {
167
+ en: readLocale("intlayer_with_vue-i18n.md", "en"),
168
+ ru: readLocale("intlayer_with_vue-i18n.md", "ru"),
169
+ ja: readLocale("intlayer_with_vue-i18n.md", "ja"),
170
+ fr: readLocale("intlayer_with_vue-i18n.md", "fr"),
171
+ ko: readLocale("intlayer_with_vue-i18n.md", "ko"),
172
+ zh: readLocale("intlayer_with_vue-i18n.md", "zh"),
173
+ es: readLocale("intlayer_with_vue-i18n.md", "es"),
174
+ de: readLocale("intlayer_with_vue-i18n.md", "de"),
175
+ ar: readLocale("intlayer_with_vue-i18n.md", "ar"),
176
+ it: readLocale("intlayer_with_vue-i18n.md", "it"),
177
+ "en-GB": readLocale("intlayer_with_vue-i18n.md", "en-GB"),
178
+ pt: readLocale("intlayer_with_vue-i18n.md", "pt"),
179
+ hi: readLocale("intlayer_with_vue-i18n.md", "hi"),
180
+ tr: readLocale("intlayer_with_vue-i18n.md", "tr"),
181
+ pl: readLocale("intlayer_with_vue-i18n.md", "pl"),
182
+ id: readLocale("intlayer_with_vue-i18n.md", "id"),
183
+ vi: readLocale("intlayer_with_vue-i18n.md", "vi")
184
+ },
166
185
  "./blog/en/list_i18n_technologies/CMS/drupal.md": {
167
186
  en: readLocale("list_i18n_technologies/CMS/drupal.md", "en"),
168
187
  ru: readLocale("list_i18n_technologies/CMS/drupal.md", "ru"),