@intlayer/docs 8.0.0 → 8.0.1-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.
Files changed (172) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +160 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +160 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +8 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/intlayer_with_adonisjs.md +394 -0
  8. package/docs/ar/intlayer_with_hono.md +223 -0
  9. package/docs/ar/intlayer_with_vite+preact.md +317 -675
  10. package/docs/ar/packages/adonis-intlayer/exports.md +50 -0
  11. package/docs/ar/packages/adonis-intlayer/intlayer.md +54 -0
  12. package/docs/ar/packages/adonis-intlayer/t.md +149 -0
  13. package/docs/ar/packages/hono-intlayer/exports.md +59 -0
  14. package/docs/ar/packages/hono-intlayer/intlayer.md +60 -0
  15. package/docs/ar/packages/hono-intlayer/t.md +268 -0
  16. package/docs/de/intlayer_with_adonisjs.md +392 -0
  17. package/docs/de/intlayer_with_hono.md +418 -0
  18. package/docs/de/intlayer_with_vite+preact.md +272 -632
  19. package/docs/de/packages/adonis-intlayer/exports.md +50 -0
  20. package/docs/de/packages/adonis-intlayer/intlayer.md +54 -0
  21. package/docs/de/packages/adonis-intlayer/t.md +149 -0
  22. package/docs/de/packages/hono-intlayer/exports.md +59 -0
  23. package/docs/de/packages/hono-intlayer/intlayer.md +59 -0
  24. package/docs/de/packages/hono-intlayer/t.md +316 -0
  25. package/docs/en/index.md +8 -0
  26. package/docs/en/intlayer_with_adonisjs.md +388 -0
  27. package/docs/en/intlayer_with_hono.md +418 -0
  28. package/docs/en/intlayer_with_vite+preact.md +171 -556
  29. package/docs/en/introduction.md +1 -0
  30. package/docs/en/packages/adonis-intlayer/exports.md +50 -0
  31. package/docs/en/packages/adonis-intlayer/intlayer.md +54 -0
  32. package/docs/en/packages/adonis-intlayer/t.md +149 -0
  33. package/docs/en/packages/hono-intlayer/exports.md +59 -0
  34. package/docs/en/packages/hono-intlayer/intlayer.md +59 -0
  35. package/docs/en/packages/hono-intlayer/t.md +316 -0
  36. package/docs/en-GB/intlayer_with_adonisjs.md +394 -0
  37. package/docs/en-GB/intlayer_with_hono.md +418 -0
  38. package/docs/en-GB/intlayer_with_vite+preact.md +236 -583
  39. package/docs/en-GB/packages/adonis-intlayer/exports.md +50 -0
  40. package/docs/en-GB/packages/adonis-intlayer/intlayer.md +54 -0
  41. package/docs/en-GB/packages/adonis-intlayer/t.md +149 -0
  42. package/docs/en-GB/packages/hono-intlayer/exports.md +59 -0
  43. package/docs/en-GB/packages/hono-intlayer/intlayer.md +59 -0
  44. package/docs/en-GB/packages/hono-intlayer/t.md +316 -0
  45. package/docs/es/intlayer_with_adonisjs.md +388 -0
  46. package/docs/es/intlayer_with_hono.md +418 -0
  47. package/docs/es/intlayer_with_vite+preact.md +286 -650
  48. package/docs/es/packages/adonis-intlayer/exports.md +50 -0
  49. package/docs/es/packages/adonis-intlayer/intlayer.md +54 -0
  50. package/docs/es/packages/adonis-intlayer/t.md +149 -0
  51. package/docs/es/packages/hono-intlayer/exports.md +59 -0
  52. package/docs/es/packages/hono-intlayer/intlayer.md +59 -0
  53. package/docs/es/packages/hono-intlayer/t.md +316 -0
  54. package/docs/fr/intlayer_with_adonisjs.md +388 -0
  55. package/docs/fr/intlayer_with_hono.md +418 -0
  56. package/docs/fr/intlayer_with_vite+preact.md +274 -614
  57. package/docs/fr/packages/adonis-intlayer/exports.md +50 -0
  58. package/docs/fr/packages/adonis-intlayer/intlayer.md +54 -0
  59. package/docs/fr/packages/adonis-intlayer/t.md +149 -0
  60. package/docs/fr/packages/hono-intlayer/exports.md +59 -0
  61. package/docs/fr/packages/hono-intlayer/intlayer.md +59 -0
  62. package/docs/fr/packages/hono-intlayer/t.md +316 -0
  63. package/docs/hi/intlayer_with_adonisjs.md +394 -0
  64. package/docs/hi/intlayer_with_hono.md +227 -0
  65. package/docs/hi/intlayer_with_vite+preact.md +304 -680
  66. package/docs/hi/packages/adonis-intlayer/exports.md +50 -0
  67. package/docs/hi/packages/adonis-intlayer/intlayer.md +54 -0
  68. package/docs/hi/packages/adonis-intlayer/t.md +149 -0
  69. package/docs/hi/packages/hono-intlayer/exports.md +59 -0
  70. package/docs/hi/packages/hono-intlayer/intlayer.md +60 -0
  71. package/docs/hi/packages/hono-intlayer/t.md +268 -0
  72. package/docs/id/intlayer_with_adonisjs.md +394 -0
  73. package/docs/id/intlayer_with_hono.md +227 -0
  74. package/docs/id/intlayer_with_vite+preact.md +297 -697
  75. package/docs/id/packages/adonis-intlayer/exports.md +50 -0
  76. package/docs/id/packages/adonis-intlayer/intlayer.md +54 -0
  77. package/docs/id/packages/adonis-intlayer/t.md +149 -0
  78. package/docs/id/packages/hono-intlayer/exports.md +59 -0
  79. package/docs/id/packages/hono-intlayer/intlayer.md +60 -0
  80. package/docs/id/packages/hono-intlayer/t.md +268 -0
  81. package/docs/it/intlayer_with_adonisjs.md +394 -0
  82. package/docs/it/intlayer_with_hono.md +227 -0
  83. package/docs/it/intlayer_with_vite+preact.md +290 -659
  84. package/docs/it/packages/adonis-intlayer/exports.md +50 -0
  85. package/docs/it/packages/adonis-intlayer/intlayer.md +54 -0
  86. package/docs/it/packages/adonis-intlayer/t.md +149 -0
  87. package/docs/it/packages/hono-intlayer/exports.md +59 -0
  88. package/docs/it/packages/hono-intlayer/intlayer.md +60 -0
  89. package/docs/it/packages/hono-intlayer/t.md +268 -0
  90. package/docs/ja/intlayer_with_adonisjs.md +394 -0
  91. package/docs/ja/intlayer_with_hono.md +227 -0
  92. package/docs/ja/intlayer_with_vite+preact.md +307 -662
  93. package/docs/ja/packages/adonis-intlayer/exports.md +50 -0
  94. package/docs/ja/packages/adonis-intlayer/intlayer.md +54 -0
  95. package/docs/ja/packages/adonis-intlayer/t.md +149 -0
  96. package/docs/ja/packages/hono-intlayer/exports.md +59 -0
  97. package/docs/ja/packages/hono-intlayer/intlayer.md +60 -0
  98. package/docs/ja/packages/hono-intlayer/t.md +268 -0
  99. package/docs/ko/intlayer_with_adonisjs.md +394 -0
  100. package/docs/ko/intlayer_with_hono.md +227 -0
  101. package/docs/ko/intlayer_with_vite+preact.md +303 -703
  102. package/docs/ko/packages/adonis-intlayer/exports.md +50 -0
  103. package/docs/ko/packages/adonis-intlayer/intlayer.md +54 -0
  104. package/docs/ko/packages/adonis-intlayer/t.md +149 -0
  105. package/docs/ko/packages/hono-intlayer/exports.md +59 -0
  106. package/docs/ko/packages/hono-intlayer/intlayer.md +60 -0
  107. package/docs/ko/packages/hono-intlayer/t.md +268 -0
  108. package/docs/pl/intlayer_with_adonisjs.md +394 -0
  109. package/docs/pl/intlayer_with_hono.md +227 -0
  110. package/docs/pl/intlayer_with_vite+preact.md +289 -690
  111. package/docs/pl/packages/adonis-intlayer/exports.md +50 -0
  112. package/docs/pl/packages/adonis-intlayer/intlayer.md +54 -0
  113. package/docs/pl/packages/adonis-intlayer/t.md +149 -0
  114. package/docs/pl/packages/hono-intlayer/exports.md +59 -0
  115. package/docs/pl/packages/hono-intlayer/intlayer.md +60 -0
  116. package/docs/pl/packages/hono-intlayer/t.md +268 -0
  117. package/docs/pt/intlayer_with_adonisjs.md +394 -0
  118. package/docs/pt/intlayer_with_hono.md +227 -0
  119. package/docs/pt/intlayer_with_vite+preact.md +275 -637
  120. package/docs/pt/packages/adonis-intlayer/exports.md +50 -0
  121. package/docs/pt/packages/adonis-intlayer/intlayer.md +54 -0
  122. package/docs/pt/packages/adonis-intlayer/t.md +149 -0
  123. package/docs/pt/packages/hono-intlayer/exports.md +59 -0
  124. package/docs/pt/packages/hono-intlayer/intlayer.md +60 -0
  125. package/docs/pt/packages/hono-intlayer/t.md +268 -0
  126. package/docs/ru/intlayer_with_adonisjs.md +393 -0
  127. package/docs/ru/intlayer_with_hono.md +223 -0
  128. package/docs/ru/intlayer_with_vite+preact.md +319 -683
  129. package/docs/ru/packages/adonis-intlayer/exports.md +50 -0
  130. package/docs/ru/packages/adonis-intlayer/intlayer.md +54 -0
  131. package/docs/ru/packages/adonis-intlayer/t.md +149 -0
  132. package/docs/ru/packages/hono-intlayer/exports.md +59 -0
  133. package/docs/ru/packages/hono-intlayer/intlayer.md +60 -0
  134. package/docs/ru/packages/hono-intlayer/t.md +268 -0
  135. package/docs/tr/intlayer_with_adonisjs.md +394 -0
  136. package/docs/tr/intlayer_with_hono.md +227 -0
  137. package/docs/tr/intlayer_with_vite+preact.md +332 -665
  138. package/docs/tr/packages/adonis-intlayer/exports.md +50 -0
  139. package/docs/tr/packages/adonis-intlayer/intlayer.md +54 -0
  140. package/docs/tr/packages/adonis-intlayer/t.md +149 -0
  141. package/docs/tr/packages/hono-intlayer/exports.md +59 -0
  142. package/docs/tr/packages/hono-intlayer/intlayer.md +60 -0
  143. package/docs/tr/packages/hono-intlayer/t.md +268 -0
  144. package/docs/uk/intlayer_with_adonisjs.md +394 -0
  145. package/docs/uk/intlayer_with_hono.md +227 -0
  146. package/docs/uk/intlayer_with_vite+preact.md +228 -626
  147. package/docs/uk/packages/adonis-intlayer/exports.md +50 -0
  148. package/docs/uk/packages/adonis-intlayer/intlayer.md +54 -0
  149. package/docs/uk/packages/adonis-intlayer/t.md +149 -0
  150. package/docs/uk/packages/hono-intlayer/exports.md +59 -0
  151. package/docs/uk/packages/hono-intlayer/intlayer.md +60 -0
  152. package/docs/uk/packages/hono-intlayer/t.md +268 -0
  153. package/docs/vi/intlayer_with_adonisjs.md +394 -0
  154. package/docs/vi/intlayer_with_hono.md +227 -0
  155. package/docs/vi/intlayer_with_vite+preact.md +294 -679
  156. package/docs/vi/packages/adonis-intlayer/exports.md +50 -0
  157. package/docs/vi/packages/adonis-intlayer/intlayer.md +54 -0
  158. package/docs/vi/packages/adonis-intlayer/t.md +149 -0
  159. package/docs/vi/packages/hono-intlayer/exports.md +59 -0
  160. package/docs/vi/packages/hono-intlayer/intlayer.md +60 -0
  161. package/docs/vi/packages/hono-intlayer/t.md +268 -0
  162. package/docs/zh/intlayer_with_adonisjs.md +393 -0
  163. package/docs/zh/intlayer_with_hono.md +418 -0
  164. package/docs/zh/intlayer_with_vite+preact.md +338 -743
  165. package/docs/zh/packages/adonis-intlayer/exports.md +50 -0
  166. package/docs/zh/packages/adonis-intlayer/intlayer.md +54 -0
  167. package/docs/zh/packages/adonis-intlayer/t.md +149 -0
  168. package/docs/zh/packages/hono-intlayer/exports.md +59 -0
  169. package/docs/zh/packages/hono-intlayer/intlayer.md +60 -0
  170. package/docs/zh/packages/hono-intlayer/t.md +294 -0
  171. package/package.json +6 -6
  172. package/src/generated/docs.entry.ts +160 -0
