@intlayer/docs 8.0.4 → 8.0.5
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/dist/cjs/blog.cjs +1 -0
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +1 -0
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs +1 -0
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +1 -0
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +21 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +1 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +1 -0
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/legal.cjs +1 -0
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -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/cli/doc-translate.md +1 -0
- package/docs/ar/cli/fill.md +1 -0
- package/docs/ar/configuration.md +10 -0
- package/docs/ar/intlayer_with_analog.md +371 -0
- package/docs/ar/intlayer_with_angular.md +12 -14
- package/docs/ar/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/de/agent_skills.md +53 -0
- package/docs/de/cli/doc-translate.md +1 -0
- package/docs/de/cli/fill.md +1 -0
- package/docs/de/configuration.md +10 -0
- package/docs/de/intlayer_with_analog.md +369 -0
- package/docs/de/intlayer_with_angular.md +11 -16
- package/docs/de/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/en/agent_skills.md +53 -0
- package/docs/en/cli/doc-translate.md +1 -0
- package/docs/en/cli/fill.md +1 -0
- package/docs/en/configuration.md +21 -1
- package/docs/en/intlayer_with_analog.md +4 -12
- package/docs/en/intlayer_with_angular.md +13 -15
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/cli/doc-translate.md +1 -0
- package/docs/en-GB/cli/fill.md +1 -0
- package/docs/en-GB/configuration.md +10 -0
- package/docs/en-GB/intlayer_with_analog.md +369 -0
- package/docs/en-GB/intlayer_with_angular.md +12 -14
- package/docs/en-GB/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/es/agent_skills.md +53 -0
- package/docs/es/cli/doc-translate.md +1 -0
- package/docs/es/cli/fill.md +1 -0
- package/docs/es/configuration.md +10 -0
- package/docs/es/intlayer_with_analog.md +369 -0
- package/docs/es/intlayer_with_angular.md +11 -16
- package/docs/es/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/fr/agent_skills.md +53 -0
- package/docs/fr/cli/doc-translate.md +1 -0
- package/docs/fr/cli/fill.md +1 -0
- package/docs/fr/configuration.md +10 -0
- package/docs/fr/intlayer_with_analog.md +369 -0
- package/docs/fr/intlayer_with_angular.md +11 -16
- package/docs/fr/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/hi/cli/doc-translate.md +1 -0
- package/docs/hi/cli/fill.md +1 -0
- package/docs/hi/configuration.md +10 -0
- package/docs/hi/intlayer_with_analog.md +371 -0
- package/docs/hi/intlayer_with_angular.md +12 -14
- package/docs/hi/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/id/cli/doc-translate.md +1 -0
- package/docs/id/cli/fill.md +1 -0
- package/docs/id/configuration.md +10 -0
- package/docs/id/intlayer_with_analog.md +371 -0
- package/docs/id/intlayer_with_angular.md +12 -14
- package/docs/id/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/it/agent_skills.md +53 -0
- package/docs/it/cli/doc-translate.md +1 -0
- package/docs/it/cli/fill.md +1 -0
- package/docs/it/configuration.md +10 -0
- package/docs/it/intlayer_with_analog.md +371 -0
- package/docs/it/intlayer_with_angular.md +12 -14
- package/docs/it/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/ja/agent_skills.md +53 -0
- package/docs/ja/cli/doc-translate.md +1 -0
- package/docs/ja/cli/fill.md +1 -0
- package/docs/ja/configuration.md +10 -0
- package/docs/ja/intlayer_with_analog.md +365 -0
- package/docs/ja/intlayer_with_angular.md +12 -14
- package/docs/ja/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/ko/agent_skills.md +53 -0
- package/docs/ko/cli/doc-translate.md +1 -0
- package/docs/ko/cli/fill.md +1 -0
- package/docs/ko/configuration.md +10 -0
- package/docs/ko/intlayer_with_analog.md +365 -0
- package/docs/ko/intlayer_with_angular.md +12 -14
- package/docs/ko/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/pl/cli/doc-translate.md +1 -0
- package/docs/pl/cli/fill.md +1 -0
- package/docs/pl/configuration.md +10 -0
- package/docs/pl/intlayer_with_analog.md +371 -0
- package/docs/pl/intlayer_with_angular.md +12 -14
- package/docs/pl/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/pt/agent_skills.md +53 -0
- package/docs/pt/cli/doc-translate.md +1 -0
- package/docs/pt/cli/fill.md +1 -0
- package/docs/pt/configuration.md +10 -0
- package/docs/pt/intlayer_with_analog.md +371 -0
- package/docs/pt/intlayer_with_angular.md +12 -14
- package/docs/pt/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/ru/cli/doc-translate.md +1 -0
- package/docs/ru/cli/fill.md +1 -0
- package/docs/ru/configuration.md +18 -0
- package/docs/ru/intlayer_with_analog.md +371 -0
- package/docs/ru/intlayer_with_angular.md +12 -14
- package/docs/ru/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/tr/cli/doc-translate.md +1 -0
- package/docs/tr/cli/fill.md +1 -0
- package/docs/tr/configuration.md +10 -0
- package/docs/tr/intlayer_with_analog.md +365 -0
- package/docs/tr/intlayer_with_angular.md +12 -14
- package/docs/tr/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/uk/cli/doc-translate.md +1 -0
- package/docs/uk/cli/fill.md +1 -0
- package/docs/uk/configuration.md +10 -0
- package/docs/uk/intlayer_with_analog.md +365 -0
- package/docs/uk/intlayer_with_angular.md +12 -14
- package/docs/uk/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/vi/configuration.md +10 -0
- package/docs/vi/intlayer_with_analog.md +365 -0
- package/docs/vi/intlayer_with_angular.md +12 -14
- package/docs/vi/packages/solid-intlayer/useIntlayer.md +1 -1
- package/docs/zh/agent_skills.md +53 -0
- package/docs/zh/configuration.md +10 -0
- package/docs/zh/intlayer_with_analog.md +365 -0
- package/docs/zh/intlayer_with_angular.md +12 -14
- package/docs/zh/packages/solid-intlayer/useIntlayer.md +1 -1
- package/package.json +8 -8
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-04-18
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Analog i18n - Cách dịch ứng dụng Analog của bạn – hướng dẫn 2026
|
|
5
|
+
description: Khám phá cách làm cho ứng dụng Analog của bạn hỗ trợ đa ngôn ngữ. Làm theo tài liệu để quốc tế hóa (i18n) và dịch nó.
|
|
6
|
+
keywords:
|
|
7
|
+
- Quốc tế hóa
|
|
8
|
+
- Tài liệu
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Analog
|
|
11
|
+
- Angular
|
|
12
|
+
- JavaScript
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- analog
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer/tree/main/examples/analog-app-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 8.0.4
|
|
20
|
+
date: 2026-01-26
|
|
21
|
+
changes: Khởi tạo lịch sử
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Dịch ứng dụng Analog (Angular) của bạn bằng Intlayer | Quốc tế hóa (i18n)
|
|
25
|
+
|
|
26
|
+
## Mục lục
|
|
27
|
+
|
|
28
|
+
<TOC/>
|
|
29
|
+
|
|
30
|
+
## Intlayer là gì?
|
|
31
|
+
|
|
32
|
+
**Intlayer** là một thư viện quốc tế hóa (i18n) nguồn mở sáng tạo được thiết kế để đơn giản hóa việc hỗ trợ đa ngôn ngữ trong các ứng dụng web hiện đại.
|
|
33
|
+
|
|
34
|
+
Với Intlayer, bạn có thể:
|
|
35
|
+
|
|
36
|
+
- **Dễ dàng quản lý các bản dịch** bằng cách sử dụng các từ điển khai báo ở cấp độ thành phần.
|
|
37
|
+
- **Bản địa hóa động các siêu dữ liệu**, các tuyến đường và nội dung.
|
|
38
|
+
- **Đảm bảo hỗ trợ TypeScript** với các kiểu dữ liệu được tự động tạo, cải thiện khả năng tự động hoàn thành và phát hiện lỗi.
|
|
39
|
+
- **Hưởng lợi từ các tính năng nâng cao**, như phát hiện và chuyển đổi ngôn ngữ động.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Hướng dẫn từng bước để thiết lập Intlayer trong ứng dụng Analog
|
|
44
|
+
|
|
45
|
+
<Tabs defaultTab="code">
|
|
46
|
+
<Tab label="Mã nguồn" value="code">
|
|
47
|
+
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer/tree/main/examples/vite-analog-app?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="Demo CodeSandbox - Cách quốc tế hóa ứng dụng của bạn bằng Intlayer"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
</Tab>
|
|
57
|
+
</Tabs>
|
|
58
|
+
|
|
59
|
+
Xem [Mẫu ứng dụng](https://github.com/aymericzip/intlayer/tree/main/examples/analog-app-template) trên GitHub.
|
|
60
|
+
|
|
61
|
+
### Bước 1: Cài đặt các phụ thuộc
|
|
62
|
+
|
|
63
|
+
Cài đặt các gói cần thiết bằng npm:
|
|
64
|
+
|
|
65
|
+
```bash packageManager="npm"
|
|
66
|
+
npm install intlayer angular-intlayer vite-intlayer
|
|
67
|
+
npx intlayer init
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```bash packageManager="pnpm"
|
|
71
|
+
pnpm add intlayer angular-intlayer vite-intlayer
|
|
72
|
+
pnpm intlayer init
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```bash packageManager="yarn"
|
|
76
|
+
yarn add intlayer angular-intlayer vite-intlayer
|
|
77
|
+
yarn intlayer init
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```bash packageManager="bun"
|
|
81
|
+
bun add intlayer angular-intlayer vite-intlayer
|
|
82
|
+
bunx intlayer init
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- **intlayer**
|
|
86
|
+
|
|
87
|
+
Gói cốt lõi cung cấp các công cụ quốc tế hóa để quản lý cấu hình, dịch thuật, [khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md), chuyển mã và [các lệnh CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/index.md).
|
|
88
|
+
|
|
89
|
+
- **angular-intlayer**
|
|
90
|
+
Gói tích hợp Intlayer với ứng dụng Angular. Nó cung cấp các trình cung cấp ngữ cảnh (context providers) và các hook cho quốc tế hóa Angular.
|
|
91
|
+
|
|
92
|
+
- **vite-intlayer**
|
|
93
|
+
Gói tích hợp Intlayer với Vite. Nó cung cấp một plugin để xử lý các tệp khai báo nội dung và thiết lập các bí danh (aliases) để đạt hiệu suất tối ưu.
|
|
94
|
+
|
|
95
|
+
### Bước 2: Cấu hình dự án của bạn
|
|
96
|
+
|
|
97
|
+
Tạo một tệp cấu hình để thiết lập các ngôn ngữ cho ứng dụng của bạn:
|
|
98
|
+
|
|
99
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
100
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
101
|
+
|
|
102
|
+
const config: IntlayerConfig = {
|
|
103
|
+
internationalization: {
|
|
104
|
+
locales: [
|
|
105
|
+
Locales.ENGLISH,
|
|
106
|
+
Locales.FRENCH,
|
|
107
|
+
Locales.SPANISH,
|
|
108
|
+
// Các ngôn ngữ khác của bạn
|
|
109
|
+
],
|
|
110
|
+
defaultLocale: Locales.ENGLISH,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export default config;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
118
|
+
import { Locales } from "intlayer";
|
|
119
|
+
|
|
120
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
121
|
+
const config = {
|
|
122
|
+
internationalization: {
|
|
123
|
+
locales: [
|
|
124
|
+
Locales.ENGLISH,
|
|
125
|
+
Locales.FRENCH,
|
|
126
|
+
Locales.SPANISH,
|
|
127
|
+
// Các ngôn ngữ khác của bạn
|
|
128
|
+
],
|
|
129
|
+
defaultLocale: Locales.ENGLISH,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export default config;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
137
|
+
const { Locales } = require("intlayer");
|
|
138
|
+
|
|
139
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
140
|
+
const config = {
|
|
141
|
+
internationalization: {
|
|
142
|
+
locales: [
|
|
143
|
+
Locales.ENGLISH,
|
|
144
|
+
Locales.FRENCH,
|
|
145
|
+
Locales.SPANISH,
|
|
146
|
+
// Các ngôn ngữ khác của bạn
|
|
147
|
+
],
|
|
148
|
+
defaultLocale: Locales.ENGLISH,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
module.exports = config;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
> Thông qua tệp cấu hình này, bạn có thể thiết lập các URL được bản địa hóa, chuyển hướng trung gian (middleware redirection), tên cookie, vị trí và phần mở rộng của các khai báo nội dung của bạn, tắt nhật ký Intlayer trong bảng điều khiển, và nhiều hơn nữa. Để biết danh sách đầy đủ các tham số có sẵn, hãy tham khảo [tài liệu cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md).
|
|
156
|
+
|
|
157
|
+
### Bước 3: Tích hợp Intlayer vào cấu hình Vite của bạn
|
|
158
|
+
|
|
159
|
+
Để tích hợp Intlayer với Analog, bạn cần sử dụng plugin `vite-intlayer`.
|
|
160
|
+
|
|
161
|
+
Sửa đổi tệp `vite.config.ts` của bạn:
|
|
162
|
+
|
|
163
|
+
```typescript fileName="vite.config.ts"
|
|
164
|
+
import { defineConfig } from "vite";
|
|
165
|
+
import { intlayer } from "vite-intlayer";
|
|
166
|
+
import analog from "@analogjs/platform";
|
|
167
|
+
|
|
168
|
+
// https://vitejs.dev/config/
|
|
169
|
+
export default defineConfig(() => ({
|
|
170
|
+
plugins: [
|
|
171
|
+
analog(),
|
|
172
|
+
intlayer(), // Thêm plugin Intlayer
|
|
173
|
+
],
|
|
174
|
+
}));
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
> Plugin `intlayer()` cấu hình Vite với Intlayer. Nó xử lý các tệp khai báo nội dung và thiết lập các bí danh để đạt hiệu suất tối ưu.
|
|
178
|
+
|
|
179
|
+
### Bước 4: Khai báo nội dung của bạn
|
|
180
|
+
|
|
181
|
+
Tạo và quản lý các khai báo nội dung của bạn để lưu trữ các bản dịch:
|
|
182
|
+
|
|
183
|
+
```tsx fileName="src/app/app.content.ts" contentDeclarationFormat="typescript"
|
|
184
|
+
import { t, type Dictionary } from "intlayer";
|
|
185
|
+
|
|
186
|
+
const appContent = {
|
|
187
|
+
key: "app",
|
|
188
|
+
content: {
|
|
189
|
+
title: t({
|
|
190
|
+
en: "Hello",
|
|
191
|
+
fr: "Bonjour",
|
|
192
|
+
es: "Hola",
|
|
193
|
+
vi: "Xin chào",
|
|
194
|
+
}),
|
|
195
|
+
congratulations: t({
|
|
196
|
+
en: "Congratulations! Your app is running. 🎉",
|
|
197
|
+
fr: "Félicitations! Votre application est en cours d'exécution. 🎉",
|
|
198
|
+
es: "¡Felicidades! Tu aplicación está en ejecución. 🎉",
|
|
199
|
+
vi: "Chúc mừng! Ứng dụng của bạn đang chạy. 🎉",
|
|
200
|
+
}),
|
|
201
|
+
},
|
|
202
|
+
} satisfies Dictionary;
|
|
203
|
+
|
|
204
|
+
export default appContent;
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
> Các khai báo nội dung của bạn có thể được định nghĩa ở bất kỳ đâu trong ứng dụng của bạn miễn là chúng được bao gồm trong thư mục `contentDir` (mặc định là `./src`). Và khớp với phần mở rộng tệp khai báo nội dung (mặc định là `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
208
|
+
|
|
209
|
+
> Để biết thêm chi tiết, hãy tham khảo [tài liệu khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md).
|
|
210
|
+
|
|
211
|
+
### Bước 5: Sử dụng Intlayer trong mã của bạn
|
|
212
|
+
|
|
213
|
+
Để sử dụng các tính năng quốc tế hóa của Intlayer trong suốt ứng dụng Analog của bạn, bạn cần cung cấp Intlayer trong cấu hình ứng dụng của mình.
|
|
214
|
+
|
|
215
|
+
```typescript fileName="src/app/app.config.ts"
|
|
216
|
+
import { ApplicationConfig } from "@angular/core";
|
|
217
|
+
import { provideIntlayer } from "angular-intlayer";
|
|
218
|
+
|
|
219
|
+
export const appConfig: ApplicationConfig = {
|
|
220
|
+
providers: [
|
|
221
|
+
provideIntlayer(), // Thêm trình cung cấp Intlayer tại đây
|
|
222
|
+
],
|
|
223
|
+
};
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Sau đó, bạn có thể sử dụng hàm `useIntlayer` trong bất kỳ thành phần nào.
|
|
227
|
+
|
|
228
|
+
```typescript fileName="src/app/pages/index.page.ts"
|
|
229
|
+
import { Component } from "@angular/core";
|
|
230
|
+
import { useIntlayer } from "angular-intlayer";
|
|
231
|
+
|
|
232
|
+
@Component({
|
|
233
|
+
selector: "app-home",
|
|
234
|
+
standalone: true,
|
|
235
|
+
template: `
|
|
236
|
+
<div class="content">
|
|
237
|
+
<h1>{{ content().title }}</h1>
|
|
238
|
+
<p>{{ content().congratulations }}</p>
|
|
239
|
+
</div>
|
|
240
|
+
`,
|
|
241
|
+
})
|
|
242
|
+
export default class HomeComponent {
|
|
243
|
+
content = useIntlayer("app");
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Nội dung Intlayer được trả về dưới dạng một `Signal`, vì vậy bạn truy cập các giá trị bằng cách gọi signal: `content().title`.
|
|
248
|
+
|
|
249
|
+
### (Tùy chọn) Bước 6: Thay đổi ngôn ngữ của nội dung
|
|
250
|
+
|
|
251
|
+
Để thay đổi ngôn ngữ của nội dung, bạn có thể sử dụng hàm `setLocale` được cung cấp bởi hàm `useLocale`. Điều này cho phép bạn thiết lập ngôn ngữ của ứng dụng và cập nhật nội dung tương ứng.
|
|
252
|
+
|
|
253
|
+
Tạo một thành phần để chuyển đổi giữa các ngôn ngữ:
|
|
254
|
+
|
|
255
|
+
```typescript fileName="src/app/locale-switcher.component.ts"
|
|
256
|
+
import { Component } from "@angular/core";
|
|
257
|
+
import { CommonModule } from "@angular/common";
|
|
258
|
+
import { useLocale } from "angular-intlayer";
|
|
259
|
+
|
|
260
|
+
@Component({
|
|
261
|
+
selector: "app-locale-switcher",
|
|
262
|
+
standalone: true,
|
|
263
|
+
imports: [CommonModule],
|
|
264
|
+
template: `
|
|
265
|
+
<div class="locale-switcher">
|
|
266
|
+
<select
|
|
267
|
+
[value]="locale()"
|
|
268
|
+
(change)="setLocale($any($event.target).value)"
|
|
269
|
+
>
|
|
270
|
+
@for (loc of availableLocales; track loc) {
|
|
271
|
+
<option [value]="loc">{{ loc }}</option>
|
|
272
|
+
}
|
|
273
|
+
</select>
|
|
274
|
+
</div>
|
|
275
|
+
`,
|
|
276
|
+
styles: [
|
|
277
|
+
`
|
|
278
|
+
.locale-switcher {
|
|
279
|
+
margin: 1rem;
|
|
280
|
+
padding: 0.5rem;
|
|
281
|
+
border: 1px solid #ccc;
|
|
282
|
+
border-radius: 4px;
|
|
283
|
+
width: fit-content;
|
|
284
|
+
}
|
|
285
|
+
`,
|
|
286
|
+
],
|
|
287
|
+
})
|
|
288
|
+
export class LocaleSwitcherComponent {
|
|
289
|
+
localeCtx = useLocale();
|
|
290
|
+
|
|
291
|
+
locale = this.localeCtx.locale;
|
|
292
|
+
availableLocales = this.localeCtx.availableLocales;
|
|
293
|
+
setLocale = this.localeCtx.setLocale;
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Sau đó, sử dụng thành phần này trong các trang của bạn:
|
|
298
|
+
|
|
299
|
+
```typescript fileName="src/app/pages/index.page.ts"
|
|
300
|
+
import { Component } from "@angular/core";
|
|
301
|
+
import { useIntlayer } from "angular-intlayer";
|
|
302
|
+
import { LocaleSwitcherComponent } from "../locale-switcher.component";
|
|
303
|
+
|
|
304
|
+
@Component({
|
|
305
|
+
selector: "app-home",
|
|
306
|
+
standalone: true,
|
|
307
|
+
imports: [LocaleSwitcherComponent],
|
|
308
|
+
template: `
|
|
309
|
+
<app-locale-switcher></app-locale-switcher>
|
|
310
|
+
<div class="content">
|
|
311
|
+
<h1>{{ content().title }}</h1>
|
|
312
|
+
<p>{{ content().congratulations }}</p>
|
|
313
|
+
</div>
|
|
314
|
+
`,
|
|
315
|
+
})
|
|
316
|
+
export default class HomeComponent {
|
|
317
|
+
content = useIntlayer("app");
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Cấu hình TypeScript
|
|
322
|
+
|
|
323
|
+
Intlayer sử dụng module augmentation để tận dụng các lợi ích của TypeScript và làm cho mã nguồn của bạn mạnh mẽ hơn.
|
|
324
|
+
|
|
325
|
+

|
|
326
|
+
|
|
327
|
+

|
|
328
|
+
|
|
329
|
+
Đảm bảo cấu hình TypeScript của bạn bao gồm các kiểu dữ liệu được tự động tạo.
|
|
330
|
+
|
|
331
|
+
```json5 fileName="tsconfig.json"
|
|
332
|
+
{
|
|
333
|
+
// ... Các cấu hình TypeScript hiện tại của bạn
|
|
334
|
+
"include": [
|
|
335
|
+
// ... Các cấu hình TypeScript hiện tại của bạn
|
|
336
|
+
".intlayer/**/*.ts", // Bao gồm các kiểu dữ liệu được tự động tạo
|
|
337
|
+
],
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Cấu hình Git
|
|
342
|
+
|
|
343
|
+
Khuyên dùng bỏ qua các tệp được tạo bởi Intlayer. Điều này cho phép bạn tránh việc commit chúng vào kho lưu trữ Git của mình.
|
|
344
|
+
|
|
345
|
+
Để thực hiện việc này, bạn có thể thêm các hướng dẫn sau vào tệp `.gitignore` của mình:
|
|
346
|
+
|
|
347
|
+
```plaintext
|
|
348
|
+
# Bỏ qua các tệp được tạo bởi Intlayer
|
|
349
|
+
.intlayer
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Tiện ích mở rộng VS Code
|
|
353
|
+
|
|
354
|
+
Để cải thiện trải nghiệm phát triển của bạn với Intlayer, bạn có thể cài đặt **Tiện ích mở rộng Intlayer VS Code** chính thức.
|
|
355
|
+
|
|
356
|
+
[Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
357
|
+
|
|
358
|
+
Tiện ích mở rộng này cung cấp:
|
|
359
|
+
|
|
360
|
+
- **Tự động hoàn thành** cho các khóa dịch.
|
|
361
|
+
- **Phát hiện lỗi thời gian thực** cho các bản dịch bị thiếu.
|
|
362
|
+
- **Xem trước nội tuyến** nội dung đã dịch.
|
|
363
|
+
- **Các hành động nhanh** để dễ dàng tạo và cập nhật các bản dịch.
|
|
364
|
+
|
|
365
|
+
Để biết thêm chi tiết về cách sử dụng tiện ích mở rộng, hãy tham khảo [tài liệu Tiện ích mở rộng Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
@@ -166,30 +166,28 @@ module.exports = config;
|
|
|
166
166
|
|
|
167
167
|
Đầu tiên, sửa đổi tệp `angular.json` của bạn để sử dụng trình xây dựng Webpack tùy chỉnh. Cập nhật các cấu hình `build` và `serve`:
|
|
168
168
|
|
|
169
|
-
```
|
|
169
|
+
```json5 fileName="angular.json"
|
|
170
170
|
{
|
|
171
171
|
"projects": {
|
|
172
172
|
"your-app-name": {
|
|
173
173
|
"architect": {
|
|
174
174
|
"build": {
|
|
175
|
-
"builder": "@angular-builders/custom-webpack:browser",
|
|
175
|
+
"builder": "@angular-builders/custom-webpack:browser", // replace "@angular-devkit/build-angular:application",
|
|
176
176
|
"options": {
|
|
177
177
|
"customWebpackConfig": {
|
|
178
|
-
"path": "./webpack.config.ts"
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
"path": "./webpack.config.ts",
|
|
179
|
+
"mergeStrategies": { "module.rules": "prepend" },
|
|
180
|
+
},
|
|
181
|
+
"main": "src/main.ts", // replace "browser": "src/main.ts",
|
|
182
|
+
// ...
|
|
183
|
+
},
|
|
181
184
|
},
|
|
182
185
|
"serve": {
|
|
183
186
|
"builder": "@angular-builders/custom-webpack:dev-server",
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
193
191
|
}
|
|
194
192
|
```
|
|
195
193
|
|
|
@@ -33,7 +33,7 @@ Hook `useIntlayer` cho phép bạn lấy nội dung được nội địa hóa t
|
|
|
33
33
|
import { useIntlayer } from "solid-intlayer";
|
|
34
34
|
|
|
35
35
|
const MyComponent = () => {
|
|
36
|
-
const content = useIntlayer("
|
|
36
|
+
const content = useIntlayer("my-dictionary-key");
|
|
37
37
|
|
|
38
38
|
return (
|
|
39
39
|
<div>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-02-09
|
|
3
|
+
updatedAt: 2026-02-09
|
|
4
|
+
title: 代理技能
|
|
5
|
+
description: 了解如何使用 Intlayer 代理技能来提高 AI 代理对项目的理解。
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- 代理技能
|
|
9
|
+
- AI 代理
|
|
10
|
+
- 国际化
|
|
11
|
+
- 文档
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- agent_skills
|
|
15
|
+
history:
|
|
16
|
+
- version: 8.0.4
|
|
17
|
+
date: 2026-02-09
|
|
18
|
+
changes: 初始化历史
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## `intlayer init skills` 命令
|
|
22
|
+
|
|
23
|
+
`intlayer init skills` 命令是在项目中设置代理技能的最简单方法。它会检测您的环境并为您喜欢的平台安装必要的配置文件。
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx intlayer init skills
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
运行此命令时,它将:
|
|
30
|
+
|
|
31
|
+
1. 检测您正在使用的框架(例如 Next.js、React、Vite)。
|
|
32
|
+
2. 询问您要为哪些平台安装技能(Cursor、VS Code、OpenCode、Claude Code 等)。
|
|
33
|
+
3. 生成所需的配置文件(例如 `.cursor/mcp.json`、`.vscode/mcp.json` 或 `.intlayer/skills/*.md`)。
|
|
34
|
+
|
|
35
|
+
## 支持的平台
|
|
36
|
+
|
|
37
|
+
Intlayer 支持与以下平台集成:
|
|
38
|
+
|
|
39
|
+
### 1. Cursor
|
|
40
|
+
|
|
41
|
+
Cursor 支持 MCP (Model Context Protocol) 服务器。运行 `intlayer init skills` 将创建一个 `.cursor/mcp.json` 文件,允许 Cursor 与 Intlayer MCP 服务器通信。
|
|
42
|
+
|
|
43
|
+
### 2. VS Code
|
|
44
|
+
|
|
45
|
+
对于 VS Code 用户,尤其是那些使用 GitHub Copilot 或其他兼容 MCP 的扩展的用户,该命令会创建一个 `.vscode/mcp.json` 配置。
|
|
46
|
+
|
|
47
|
+
### 3. OpenCode
|
|
48
|
+
|
|
49
|
+
OpenCode 是一个专为软件工程任务设计的交互式 CLI 代理。Intlayer 提供特定的技能来帮助 OpenCode 协助您完成国际化任务。
|
|
50
|
+
|
|
51
|
+
### 4. Claude Code
|
|
52
|
+
|
|
53
|
+
可以通过将生成的配置添加到其桌面或 CLI 设置中,将 Claude Code 配置为使用 Intlayer 技能。
|
package/docs/zh/configuration.md
CHANGED
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 8.0.5
|
|
18
|
+
date: 2026-02-06
|
|
19
|
+
changes: 在 AI 配置中添加 `dataSerialization`
|
|
17
20
|
- version: 8.0.0
|
|
18
21
|
date: 2026-01-22
|
|
19
22
|
changes: Move `importMode` build configuration to `dictionary` configuration.
|
|
@@ -889,6 +892,13 @@ Intlayer 支持多个 AI 提供商,以增强灵活性和选择。目前支持
|
|
|
889
892
|
- _示例_: `'https://api.openai.com/v1'`
|
|
890
893
|
- _注意_: 可用于指向本地或自定义的 AI API 端点。
|
|
891
894
|
|
|
895
|
+
- **dataSerialization**:
|
|
896
|
+
- _类型_: `'json' | 'toon'`
|
|
897
|
+
- _默认值_: `'json'`
|
|
898
|
+
- _描述_: 用于 Intlayer AI 功能的数据序列化格式。
|
|
899
|
+
- _示例_: `'toon'`
|
|
900
|
+
- _注意_: `json`: 标准、可靠;使用更多令牌。`toon`: 令牌更少,但不如 JSON 一致。
|
|
901
|
+
|
|
892
902
|
### 构建配置
|
|
893
903
|
|
|
894
904
|
控制 Intlayer 如何优化和构建您的应用程序国际化的设置。
|