@intlayer/docs 7.1.8 → 7.2.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.
- package/README.md +1 -0
- package/dist/cjs/generated/docs.entry.cjs +19 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +19 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_svelte_kit.md +730 -0
- package/docs/ar/intlayer_with_vite+svelte.md +288 -104
- package/docs/de/intlayer_with_svelte_kit.md +730 -0
- package/docs/de/intlayer_with_vite+svelte.md +302 -101
- package/docs/en/intlayer_with_svelte_kit.md +560 -0
- package/docs/en/intlayer_with_vite+svelte.md +153 -15
- package/docs/en/introduction.md +2 -0
- package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
- package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
- package/docs/es/intlayer_with_svelte_kit.md +730 -0
- package/docs/es/intlayer_with_vite+svelte.md +300 -107
- package/docs/fr/intlayer_with_svelte_kit.md +762 -0
- package/docs/fr/intlayer_with_vite+svelte.md +297 -101
- package/docs/hi/intlayer_with_svelte_kit.md +730 -0
- package/docs/hi/intlayer_with_vite+svelte.md +298 -108
- package/docs/id/intlayer_with_svelte_kit.md +730 -0
- package/docs/id/intlayer_with_vite+svelte.md +277 -99
- package/docs/it/intlayer_with_svelte_kit.md +762 -0
- package/docs/it/intlayer_with_vite+svelte.md +275 -99
- package/docs/ja/intlayer_with_svelte_kit.md +730 -0
- package/docs/ja/intlayer_with_vite+svelte.md +295 -110
- package/docs/ko/intlayer_with_svelte_kit.md +730 -0
- package/docs/ko/intlayer_with_vite+svelte.md +286 -199
- package/docs/pl/intlayer_with_svelte_kit.md +732 -0
- package/docs/pl/intlayer_with_vite+svelte.md +273 -101
- package/docs/pt/intlayer_with_svelte_kit.md +764 -0
- package/docs/pt/intlayer_with_vite+svelte.md +290 -96
- package/docs/ru/intlayer_with_svelte_kit.md +730 -0
- package/docs/ru/intlayer_with_vite+svelte.md +275 -99
- package/docs/tr/intlayer_with_svelte_kit.md +730 -0
- package/docs/tr/intlayer_with_vite+svelte.md +297 -119
- package/docs/vi/intlayer_with_svelte_kit.md +730 -0
- package/docs/vi/intlayer_with_vite+svelte.md +275 -102
- package/docs/zh/intlayer_with_svelte_kit.md +730 -0
- package/docs/zh/intlayer_with_vite+svelte.md +309 -107
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +19 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: 如何翻译您的Vite
|
|
5
|
-
description: 了解如何使您的 Vite 和 Svelte
|
|
3
|
+
updatedAt: 2025-11-19
|
|
4
|
+
title: 如何翻译您的 Vite 和 Svelte 应用 – 2025 年国际化 (i18n) 指南
|
|
5
|
+
description: 了解如何使您的 Vite 和 Svelte 网站支持多语言。按照文档进行国际化 (i18n) 和翻译。
|
|
6
6
|
keywords:
|
|
7
7
|
- 国际化
|
|
8
8
|
- 文档
|
|
@@ -14,34 +14,47 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- environment
|
|
16
16
|
- vite-and-svelte
|
|
17
|
-
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
|
|
18
18
|
history:
|
|
19
|
+
- version: 5.5.11
|
|
20
|
+
date: 2025-11-19
|
|
21
|
+
changes: 更新文档
|
|
19
22
|
- version: 5.5.10
|
|
20
23
|
date: 2025-06-29
|
|
21
|
-
changes:
|
|
24
|
+
changes: 初始化历史记录
|
|
22
25
|
---
|
|
23
26
|
|
|
24
|
-
# 使用Intlayer翻译您的Vite
|
|
27
|
+
# 使用 Intlayer 翻译您的 Vite 和 Svelte 网站 | 国际化 (i18n)
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
## 目录
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
<TOC/>
|
|
29
32
|
|
|
30
33
|
## 什么是 Intlayer?
|
|
31
34
|
|
|
32
|
-
**Intlayer**
|
|
35
|
+
**Intlayer** 是一个创新的开源国际化 (i18n) 库,旨在简化现代 Web 应用的多语言支持。
|
|
33
36
|
|
|
34
37
|
使用 Intlayer,您可以:
|
|
35
38
|
|
|
36
39
|
- **通过组件级声明式字典轻松管理翻译**。
|
|
37
40
|
- **动态本地化元数据、路由和内容**。
|
|
38
|
-
-
|
|
39
|
-
-
|
|
41
|
+
- **确保 TypeScript 支持**,通过自动生成类型提升自动补全和错误检测。
|
|
42
|
+
- **享受高级功能**,如动态语言环境检测和切换。
|
|
40
43
|
|
|
41
44
|
---
|
|
42
45
|
|
|
43
46
|
## 在 Vite 和 Svelte 应用中设置 Intlayer 的分步指南
|
|
44
47
|
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
50
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
51
|
+
title="演示 CodeSandbox - 如何使用 Intlayer 实现应用国际化"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
请参阅 GitHub 上的[应用模板](https://github.com/aymericzip/intlayer-vite-svelte-template)。
|
|
57
|
+
|
|
45
58
|
### 第一步:安装依赖
|
|
46
59
|
|
|
47
60
|
使用 npm 安装必要的包:
|
|
@@ -61,22 +74,26 @@ yarn add intlayer svelte-intlayer
|
|
|
61
74
|
yarn add vite-intlayer --save-dev
|
|
62
75
|
```
|
|
63
76
|
|
|
77
|
+
```bash packageManager="bun"
|
|
78
|
+
bun add intlayer svelte-intlayer
|
|
79
|
+
bun add vite-intlayer --save-dev
|
|
80
|
+
```
|
|
81
|
+
|
|
64
82
|
- **intlayer**
|
|
65
83
|
|
|
66
|
-
|
|
67
|
-
提供国际化工具的核心包,用于配置管理、翻译、[内容声明](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)。
|
|
84
|
+
核心包,提供国际化工具,用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译以及[CLI 命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_cli.md)。
|
|
68
85
|
|
|
69
|
-
- **svelte-intlayer**
|
|
70
|
-
将 Intlayer
|
|
86
|
+
- **svelte-intlayer**
|
|
87
|
+
将 Intlayer 与 Svelte 应用程序集成的包。它提供了用于 Svelte 国际化的上下文提供者和钩子。
|
|
71
88
|
|
|
72
|
-
- **vite-intlayer**
|
|
73
|
-
包含用于将 Intlayer 集成到[Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production)的 Vite
|
|
89
|
+
- **vite-intlayer**
|
|
90
|
+
包含用于将 Intlayer 集成到 [Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production) 的 Vite 插件,以及用于检测用户首选语言环境、管理 Cookie 和处理 URL 重定向的中间件。
|
|
74
91
|
|
|
75
|
-
### 第2步:配置您的项目
|
|
92
|
+
### 第 2 步:配置您的项目
|
|
76
93
|
|
|
77
|
-
|
|
94
|
+
创建一个配置文件来配置您的应用程序语言:
|
|
78
95
|
|
|
79
|
-
```typescript fileName="intlayer.config.ts"
|
|
96
|
+
```typescript fileName="intlayer.config.ts"
|
|
80
97
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
81
98
|
|
|
82
99
|
const config: IntlayerConfig = {
|
|
@@ -85,26 +102,7 @@ const config: IntlayerConfig = {
|
|
|
85
102
|
Locales.ENGLISH,
|
|
86
103
|
Locales.FRENCH,
|
|
87
104
|
Locales.SPANISH,
|
|
88
|
-
//
|
|
89
|
-
],
|
|
90
|
-
defaultLocale: Locales.ENGLISH,
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export default config;
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
98
|
-
import { Locales } from "intlayer";
|
|
99
|
-
|
|
100
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
101
|
-
const config = {
|
|
102
|
-
internationalization: {
|
|
103
|
-
locales: [
|
|
104
|
-
Locales.ENGLISH,
|
|
105
|
-
Locales.FRENCH,
|
|
106
|
-
Locales.SPANISH,
|
|
107
|
-
// 您的其他语言
|
|
105
|
+
// 您的其他语言环境
|
|
108
106
|
],
|
|
109
107
|
defaultLocale: Locales.ENGLISH,
|
|
110
108
|
},
|
|
@@ -113,32 +111,13 @@ const config = {
|
|
|
113
111
|
export default config;
|
|
114
112
|
```
|
|
115
113
|
|
|
116
|
-
|
|
117
|
-
const { Locales } = require("intlayer");
|
|
118
|
-
|
|
119
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
120
|
-
const config = {
|
|
121
|
-
internationalization: {
|
|
122
|
-
locales: [
|
|
123
|
-
Locales.ENGLISH,
|
|
124
|
-
Locales.FRENCH,
|
|
125
|
-
Locales.SPANISH,
|
|
126
|
-
// 你的其他语言环境
|
|
127
|
-
],
|
|
128
|
-
defaultLocale: Locales.ENGLISH,
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
module.exports = config;
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
> 通过此配置文件,您可以设置本地化的 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
114
|
+
> 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名,禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
136
115
|
|
|
137
116
|
### 第三步:在您的 Vite 配置中集成 Intlayer
|
|
138
117
|
|
|
139
118
|
将 intlayer 插件添加到您的配置中。
|
|
140
119
|
|
|
141
|
-
```typescript fileName="vite.config.ts"
|
|
120
|
+
```typescript fileName="vite.config.ts"
|
|
142
121
|
import { defineConfig } from "vite";
|
|
143
122
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
144
123
|
import { intlayer } from "vite-intlayer";
|
|
@@ -149,31 +128,9 @@ export default defineConfig({
|
|
|
149
128
|
});
|
|
150
129
|
```
|
|
151
130
|
|
|
152
|
-
|
|
153
|
-
import { defineConfig } from "vite";
|
|
154
|
-
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
155
|
-
import { intlayer } from "vite-intlayer";
|
|
131
|
+
> `intlayer()` Vite 插件用于将 Intlayer 集成到 Vite 中。它确保内容声明文件的构建,并在开发模式下监控这些文件。它在 Vite 应用中定义了 Intlayer 的环境变量。此外,它还提供别名以优化性能。
|
|
156
132
|
|
|
157
|
-
|
|
158
|
-
export default defineConfig({
|
|
159
|
-
plugins: [svelte(), intlayer()],
|
|
160
|
-
});
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
```javascript fileName="vite.config.cjs" codeFormat="commonjs"
|
|
164
|
-
const { defineConfig } = require("vite");
|
|
165
|
-
const react = require("@vitejs/plugin-react-swc");
|
|
166
|
-
const { intlayer } = require("vite-intlayer");
|
|
167
|
-
|
|
168
|
-
// https://vitejs.dev/config/
|
|
169
|
-
module.exports = defineConfig({
|
|
170
|
-
plugins: [react(), intlayer()],
|
|
171
|
-
});
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
> `intlayer()` Vite 插件用于将 Intlayer 集成到 Vite 中。它确保内容声明文件的构建,并在开发模式下监视这些文件。它在 Vite 应用程序中定义了 Intlayer 环境变量。此外,它还提供别名以优化性能。
|
|
175
|
-
|
|
176
|
-
### 第4步:声明您的内容
|
|
133
|
+
### 第四步:声明您的内容
|
|
177
134
|
|
|
178
135
|
创建并管理您的内容声明以存储翻译:
|
|
179
136
|
|
|
@@ -198,6 +155,7 @@ export default appContent;
|
|
|
198
155
|
import { t } from "intlayer";
|
|
199
156
|
|
|
200
157
|
/** @type {import('intlayer').Dictionary} */
|
|
158
|
+
// 定义应用内容字典
|
|
201
159
|
const appContent = {
|
|
202
160
|
key: "app",
|
|
203
161
|
content: {
|
|
@@ -216,7 +174,7 @@ export default appContent;
|
|
|
216
174
|
const { t } = require("intlayer");
|
|
217
175
|
|
|
218
176
|
/** @type {import('intlayer').Dictionary} */
|
|
219
|
-
//
|
|
177
|
+
// 定义应用内容字典
|
|
220
178
|
const appContent = {
|
|
221
179
|
key: "app",
|
|
222
180
|
content: {
|
|
@@ -250,37 +208,283 @@ module.exports = appContent;
|
|
|
250
208
|
|
|
251
209
|
> 您的内容声明可以定义在应用程序中的任何位置,只要它们被包含在 `contentDir` 目录中(默认是 `./src`),并且文件扩展名符合内容声明文件扩展名(默认是 `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)。
|
|
252
210
|
|
|
253
|
-
>
|
|
211
|
+
> 更多详情,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
|
|
254
212
|
|
|
255
213
|
### 第5步:在代码中使用 Intlayer
|
|
256
214
|
|
|
257
|
-
|
|
215
|
+
```svelte fileName="src/App.svelte"
|
|
216
|
+
<script>
|
|
217
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
218
|
+
|
|
219
|
+
const content = useIntlayer("app");
|
|
220
|
+
</script>
|
|
221
|
+
|
|
222
|
+
<div>
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
<!-- 以简单内容渲染内容 -->
|
|
226
|
+
<h1>{$content.title}</h1>
|
|
227
|
+
<!-- 使用编辑器渲染可编辑内容 -->
|
|
228
|
+
<h1><svelte:component this={$content.title} /></h1>
|
|
229
|
+
<!-- 以字符串形式渲染内容 -->
|
|
230
|
+
<div aria-label={$content.title.value}></div>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### (可选)步骤6:更改内容语言
|
|
234
|
+
|
|
235
|
+
```svelte fileName="src/App.svelte"
|
|
236
|
+
<script lang="ts">
|
|
237
|
+
import { getLocaleName } from 'intlayer';
|
|
238
|
+
import { useLocale } from 'svelte-intlayer';
|
|
239
|
+
|
|
240
|
+
// 获取语言信息和 setLocale 函数
|
|
241
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
242
|
+
|
|
243
|
+
// 处理语言切换
|
|
244
|
+
const changeLocale = (event: Event) => {
|
|
245
|
+
const target = event.target as HTMLSelectElement;
|
|
246
|
+
const newLocale = target.value;
|
|
247
|
+
setLocale(newLocale);
|
|
248
|
+
};
|
|
249
|
+
</script>
|
|
250
|
+
|
|
251
|
+
<div>
|
|
252
|
+
<select value={$locale} on:change={changeLocale}>
|
|
253
|
+
{#each availableLocales ?? [] as loc}
|
|
254
|
+
<option value={loc}>
|
|
255
|
+
{getLocaleName(loc)}
|
|
256
|
+
</option>
|
|
257
|
+
{/each}
|
|
258
|
+
</select>
|
|
259
|
+
</div>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### (可选)步骤7:渲染Markdown
|
|
263
|
+
|
|
264
|
+
Intlayer支持在您的Svelte应用中直接渲染Markdown内容。默认情况下,Markdown被视为纯文本。要将Markdown转换为丰富的HTML,您可以集成`@humanspeak/svelte-markdown`或其他markdown解析器。
|
|
265
|
+
|
|
266
|
+
> 要了解如何使用`intlayer`包声明markdown内容,请参阅[markdown文档](https://github.com/aymericzip/intlayer/tree/main/docs/zh/dictionary/markdown.md)。
|
|
267
|
+
|
|
268
|
+
```svelte fileName="src/App.svelte"
|
|
269
|
+
<script>
|
|
270
|
+
import { setIntlayerMarkdown } from "svelte-intlayer";
|
|
271
|
+
|
|
272
|
+
setIntlayerMarkdown((markdown) =>
|
|
273
|
+
// 将 markdown 内容渲染为字符串
|
|
274
|
+
return markdown;
|
|
275
|
+
);
|
|
276
|
+
</script>
|
|
277
|
+
|
|
278
|
+
<h1>{$content.markdownContent}</h1>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
> 你也可以通过 `content.markdownContent.metadata.xxx` 属性访问你的 markdown front-matter 数据。
|
|
282
|
+
|
|
283
|
+
### (可选)步骤 8:设置 intlayer 编辑器 / CMS
|
|
284
|
+
|
|
285
|
+
要设置 intlayer 编辑器,你必须遵循 [intlayer 编辑器文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)。
|
|
286
|
+
|
|
287
|
+
要设置 intlayer CMS,你必须遵循 [intlayer CMS 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)。
|
|
288
|
+
|
|
289
|
+
在你的 Svelte 应用程序中,同时你必须在布局文件或应用程序的根目录中添加以下代码行:
|
|
258
290
|
|
|
259
|
-
|
|
291
|
+
```svelte fileName="src/layout.svelte"
|
|
292
|
+
import { useIntlayerEditor } from "svelte-intlayer";
|
|
260
293
|
|
|
261
|
-
|
|
294
|
+
useIntlayerEditor();
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### (可选)步骤 7:为你的应用程序添加本地化路由
|
|
298
|
+
|
|
299
|
+
为了在你的 Svelte 应用程序中处理本地化路由,你可以使用 `svelte-spa-router`,并结合 Intlayer 的 `localeFlatMap` 来为每个语言环境生成路由。
|
|
300
|
+
|
|
301
|
+
首先,安装 `svelte-spa-router`:
|
|
302
|
+
|
|
303
|
+
```bash packageManager="npm"
|
|
304
|
+
npm install svelte-spa-router
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```bash packageManager="pnpm"
|
|
308
|
+
pnpm add svelte-spa-router
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
```bash packageManager="yarn"
|
|
312
|
+
yarn add svelte-spa-router
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
```bash packageManager="bun"
|
|
316
|
+
bun add svelte-spa-router
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
然后,创建一个 `Router.svelte` 文件来定义你的路由:
|
|
320
|
+
|
|
321
|
+
```svelte fileName="src/Router.svelte"
|
|
322
|
+
<script lang="ts">
|
|
323
|
+
import { localeFlatMap } from "intlayer";
|
|
324
|
+
import Router from "svelte-spa-router";
|
|
325
|
+
import { wrap } from "svelte-spa-router/wrap";
|
|
326
|
+
import App from "./App.svelte";
|
|
327
|
+
|
|
328
|
+
const routes = Object.fromEntries(
|
|
329
|
+
localeFlatMap(({locale, urlPrefix}) => [
|
|
330
|
+
[
|
|
331
|
+
urlPrefix || '/',
|
|
332
|
+
wrap({
|
|
333
|
+
component: App as any,
|
|
334
|
+
props: {
|
|
335
|
+
locale,
|
|
336
|
+
},
|
|
337
|
+
}),
|
|
338
|
+
],
|
|
339
|
+
])
|
|
340
|
+
);
|
|
341
|
+
</script>
|
|
342
|
+
|
|
343
|
+
<Router {routes} />
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
更新你的 `main.ts`,将挂载的组件从 `App` 改为 `Router`:
|
|
347
|
+
|
|
348
|
+
```typescript fileName="src/main.ts"
|
|
349
|
+
import { mount } from "svelte";
|
|
350
|
+
import Router from "./Router.svelte";
|
|
351
|
+
|
|
352
|
+
const app = mount(Router, {
|
|
353
|
+
target: document.getElementById("app")!,
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
export default app;
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
最后,更新你的 `App.svelte` 以接收 `locale` 属性并使用 `useIntlayer`:
|
|
360
|
+
|
|
361
|
+
```svelte fileName="src/App.svelte"
|
|
362
|
+
<script lang="ts">
|
|
363
|
+
import type { Locale } from 'intlayer';
|
|
364
|
+
import { useIntlayer } from 'svelte-intlayer';
|
|
365
|
+
import Counter from './lib/Counter.svelte';
|
|
366
|
+
import LocaleSwitcher from './lib/LocaleSwitcher.svelte';
|
|
262
367
|
|
|
263
|
-
|
|
368
|
+
export let locale: Locale;
|
|
264
369
|
|
|
265
|
-
|
|
370
|
+
$: content = useIntlayer('app', locale);
|
|
371
|
+
</script>
|
|
266
372
|
|
|
267
|
-
|
|
373
|
+
<main>
|
|
374
|
+
<div class="locale-switcher-container">
|
|
375
|
+
<LocaleSwitcher currentLocale={locale} />
|
|
376
|
+
</div>
|
|
268
377
|
|
|
269
|
-
|
|
378
|
+
<!-- ... 你的应用其余部分 ... -->
|
|
379
|
+
</main>
|
|
380
|
+
```
|
|
270
381
|
|
|
271
|
-
|
|
382
|
+
#### 配置服务器端路由(可选)
|
|
272
383
|
|
|
273
|
-
|
|
384
|
+
同时,您还可以使用 `intlayerProxy` 为您的应用程序添加服务器端路由。该插件会根据 URL 自动检测当前的语言环境,并设置相应的语言环境 cookie。如果未指定语言环境,插件将根据用户浏览器的语言偏好确定最合适的语言环境。如果未检测到任何语言环境,它将重定向到默认语言环境。
|
|
274
385
|
|
|
275
|
-
|
|
386
|
+
> 注意,要在生产环境中使用 `intlayerProxy`,您需要将 `vite-intlayer` 包从 `devDependencies` 切换到 `dependencies`。
|
|
276
387
|
|
|
277
|
-
|
|
388
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
389
|
+
import { defineConfig } from "vite";
|
|
390
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
391
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
392
|
+
|
|
393
|
+
typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
394
|
+
import { defineConfig } from "vite";
|
|
395
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
396
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
397
|
+
|
|
398
|
+
// https://vitejs.dev/config/
|
|
399
|
+
export default defineConfig({
|
|
400
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
405
|
+
import { defineConfig } from "vite";
|
|
406
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
407
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
408
|
+
|
|
409
|
+
// https://vitejs.dev/config/
|
|
410
|
+
export default defineConfig({
|
|
411
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
412
|
+
});
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
416
|
+
const { defineConfig } = require("vite");
|
|
417
|
+
const { svelte } = require("@sveltejs/vite-plugin-svelte");
|
|
418
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
419
|
+
|
|
420
|
+
// https://vitejs.dev/config/
|
|
421
|
+
module.exports = defineConfig({
|
|
422
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
423
|
+
});
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### (可选)步骤 8:当语言环境改变时更改 URL
|
|
427
|
+
|
|
428
|
+
为了允许用户切换语言并相应地更新 URL,您可以创建一个 `LocaleSwitcher` 组件。该组件将使用 `intlayer` 中的 `getLocalizedUrl` 和 `svelte-spa-router` 中的 `push`。
|
|
429
|
+
|
|
430
|
+
```svelte fileName="src/lib/LocaleSwitcher.svelte"
|
|
431
|
+
<script lang="ts">
|
|
432
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
433
|
+
import { useLocale } from "svelte-intlayer";
|
|
434
|
+
import { push } from "svelte-spa-router";
|
|
435
|
+
|
|
436
|
+
export let currentLocale: string | undefined = undefined;
|
|
437
|
+
|
|
438
|
+
// 获取语言环境信息
|
|
439
|
+
const { locale, availableLocales } = useLocale();
|
|
440
|
+
|
|
441
|
+
// 处理语言环境变化
|
|
442
|
+
const changeLocale = (event: Event) => {
|
|
443
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
444
|
+
});
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### (可选)步骤 8:当语言环境变化时更改 URL
|
|
448
|
+
|
|
449
|
+
为了允许用户切换语言并相应地更新 URL,您可以创建一个 `LocaleSwitcher` 组件。该组件将使用来自 `intlayer` 的 `getLocalizedUrl` 和来自 `svelte-spa-router` 的 `push`。
|
|
450
|
+
|
|
451
|
+
```svelte fileName="src/lib/LocaleSwitcher.svelte"
|
|
452
|
+
<script lang="ts">
|
|
453
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
454
|
+
import { useLocale } from "svelte-intlayer";
|
|
455
|
+
import { push } from "svelte-spa-router";
|
|
456
|
+
|
|
457
|
+
export let currentLocale: string | undefined = undefined;
|
|
458
|
+
|
|
459
|
+
// 获取语言环境信息
|
|
460
|
+
const { locale, availableLocales } = useLocale();
|
|
461
|
+
|
|
462
|
+
// 处理语言环境变化
|
|
463
|
+
const changeLocale = (event: Event) => {
|
|
464
|
+
const target = event.target as HTMLSelectElement;
|
|
465
|
+
const newLocale = target.value;
|
|
466
|
+
const currentUrl = window.location.pathname;
|
|
467
|
+
const url = getLocalizedUrl( currentUrl, newLocale);
|
|
468
|
+
push(url);
|
|
469
|
+
};
|
|
470
|
+
</script>
|
|
471
|
+
|
|
472
|
+
<div class="locale-switcher">
|
|
473
|
+
<select value={currentLocale ?? $locale} onchange={changeLocale}>
|
|
474
|
+
{#each availableLocales ?? [] as loc}
|
|
475
|
+
<option value={loc}>
|
|
476
|
+
{getLocaleName(loc)}
|
|
477
|
+
</option>
|
|
478
|
+
{/each}
|
|
479
|
+
</select>
|
|
480
|
+
</div>
|
|
481
|
+
```
|
|
278
482
|
|
|
279
483
|
### Git 配置
|
|
280
484
|
|
|
281
485
|
建议忽略 Intlayer 生成的文件。这样可以避免将它们提交到您的 Git 仓库中。
|
|
282
486
|
|
|
283
|
-
|
|
487
|
+
为此,您可以在 `.gitignore` 文件中添加以下指令:
|
|
284
488
|
|
|
285
489
|
```plaintext
|
|
286
490
|
# 忽略 Intlayer 生成的文件
|
|
@@ -295,17 +499,15 @@ module.exports = appContent;
|
|
|
295
499
|
|
|
296
500
|
该扩展提供:
|
|
297
501
|
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
502
|
+
- 翻译键的 **自动补全**。
|
|
503
|
+
- 缺失翻译的 **实时错误检测**。
|
|
504
|
+
- 翻译内容的 **内联预览**。
|
|
505
|
+
- 轻松创建和更新翻译的 **快速操作**。
|
|
302
506
|
|
|
303
507
|
有关如何使用该扩展的更多详细信息,请参阅 [Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension)。
|
|
304
508
|
|
|
305
509
|
---
|
|
306
510
|
|
|
307
|
-
###
|
|
511
|
+
### 深入了解
|
|
308
512
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
---
|
|
513
|
+
要进一步提升,您可以实现[可视化编辑器](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)将内容外部化。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/docs",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer documentation",
|
|
6
6
|
"keywords": [
|
|
@@ -72,13 +72,13 @@
|
|
|
72
72
|
"watch": "webpack --config ./webpack.config.ts --watch"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@intlayer/config": "7.
|
|
76
|
-
"@intlayer/core": "7.
|
|
77
|
-
"@intlayer/types": "7.
|
|
75
|
+
"@intlayer/config": "7.2.0",
|
|
76
|
+
"@intlayer/core": "7.2.0",
|
|
77
|
+
"@intlayer/types": "7.2.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@intlayer/api": "7.
|
|
81
|
-
"@intlayer/cli": "7.
|
|
80
|
+
"@intlayer/api": "7.2.0",
|
|
81
|
+
"@intlayer/cli": "7.2.0",
|
|
82
82
|
"@types/node": "24.10.1",
|
|
83
83
|
"@utils/ts-config": "1.0.4",
|
|
84
84
|
"@utils/ts-config-types": "1.0.4",
|
|
@@ -737,6 +737,25 @@ export const docsEntry = {
|
|
|
737
737
|
id: readLocale('intlayer_with_react_router_v7.md', 'id'),
|
|
738
738
|
vi: readLocale('intlayer_with_react_router_v7.md', 'vi'),
|
|
739
739
|
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
740
|
+
'./docs/en/intlayer_with_svelte_kit.md': {
|
|
741
|
+
en: readLocale('intlayer_with_svelte_kit.md', 'en'),
|
|
742
|
+
ru: readLocale('intlayer_with_svelte_kit.md', 'ru'),
|
|
743
|
+
ja: readLocale('intlayer_with_svelte_kit.md', 'ja'),
|
|
744
|
+
fr: readLocale('intlayer_with_svelte_kit.md', 'fr'),
|
|
745
|
+
ko: readLocale('intlayer_with_svelte_kit.md', 'ko'),
|
|
746
|
+
zh: readLocale('intlayer_with_svelte_kit.md', 'zh'),
|
|
747
|
+
es: readLocale('intlayer_with_svelte_kit.md', 'es'),
|
|
748
|
+
de: readLocale('intlayer_with_svelte_kit.md', 'de'),
|
|
749
|
+
ar: readLocale('intlayer_with_svelte_kit.md', 'ar'),
|
|
750
|
+
it: readLocale('intlayer_with_svelte_kit.md', 'it'),
|
|
751
|
+
'en-GB': readLocale('intlayer_with_svelte_kit.md', 'en-GB'),
|
|
752
|
+
pt: readLocale('intlayer_with_svelte_kit.md', 'pt'),
|
|
753
|
+
hi: readLocale('intlayer_with_svelte_kit.md', 'hi'),
|
|
754
|
+
tr: readLocale('intlayer_with_svelte_kit.md', 'tr'),
|
|
755
|
+
pl: readLocale('intlayer_with_svelte_kit.md', 'pl'),
|
|
756
|
+
id: readLocale('intlayer_with_svelte_kit.md', 'id'),
|
|
757
|
+
vi: readLocale('intlayer_with_svelte_kit.md', 'vi'),
|
|
758
|
+
} as unknown as Record<LocalesValues, Promise<string>>,
|
|
740
759
|
'./docs/en/intlayer_with_tanstack.md': {
|
|
741
760
|
en: readLocale('intlayer_with_tanstack.md', 'en'),
|
|
742
761
|
ru: readLocale('intlayer_with_tanstack.md', 'ru'),
|