@@ -0,0 +1,394 @@
1
+ ---
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-12-30
4
+ title: AdonisJS i18n - Cách dịch ứng dụng AdonisJS của bạn – hướng dẫn 2026
5
+ description: Khám phá cách làm cho backend AdonisJS của bạn đ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
+ - AdonisJS
11
+ - JavaScript
12
+ - Backend
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - adonisjs
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-adonisjs-template
18
+ history:
19
+ - version: 8.0.0
20
+ date: 2025-12-30
21
+ changes: Khởi tạo lịch sử
22
+ ---
23
+
24
+ # Dịch website backend AdonisJS của bạn bằng Intlayer | Quốc tế hóa (i18n)
25
+
26
+ `adonis-intlayer` là một gói quốc tế hóa (i18n) mạnh mẽ cho các ứng dụng AdonisJS, được thiết kế để làm cho các dịch vụ backend của bạn có thể truy cập toàn cầu bằng cách cung cấp các phản hồi được bản địa hóa dựa trên sở thích của khách hàng.
27
+
28
+ ### Các trường hợp sử dụng thực tế
29
+
30
+ - **Hiển thị lỗi backend bằng ngôn ngữ của người dùng**: Khi xảy ra lỗi, việc hiển thị thông báo bằng ngôn ngữ mẹ đẻ của người dùng sẽ giúp cải thiện sự hiểu biết và giảm bớt sự khó chịu. Điều này đặc biệt hữu ích cho các thông báo lỗi động có thể được hiển thị trong các thành phần front-end như toast hoặc modal.
31
+
32
+ - **Truy xuất nội dung đa ngôn ngữ**: Đối với các ứng dụng lấy nội dung từ cơ sở dữ liệu, quốc tế hóa đảm bảo rằng bạn có thể phục vụ nội dung này bằng nhiều ngôn ngữ. Điều này rất quan trọng đối với các nền tảng như trang thương mại điện tử hoặc hệ thống quản lý nội dung cần hiển thị mô tả sản phẩm, bài viết và các nội dung khác bằng ngôn ngữ mà người dùng ưa thích.
33
+
34
+ - **Gửi email đa ngôn ngữ**: Cho dù đó là email giao dịch, chiến dịch tiếp thị hay thông báo, việc gửi email bằng ngôn ngữ của người nhận có thể tăng đáng kể sự tương tác và hiệu quả.
35
+
36
+ - **Thông báo push đa ngôn ngữ**: Đối với các ứng dụng di động, gửi thông báo push bằng ngôn ngữ ưu tiên của người dùng có thể tăng cường sự tương tác và giữ chân người dùng. Sự tiếp xúc cá nhân này có thể làm cho các thông báo cảm thấy phù hợp và có thể hành động hơn.
37
+
38
+ - **Các hình thức liên lạc khác**: Bất kỳ hình thức liên lạc nào từ backend, chẳng hạn như tin nhắn SMS, cảnh báo hệ thống hoặc cập nhật giao diện người dùng, đều có lợi khi sử dụng ngôn ngữ của người dùng, đảm bảo sự rõ ràng và nâng cao trải nghiệm tổng thể của người dùng.
39
+
40
+ Bằng cách quốc tế hóa backend, ứng dụng của bạn không chỉ tôn trọng sự khác biệt văn hóa mà còn phù hợp hơn với nhu cầu thị trường toàn cầu, khiến nó trở thành một bước quan trọng trong việc mở rộng dịch vụ của bạn trên toàn thế giới.
41
+
42
+ ## Bắt đầu
43
+
44
+ ### Cài đặt
45
+
46
+ Để bắt đầu sử dụng `adonis-intlayer`, hãy cài đặt gói bằng npm:
47
+
48
+ ```bash packageManager="npm"
49
+ npm install intlayer adonis-intlayer
50
+ npx intlayer init
51
+ ```
52
+
53
+ ```bash packageManager="pnpm"
54
+ pnpm add intlayer adonis-intlayer
55
+ pnpm intlayer init
56
+ ```
57
+
58
+ ```bash packageManager="yarn"
59
+ yarn add intlayer adonis-intlayer
60
+ yarn intlayer init
61
+ ```
62
+
63
+ ```bash packageManager="bun"
64
+ bun add intlayer adonis-intlayer
65
+ bunx intlayer init
66
+ ```
67
+
68
+ ### Thiết lập
69
+
70
+ Cấu hình các cài đặt quốc tế hóa bằng cách tạo một tệp `intlayer.config.ts` trong thư mục gốc của dự án:
71
+
72
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
73
+ import { Locales, type IntlayerConfig } from "intlayer";
74
+
75
+ const config: IntlayerConfig = {
76
+ internationalization: {
77
+ locales: [
78
+ Locales.ENGLISH,
79
+ Locales.RUSSIAN,
80
+ Locales.JAPANESE,
81
+ Locales.FRENCH,
82
+ Locales.KOREAN,
83
+ Locales.CHINESE,
84
+ Locales.SPANISH,
85
+ Locales.GERMAN,
86
+ Locales.ARABIC,
87
+ Locales.ITALIAN,
88
+ Locales.ENGLISH_UNITED_KINGDOM,
89
+ Locales.PORTUGUESE,
90
+ Locales.HINDI,
91
+ Locales.TURKISH,
92
+ Locales.POLISH,
93
+ Locales.INDONESIAN,
94
+ Locales.VIETNAMESE,
95
+ Locales.UKRAINIAN,
96
+ ],
97
+ defaultLocale: Locales.ENGLISH,
98
+ },
99
+ };
100
+
101
+ export default config;
102
+ ```
103
+
104
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
105
+ import { Locales } from "intlayer";
106
+
107
+ /** @type {import('intlayer').IntlayerConfig} */
108
+ const config = {
109
+ internationalization: {
110
+ locales: [
111
+ Locales.ENGLISH,
112
+ Locales.RUSSIAN,
113
+ Locales.JAPANESE,
114
+ Locales.FRENCH,
115
+ Locales.KOREAN,
116
+ Locales.CHINESE,
117
+ Locales.SPANISH,
118
+ Locales.GERMAN,
119
+ Locales.ARABIC,
120
+ Locales.ITALIAN,
121
+ Locales.ENGLISH_UNITED_KINGDOM,
122
+ Locales.PORTUGUESE,
123
+ Locales.HINDI,
124
+ Locales.TURKISH,
125
+ Locales.POLISH,
126
+ Locales.INDONESIAN,
127
+ Locales.VIETNAMESE,
128
+ Locales.UKRAINIAN,
129
+ ],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+ };
133
+
134
+ export default config;
135
+ ```
136
+
137
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
138
+ const { Locales } = require("intlayer");
139
+
140
+ /** @type {import('intlayer').IntlayerConfig} */
141
+ const config = {
142
+ internationalization: {
143
+ locales: [
144
+ Locales.ENGLISH,
145
+ Locales.RUSSIAN,
146
+ Locales.JAPANESE,
147
+ Locales.FRENCH,
148
+ Locales.KOREAN,
149
+ Locales.CHINESE,
150
+ Locales.SPANISH,
151
+ Locales.GERMAN,
152
+ Locales.ARABIC,
153
+ Locales.ITALIAN,
154
+ Locales.ENGLISH_UNITED_KINGDOM,
155
+ Locales.PORTUGUESE,
156
+ Locales.HINDI,
157
+ Locales.TURKISH,
158
+ Locales.POLISH,
159
+ Locales.INDONESIAN,
160
+ Locales.VIETNAMESE,
161
+ Locales.UKRAINIAN,
162
+ ],
163
+ defaultLocale: Locales.ENGLISH,
164
+ },
165
+ };
166
+
167
+ module.exports = config;
168
+ ```
169
+
170
+ ### Khai báo nội dung của bạn
171
+
172
+ 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:
173
+
174
+ ```typescript fileName="app/index.content.ts" contentDeclarationFormat="typescript"
175
+ import { t, type Dictionary } from "intlayer";
176
+
177
+ const indexContent = {
178
+ key: "index",
179
+ content: {
180
+ exampleOfContent: t({
181
+ en: "Example of returned content in English",
182
+ fr: "Exemple de contenu renvoyé en français",
183
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
184
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
185
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
186
+ }),
187
+ },
188
+ } satisfies Dictionary;
189
+
190
+ export default indexContent;
191
+ ```
192
+
193
+ ```javascript fileName="app/index.content.mjs" contentDeclarationFormat="esm"
194
+ import { t } from "intlayer";
195
+
196
+ /** @type {import('intlayer').Dictionary} */
197
+ const indexContent = {
198
+ key: "index",
199
+ content: {
200
+ exampleOfContent: t({
201
+ en: "Example of returned content in English",
202
+ fr: "Exemple de contenu renvoyé en français",
203
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
204
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
205
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
206
+ }),
207
+ },
208
+ };
209
+
210
+ export default indexContent;
211
+ ```
212
+
213
+ ```javascript fileName="app/index.content.cjs" contentDeclarationFormat="commonjs"
214
+ const { t } = require("intlayer");
215
+
216
+ /** @type {import('intlayer').Dictionary} */
217
+ const indexContent = {
218
+ key: "index",
219
+ content: {
220
+ exampleOfContent: t({
221
+ en: "Example of returned content in English",
222
+ fr: "Exemple de contenu renvoyé en français",
223
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
224
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
225
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
226
+ }),
227
+ },
228
+ };
229
+
230
+ module.exports = indexContent;
231
+ ```
232
+
233
+ ```json fileName="app/index.content.json" contentDeclarationFormat="json"
234
+ {
235
+ "$schema": "https://intlayer.org/schema.json",
236
+ "key": "index",
237
+ "content": {
238
+ "exampleOfContent": {
239
+ "nodeType": "translation",
240
+ "translation": {
241
+ "en": "Example of returned content in English",
242
+ "fr": "Exemple de contenu renvoyé en français",
243
+ "vi": "Ví dụ về nội dung được trả về bằng tiếng Việt",
244
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
245
+ "es-MX": "Ejemplo de contenido devuelto en español (México)"
246
+ }
247
+ }
248
+ }
249
+ }
250
+ ```
251
+
252
+ > 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` hoặc `./app`) 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}`).
253
+
254
+ > Để 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).
255
+
256
+ ### Thiết lập ứng dụng AdonisJS
257
+
258
+ Thiết lập ứng dụng AdonisJS của bạn để sử dụng `adonis-intlayer`.
259
+
260
+ #### Đăng ký middleware
261
+
262
+ Trước tiên, bạn cần đăng ký middleware `intlayer` trong ứng dụng của mình.
263
+
264
+ ```typescript fileName="start/kernel.ts"
265
+ router.use([() => import("adonis-intlayer/middleware")]);
266
+ ```
267
+
268
+ #### Định nghĩa các route của bạn
269
+
270
+ ```typescript fileName="start/routes.ts"
271
+ import router from "@adonisjs/core/services/router";
272
+ import { t, getIntlayer, getDictionary } from "adonis-intlayer";
273
+ import indexContent from "../app/index.content";
274
+
275
+ router.get("/t_example", async () => {
276
+ return t({
277
+ en: "Example of returned content in English",
278
+ fr: "Exemple de nội dung renvoyé en français",
279
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
280
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
281
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
282
+ });
283
+ });
284
+
285
+ router.get("/getIntlayer_example", async () => {
286
+ return getIntlayer("index").exampleOfContent;
287
+ });
288
+
289
+ router.get("/getDictionary_example", async () => {
290
+ return getDictionary(indexContent).exampleOfContent;
291
+ });
292
+ ```
293
+
294
+ #### Các hàm
295
+
296
+ `adonis-intlayer` xuất ra một số hàm để xử lý quốc tế hóa trong ứng dụng của bạn:
297
+
298
+ - `t(content, locale?)`: Hàm dịch cơ bản.
299
+ - `getIntlayer(key, locale?)`: Truy xuất nội dung bằng khóa từ các từ điển của bạn.
300
+ - `getDictionary(dictionary, locale?)`: Truy xuất nội dung từ một đối tượng từ điển cụ thể.
301
+ - `getLocale()`: Truy xuất ngôn ngữ hiện tại từ ngữ cảnh yêu cầu.
302
+
303
+ #### Sử dụng trong Controller
304
+
305
+ ```typescript fileName="app/controllers/example_controller.ts"
306
+ import type { HttpContext } from "@adonisjs/core/http";
307
+ import { t } from "adonis-intlayer";
308
+
309
+ export default class ExampleController {
310
+ async index({ response }: HttpContext) {
311
+ return response.send(
312
+ t({
313
+ en: "Hello from controller",
314
+ fr: "Bonjour depuis le contrôleur",
315
+ vi: "Xin chào từ bộ điều khiển",
316
+ })
317
+ );
318
+ }
319
+ }
320
+ ```
321
+
322
+ ### Khả năng tương thích
323
+
324
+ `adonis-intlayer` hoàn toàn tương thích với:
325
+
326
+ - [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/react-intlayer/index.md) cho các ứng dụng React
327
+ - [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/next-intlayer/index.md) cho các ứng dụng Next.js
328
+ - [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/vite-intlayer/index.md) cho các ứng dụng Vite
329
+
330
+ Nó cũng hoạt động liền mạch với bất kỳ giải pháp quốc tế hóa nào trên nhiều môi trường khác nhau, bao gồm trình duyệt và yêu cầu API. Bạn có thể tùy chỉnh middleware để phát hiện ngôn ngữ thông qua header hoặc cookie:
331
+
332
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
333
+ import { Locales, type IntlayerConfig } from "intlayer";
334
+
335
+ const config: IntlayerConfig = {
336
+ // ... Các tùy chọn cấu hình khác
337
+ middleware: {
338
+ headerName: "my-locale-header",
339
+ cookieName: "my-locale-cookie",
340
+ },
341
+ };
342
+
343
+ export default config;
344
+ ```
345
+
346
+ Theo mặc định, `adonis-intlayer` sẽ diễn giải header `Accept-Language` để xác định ngôn ngữ ưa thích của khách hàng.
347
+
348
+ > Để biết thêm thông tin về cấu hình và các chủ đề nâng cao, hãy truy cập [tài liệu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md) của chúng tôi.
349
+
350
+ ### Cấu hình TypeScript
351
+
352
+ `adonis-intlayer` tận dụng khả năng mạnh mẽ của TypeScript để cải thiện quá trình quốc tế hóa. Việc nhập liệu tĩnh của TypeScript đảm bảo rằng mọi khóa dịch đều được tính đến, giảm rủi ro thiếu bản dịch và cải thiện khả năng bảo trì.
353
+
354
+ ![Tự động hoàn thành](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
355
+
356
+ ![Lỗi bản dịch](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
357
+
358
+ Đảm bảo các loại được tự động tạo (mặc định tại ./types/intlayer.d.ts) được bao gồm trong tệp tsconfig.json của bạn.
359
+
360
+ ```json5 fileName="tsconfig.json"
361
+ {
362
+ // ... Các cấu hình TypeScript hiện có của bạn
363
+ "include": [
364
+ // ... Các cấu hình TypeScript hiện có của bạn
365
+ ".intlayer/**/*.ts", // Bao gồm các loại được tự động tạo
366
+ ],
367
+ }
368
+ ```
369
+
370
+ ### Tiện ích mở rộng VS Code
371
+
372
+ Để 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 cho VS Code** chính thức.
373
+
374
+ [Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
375
+
376
+ Tiện ích mở rộng này cung cấp:
377
+
378
+ - **Tự động hoàn thành** cho các khóa dịch.
379
+ - **Phát hiện lỗi thời gian thực** cho các bản dịch còn thiếu.
380
+ - **Xem trước nội tuyến** nội dung đã dịch.
381
+ - **Hành động nhanh** để dễ dàng tạo và cập nhật các bản dịch.
382
+
383
+ Để 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 cho VS Code](https://intlayer.org/vi/doc/vs-code-extension).
384
+
385
+ ### Cấu hình Git
386
+
387
+ Khuyến nghị bỏ qua các tệp được tạo bởi Intlayer. Điều này cho phép bạn tránh cam kết chúng vào kho lưu trữ Git của mình.
388
+
389
+ Để làm điều này, bạn có thể thêm các hướng dẫn sau vào tệp `.gitignore` của mình:
390
+
391
+ ```plaintext fileName=".gitignore"
392
+ # Bỏ qua các tệp được tạo bởi Intlayer
393
+ .intlayer
394
+ ```
@@ -0,0 +1,227 @@
1
+ ---
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-12-30
4
+ title: i18n Hono - Cách dịch ứng dụng Hono của bạn – hướng dẫn 2026
5
+ description: Khám phá cách làm cho backend Hono của bạn đ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
+ - Hono
11
+ - JavaScript
12
+ - Backend
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - hono
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-hono-template
18
+ history:
19
+ - version: 7.5.9
20
+ date: 2025-12-30
21
+ changes: Thêm lệnh init
22
+ - version: 5.5.10
23
+ date: 2025-06-29
24
+ changes: Khởi tạo lịch sử
25
+ ---
26
+
27
+ # Dịch website backend Hono của bạn bằng Intlayer | Quốc tế hóa (i18n)
28
+
29
+ `hono-intlayer` là một middleware quốc tế hóa (i18n) mạnh mẽ cho các ứng dụng Hono, được thiết kế để làm cho các dịch vụ backend của bạn có thể truy cập toàn cầu bằng cách cung cấp các phản hồi được bản địa hóa dựa trên sở thích của khách hàng.
30
+
31
+ ### Các trường hợp sử dụng thực tế
32
+
33
+ - **Hiển thị lỗi backend bằng ngôn ngữ của người dùng**: Khi xảy ra lỗi, việc hiển thị thông báo bằng tiếng mẹ đẻ của người dùng sẽ giúp họ dễ hiểu hơn và giảm bớt sự khó chịu. Điều này đặc biệt hữu ích cho các thông báo lỗi động có thể được hiển thị trong các thành phần front-end như toast hoặc modal.
34
+
35
+ - **Truy xuất nội dung đa ngôn ngữ**: Đối với các ứng dụng lấy nội dung từ cơ sở dữ liệu, quốc tế hóa đảm bảo rằng bạn có thể cung cấp nội dung này bằng nhiều ngôn ngữ. Điều này rất quan trọng đối với các nền tảng như trang web thương mại điện tử hoặc hệ thống quản lý nội dung cần hiển thị mô tả sản phẩm, bài báo và nội dung khác bằng ngôn ngữ ưa thích của người dùng.
36
+
37
+ - **Gửi email đa ngôn ngữ**: Cho dù đó là email giao dịch, chiến dịch tiếp thị hay thông báo, việc gửi email bằng ngôn ngữ của người nhận có thể tăng đáng kể mức độ tương tác và hiệu quả.
38
+
39
+ - **Thông báo đẩy đa ngôn ngữ**: Đối với các ứng dụng di động, việc gửi thông báo đẩy bằng ngôn ngữ ưa thích của người dùng có thể tăng cường tương tác và giữ chân họ. Sự tiếp xúc cá nhân này có thể làm cho các thông báo trở nên phù hợp và dễ thực hiện hơn.
40
+
41
+ - **Các hình thức liên lạc khác**: Bất kỳ hình thức liên lạc nào từ backend, chẳng hạn như tin nhắn SMS, cảnh báo hệ thống hoặc cập nhật giao diện người dùng, đều được hưởng lợi từ việc sử dụng ngôn ngữ của người dùng, đảm bảo sự rõ ràng và nâng cao trải nghiệm tổng thể của người dùng.
42
+
43
+ Bằng cách quốc tế hóa backend, ứng dụng của bạn không chỉ tôn trọng sự khác biệt văn hóa mà còn phù hợp hơn với nhu cầu thị trường toàn cầu, đây là một bước quan trọng trong việc mở rộng quy mô dịch vụ của bạn trên toàn thế giới.
44
+
45
+ ## Bắt đầu
46
+
47
+ ### Cài đặt
48
+
49
+ Để bắt đầu sử dụng `hono-intlayer`, hãy cài đặt gói bằng npm:
50
+
51
+ ```bash packageManager="npm"
52
+ npm install intlayer hono-intlayer
53
+ npx intlayer init
54
+ ```
55
+
56
+ ```bash packageManager="pnpm"
57
+ pnpm add intlayer hono-intlayer
58
+ pnpm intlayer init
59
+ ```
60
+
61
+ ```bash packageManager="yarn"
62
+ yarn add intlayer hono-intlayer
63
+ yarn intlayer init
64
+ ```
65
+
66
+ ```bash packageManager="bun"
67
+ bun add intlayer hono-intlayer
68
+ bunx intlayer init
69
+ ```
70
+
71
+ ### Thiết lập
72
+
73
+ Cấu hình cài đặt quốc tế hóa bằng cách tạo tệp `intlayer.config.ts` trong thư mục gốc của dự án:
74
+
75
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
76
+ import { Locales, type IntlayerConfig } from "intlayer";
77
+
78
+ const config: IntlayerConfig = {
79
+ internationalization: {
80
+ locales: [
81
+ Locales.ENGLISH,
82
+ Locales.FRENCH,
83
+ Locales.SPANISH_MEXICO,
84
+ Locales.SPANISH_SPAIN,
85
+ Locales.VIETNAMESE,
86
+ ],
87
+ defaultLocale: Locales.ENGLISH,
88
+ },
89
+ };
90
+
91
+ export default config;
92
+ ```
93
+
94
+ ### Khai báo nội dung của bạn
95
+
96
+ 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:
97
+
98
+ ```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
99
+ import { t, type Dictionary } from "intlayer";
100
+
101
+ const indexContent = {
102
+ key: "index",
103
+ content: {
104
+ exampleOfContent: t({
105
+ en: "Example of returned content in English",
106
+ fr: "Exemple de contenu renvoyé en français",
107
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
108
+ }),
109
+ },
110
+ } satisfies Dictionary;
111
+
112
+ export default indexContent;
113
+ ```
114
+
115
+ > 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}`).
116
+
117
+ > Để 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).
118
+
119
+ ### Thiết lập ứng dụng Hono
120
+
121
+ Thiết lập ứng dụng Hono của bạn để sử dụng `hono-intlayer`:
122
+
123
+ ```typescript fileName="src/index.ts" codeFormat="typescript"
124
+ import { Hono } from "hono";
125
+ import { intlayer, t, getDictionary, getIntlayer } from "hono-intlayer";
126
+ import dictionaryExample from "./index.content";
127
+
128
+ const app = new Hono();
129
+
130
+ // Tải trình xử lý yêu cầu quốc tế hóa
131
+ app.use("*", intlayer());
132
+
133
+ // Các tuyến đường
134
+ app.get("/t_example", (c) => {
135
+ return c.text(
136
+ t({
137
+ en: "Example of returned content in English",
138
+ fr: "Exemple de contenu renvoyé en français",
139
+ vi: "Ví dụ về nội dung được trả về bằng tiếng Việt",
140
+ })
141
+ );
142
+ });
143
+
144
+ app.get("/getIntlayer_example", (c) => {
145
+ return c.json(getIntlayer("index").exampleOfContent);
146
+ });
147
+
148
+ app.get("/getDictionary_example", (c) => {
149
+ return c.json(getDictionary(dictionaryExample).exampleOfContent);
150
+ });
151
+
152
+ export default app;
153
+ ```
154
+
155
+ ### Khả năng tương thích
156
+
157
+ `hono-intlayer` tương thích hoàn toàn với:
158
+
159
+ - [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/react-intlayer/index.md) cho các ứng dụng React
160
+ - [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/next-intlayer/index.md) cho các ứng dụng Next.js
161
+ - [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/vite-intlayer/index.md) cho các ứng dụng Vite
162
+
163
+ Nó cũng hoạt động trơn tru với bất kỳ giải pháp quốc tế hóa nào trên các môi trường khác nhau, bao gồm trình duyệt và yêu cầu API. Bạn có thể tùy chỉnh middleware để phát hiện ngôn ngữ thông qua tiêu đề hoặc cookie:
164
+
165
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
166
+ import { Locales, type IntlayerConfig } from "intlayer";
167
+
168
+ const config: IntlayerConfig = {
169
+ // ... Các tùy chọn cấu hình khác
170
+ middleware: {
171
+ headerName: "my-locale-header",
172
+ cookieName: "my-locale-cookie",
173
+ },
174
+ };
175
+
176
+ export default config;
177
+ ```
178
+
179
+ Theo mặc định, `hono-intlayer` sẽ diễn giải tiêu đề `Accept-Language` để xác định ngôn ngữ ưa thích của khách hàng.
180
+
181
+ > Để biết thêm thông tin về cấu hình và các chủ đề nâng cao, hãy truy cập [tài liệu của chúng tôi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md).
182
+
183
+ ### Cấu hình TypeScript
184
+
185
+ `hono-intlayer` tận dụng khả năng mạnh mẽ của TypeScript để tăng cường quy trình quốc tế hóa. Việc nhập tĩnh của TypeScript đảm bảo rằng mọi khóa dịch đều được tính đến, giảm thiểu rủi ro thiếu bản dịch và cải thiện khả năng bảo trì.
186
+
187
+ ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
188
+
189
+ ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
190
+
191
+ Hãy đảm bảo các kiểu tự động tạo (mặc định tại ./types/intlayer.d.ts) được bao gồm trong tệp tsconfig.json của bạn.
192
+
193
+ ```json5 fileName="tsconfig.json"
194
+ {
195
+ // ... Các cấu hình TypeScript hiện có của bạn
196
+ "include": [
197
+ // ... Các cấu hình TypeScript hiện có của bạn
198
+ ".intlayer/**/*.ts", // Bao gồm các kiểu tự động tạo
199
+ ],
200
+ }
201
+ ```
202
+
203
+ ### Tiện ích mở rộng VS Code
204
+
205
+ Để 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.
206
+
207
+ [Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
208
+
209
+ Tiện ích mở rộng này cung cấp:
210
+
211
+ - **Tự động hoàn thành** cho các khóa dịch.
212
+ - **Phát hiện lỗi thời gian thực** cho các bản dịch bị thiếu.
213
+ - **Xem trước nội tuyến** nội dung đã dịch.
214
+ - **Hành động nhanh** để dễ dàng tạo và cập nhật các bản dịch.
215
+
216
+ Để 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).
217
+
218
+ ### Cấu hình Git
219
+
220
+ Khuyên bạn nên bỏ qua các tệp do Intlayer tạo ra. Đ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.
221
+
222
+ Để 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:
223
+
224
+ ```plaintext fileName=".gitignore"
225
+ # Bỏ qua các tệp do Intlayer tạo ra
226
+ .intlayer
227
+ ```