@intlayer/docs 9.5.7 → 9.5.9-canary.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/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
- package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
- package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
- package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.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/benchmark/nextjs.md +6 -3
- package/docs/ar/benchmark/solid.md +21 -4
- package/docs/ar/benchmark/svelte.md +18 -3
- package/docs/ar/benchmark/tanstack.md +6 -3
- package/docs/ar/benchmark/vue.md +14 -5
- package/docs/ar/cli/index.md +6 -1
- package/docs/ar/cli/upgrade.md +125 -0
- package/docs/de/benchmark/nextjs.md +6 -3
- package/docs/de/benchmark/solid.md +21 -4
- package/docs/de/benchmark/svelte.md +18 -3
- package/docs/de/benchmark/tanstack.md +6 -3
- package/docs/de/benchmark/vue.md +14 -5
- package/docs/de/cli/index.md +6 -1
- package/docs/de/cli/upgrade.md +125 -0
- package/docs/en/agent_skills.md +29 -1
- package/docs/en/benchmark/nextjs.md +6 -3
- package/docs/en/benchmark/solid.md +21 -4
- package/docs/en/benchmark/svelte.md +18 -3
- package/docs/en/benchmark/tanstack.md +7 -4
- package/docs/en/benchmark/vue.md +15 -6
- package/docs/en/cli/index.md +6 -1
- package/docs/en/cli/upgrade.md +125 -0
- package/docs/en-GB/benchmark/nextjs.md +6 -3
- package/docs/en-GB/benchmark/solid.md +21 -4
- package/docs/en-GB/benchmark/svelte.md +18 -3
- package/docs/en-GB/benchmark/tanstack.md +6 -3
- package/docs/en-GB/benchmark/vue.md +15 -6
- package/docs/en-GB/cli/index.md +6 -1
- package/docs/en-GB/cli/upgrade.md +125 -0
- package/docs/es/benchmark/nextjs.md +6 -3
- package/docs/es/benchmark/solid.md +21 -4
- package/docs/es/benchmark/svelte.md +18 -3
- package/docs/es/benchmark/tanstack.md +6 -3
- package/docs/es/benchmark/vue.md +14 -5
- package/docs/es/cli/index.md +6 -1
- package/docs/es/cli/upgrade.md +125 -0
- package/docs/fr/benchmark/nextjs.md +6 -3
- package/docs/fr/benchmark/solid.md +21 -4
- package/docs/fr/benchmark/svelte.md +18 -3
- package/docs/fr/benchmark/tanstack.md +6 -3
- package/docs/fr/benchmark/vue.md +15 -6
- package/docs/fr/cli/index.md +6 -1
- package/docs/fr/cli/upgrade.md +125 -0
- package/docs/hi/benchmark/nextjs.md +6 -3
- package/docs/hi/benchmark/solid.md +21 -4
- package/docs/hi/benchmark/svelte.md +18 -3
- package/docs/hi/benchmark/tanstack.md +6 -3
- package/docs/hi/benchmark/vue.md +15 -6
- package/docs/hi/cli/index.md +6 -1
- package/docs/hi/cli/upgrade.md +125 -0
- package/docs/id/benchmark/nextjs.md +6 -3
- package/docs/id/benchmark/solid.md +21 -4
- package/docs/id/benchmark/svelte.md +18 -3
- package/docs/id/benchmark/tanstack.md +6 -3
- package/docs/id/benchmark/vue.md +15 -6
- package/docs/id/cli/index.md +6 -1
- package/docs/id/cli/upgrade.md +125 -0
- package/docs/it/benchmark/nextjs.md +6 -3
- package/docs/it/benchmark/solid.md +21 -4
- package/docs/it/benchmark/svelte.md +18 -3
- package/docs/it/benchmark/tanstack.md +6 -3
- package/docs/it/benchmark/vue.md +14 -5
- package/docs/it/cli/index.md +6 -1
- package/docs/it/cli/upgrade.md +125 -0
- package/docs/ja/benchmark/nextjs.md +6 -3
- package/docs/ja/benchmark/solid.md +21 -4
- package/docs/ja/benchmark/svelte.md +18 -3
- package/docs/ja/benchmark/tanstack.md +5 -2
- package/docs/ja/benchmark/vue.md +14 -5
- package/docs/ja/cli/index.md +6 -1
- package/docs/ja/cli/upgrade.md +125 -0
- package/docs/ko/benchmark/nextjs.md +6 -3
- package/docs/ko/benchmark/solid.md +21 -4
- package/docs/ko/benchmark/svelte.md +18 -3
- package/docs/ko/benchmark/tanstack.md +6 -3
- package/docs/ko/benchmark/vue.md +15 -6
- package/docs/ko/cli/index.md +6 -1
- package/docs/ko/cli/upgrade.md +126 -0
- package/docs/pl/benchmark/nextjs.md +6 -3
- package/docs/pl/benchmark/solid.md +21 -4
- package/docs/pl/benchmark/svelte.md +18 -3
- package/docs/pl/benchmark/tanstack.md +6 -3
- package/docs/pl/benchmark/vue.md +15 -6
- package/docs/pl/cli/index.md +6 -1
- package/docs/pl/cli/upgrade.md +125 -0
- package/docs/pt/benchmark/nextjs.md +6 -3
- package/docs/pt/benchmark/solid.md +21 -4
- package/docs/pt/benchmark/svelte.md +18 -3
- package/docs/pt/benchmark/tanstack.md +6 -3
- package/docs/pt/benchmark/vue.md +14 -5
- package/docs/pt/cli/index.md +6 -1
- package/docs/pt/cli/upgrade.md +125 -0
- package/docs/ru/benchmark/nextjs.md +6 -3
- package/docs/ru/benchmark/solid.md +21 -4
- package/docs/ru/benchmark/svelte.md +18 -3
- package/docs/ru/benchmark/tanstack.md +6 -3
- package/docs/ru/benchmark/vue.md +15 -6
- package/docs/ru/cli/index.md +6 -1
- package/docs/ru/cli/upgrade.md +125 -0
- package/docs/tr/benchmark/nextjs.md +6 -3
- package/docs/tr/benchmark/solid.md +21 -4
- package/docs/tr/benchmark/svelte.md +18 -3
- package/docs/tr/benchmark/tanstack.md +6 -3
- package/docs/tr/benchmark/vue.md +15 -6
- package/docs/tr/cli/index.md +6 -1
- package/docs/tr/cli/upgrade.md +125 -0
- package/docs/uk/benchmark/nextjs.md +6 -3
- package/docs/uk/benchmark/solid.md +21 -4
- package/docs/uk/benchmark/svelte.md +18 -3
- package/docs/uk/benchmark/tanstack.md +6 -3
- package/docs/uk/benchmark/vue.md +15 -6
- package/docs/uk/cli/index.md +6 -1
- package/docs/uk/cli/upgrade.md +125 -0
- package/docs/vi/benchmark/nextjs.md +6 -3
- package/docs/vi/benchmark/solid.md +21 -4
- package/docs/vi/benchmark/svelte.md +18 -3
- package/docs/vi/benchmark/tanstack.md +6 -3
- package/docs/vi/benchmark/vue.md +15 -6
- package/docs/vi/cli/index.md +6 -1
- package/docs/vi/cli/upgrade.md +125 -0
- package/docs/zh/benchmark/nextjs.md +6 -3
- package/docs/zh/benchmark/solid.md +21 -4
- package/docs/zh/benchmark/svelte.md +18 -3
- package/docs/zh/benchmark/tanstack.md +5 -2
- package/docs/zh/benchmark/vue.md +15 -6
- package/docs/zh/cli/index.md +6 -1
- package/docs/zh/cli/upgrade.md +125 -0
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-23
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
|
+
title: CLI - Оновлення пакетів Intlayer
|
|
5
|
+
description: Дізнайтеся, як використовувати команду upgrade в Intlayer CLI, щоб отримати список усіх пакетів Intlayer вашого проєкту або монорепозиторію та оновити їх до останньої версії.
|
|
6
|
+
keywords:
|
|
7
|
+
- CLI
|
|
8
|
+
- Upgrade
|
|
9
|
+
- Оновлення
|
|
10
|
+
- Пакети
|
|
11
|
+
- Монорепозиторій
|
|
12
|
+
- Intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- concept
|
|
16
|
+
- cli
|
|
17
|
+
- upgrade
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.5.8
|
|
20
|
+
date: 2026-09-23
|
|
21
|
+
changes: "Додати команду upgrade"
|
|
22
|
+
author: aymericzip
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Оновлення пакетів Intlayer
|
|
26
|
+
|
|
27
|
+
```bash packageManager="npm"
|
|
28
|
+
npx intlayer upgrade
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash packageManager="yarn"
|
|
32
|
+
yarn intlayer upgrade
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```bash packageManager="pnpm"
|
|
36
|
+
pnpm intlayer upgrade
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash packageManager="bun"
|
|
40
|
+
bun x intlayer upgrade
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Команда `upgrade` виводить список пакетів Intlayer, оголошених у кожному `package.json` вашого проєкту, включно з робочими просторами (workspaces) монорепозиторію, та оновлює їх до останньої опублікованої версії. Вона автономно виконує той самий крок оновлення пакетів, що й `intlayer init`.
|
|
44
|
+
|
|
45
|
+
## Аргументи:
|
|
46
|
+
|
|
47
|
+
- `--project-root [projectRoot]` - Необов'язково. Кореневий каталог проєкту. За замовчуванням команда починає з найближчого `package.json` вище поточного робочого каталогу.
|
|
48
|
+
- `--dry-run` - Необов'язково. Виводить список пакетів та їхніх цільових версій без зміни будь-яких файлів.
|
|
49
|
+
- `--tag <tag>` - Необов'язково. npm dist-tag для оновлення (наприклад, `canary`). За замовчуванням `latest`.
|
|
50
|
+
|
|
51
|
+
## Що вона робить:
|
|
52
|
+
|
|
53
|
+
1. **Складає список пакетів Intlayer** - Сканує кожен `package.json` проєкту (пропускаючи `node_modules` та результати збірки) на наявність залежностей і devDependencies `intlayer`, `@intlayer/*`, `*-intlayer` та `intlayer-*`.
|
|
54
|
+
2. **Отримує цільову версію** - Зчитує версію обраного dist-tag (за замовчуванням `latest`) кожного пакета з реєстру npm.
|
|
55
|
+
3. **Переписує діапазони версій** - Оновлює кожен застарілий діапазон безпосередньо у файлі, зберігаючи його оператор (`^`, `~` або без оператора) та форматування відступів.
|
|
56
|
+
4. **Встановлює за один раз** - Виконує єдине встановлення з кореня робочого простору (найближчого каталогу з lock-файлом), використовуючи менеджер пакетів, якому належить lock-файл:
|
|
57
|
+
|
|
58
|
+
| Lock-файл | Команда |
|
|
59
|
+
| ----------------------------- | -------------- |
|
|
60
|
+
| `bun.lock` / `bun.lockb` | `bun install` |
|
|
61
|
+
| `pnpm-lock.yaml` | `pnpm install` |
|
|
62
|
+
| `yarn.lock` | `yarn install` |
|
|
63
|
+
| `package-lock.json` або немає | `npm install` |
|
|
64
|
+
|
|
65
|
+
Якщо lock-файлу немає, використовується поле `packageManager` з `package.json` (наприклад, `"bun@1.2.0"`), перш ніж перейти до npm.
|
|
66
|
+
|
|
67
|
+
Діапазони, які не вказують на реєстр, такі як `workspace:*`, `file:`, `link:`, `catalog:` або URL-адреси git, ніколи не змінюються.
|
|
68
|
+
|
|
69
|
+
## Приклади:
|
|
70
|
+
|
|
71
|
+
### Показати список доступних оновлень без їх застосування:
|
|
72
|
+
|
|
73
|
+
```bash packageManager="npm"
|
|
74
|
+
npx intlayer upgrade --dry-run
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```bash packageManager="yarn"
|
|
78
|
+
yarn intlayer upgrade --dry-run
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```bash packageManager="pnpm"
|
|
82
|
+
pnpm intlayer upgrade --dry-run
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash packageManager="bun"
|
|
86
|
+
bun x intlayer upgrade --dry-run
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Оновити до релізу canary:
|
|
90
|
+
|
|
91
|
+
```bash packageManager="npm"
|
|
92
|
+
npx intlayer upgrade --tag canary
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```bash packageManager="yarn"
|
|
96
|
+
yarn intlayer upgrade --tag canary
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```bash packageManager="pnpm"
|
|
100
|
+
pnpm intlayer upgrade --tag canary
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```bash packageManager="bun"
|
|
104
|
+
bun x intlayer upgrade --tag canary
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Приклад виводу:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer upgrade
|
|
111
|
+
Intlayer packages:
|
|
112
|
+
package.json
|
|
113
|
+
intlayer ^9.0.0 → ^9.5.7
|
|
114
|
+
apps/web/package.json
|
|
115
|
+
next-intlayer ^9.5.7 (latest)
|
|
116
|
+
vite-intlayer ~9.2.0 → ~9.5.7
|
|
117
|
+
Running bun install...
|
|
118
|
+
✓ Upgraded 2 Intlayer dependencies to latest
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Примітки:
|
|
122
|
+
|
|
123
|
+
- Запустіть команду з кореня вашого репозиторію, щоб оновити всі робочі простори. Запустіть її з конкретного робочого простору, щоб оновити лише його.
|
|
124
|
+
- Пакети, версію яких неможливо отримати (офлайн, приватний або неопублікований пакет), додаються до списку та залишаються без змін.
|
|
125
|
+
- Якщо встановлення не вдалося, оновлені діапазони зберігаються в `package.json`. Запустіть команду встановлення вашого менеджера пакетів вручну.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Giải pháp i18n tốt nhất cho Next.js năm 2026 - Báo cáo Benchmark
|
|
5
5
|
description: So sánh các thư viện quốc tế hóa (i18n) cho Next.js như next-intl, next-i18next và Intlayer. Báo cáo hiệu năng chi tiết về kích thước bundle bundle, rò rỉ dữ liệu và tính phản ứng.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Cập nhật kết quả benchmark"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Cập nhật kết quả benchmark"
|
|
@@ -213,7 +216,7 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
|
|
|
213
216
|
|
|
214
217
|
**(Tolgee)** (`@tolgee/react@7.2.0`):
|
|
215
218
|
|
|
216
|
-
`Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc áp dụng nó khó hơn so với các công cụ tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu (type safety), điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn. Tôi đã phải bao bọc các hàm của Tolgee bằng các hàm của riêng mình để thêm tính năng phát hiện khóa bị thiếu.
|
|
219
|
+
`Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc áp dụng nó khó hơn so với các công cụ tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu (type safety), điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn. Tôi đã phải bao bọc các hàm của Tolgee bằng các hàm của riêng mình để thêm tính năng phát hiện khóa bị thiếu. Gói này cũng tương đối nặng (~14.3kb, gấp khoảng 2.8 lần `next-intlayer`).
|
|
217
220
|
|
|
218
221
|
**(Next Intl)** (`next-intl@4.14.2`):
|
|
219
222
|
|
|
@@ -239,7 +242,7 @@ Các định dạng thông báo cũng khác nhau: `next-intl` sử dụng ICU Me
|
|
|
239
242
|
|
|
240
243
|
`next-translate` là khuyến nghị chính của tôi nếu bạn thích một API theo kiểu `t()`. Nó vận hành thanh thoát thông qua `next-translate-plugin`, tải các namespace qua `getStaticProps` với một trình tải Webpack / Turbopack. Nó cũng là một trong những tùy chọn nhẹ nhất ở đây (~3.5kb). Đối với việc phân namespace, việc định nghĩa các namespace theo từng trang hoặc route trong cấu hình được cân nhắc kỹ lưỡng và dễ bảo trì hơn so với các lựa chọn thay thế chính như **next-intl** hay **next-i18next**. Ở phiên bản `3.1.2`, tôi nhận thấy rằng việc render tĩnh không hoạt động; Next.js đã quay trở lại việc render động.
|
|
241
244
|
|
|
242
|
-
**(Intlayer)** (`next-intlayer@9.5.
|
|
245
|
+
**(Intlayer)** (`next-intlayer@9.5.6`):
|
|
243
246
|
|
|
244
247
|
Tôi sẽ không đích thân đánh giá `next-intlayer` vì tính khách quan, vì đây là giải pháp của riêng tôi.
|
|
245
248
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Giải pháp i18n tốt nhất cho Solid năm 2026 - Báo cáo Benchmark
|
|
5
|
-
description: So sánh các thư viện quốc tế hóa (i18n) Solid như solid-primitives, solid-i18next và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
5
|
+
description: So sánh các thư viện quốc tế hóa (i18n) Solid như solid-primitives, solid-i18next, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Cập nhật kết quả benchmark"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Cập nhật kết quả benchmark"
|
|
@@ -68,6 +71,7 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
|
|
|
68
71
|
- **Intlayer**: Lựa chọn được đề xuất cho các ứng dụng Solid chuyên nghiệp cần các tính năng nâng cao và tối ưu hóa (v9.5.6).
|
|
69
72
|
- **@solid-primitives/i18n**: Giải pháp thay thế gọn nhẹ tuyệt vời cho các dự án đơn giản, mặc dù thiếu các tính năng nâng cao như lazy loading.
|
|
70
73
|
- **solid-i18next**: Tùy chọn tiêu chuẩn nhưng nặng (~3.5 lần Intlayer) với các nhược điểm tương tự như React i18next.
|
|
74
|
+
- **Tolgee**: Nền tảng dịch thuật giàu tính năng, nhưng khá nặng (~12.7kb, gấp khoảng 3.0 lần Intlayer), thiếu các primitive Solid chuyên dụng (dựa vào @tolgee/web), và trong cấu hình tĩnh có thể rò rỉ bản dịch giữa các trang (90% rò rỉ trang).
|
|
71
75
|
- **Paraglide**: Cách tiếp cận sáng tạo nhưng DX phức tạp và vấn đề tree-shaking trong một số thiết lập.
|
|
72
76
|
|
|
73
77
|
## Kiểm tra ứng dụng của bạn
|
|
@@ -103,6 +107,7 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
|
|
|
103
107
|
- [`solid-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/solid-intlayer/exports.md) (v9.5.6)
|
|
104
108
|
- [`@solid-primitives/i18n`](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n) (v2.2.1)
|
|
105
109
|
- [`i18next`](https://github.com/i18next/i18next) (v26.0.8) + [`@mbarzda/solid-i18next`](https://github.com/mbarzda/solid-i18next) (v1.4.1)
|
|
110
|
+
- [`@tolgee/web`](https://github.com/tolgee/tolgee-js) (v7.2.0)
|
|
106
111
|
- [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
|
|
107
112
|
|
|
108
113
|
Framework là `Solid` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
|
|
@@ -147,7 +152,7 @@ Tôi chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt thực
|
|
|
147
152
|
|
|
148
153
|
Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
|
|
149
154
|
|
|
150
|
-
[](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&aymericzip/intlayer)
|
|
155
|
+
[](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
151
156
|
|
|
152
157
|
## Kết quả chi tiết
|
|
153
158
|
|
|
@@ -170,6 +175,18 @@ Tuy nhiên, nó có cùng những nhược điểm chính như các stack đư
|
|
|
170
175
|
Solid primitive cực kỳ nhẹ và hiệu quả. Tôi khuyên dùng giải pháp đó cho các dự án nhẹ, nhưng nó có thể nhanh chóng thiếu các tính năng cho các giải pháp chuyên nghiệp bao gồm quản lý cookie, chuyển hướng proxy, formatter, v.v.
|
|
171
176
|
Nó cũng thiếu lazy loading và scoping namespace để tối ưu hóa kích thước trang.
|
|
172
177
|
|
|
178
|
+
**(Tolgee)** (`@tolgee/web@7.2.0`):
|
|
179
|
+
|
|
180
|
+
`Tolgee` cung cấp một nền tảng quản lý bản dịch toàn diện với các tính năng chỉnh sửa in-context.
|
|
181
|
+
|
|
182
|
+
Trên Solid, hiện tại không có adapter chính thức chuyên dụng (như `@tolgee/solid`), đòi hỏi các nhà phát triển phải tích hợp qua `@tolgee/web` với các signal tùy chỉnh.
|
|
183
|
+
|
|
184
|
+
Gói này tương đối nặng (~12.7kb, gấp khoảng 3.0 lần `solid-intlayer`).
|
|
185
|
+
|
|
186
|
+
Nếu không có cơ chế chia nhỏ theo từng trang trong Solid, tất cả các bản dịch sẽ được tải vào bộ nhớ ngay từ đầu trong cấu hình tĩnh. Điều này dẫn đến tình trạng rò rỉ bundle nghiêm trọng (44.5% rò rỉ ngôn ngữ, 90.0% rò rỉ trang) và kích thước bundle trung bình mỗi trang là ~91.8kb (so với ~35.8kb của Intlayer).
|
|
187
|
+
|
|
188
|
+
Khả năng phản ứng khi chuyển đổi ngôn ngữ rất nhanh (0.6ms), phù hợp với tính phản ứng chi tiết của Solid, mặc dù chi phí hydration cao hơn một chút (~5.6ms so với ~3.0ms của Intlayer).
|
|
189
|
+
|
|
173
190
|
**(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
|
|
174
191
|
|
|
175
192
|
`Paraglide` đưa ra một cách tiếp cận sáng tạo, được cân nhắc kỹ lưỡng. Mặc dù vậy, trong benchmark này, tree-shaking mà công ty họ quảng cáo đã không hoạt động cho triển khai của tôi. Workflow và DX cũng phức tạp hơn các tùy chọn khác.
|
|
@@ -178,7 +195,7 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
|
|
|
178
195
|
|
|
179
196
|
### 3 - Khuyến nghị
|
|
180
197
|
|
|
181
|
-
**(Intlayer)** (`solid-intlayer@9.5.
|
|
198
|
+
**(Intlayer)** (`solid-intlayer@9.5.6`):
|
|
182
199
|
|
|
183
200
|
Tôi sẽ không đích thân đánh giá `solid-intlayer` vì tính khách quan, vì đó là giải pháp của chính tôi.
|
|
184
201
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Giải pháp i18n tốt nhất cho Svelte năm 2026 - Báo cáo Benchmark
|
|
5
|
-
description: So sánh các thư viện quốc tế hóa (i18n) Svelte như svelte-i18n, Paraglide và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
5
|
+
description: So sánh các thư viện quốc tế hóa (i18n) Svelte như svelte-i18n, Paraglide, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-svelte-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Update benchmark results"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Cập nhật kết quả benchmark"
|
|
@@ -67,6 +70,7 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
|
|
|
67
70
|
|
|
68
71
|
- **Intlayer**: Lựa chọn hiệu quả nhất về hiệu suất (v9.5.6) với dấu chân (footprint) nhỏ nhất.
|
|
69
72
|
- **Paraglide**: Đối thủ nặng ký cho tree-shaking nhưng có trải nghiệm nhà phát triển phức tạp hơn và overhead về tính phản ứng.
|
|
73
|
+
- **Tolgee**: Nền tảng dịch thuật giàu tính năng với khả năng chỉnh sửa in-context, nhưng khá nặng (~13.0kb, gấp khoảng 3.6 lần Intlayer), và trong cấu hình tĩnh gây rò rỉ bản dịch đáng kể giữa các trang (90% rò rỉ trang).
|
|
70
74
|
- **svelte-i18n**: Toàn diện và tiêu chuẩn cho Svelte, nhưng mang trọng lượng bundle lớn hơn nhiều (~4.5 lần Intlayer).
|
|
71
75
|
|
|
72
76
|
## Kiểm tra ứng dụng của bạn
|
|
@@ -101,6 +105,7 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
|
|
|
101
105
|
- `Base App` (Không có thư viện i18n)
|
|
102
106
|
- [`svelte-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/svelte-intlayer/exports.md) (v9.5.6)
|
|
103
107
|
- [`svelte-i18n`](https://github.com/kaisermann/svelte-i18n) (v4.0.1)
|
|
108
|
+
- [`@tolgee/svelte`](https://github.com/tolgee/tolgee-js) (v7.2.1)
|
|
104
109
|
- [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
|
|
105
110
|
|
|
106
111
|
Framework là `Svelte` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
|
|
@@ -145,7 +150,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt t
|
|
|
145
150
|
|
|
146
151
|
Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
|
|
147
152
|
|
|
148
|
-
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
|
|
153
|
+
[](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
|
|
149
154
|
|
|
150
155
|
## Kết quả chi tiết
|
|
151
156
|
|
|
@@ -165,6 +170,16 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
|
|
|
165
170
|
|
|
166
171
|
> Lưu ý về paraglide: giải pháp này đưa mã vào mã nguồn của bạn cho các import; do đó, chỉ số 'lib size' trong báo cáo benchmark gần như bằng 0. Việc tạo mã (Code generation) là một điều tốt, bởi vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (prefix ở mọi nơi so với không prefix, cookie so với storage, v.v.). So với đó, Intlayer thực hiện việc lọc này thông qua việc đưa biến môi trường vào build để buộc bundler thực hiện tree-shaking nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng là các giải pháp nhẹ hơn từ 6 đến 10 lần so với i18next hoặc next-intl.
|
|
167
172
|
|
|
173
|
+
**(Tolgee)** (`@tolgee/svelte@7.2.1`):
|
|
174
|
+
|
|
175
|
+
`Tolgee` cung cấp một nền tảng bản địa hóa toàn diện với tính năng chỉnh sửa in-context và tích hợp chính thức cho Svelte thông qua `@tolgee/svelte`.
|
|
176
|
+
|
|
177
|
+
Gói này tương đối nặng (~13.0kb, gấp khoảng 3.6 lần `svelte-intlayer`).
|
|
178
|
+
|
|
179
|
+
Nếu không có cơ chế chia nhỏ theo từng trang trong Svelte, tất cả các bản dịch sẽ được tải vào bộ nhớ ngay từ đầu trong cấu hình tĩnh. Điều này gây ra hiện tượng rò rỉ bundle đáng kể (50.0% rò rỉ ngôn ngữ, 90.0% rò rỉ trang) và kích thước bundle trung bình mỗi trang là ~100.7kb (so với ~59.0kb của Intlayer).
|
|
180
|
+
|
|
181
|
+
Khả năng phản ứng khi chuyển đổi ngôn ngữ rất nhanh (0.5ms), được hưởng lợi từ các store phản ứng của Svelte, mặc dù chi phí hydration cao hơn một chút (~6.2ms so với ~5.5ms của Intlayer).
|
|
182
|
+
|
|
168
183
|
**(svelte-i18n)** (`svelte-i18n@4.0.1`):
|
|
169
184
|
|
|
170
185
|
Giải pháp này đáp ứng tất cả các nhu cầu i18n trong một dự án Svelte. Nhưng giống như trường hợp của i18next hoặc các giải pháp i18n lớn khác, nó hơi nặng (~16.6kb, gấp khoảng 4.5 lần `svelte-intlayer`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Giải pháp i18n tốt nhất cho TanStack Start năm 2026 - Báo cáo Benchmark
|
|
5
5
|
description: So sánh các thư viện quốc tế hóa cho TanStack Start như react-i18next, use-intl và Intlayer. Báo cáo hiệu năng chi tiết về kích thước bundle bundle, rò rỉ dữ liệu và tính phản ứng.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Cập nhật kết quả benchmark"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Cập nhật kết quả benchmark"
|
|
@@ -200,7 +203,7 @@ Các vấn đề gặp phải:
|
|
|
200
203
|
|
|
201
204
|
`Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc bắt đầu với Tolgee khó khăn hơn so với các công cụ khác có phương pháp tiếp cận tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu, điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn nhiều. Tôi đã phải bao bọc các API của Tolgee bằng các API của riêng mình để thêm tính năng phát hiện khóa bị thiếu.
|
|
202
205
|
|
|
203
|
-
Package này khá nặng (~
|
|
206
|
+
Package này khá nặng (~13.8 kb, gấp hơn 2.9× `react-intlayer`).
|
|
204
207
|
|
|
205
208
|
Trên TanStack Start, tôi cũng gặp vấn đề về tính phản ứng: khi ngôn ngữ thay đổi, tôi phải ép buộc provider render lại và đăng ký vào các sự kiện thay đổi ngôn ngữ để việc tải ở một ngôn ngữ khác hoạt động chính xác.
|
|
206
209
|
|
|
@@ -234,7 +237,7 @@ Package cũng khá nặng (~15.3kb, tức là khoảng 3× `react-intlayer`).
|
|
|
234
237
|
|
|
235
238
|
Benchmark TanStack Start này không có đối trọng trực tiếp cho `next-translate` (Next.js plugin + `getStaticProps`). Đối với các nhóm thực sự muốn một API `t()` với một hệ sinh thái chín muồi, `react-i18next` và `use-intl` vẫn là những lựa chọn "hợp lý", nhưng hãy chuẩn bị đầu tư nhiều thời gian tối ưu hóa để tránh rò rỉ.
|
|
236
239
|
|
|
237
|
-
**(Intlayer)** (`react-intlayer@9.5.
|
|
240
|
+
**(Intlayer)** (`react-intlayer@9.5.6`):
|
|
238
241
|
|
|
239
242
|
Tôi sẽ không đích thân đánh giá `react-intlayer` vì tính khách quan, vì đây là giải pháp của riêng tôi.
|
|
240
243
|
|
package/docs/vi/benchmark/vue.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: Giải pháp i18n tốt nhất cho Vue năm 2026 - Báo cáo Benchmark
|
|
5
|
-
description: So sánh các thư viện quốc tế hóa (i18n) Vue như vue-i18n, fluent-vue và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
5
|
+
description: So sánh các thư viện quốc tế hóa (i18n) Vue như vue-i18n, fluent-vue, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
|
|
6
6
|
keywords:
|
|
7
7
|
- benchmark
|
|
8
8
|
- i18n
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-vue-template
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Cập nhật kết quả benchmark và thêm Tolgee"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "Cập nhật kết quả benchmark"
|
|
@@ -66,6 +69,7 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
|
|
|
66
69
|
## TL;DR
|
|
67
70
|
|
|
68
71
|
- **Intlayer**: Giải pháp nhẹ nhất (v9.5.6) với tính năng scoping và tải động gốc.
|
|
72
|
+
- **Tolgee**: Tải động hiệu quả mà không bị rò rỉ trong chế độ động, nhưng nặng hơn (~3.7× Intlayer) và thiếu tính an toàn kiểu dữ liệu lúc biên dịch.
|
|
69
73
|
- **vue-i18n**: Tiêu chuẩn ngành với hệ sinh thái phong phú, nhưng có thể trở nên nặng hơn đáng kể và khó tối ưu hóa cho code-splitting trong các ứng dụng lớn.
|
|
70
74
|
- **fluent-vue**: Tổ chức thông báo sáng tạo nhưng thiếu an toàn kiểu (type-safety) và hóa ra là một giải pháp cực kỳ nặng.
|
|
71
75
|
|
|
@@ -103,6 +107,7 @@ Các cú pháp được xây dựng xung quanh `const { t } = useI18n()` + `t('a
|
|
|
103
107
|
- [`@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/vue-i18n.md) (v9.5.6)
|
|
104
108
|
- [`vue-i18n`](https://github.com/intlify/vue-i18n) (v11.4.0)
|
|
105
109
|
- [`fluent-vue`](https://github.com/fluent-vue/fluent-vue) (v3.8.2)
|
|
110
|
+
- [`@tolgee/vue`](https://github.com/tolgee/tolgee-js) (v7.2.0)
|
|
106
111
|
|
|
107
112
|
Framework là `Vue` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
|
|
108
113
|
|
|
@@ -146,7 +151,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong một trình duy
|
|
|
146
151
|
|
|
147
152
|
Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
|
|
148
153
|
|
|
149
|
-
[](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&aymericzip/intlayer)
|
|
154
|
+
[](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&tolgee/tolgee-js&aymericzip/intlayer)
|
|
150
155
|
|
|
151
156
|
## Kết quả chi tiết
|
|
152
157
|
|
|
@@ -156,18 +161,22 @@ Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của
|
|
|
156
161
|
|
|
157
162
|
### 2 - Các giải pháp chấp nhận được
|
|
158
163
|
|
|
164
|
+
**(Tolgee)** (`@tolgee/vue@7.2.0`):
|
|
165
|
+
|
|
166
|
+
`Tolgee` giải quyết nhiều vấn đề đã đề cập trước đó, cung cấp khả năng tải động giúp loại bỏ thành công rò rỉ ngôn ngữ và trang (giảm dung lượng JS của trang xuống còn khoảng 58.8kb). Tuy nhiên, nó không cung cấp tính an toàn kiểu dữ liệu lúc biên dịch cho các khóa, khiến việc phát hiện các khóa bị thiếu trở nên khó khăn hơn. Ngoài ra, kích thước thư viện tương đối nặng (~13.8kb, gấp khoảng 3.7 lần `vue-intlayer`).
|
|
167
|
+
|
|
159
168
|
**(vue-i18n)** (`vue-i18n@11.4.0`):
|
|
160
169
|
|
|
161
170
|
- **vue-i18n** chắc chắn là thư viện i18n được sử dụng nhiều nhất cho Vue, nó có rất nhiều tính năng và một hệ sinh thái khổng lồ. Nhưng thực tế giải pháp này khá nặng. Ngay cả khi vue-i18n tích hợp lazy loading cho các tin nhắn, nó vẫn thiếu tính năng scoping. Trong trường hợp ứng dụng Vue SPA cổ điển thì không có vấn đề gì, nhưng đối với ứng dụng Nuxt, sử dụng @nuxt/i18n, nó dẫn đến việc bao gồm tin nhắn từ tất cả các trang vào một trang duy nhất. Đối với một ứng dụng Nuxt lớn bao gồm hơn 10 trang, nó có thể trở nên thực sự rắc rối.
|
|
162
171
|
|
|
163
|
-
Package này rất nặng (~24.
|
|
172
|
+
Package này rất nặng (~24.1 kb, gấp khoảng 6.5 lần `vue-intlayer`).
|
|
164
173
|
|
|
165
174
|
**(fluent-vue)** (`fluent-vue@3.8.2`):
|
|
166
175
|
|
|
167
|
-
- **fluent-vue** đưa ra một nỗ lực đổi mới thông qua định dạng .ftl. Tổ chức tin nhắn tuyệt vời, dễ dàng bắt đầu hơn. Nhưng trong thực tế, việc thiếu an toàn kiểu làm tăng rủi ro lỗi và có thể nhanh chóng trở nên tốn thời gian để debug. Hơn nữa, giải pháp đó tải các tin nhắn bằng một plugin vite bắt buộc tải tất cả nội dung ở tất cả các ngôn ngữ vào mỗi trang. Ngoài ra, đây là một giải pháp cực kỳ nặng (~29.7kb, gấp khoảng
|
|
176
|
+
- **fluent-vue** đưa ra một nỗ lực đổi mới thông qua định dạng .ftl. Tổ chức tin nhắn tuyệt vời, dễ dàng bắt đầu hơn. Nhưng trong thực tế, việc thiếu an toàn kiểu làm tăng rủi ro lỗi và có thể nhanh chóng trở nên tốn thời gian để debug. Hơn nữa, giải pháp đó tải các tin nhắn bằng một plugin vite bắt buộc tải tất cả nội dung ở tất cả các ngôn ngữ vào mỗi trang. Ngoài ra, đây là một giải pháp cực kỳ nặng (~29.7kb, gấp khoảng 8 lần `vue-intlayer`).
|
|
168
177
|
|
|
169
178
|
### 3 - Khuyến nghị
|
|
170
179
|
|
|
171
|
-
**(Intlayer)** (`vue-intlayer@9.5.
|
|
180
|
+
**(Intlayer)** (`vue-intlayer@9.5.6`):
|
|
172
181
|
|
|
173
182
|
Tôi sẽ không đích thân đánh giá `vue-intlayer` vì tính khách quan, vì đó là giải pháp của chính tôi.
|
package/docs/vi/cli/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: CLI - Tất cả các lệnh CLI của Intlayer cho trang web đa ngôn ngữ của bạn
|
|
5
5
|
description: Tìm hiểu cách sử dụng Intlayer CLI để quản lý trang web đa ngôn ngữ của bạn. Làm theo các bước trong tài liệu trực tuyến này để thiết lập dự án của bạn trong vài phút.
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
- concept
|
|
18
18
|
- cli
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.8
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "Thêm lệnh upgrade"
|
|
20
23
|
- version: 9.5.6
|
|
21
24
|
date: 2026-09-21
|
|
22
25
|
changes: "Thêm lệnh init infra"
|
|
@@ -155,6 +158,7 @@ Intlayer chấp nhận nhiều định dạng tệp cấu hình khác nhau:
|
|
|
155
158
|
|
|
156
159
|
- **[Khởi tạo Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/init.md)** - Thiết lập Intlayer trong dự án của bạn với cấu hình tự động
|
|
157
160
|
- **[Thiết lập cơ sở hạ tầng](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/infra.md)** - Cài đặt ứng dụng máy tính để bàn hoặc tự lưu trữ CMS với Docker (tất cả trong một hoặc Compose)
|
|
161
|
+
- **[Nâng cấp các gói Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/upgrade.md)** - Liệt kê các gói Intlayer trong mỗi `package.json` và nâng cấp chúng lên phiên bản mới nhất
|
|
158
162
|
- **[Quản lý cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/configuration.md)** - Nhận cấu hình Intlayer của bạn và đẩy lên CMS
|
|
159
163
|
|
|
160
164
|
### Quản lý tài liệu
|
|
@@ -182,6 +186,7 @@ Intlayer chấp nhận nhiều định dạng tệp cấu hình khác nhau:
|
|
|
182
186
|
"scripts": {
|
|
183
187
|
"intlayer:init": "npx intlayer init",
|
|
184
188
|
"intlayer:infra": "npx intlayer init infra",
|
|
189
|
+
"intlayer:upgrade": "npx intlayer upgrade",
|
|
185
190
|
"intlayer:login": "npx intlayer login",
|
|
186
191
|
"intlayer:build": "npx intlayer build",
|
|
187
192
|
"intlayer:watch": "npx intlayer build --watch",
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-09-23
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
|
+
title: CLI - Nâng cấp các gói Intlayer
|
|
5
|
+
description: Tìm hiểu cách sử dụng lệnh upgrade của Intlayer CLI để liệt kê từng gói Intlayer trong dự án hoặc monorepo của bạn và nâng cấp chúng lên phiên bản mới nhất.
|
|
6
|
+
keywords:
|
|
7
|
+
- CLI
|
|
8
|
+
- Upgrade
|
|
9
|
+
- Nâng cấp
|
|
10
|
+
- Gói
|
|
11
|
+
- Monorepo
|
|
12
|
+
- Intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- concept
|
|
16
|
+
- cli
|
|
17
|
+
- upgrade
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.5.8
|
|
20
|
+
date: 2026-09-23
|
|
21
|
+
changes: "Thêm lệnh upgrade"
|
|
22
|
+
author: aymericzip
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Nâng cấp các gói Intlayer
|
|
26
|
+
|
|
27
|
+
```bash packageManager="npm"
|
|
28
|
+
npx intlayer upgrade
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash packageManager="yarn"
|
|
32
|
+
yarn intlayer upgrade
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```bash packageManager="pnpm"
|
|
36
|
+
pnpm intlayer upgrade
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash packageManager="bun"
|
|
40
|
+
bun x intlayer upgrade
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Lệnh `upgrade` liệt kê các gói Intlayer được khai báo trong mỗi `package.json` của dự án, bao gồm cả các workspace monorepo, và nâng cấp chúng lên phiên bản mới nhất đã xuất bản. Lệnh này chạy bước nâng cấp gói tương tự như `intlayer init` một cách độc lập.
|
|
44
|
+
|
|
45
|
+
## Đối số:
|
|
46
|
+
|
|
47
|
+
- `--project-root [projectRoot]` - Tùy chọn. Thư mục gốc của dự án. Theo mặc định, lệnh bắt đầu từ `package.json` gần nhất phía trên thư mục làm việc hiện tại.
|
|
48
|
+
- `--dry-run` - Tùy chọn. Liệt kê các gói và phiên bản mục tiêu của chúng mà không sửa đổi bất kỳ tệp nào.
|
|
49
|
+
- `--tag <tag>` - Tùy chọn. npm dist-tag cần nâng cấp lên (ví dụ `canary`). Mặc định là `latest`.
|
|
50
|
+
|
|
51
|
+
## Chức năng hoạt động:
|
|
52
|
+
|
|
53
|
+
1. **Liệt kê các gói Intlayer** - Quét từng `package.json` của dự án (bỏ qua `node_modules` và kết quả bản dựng) để tìm các phụ thuộc và devDependencies `intlayer`, `@intlayer/*`, `*-intlayer` và `intlayer-*`.
|
|
54
|
+
2. **Lấy phiên bản mục tiêu** - Đọc phiên bản của dist-tag đã chọn (mặc định là `latest`) của từng gói từ npm registry.
|
|
55
|
+
3. **Viết lại dải phiên bản** - Cập nhật trực tiếp từng dải phiên bản đã lỗi thời trong tệp, giữ nguyên toán tử (`^`, `~` hoặc không có) và thụt lề của tệp.
|
|
56
|
+
4. **Cài đặt một lần** - Chạy một lượt cài đặt duy nhất từ thư mục gốc của workspace (thư mục gần nhất có tệp khóa), sử dụng trình quản lý gói sở hữu tệp khóa đó:
|
|
57
|
+
|
|
58
|
+
| Tệp khóa (Lock file) | Lệnh |
|
|
59
|
+
| ------------------------------ | -------------- |
|
|
60
|
+
| `bun.lock` / `bun.lockb` | `bun install` |
|
|
61
|
+
| `pnpm-lock.yaml` | `pnpm install` |
|
|
62
|
+
| `yarn.lock` | `yarn install` |
|
|
63
|
+
| `package-lock.json` hoặc không | `npm install` |
|
|
64
|
+
|
|
65
|
+
Nếu không có tệp khóa, trường `packageManager` của `package.json` (ví dụ `"bun@1.2.0"`) sẽ được sử dụng trước khi chuyển sang npm.
|
|
66
|
+
|
|
67
|
+
Các dải phiên bản không trỏ đến registry, chẳng hạn như `workspace:*`, `file:`, `link:`, `catalog:` hoặc URL git, sẽ không bao giờ bị sửa đổi.
|
|
68
|
+
|
|
69
|
+
## Ví dụ:
|
|
70
|
+
|
|
71
|
+
### Liệt kê các nâng cấp có sẵn mà không áp dụng chúng:
|
|
72
|
+
|
|
73
|
+
```bash packageManager="npm"
|
|
74
|
+
npx intlayer upgrade --dry-run
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```bash packageManager="yarn"
|
|
78
|
+
yarn intlayer upgrade --dry-run
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```bash packageManager="pnpm"
|
|
82
|
+
pnpm intlayer upgrade --dry-run
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash packageManager="bun"
|
|
86
|
+
bun x intlayer upgrade --dry-run
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Nâng cấp lên bản phát hành canary:
|
|
90
|
+
|
|
91
|
+
```bash packageManager="npm"
|
|
92
|
+
npx intlayer upgrade --tag canary
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```bash packageManager="yarn"
|
|
96
|
+
yarn intlayer upgrade --tag canary
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```bash packageManager="pnpm"
|
|
100
|
+
pnpm intlayer upgrade --tag canary
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```bash packageManager="bun"
|
|
104
|
+
bun x intlayer upgrade --tag canary
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Ví dụ đầu ra:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx intlayer upgrade
|
|
111
|
+
Intlayer packages:
|
|
112
|
+
package.json
|
|
113
|
+
intlayer ^9.0.0 → ^9.5.7
|
|
114
|
+
apps/web/package.json
|
|
115
|
+
next-intlayer ^9.5.7 (latest)
|
|
116
|
+
vite-intlayer ~9.2.0 → ~9.5.7
|
|
117
|
+
Running bun install...
|
|
118
|
+
✓ Upgraded 2 Intlayer dependencies to latest
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Ghi chú:
|
|
122
|
+
|
|
123
|
+
- Chạy lệnh từ thư mục gốc của kho lưu trữ để nâng cấp mọi workspace. Chạy lệnh từ một workspace cụ thể để chỉ nâng cấp riêng workspace đó.
|
|
124
|
+
- Các gói không thể lấy được phiên bản (ngoại tuyến, gói riêng tư hoặc chưa xuất bản) sẽ được liệt kê và giữ nguyên.
|
|
125
|
+
- Nếu quá trình cài đặt thất bại, các dải phiên bản đã nâng cấp vẫn được giữ lại trong `package.json`. Hãy chạy lệnh cài đặt của trình quản lý gói theo cách thủ công.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-04-20
|
|
3
|
-
updatedAt: 2026-09-
|
|
3
|
+
updatedAt: 2026-09-23
|
|
4
4
|
title: 2026 年 Next.js 最佳 i18n 解决方案 - 基准测试报告
|
|
5
5
|
description: 对比 next-intl、next-i18next 和 Intlayer 等 Next.js 国际化 (i18n) 库。关于打包体积、泄漏和响应性的详细性能报告。
|
|
6
6
|
keywords:
|
|
@@ -17,6 +17,9 @@ slugs:
|
|
|
17
17
|
author: aymericzip
|
|
18
18
|
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n
|
|
19
19
|
history:
|
|
20
|
+
- version: 9.5.7
|
|
21
|
+
date: 2026-09-23
|
|
22
|
+
changes: "更新基准测试结果"
|
|
20
23
|
- version: 9.5.1
|
|
21
24
|
date: 2026-09-11
|
|
22
25
|
changes: "更新基准测试结果"
|
|
@@ -213,7 +216,7 @@ GitHub 星数是项目受欢迎程度、社区信任和长期相关性的有力
|
|
|
213
216
|
|
|
214
217
|
**(Tolgee)** (`@tolgee/react@7.2.0`):
|
|
215
218
|
|
|
216
|
-
`Tolgee` 解决了前面提到的许多问题。我发现它比类似的工具更难采用。它不提供类型安全,这增加了在编译时捕捉缺失键的难度。我不得不使用自己的函数封装 Tolgee 的函数,以添加缺失键检测。
|
|
219
|
+
`Tolgee` 解决了前面提到的许多问题。我发现它比类似的工具更难采用。它不提供类型安全,这增加了在编译时捕捉缺失键的难度。我不得不使用自己的函数封装 Tolgee 的函数,以添加缺失键检测。 该软件包也相对较重(~14.3kb,约为 `next-intlayer` 的 2.8 倍)。
|
|
217
220
|
|
|
218
221
|
**(Next Intl)** (`next-intl@4.14.2`):
|
|
219
222
|
|
|
@@ -239,7 +242,7 @@ GitHub 星数是项目受欢迎程度、社区信任和长期相关性的有力
|
|
|
239
242
|
|
|
240
243
|
如果你喜欢 `t()` 风格的 API,`next-translate` 是我的主要推荐方案。它通过 `next-translate-plugin` 优雅运作,利用 Webpack / Turbopack loader 通过 `getStaticProps` 加载命名空间。它也是这些方案中最轻量的之一(约 3.5kb)。对于命名空间拆分,在配置中为每个页面或路由定义命名空间的设计非常周到,比 **next-intl** 或 **next-i18next** 等主要替代方案更易于维护。在版本 `3.1.2` 中,我注意到静态渲染无法工作,Next.js 会回退到动态渲染。
|
|
241
244
|
|
|
242
|
-
**(Intlayer)** (`next-intlayer@9.5.
|
|
245
|
+
**(Intlayer)** (`next-intlayer@9.5.6`):
|
|
243
246
|
|
|
244
247
|
出于客观性考量,我不会亲自评价 `next-intlayer`,因为这是我自己的解决方案。
|
|
245
248
|
|