@intlayer/docs 8.9.4-canary.0 → 8.9.4
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/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.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/mcp_server.md +30 -17
- package/docs/ar/plugins/sync-po.md +354 -0
- package/docs/de/mcp_server.md +29 -16
- package/docs/de/plugins/sync-po.md +354 -0
- package/docs/en/mcp_server.md +31 -18
- package/docs/en/plugins/sync-po.md +354 -0
- package/docs/en-GB/mcp_server.md +31 -18
- package/docs/en-GB/plugins/sync-po.md +354 -0
- package/docs/es/mcp_server.md +30 -17
- package/docs/es/plugins/sync-po.md +354 -0
- package/docs/fr/mcp_server.md +30 -17
- package/docs/fr/plugins/sync-po.md +354 -0
- package/docs/hi/mcp_server.md +31 -18
- package/docs/hi/plugins/sync-po.md +354 -0
- package/docs/id/mcp_server.md +30 -17
- package/docs/id/plugins/sync-po.md +354 -0
- package/docs/it/mcp_server.md +30 -17
- package/docs/it/plugins/sync-po.md +354 -0
- package/docs/ja/mcp_server.md +29 -16
- package/docs/ja/plugins/sync-po.md +354 -0
- package/docs/ko/mcp_server.md +31 -18
- package/docs/ko/plugins/sync-po.md +354 -0
- package/docs/pl/mcp_server.md +30 -17
- package/docs/pl/plugins/sync-po.md +354 -0
- package/docs/pt/mcp_server.md +30 -17
- package/docs/pt/plugins/sync-po.md +354 -0
- package/docs/ru/mcp_server.md +30 -17
- package/docs/ru/plugins/sync-po.md +354 -0
- package/docs/tr/mcp_server.md +31 -18
- package/docs/tr/plugins/sync-po.md +354 -0
- package/docs/uk/mcp_server.md +29 -16
- package/docs/uk/plugins/sync-po.md +354 -0
- package/docs/vi/mcp_server.md +30 -17
- package/docs/vi/plugins/sync-po.md +354 -0
- package/docs/zh/mcp_server.md +31 -18
- package/docs/zh/plugins/sync-po.md +354 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-05-10
|
|
3
|
+
updatedAt: 2026-05-10
|
|
4
|
+
title: Plugin Sync PO
|
|
5
|
+
description: Đồng bộ hóa từ điển Intlayer với các tệp Gettext PO. Giữ nguyên i18n hiện tại của bạn trong khi sử dụng Intlayer để quản lý, dịch và kiểm tra các tin nhắn của bạn.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Sync PO
|
|
9
|
+
- Gettext
|
|
10
|
+
- i18n
|
|
11
|
+
- dịch thuật
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- plugin
|
|
15
|
+
- sync-po
|
|
16
|
+
youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
|
|
17
|
+
history:
|
|
18
|
+
- version: 8.9.4
|
|
19
|
+
date: 2026-05-10
|
|
20
|
+
changes: "Tài liệu ban đầu cho plugin Sync PO"
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Sync PO (cầu nối i18n) - Đồng bộ hóa PO với hỗ trợ ICU / i18next
|
|
24
|
+
|
|
25
|
+
Sử dụng Intlayer như một tiện ích bổ sung cho ngăn xếp i18n hiện có của bạn. Plugin này giữ cho các tin nhắn Gettext PO của bạn đồng bộ với từ điển Intlayer để bạn có thể:
|
|
26
|
+
|
|
27
|
+
- Giữ nguyên quy trình dịch thuật dựa trên PO hiện tại của bạn.
|
|
28
|
+
- Quản lý và dịch các tin nhắn của bạn với Intlayer (CLI, CI, nhà cung cấp, CMS) mà không cần cấu trúc lại ứng dụng của bạn.
|
|
29
|
+
- Cung cấp các hướng dẫn và nội dung SEO nhắm mục tiêu đến từng hệ sinh thái, đồng thời đề xuất Intlayer như một lớp quản lý PO.
|
|
30
|
+
|
|
31
|
+
Ghi chú và phạm vi hiện tại:
|
|
32
|
+
|
|
33
|
+
- Việc bên ngoài hóa sang CMS hoạt động cho các bản dịch và văn bản cổ điển.
|
|
34
|
+
- Chưa hỗ trợ cho việc chèn, số nhiều/ICU hoặc các tính năng runtime nâng cao của các thư viện khác trong chính các mục nhập PO.
|
|
35
|
+
- Trình chỉnh sửa trực quan chưa được hỗ trợ cho các đầu ra i18n của bên thứ ba.
|
|
36
|
+
|
|
37
|
+
### Khi nào nên sử dụng plugin này
|
|
38
|
+
|
|
39
|
+
- Bạn đã sử dụng các tệp Gettext PO cho các bản dịch của mình.
|
|
40
|
+
- Bạn muốn điền dữ liệu có hỗ trợ AI, kiểm tra trong CI và vận hành nội dung mà không cần thay đổi runtime kết xuất của mình.
|
|
41
|
+
|
|
42
|
+
## Cài đặt
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm add -D @intlayer/sync-po-plugin
|
|
46
|
+
# hoặc
|
|
47
|
+
npm i -D @intlayer/sync-po-plugin
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Plugin
|
|
51
|
+
|
|
52
|
+
Gói này cung cấp hai plugin:
|
|
53
|
+
|
|
54
|
+
- `loadPO`: Tải các tệp PO vào từ điển Intlayer.
|
|
55
|
+
- Plugin này được sử dụng để tải các tệp PO từ một nguồn và sẽ được tải vào từ điển Intlayer. Nó có thể quét toàn bộ mã nguồn và tìm kiếm các tệp PO cụ thể.
|
|
56
|
+
Plugin này có thể được sử dụng:
|
|
57
|
+
- nếu bạn sử dụng một thư viện i18n áp đặt một vị trí cụ thể để tải các tệp PO của bạn, nhưng bạn muốn đặt khai báo nội dung của mình ở bất cứ đâu bạn muốn trong mã nguồn.
|
|
58
|
+
- Nó cũng có thể được sử dụng nếu bạn muốn tìm nạp các tin nhắn của mình từ một nguồn từ xa (ví dụ: CMS, API, v.v.) và lưu trữ các tin nhắn của bạn trong các tệp PO.
|
|
59
|
+
|
|
60
|
+
> Bên dưới, plugin này sẽ quét toàn bộ mã nguồn và tìm kiếm các tệp PO cụ thể và tải chúng vào từ điển Intlayer.
|
|
61
|
+
> Lưu ý rằng plugin này sẽ không ghi kết quả đầu ra và các bản dịch ngược lại vào các tệp PO.
|
|
62
|
+
|
|
63
|
+
- `syncPO`: Đồng bộ hóa các tệp PO với từ điển Intlayer.
|
|
64
|
+
- Plugin này được sử dụng để đồng bộ hóa các tệp PO với từ điển Intlayer. Nó có thể quét vị trí đã cho và tải PO khớp với mẫu cho các tệp PO cụ thể. Plugin này hữu ích nếu bạn muốn nhận được các lợi ích của Intlayer trong khi sử dụng một thư viện i18n khác.
|
|
65
|
+
|
|
66
|
+
## Sử dụng cả hai plugin
|
|
67
|
+
|
|
68
|
+
```ts fileName="intlayer.config.ts"
|
|
69
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
70
|
+
import { loadPO, syncPO } from "@intlayer/sync-po-plugin";
|
|
71
|
+
|
|
72
|
+
const config: IntlayerConfig = {
|
|
73
|
+
internationalization: {
|
|
74
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
75
|
+
defaultLocale: Locales.ENGLISH,
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
// Giữ các tệp PO hiện tại của bạn đồng bộ với từ điển Intlayer
|
|
79
|
+
plugins: [
|
|
80
|
+
/**
|
|
81
|
+
* Sẽ tải tất cả các tệp PO trong src khớp với mẫu {key}.i18n.po
|
|
82
|
+
*/
|
|
83
|
+
loadPO({
|
|
84
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
85
|
+
locale: Locales.ENGLISH,
|
|
86
|
+
priority: 1, // Đảm bảo các tệp PO này được ưu tiên hơn các tệp tại `./locales/en/${key}.po`
|
|
87
|
+
}),
|
|
88
|
+
/**
|
|
89
|
+
* Sẽ tải và ghi kết quả đầu ra và bản dịch ngược lại vào các tệp PO trong thư mục locales
|
|
90
|
+
*/
|
|
91
|
+
syncPO({
|
|
92
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
93
|
+
priority: 0,
|
|
94
|
+
}),
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export default config;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Plugin `syncPO`
|
|
102
|
+
|
|
103
|
+
### Bắt đầu nhanh
|
|
104
|
+
|
|
105
|
+
Thêm plugin vào `intlayer.config.ts` của bạn và trỏ nó vào cấu trúc PO hiện có của bạn.
|
|
106
|
+
|
|
107
|
+
```ts fileName="intlayer.config.ts"
|
|
108
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
109
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
110
|
+
|
|
111
|
+
const config: IntlayerConfig = {
|
|
112
|
+
internationalization: {
|
|
113
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
114
|
+
defaultLocale: Locales.ENGLISH,
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
// Giữ các tệp PO hiện tại của bạn đồng bộ với từ điển Intlayer
|
|
118
|
+
plugins: [
|
|
119
|
+
syncPO({
|
|
120
|
+
// Bố cục theo từng locale, từng namespace
|
|
121
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
122
|
+
}),
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default config;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Thay thế: một tệp duy nhất cho mỗi locale:
|
|
130
|
+
|
|
131
|
+
```ts fileName="intlayer.config.ts"
|
|
132
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
133
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
134
|
+
|
|
135
|
+
const config: IntlayerConfig = {
|
|
136
|
+
internationalization: {
|
|
137
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
138
|
+
defaultLocale: Locales.ENGLISH,
|
|
139
|
+
},
|
|
140
|
+
plugins: [
|
|
141
|
+
syncPO({
|
|
142
|
+
source: ({ locale }) => `./locales/${locale}.po`,
|
|
143
|
+
}),
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export default config;
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Cách hoạt động
|
|
151
|
+
|
|
152
|
+
- Đọc: plugin khám phá các tệp PO từ trình xây dựng `source` của bạn và tải chúng dưới dạng từ điển Intlayer.
|
|
153
|
+
- Ghi: sau khi xây dựng và điền dữ liệu, nó ghi PO đã bản địa hóa ngược lại các đường dẫn tương ứng (với các tiêu đề Gettext thích hợp).
|
|
154
|
+
- Tự động điền: plugin khai báo một đường dẫn `autoFill` cho mỗi từ điển. Chạy `intlayer fill` sẽ chỉ cập nhật các bản dịch bị thiếu trong các tệp PO của bạn theo mặc định.
|
|
155
|
+
|
|
156
|
+
API:
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
syncPO({
|
|
160
|
+
source: ({ key, locale }) => string, // bắt buộc
|
|
161
|
+
location?: string, // nhãn tùy chọn, mặc định: "sync-po::path/to/source"
|
|
162
|
+
priority?: number, // ưu tiên tùy chọn để giải quyết xung đột, mặc định: 0
|
|
163
|
+
format?: 'icu' | 'i18next' | 'vue-i18n', // tùy chọn, chỉ cần thiết khi giá trị msgstr của bạn sử dụng cú pháp nội suy cụ thể
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### `format` ('icu' | 'i18next' | 'vue-i18n')
|
|
168
|
+
|
|
169
|
+
Các tệp PO luôn là các tệp Gettext Portable Object — điều đó là cố định. Tùy chọn này chỉ mô tả **cú pháp nội suy** được sử dụng bên trong các giá trị `msgstr`, để Intlayer có thể chuyển đổi chúng sang định dạng của riêng nó tại thời điểm phân tích cú pháp (thông qua `formatDictionary`) và ngược lại khi ghi đầu ra.
|
|
170
|
+
|
|
171
|
+
- `undefined` _(mặc định)_: các giá trị `msgstr` được coi là các chuỗi văn bản thuần túy — không có chuyển đổi. Sử dụng tùy chọn này cho hầu hết các tệp PO.
|
|
172
|
+
- `'icu'`: các giá trị `msgstr` sử dụng cú pháp tin nhắn ICU (ví dụ: `{count, plural, one {# item} other {# items}}`).
|
|
173
|
+
- `'i18next'`: các giá trị `msgstr` sử dụng cú pháp nội suy i18next (ví dụ: `{{variable}}`).
|
|
174
|
+
- `'vue-i18n'`: các giá trị `msgstr` sử dụng cú pháp Vue I18n.
|
|
175
|
+
|
|
176
|
+
> Chuyển đổi được áp dụng bởi `formatDictionary` của `@intlayer/chokidar` khi tải và đảo ngược với `formatDictionaryOutput` khi ghi. Đối với các quy tắc phức tạp như số nhiều ICU, độ trung thực của quy trình chuyển đổi qua lại không được đảm bảo.
|
|
177
|
+
|
|
178
|
+
**Ví dụ — Các tệp PO chứa nội suy kiểu i18next:**
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
syncPO({
|
|
182
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
183
|
+
format: "i18next",
|
|
184
|
+
}),
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Nhiều nguồn PO và mức độ ưu tiên
|
|
188
|
+
|
|
189
|
+
Bạn có thể thêm nhiều plugin `syncPO` để đồng bộ hóa các nguồn PO khác nhau. Điều này hữu ích khi bạn có nhiều nguồn dịch hoặc cấu trúc PO khác nhau trong dự án của mình.
|
|
190
|
+
|
|
191
|
+
#### Hệ thống ưu tiên
|
|
192
|
+
|
|
193
|
+
Khi nhiều plugin nhắm mục tiêu cùng một khóa từ điển, tham số `priority` sẽ xác định plugin nào được ưu tiên:
|
|
194
|
+
|
|
195
|
+
- Số ưu tiên cao hơn sẽ thắng số thấp hơn
|
|
196
|
+
- Mức độ ưu tiên mặc định của các tệp `.content` là `0`
|
|
197
|
+
- Mức độ ưu tiên mặc định của các plugin là `0`
|
|
198
|
+
- Các plugin có cùng mức độ ưu tiên được xử lý theo thứ tự chúng xuất hiện trong cấu hình
|
|
199
|
+
|
|
200
|
+
```ts fileName="intlayer.config.ts"
|
|
201
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
202
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
203
|
+
|
|
204
|
+
const config: IntlayerConfig = {
|
|
205
|
+
internationalization: {
|
|
206
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
207
|
+
defaultLocale: Locales.ENGLISH,
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
plugins: [
|
|
211
|
+
// Nguồn PO chính (mức ưu tiên cao nhất)
|
|
212
|
+
syncPO({
|
|
213
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
214
|
+
location: "main-translations",
|
|
215
|
+
priority: 10,
|
|
216
|
+
}),
|
|
217
|
+
|
|
218
|
+
// Nguồn PO dự phòng (mức ưu tiên thấp hơn)
|
|
219
|
+
syncPO({
|
|
220
|
+
source: ({ locale }) => `./fallback-locales/${locale}.po`,
|
|
221
|
+
location: "fallback-translations",
|
|
222
|
+
priority: 5,
|
|
223
|
+
}),
|
|
224
|
+
|
|
225
|
+
// Nguồn PO cũ (mức ưu tiên thấp nhất)
|
|
226
|
+
syncPO({
|
|
227
|
+
source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,
|
|
228
|
+
location: "legacy-translations",
|
|
229
|
+
priority: 1,
|
|
230
|
+
}),
|
|
231
|
+
],
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
export default config;
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Plugin Load PO
|
|
238
|
+
|
|
239
|
+
### Bắt đầu nhanh
|
|
240
|
+
|
|
241
|
+
Thêm plugin vào `intlayer.config.ts` của bạn để nạp các tệp PO hiện có dưới dạng từ điển Intlayer. Plugin này chỉ dành cho việc đọc (không ghi vào đĩa):
|
|
242
|
+
|
|
243
|
+
```ts fileName="intlayer.config.ts"
|
|
244
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
245
|
+
import { loadPO } from "@intlayer/sync-po-plugin";
|
|
246
|
+
|
|
247
|
+
const config: IntlayerConfig = {
|
|
248
|
+
internationalization: {
|
|
249
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
250
|
+
defaultLocale: Locales.ENGLISH,
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
plugins: [
|
|
254
|
+
// Nạp các tin nhắn PO nằm ở bất kỳ đâu trong cây mã nguồn của bạn
|
|
255
|
+
loadPO({
|
|
256
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
257
|
+
// Tải một locale duy nhất cho mỗi phiên bản plugin (mặc định là defaultLocale của cấu hình)
|
|
258
|
+
locale: Locales.ENGLISH,
|
|
259
|
+
priority: 0,
|
|
260
|
+
}),
|
|
261
|
+
],
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export default config;
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Thay thế: bố cục theo từng locale, vẫn chỉ dành cho việc đọc (chỉ locale được chọn mới được tải):
|
|
268
|
+
|
|
269
|
+
```ts fileName="intlayer.config.ts"
|
|
270
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
271
|
+
import { loadPO } from "@intlayer/sync-po-plugin";
|
|
272
|
+
|
|
273
|
+
const config: IntlayerConfig = {
|
|
274
|
+
internationalization: {
|
|
275
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
276
|
+
defaultLocale: Locales.ENGLISH,
|
|
277
|
+
},
|
|
278
|
+
plugins: [
|
|
279
|
+
loadPO({
|
|
280
|
+
// Chỉ các tệp cho Locales.FRENCH mới được nạp từ mẫu này
|
|
281
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
282
|
+
locale: Locales.FRENCH,
|
|
283
|
+
}),
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
export default config;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Cách hoạt động
|
|
291
|
+
|
|
292
|
+
- Khám phá: xây dựng một glob từ trình xây dựng `source` của bạn và thu thập các tệp PO phù hợp.
|
|
293
|
+
- Nạp: tải từng tệp PO dưới dạng từ điển Intlayer với `locale` được cung cấp.
|
|
294
|
+
- Chỉ đọc: không ghi hoặc định dạng các tệp đầu ra; sử dụng `syncPO` nếu bạn cần đồng bộ hóa hai chiều.
|
|
295
|
+
- Sẵn sàng tự động điền: xác định một đường dẫn `fill` để `intlayer content fill` có thể điền các khóa bị thiếu.
|
|
296
|
+
|
|
297
|
+
### API
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
loadPO({
|
|
301
|
+
// Xây dựng các đường dẫn đến PO của bạn. `locale` là tùy chọn nếu cấu trúc của bạn không có phân đoạn locale
|
|
302
|
+
source: ({ key, locale }) => string,
|
|
303
|
+
|
|
304
|
+
// Locale mục tiêu cho các từ điển được tải bởi phiên bản plugin này
|
|
305
|
+
// Mặc định là configuration.internationalization.defaultLocale
|
|
306
|
+
locale?: Locale,
|
|
307
|
+
|
|
308
|
+
// Nhãn tùy chọn để xác định nguồn
|
|
309
|
+
location?: string, // mặc định: "plugin"
|
|
310
|
+
|
|
311
|
+
// Mức độ ưu tiên được sử dụng để giải quyết xung đột với các nguồn khác
|
|
312
|
+
priority?: number, // mặc định: 0
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Hành vi và quy ước
|
|
317
|
+
|
|
318
|
+
- Nếu mặt nạ `source` của bạn bao gồm một trình giữ chỗ locale, chỉ các tệp cho `locale` được chọn mới được nạp.
|
|
319
|
+
- Nếu không có phân đoạn `{key}` trong mặt nạ của bạn, khóa từ điển là "index".
|
|
320
|
+
- Các khóa được lấy từ đường dẫn tệp bằng cách thay thế trình giữ chỗ `{key}` trong trình xây dựng `source` của bạn.
|
|
321
|
+
- Plugin chỉ sử dụng các tệp được khám phá và không tạo ra các locale hoặc khóa bị thiếu.
|
|
322
|
+
- Đường dẫn `fill` được suy ra từ `source` của bạn và được sử dụng để cập nhật các giá trị bị thiếu thông qua CLI khi bạn chọn tham gia.
|
|
323
|
+
|
|
324
|
+
## Giải quyết xung đột
|
|
325
|
+
|
|
326
|
+
Khi cùng một khóa dịch tồn tại trong nhiều nguồn PO:
|
|
327
|
+
|
|
328
|
+
1. Plugin có mức độ ưu tiên cao nhất sẽ xác định giá trị cuối cùng
|
|
329
|
+
2. Các nguồn ưu tiên thấp hơn được sử dụng làm dự phòng cho các khóa bị thiếu
|
|
330
|
+
3. Điều này cho phép bạn duy trì các bản dịch cũ trong khi dần chuyển sang các cấu trúc mới
|
|
331
|
+
|
|
332
|
+
## CLI
|
|
333
|
+
|
|
334
|
+
Các tệp PO đã đồng bộ hóa sẽ được coi như các tệp `.content` khác. Điều đó có nghĩa là, tất cả các lệnh intlayer sẽ khả dụng cho các tệp PO đã đồng bộ hóa. Bao gồm:
|
|
335
|
+
|
|
336
|
+
- `intlayer content test` để kiểm tra xem có bản dịch nào bị thiếu không
|
|
337
|
+
- `intlayer content list` để liệt kê các tệp PO đã đồng bộ hóa
|
|
338
|
+
- `intlayer content fill` để điền các bản dịch bị thiếu
|
|
339
|
+
- `intlayer content push` để đẩy các tệp PO đã đồng bộ hóa
|
|
340
|
+
- `intlayer content pull` để kéo các tệp PO đã đồng bộ hóa
|
|
341
|
+
|
|
342
|
+
Xem [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) để biết thêm chi tiết.
|
|
343
|
+
|
|
344
|
+
## Hạn chế (hiện tại)
|
|
345
|
+
|
|
346
|
+
- Không hỗ trợ chèn hoặc số nhiều/ICU khi nhắm mục tiêu đến các thư viện bên thứ ba.
|
|
347
|
+
- Trình chỉnh sửa trực quan chưa khả dụng cho các runtime không phải Intlayer.
|
|
348
|
+
- Chỉ đồng bộ hóa PO; các định dạng danh mục không phải PO không được hỗ trợ.
|
|
349
|
+
|
|
350
|
+
## Tại sao điều này lại quan trọng
|
|
351
|
+
|
|
352
|
+
- Chúng ta có thể đề xuất các giải pháp i18n đã được thiết lập và định vị Intlayer như một tiện ích bổ sung.
|
|
353
|
+
- Chúng ta tận dụng SEO/từ khóa của họ bằng các hướng dẫn kết thúc bằng việc đề xuất Intlayer để quản lý PO.
|
|
354
|
+
- Mở rộng đối tượng có thể tiếp cận từ “các dự án mới” sang “bất kỳ nhóm nào đã sử dụng i18n”.
|
package/docs/zh/mcp_server.md
CHANGED
|
@@ -23,7 +23,7 @@ history:
|
|
|
23
23
|
changes: "添加 Claude Desktop 的设置"
|
|
24
24
|
- version: 5.5.12
|
|
25
25
|
date: 2025-07-10
|
|
26
|
-
changes: "添加
|
|
26
|
+
changes: "添加 Streamable HTTP 传输和远程服务器支持"
|
|
27
27
|
- version: 5.5.10
|
|
28
28
|
date: 2025-06-29
|
|
29
29
|
changes: "初始化历史记录"
|
|
@@ -51,12 +51,12 @@ history:
|
|
|
51
51
|
|
|
52
52
|
> 查看完整的命令和选项列表,请参阅 [Intlayer CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)。
|
|
53
53
|
|
|
54
|
-
## 本地服务器(stdio)与远程服务器(
|
|
54
|
+
## 本地服务器(stdio)与远程服务器(Streamable HTTP)
|
|
55
55
|
|
|
56
56
|
MCP 服务器可以通过两种方式使用:
|
|
57
57
|
|
|
58
58
|
- 本地服务器(stdio)
|
|
59
|
-
- 远程服务器(
|
|
59
|
+
- 远程服务器(Streamable HTTP)
|
|
60
60
|
|
|
61
61
|
### 本地服务器(stdio)(推荐)
|
|
62
62
|
|
|
@@ -64,9 +64,9 @@ Intlayer 提供了一个可以在您的机器上本地安装的 NPM 包。它可
|
|
|
64
64
|
|
|
65
65
|
这是使用 MCP 服务器的推荐方式,因为它集成了 MCP 服务器的所有功能,包括 CLI 工具。
|
|
66
66
|
|
|
67
|
-
### 远程服务器(
|
|
67
|
+
### 远程服务器(Streamable HTTP)
|
|
68
68
|
|
|
69
|
-
MCP 服务器也可以通过
|
|
69
|
+
MCP 服务器也可以通过 Streamable HTTP 传输方式远程使用。该服务器由 Intlayer 托管,地址为 https://mcp.intlayer.org。该服务器可公开访问,无需任何身份验证,且免费使用。
|
|
70
70
|
|
|
71
71
|
请注意,远程服务器不集成 CLI 工具、AI 自动补全等功能。远程服务器仅用于与文档交互,以帮助您的 AI 助手使用 Intlayer 生态系统。
|
|
72
72
|
|
|
@@ -97,7 +97,7 @@ bun x intlayer init mcp
|
|
|
97
97
|
此命令将:
|
|
98
98
|
|
|
99
99
|
1. 询问您正在使用的平台(Cursor、VS Code、Claude Desktop 等)。
|
|
100
|
-
2. 询问您要使用的传输方法(本地服务器 (stdio) 或远程服务器 (
|
|
100
|
+
2. 询问您要使用的传输方法(本地服务器 (stdio) 或远程服务器 (Streamable HTTP))。
|
|
101
101
|
3. 自动更新您的配置文件(例如 `.cursor/mcp.json`、`.vscode/mcp.json` 或全局 Claude Desktop 配置)。
|
|
102
102
|
|
|
103
103
|
---
|
|
@@ -107,7 +107,7 @@ bun x intlayer init mcp
|
|
|
107
107
|
1. 打开命令面板 (Ctrl+Shift+P 或 Cmd+Shift+P)。
|
|
108
108
|
2. 输入 `Intlayer: Setup AI Agent Skills`
|
|
109
109
|
3. 选择您使用的平台(例如 `VS Code`、`Cursor`、`Windsurf`、`OpenCode`、`Claude Code`、`GitHub Copilot Workspace` 等)。
|
|
110
|
-
4. 选择要安装的 MCP (stdio,
|
|
110
|
+
4. 选择要安装的 MCP (stdio, Streamable HTTP)
|
|
111
111
|
5. 按 Enter 键。
|
|
112
112
|
|
|
113
113
|
---
|
|
@@ -131,16 +131,16 @@ bun x intlayer init mcp
|
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
### 远程服务器(
|
|
134
|
+
### 远程服务器(Streamable HTTP)
|
|
135
135
|
|
|
136
|
-
要通过服务器发送事件(
|
|
136
|
+
要通过服务器发送事件(Streamable HTTP)连接到远程 Intlayer MCP 服务器,您可以配置 MCP 客户端以连接到托管服务。
|
|
137
137
|
|
|
138
138
|
```json fileName=".cursor/mcp.json"
|
|
139
139
|
{
|
|
140
140
|
"mcpServers": {
|
|
141
|
-
"intlayer": {
|
|
142
|
-
"
|
|
143
|
-
"
|
|
141
|
+
"intlayer-sse": {
|
|
142
|
+
"command": "npx",
|
|
143
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -172,16 +172,16 @@ bun x intlayer init mcp
|
|
|
172
172
|
}
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
### 远程服务器(
|
|
175
|
+
### 远程服务器(Streamable HTTP)
|
|
176
176
|
|
|
177
|
-
要连接到使用服务器发送事件(
|
|
177
|
+
要连接到使用服务器发送事件(Streamable HTTP)的远程 Intlayer MCP 服务器,你可以配置你的 MCP 客户端以连接到托管服务。
|
|
178
178
|
|
|
179
179
|
```json fileName=".vscode/mcp.json"
|
|
180
180
|
{
|
|
181
181
|
"servers": {
|
|
182
|
-
"intlayer": {
|
|
183
|
-
"
|
|
184
|
-
"
|
|
182
|
+
"intlayer-sse": {
|
|
183
|
+
"command": "npx",
|
|
184
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
@@ -191,7 +191,7 @@ bun x intlayer init mcp
|
|
|
191
191
|
|
|
192
192
|
## 在 ChatGPT 中设置
|
|
193
193
|
|
|
194
|
-
### 远程服务器(
|
|
194
|
+
### 远程服务器(Streamable HTTP)
|
|
195
195
|
|
|
196
196
|
请按照[官方文档](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server)配置 ChatGPT 中的 MCP 服务器。
|
|
197
197
|
|
|
@@ -232,6 +232,19 @@ bun x intlayer init mcp
|
|
|
232
232
|
}
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
+
### 远程服务器(Streamable HTTP)
|
|
236
|
+
|
|
237
|
+
```json fileName="claude_desktop_config.json"
|
|
238
|
+
{
|
|
239
|
+
"mcpServers": {
|
|
240
|
+
"intlayer-sse": {
|
|
241
|
+
"command": "npx",
|
|
242
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
235
248
|
---
|
|
236
249
|
|
|
237
250
|
## 通过命令行界面使用 MCP 服务器
|