@intlayer/docs 5.8.0-canary.0 → 5.8.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 (223) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +2 -2
  2. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  3. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  4. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  5. package/blog/de/intlayer_with_next-i18next.md +2 -2
  6. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  7. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  8. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  9. package/blog/en/intlayer_with_next-i18next.md +2 -2
  10. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +88 -120
  12. package/blog/en/vue-i18n_vs_intlayer.md +276 -0
  13. package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
  14. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  15. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  16. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  17. package/blog/es/intlayer_with_next-i18next.md +2 -2
  18. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  19. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  20. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  21. package/blog/fr/intlayer_with_next-i18next.md +2 -2
  22. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  23. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  24. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  25. package/blog/hi/intlayer_with_next-i18next.md +2 -2
  26. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  27. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  28. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  29. package/blog/it/intlayer_with_next-i18next.md +2 -2
  30. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  31. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  32. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  33. package/blog/ja/intlayer_with_next-i18next.md +2 -2
  34. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  35. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  36. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  37. package/blog/ko/intlayer_with_next-i18next.md +2 -2
  38. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  39. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  40. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  41. package/blog/pt/intlayer_with_next-i18next.md +2 -2
  42. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  43. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  44. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  45. package/blog/ru/intlayer_with_next-i18next.md +2 -2
  46. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  47. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  48. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  49. package/blog/zh/intlayer_with_next-i18next.md +2 -2
  50. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  51. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  52. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  53. package/dist/cjs/generated/blog.entry.cjs +41 -0
  54. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  55. package/dist/esm/generated/blog.entry.mjs +41 -0
  56. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  57. package/dist/types/generated/blog.entry.d.ts +1 -0
  58. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  59. package/docs/ar/formatters.md +417 -31
  60. package/docs/ar/how_works_intlayer.md +2 -4
  61. package/docs/ar/interest_of_intlayer.md +7 -10
  62. package/docs/ar/intlayer_CMS.md +2 -3
  63. package/docs/ar/intlayer_visual_editor.md +2 -3
  64. package/docs/ar/intlayer_with_tanstack.md +1 -1
  65. package/docs/ar/introduction.md +4 -4
  66. package/docs/de/formatters.md +444 -34
  67. package/docs/de/introduction.md +2 -2
  68. package/docs/en/dictionary/enumeration.md +2 -2
  69. package/docs/en/dictionary/function_fetching.md +2 -2
  70. package/docs/en/dictionary/get_started.md +2 -2
  71. package/docs/en/dictionary/translation.md +2 -2
  72. package/docs/en/formatters.md +383 -15
  73. package/docs/en/how_works_intlayer.md +2 -4
  74. package/docs/en/interest_of_intlayer.md +48 -29
  75. package/docs/en/intlayer_CMS.md +2 -3
  76. package/docs/en/intlayer_visual_editor.md +2 -3
  77. package/docs/en/intlayer_with_create_react_app.md +2 -2
  78. package/docs/en/intlayer_with_express.md +2 -2
  79. package/docs/en/intlayer_with_tanstack.md +1 -1
  80. package/docs/en/introduction.md +4 -4
  81. package/docs/en/packages/express-intlayer/index.md +2 -2
  82. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  83. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  84. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  85. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  86. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  87. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  88. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  89. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  90. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  91. package/docs/en/packages/intlayer/index.md +2 -2
  92. package/docs/en/packages/next-intlayer/index.md +2 -2
  93. package/docs/en/packages/next-intlayer/t.md +2 -2
  94. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  95. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  96. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  97. package/docs/en/packages/react-intlayer/index.md +2 -2
  98. package/docs/en/packages/react-intlayer/t.md +2 -2
  99. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  100. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  101. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  102. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  103. package/docs/en/packages/solid-intlayer/index.md +2 -2
  104. package/docs/en/packages/vite-intlayer/index.md +2 -2
  105. package/docs/en-GB/formatters.md +402 -16
  106. package/docs/en-GB/how_works_intlayer.md +2 -4
  107. package/docs/en-GB/interest_of_intlayer.md +7 -10
  108. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  109. package/docs/en-GB/introduction.md +2 -2
  110. package/docs/es/formatters.md +438 -28
  111. package/docs/es/how_works_intlayer.md +2 -4
  112. package/docs/es/interest_of_intlayer.md +7 -10
  113. package/docs/es/intlayer_with_tanstack.md +1 -1
  114. package/docs/es/introduction.md +2 -2
  115. package/docs/fr/formatters.md +438 -28
  116. package/docs/fr/how_works_intlayer.md +2 -4
  117. package/docs/fr/interest_of_intlayer.md +7 -10
  118. package/docs/fr/intlayer_with_tanstack.md +1 -1
  119. package/docs/fr/introduction.md +2 -2
  120. package/docs/hi/formatters.md +430 -39
  121. package/docs/hi/how_works_intlayer.md +2 -4
  122. package/docs/hi/interest_of_intlayer.md +7 -10
  123. package/docs/hi/intlayer_with_tanstack.md +1 -1
  124. package/docs/hi/introduction.md +2 -2
  125. package/docs/it/formatters.md +438 -30
  126. package/docs/it/how_works_intlayer.md +2 -4
  127. package/docs/it/interest_of_intlayer.md +7 -10
  128. package/docs/it/intlayer_with_tanstack.md +1 -1
  129. package/docs/it/introduction.md +2 -2
  130. package/docs/ja/formatters.md +435 -47
  131. package/docs/ja/how_works_intlayer.md +2 -4
  132. package/docs/ja/interest_of_intlayer.md +7 -10
  133. package/docs/ja/intlayer_with_tanstack.md +1 -1
  134. package/docs/ja/introduction.md +2 -2
  135. package/docs/ko/formatters.md +432 -41
  136. package/docs/ko/how_works_intlayer.md +2 -4
  137. package/docs/ko/interest_of_intlayer.md +7 -10
  138. package/docs/ko/intlayer_with_tanstack.md +1 -1
  139. package/docs/ko/introduction.md +2 -2
  140. package/docs/pt/formatters.md +416 -30
  141. package/docs/pt/how_works_intlayer.md +2 -4
  142. package/docs/pt/intlayer_with_tanstack.md +1 -1
  143. package/docs/pt/introduction.md +2 -2
  144. package/docs/ru/autoFill.md +2 -2
  145. package/docs/ru/configuration.md +1 -40
  146. package/docs/ru/formatters.md +438 -28
  147. package/docs/ru/how_works_intlayer.md +5 -7
  148. package/docs/ru/index.md +1 -1
  149. package/docs/ru/interest_of_intlayer.md +8 -11
  150. package/docs/ru/intlayer_CMS.md +7 -8
  151. package/docs/ru/intlayer_cli.md +4 -7
  152. package/docs/ru/intlayer_visual_editor.md +5 -6
  153. package/docs/ru/intlayer_with_angular.md +1 -1
  154. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  155. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  156. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  157. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  158. package/docs/ru/intlayer_with_nuxt.md +1 -1
  159. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  160. package/docs/ru/intlayer_with_tanstack.md +3 -3
  161. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  162. package/docs/ru/intlayer_with_vite+react.md +3 -3
  163. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  164. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  165. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  166. package/docs/ru/introduction.md +5 -5
  167. package/docs/ru/locale_mapper.md +1 -1
  168. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  169. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  170. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  171. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  172. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  173. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  174. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  175. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  176. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  177. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  178. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  179. package/docs/ru/packages/express-intlayer/index.md +3 -3
  180. package/docs/ru/packages/express-intlayer/t.md +1 -1
  181. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  182. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  183. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  184. package/docs/ru/packages/intlayer/index.md +3 -3
  185. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  186. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  187. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  188. package/docs/ru/packages/next-intlayer/index.md +4 -4
  189. package/docs/ru/packages/next-intlayer/t.md +4 -4
  190. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  191. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  192. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  193. package/docs/ru/packages/react-intlayer/index.md +4 -4
  194. package/docs/ru/packages/react-intlayer/t.md +4 -4
  195. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  196. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  197. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  198. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  199. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  200. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  201. package/docs/ru/per_locale_file.md +1 -1
  202. package/docs/ru/roadmap.md +3 -5
  203. package/docs/ru/vs_code_extension.md +1 -1
  204. package/docs/zh/formatters.md +446 -38
  205. package/docs/zh/how_works_intlayer.md +2 -4
  206. package/docs/zh/interest_of_intlayer.md +7 -10
  207. package/docs/zh/intlayer_with_tanstack.md +1 -1
  208. package/docs/zh/introduction.md +2 -2
  209. package/frequent_questions/ar/domain_routing.md +1 -1
  210. package/frequent_questions/en/domain_routing.md +1 -1
  211. package/frequent_questions/en-GB/domain_routing.md +1 -1
  212. package/frequent_questions/es/domain_routing.md +1 -1
  213. package/frequent_questions/fr/domain_routing.md +1 -1
  214. package/frequent_questions/hi/domain_routing.md +1 -1
  215. package/frequent_questions/it/domain_routing.md +1 -1
  216. package/frequent_questions/ko/domain_routing.md +1 -1
  217. package/frequent_questions/pt/domain_routing.md +1 -1
  218. package/frequent_questions/ru/domain_routing.md +1 -1
  219. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  220. package/frequent_questions/ru/static_rendering.md +1 -2
  221. package/frequent_questions/zh/domain_routing.md +1 -1
  222. package/package.json +9 -11
  223. package/src/generated/blog.entry.ts +42 -1
@@ -25,8 +25,8 @@ Intlayer의 주요 아이디어는 컴포넌트별 콘텐츠 관리를 채택하
25
25
  .
26
26
  └── Components
27
27
  └── MyComponent
28
- ├── index.content.cjs
29
- └── index.mjs
28
+ ├── index.content.ts
29
+ └── index.tsx
30
30
  ```
31
31
 
32
32
  이를 위해 Intlayer의 역할은 프로젝트에 존재하는 다양한 형식의 `콘텐츠 선언 파일`을 모두 찾아내고, 이를 기반으로 `사전(dictionary)`을 생성하는 것입니다.
@@ -45,12 +45,10 @@ Intlayer의 주요 아이디어는 컴포넌트별 콘텐츠 관리를 채택하
45
45
  - [`vite-intlayer` 패키지](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/vite-intlayer/index.md)와 같은 앱 플러그인 또는 [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/next-intlayer/index.md)용 동등한 플러그인을 사용하는 방법. 이러한 플러그인 중 하나를 사용하면 Intlayer는 애플리케이션을 시작(개발)하거나 빌드(프로덕션)할 때 자동으로 사전을 빌드합니다.
46
46
 
47
47
  1. 콘텐츠 파일 선언
48
-
49
48
  - 콘텐츠 파일은 TypeScript, ECMAScript, CommonJS 또는 JSON과 같은 다양한 형식으로 정의할 수 있습니다.
50
49
  - 콘텐츠 파일은 프로젝트 어디에서나 정의할 수 있어 유지 관리와 확장성이 향상됩니다. 콘텐츠 파일의 파일 확장자 규칙을 준수하는 것이 중요합니다. 기본 확장자는 `*.content.{js|cjs|mjs|ts|tsx|json}`이지만, [설정 파일](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)에서 수정할 수 있습니다.
51
50
 
52
51
  2. `사전(dictionary)` 생성
53
-
54
52
  - 사전은 콘텐츠 파일에서 생성됩니다. 기본적으로 Intlayer 사전은 프로젝트의 `.intlayer/dictionaries` 디렉토리에 생성됩니다.
55
53
  - 이러한 사전은 모든 요구를 충족하고 애플리케이션 성능을 최적화하기 위해 다양한 형식으로 생성됩니다.
56
54
 
@@ -199,25 +199,22 @@ const ComponentExample = () => {
199
199
  - `.content.{{ts|mjs|cjs|json}}` 파일은 VSCode 확장 기능을 사용하여 생성할 수 있습니다.
200
200
  - IDE 내 자동완성 AI 도구(예: GitHub Copilot)가 콘텐츠 선언을 도와 복사/붙여넣기 작업을 줄여줍니다.
201
201
 
202
- 2. **코드베이스의 복잡성 감소**
202
+ 2. **코드베이스 정리**
203
+ - 복잡성 감소
204
+ - 유지보수성 향상
203
205
 
204
- 3. **코드베이스의 유지보수성 향상**
205
-
206
- 4. **컴포넌트와 관련 콘텐츠를 더 쉽게 복제하기 (예: 로그인/회원가입 컴포넌트 등)**
206
+ 3. **컴포넌트와 관련 콘텐츠를 더 쉽게 복제하기 (예: 로그인/회원가입 컴포넌트 등)**
207
207
  - 다른 컴포넌트의 콘텐츠에 영향을 미칠 위험을 제한하여
208
208
  - 외부 의존성 없이 한 애플리케이션에서 다른 애플리케이션으로 콘텐츠를 복사/붙여넣기 가능
209
209
 
210
- 5. **사용하지 않는 컴포넌트의 키/값으로 코드베이스를 오염시키지 않음**
211
- - 컴포넌트를 사용하지 않는다면, 해당 콘텐츠를 임포트할 필요가 없습니다.
210
+ 4. **사용하지 않는 컴포넌트의 키/값으로 코드베이스를 오염시키지 않음**
211
+ - 컴포넌트를 사용하지 않으면 Intlayer는 관련 콘텐츠를 가져오지 않습니다.
212
212
  - 컴포넌트를 삭제하면 관련 콘텐츠가 동일한 폴더에 존재하기 때문에 관련 콘텐츠를 더 쉽게 제거할 수 있습니다.
213
213
 
214
- 6. **AI 에이전트가 다국어 콘텐츠를 선언하는 데 드는 추론 비용 감소**
214
+ 5. **AI 에이전트가 다국어 콘텐츠를 선언하는 데 드는 추론 비용 감소**
215
215
  - AI 에이전트가 콘텐츠를 구현할 위치를 알기 위해 전체 코드베이스를 스캔할 필요가 없습니다.
216
216
  - IDE 내 자동완성 AI 도구(예: GitHub Copilot)를 통해 번역 작업을 쉽게 수행할 수 있습니다.
217
217
 
218
- 7. **로딩 성능 최적화**
219
- - 컴포넌트가 지연 로드(lazy-loaded)되는 경우, 관련 콘텐츠도 동시에 로드됩니다.
220
-
221
218
  ## Intlayer의 추가 기능
222
219
 
223
220
  | 기능 | 설명 |
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-08-11
3
3
  updatedAt: 2025-08-11
4
4
  title: TanStack Start (React)에서 Intlayer 시작하기
5
- description: Intlayer를 사용하여 TanStack Start 앱에 i18n 추가하기 컴포넌트 수준 사전, 지역화된 URL, SEO 친화적 메타데이터.
5
+ description: Intlayer를 사용하여 TanStack Start 앱에 i18n 추가하기 - 컴포넌트 수준 사전, 지역화된 URL, SEO 친화적 메타데이터.
6
6
  keywords:
7
7
  - 국제화
8
8
  - 문서
@@ -32,8 +32,8 @@ Intlayer는 또한 콘텐츠를 쉽게 편집하고 관리할 수 있는 선택
32
32
  .
33
33
  └── Components
34
34
  └── MyComponent
35
- ├── index.content.cjs
36
- └── index.mjs
35
+ ├── index.content.ts
36
+ └── index.tsx
37
37
  ```
38
38
 
39
39
  ```tsx fileName="src/components/MyComponent/index.content.ts" contentDeclarationFormat="typescript"
@@ -2,17 +2,18 @@
2
2
  createdAt: 2024-08-13
3
3
  updatedAt: 2025-08-20
4
4
  title: Formatadores
5
- description: Utilitários de formatação sensíveis à localidade baseados no Intl para números, percentuais, moeda, datas, tempo relativo, unidades e notação compacta. Inclui um helper Intl com cache.
5
+ description: Utilitários de formatação sensíveis à localidade baseados em Intl para números, percentagens, moeda, datas, tempo relativo, unidades e notação compacta. Inclui um helper Intl em cache.
6
6
  keywords:
7
7
  - Formatadores
8
8
  - Intl
9
9
  - Número
10
10
  - Moeda
11
- - Percentual
11
+ - Percentagem
12
12
  - Data
13
13
  - Tempo Relativo
14
14
  - Unidades
15
15
  - Compacto
16
+ - Lista
16
17
  - Internacionalização
17
18
  slugs:
18
19
  - doc
@@ -23,7 +24,7 @@ slugs:
23
24
 
24
25
  ## Visão Geral
25
26
 
26
- O Intlayer fornece um conjunto de helpers leves construídos sobre as APIs nativas `Intl`, além de um wrapper `Intl` com cache para evitar a construção repetida de formatadores pesados. Esses utilitários são totalmente sensíveis à localidade e podem ser usados a partir do pacote principal `intlayer`.
27
+ O Intlayer fornece um conjunto de helpers leves construídos sobre as APIs nativas `Intl`, além de um wrapper `Intl` em cache para evitar a construção repetida de formatadores pesados. Esses utilitários são totalmente sensíveis à localidade e podem ser usados a partir do pacote principal `intlayer`.
27
28
 
28
29
  ### Importação
29
30
 
@@ -37,40 +38,302 @@ import {
37
38
  relativeTime,
38
39
  units,
39
40
  compact,
41
+ list,
42
+ getLocaleName,
43
+ getLocaleLang,
44
+ getLocaleFromPath,
45
+ getPathWithoutLocale,
46
+ getLocalizedUrl,
47
+ getHTMLTextDir,
48
+ getContent,
49
+ getLocalisedContent,
50
+ getTranslation,
51
+ getIntlayer,
52
+ getIntlayerAsync,
40
53
  } from "intlayer";
41
54
  ```
42
55
 
43
- Se você estiver usando React, hooks também estão disponíveis; veja `react-intlayer/format`.
56
+ Se estiver a usar React, os hooks também estão disponíveis; veja `react-intlayer/format`.
44
57
 
45
- ## Intl com Cache
58
+ ## Intl em Cache
46
59
 
47
- O `Intl` exportado é um wrapper leve com cache em torno do `Intl` global. Ele memoiza instâncias de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, o que evita reconstruir o mesmo formatador repetidamente.
60
+ O `Intl` exportado é um wrapper leve e em cache em torno do `Intl` global. Ele memoiza instâncias de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` e `PluralRules`, o que evita reconstruir o mesmo formatador repetidamente.
48
61
 
49
- Como a construção do formatador é relativamente custosa, esse cache melhora a performance sem alterar o comportamento. O wrapper expõe a mesma API do `Intl` nativo, então o uso é idêntico.
62
+ Como a construção do formatador é relativamente dispendiosa, este cache melhora o desempenho sem alterar o comportamento. O wrapper expõe a mesma API do `Intl` nativo, portanto o uso é idêntico.
50
63
 
51
64
  - O cache é por processo e transparente para os chamadores.
52
65
 
53
- > Se `Intl.DisplayNames` não estiver disponível no ambiente, um único aviso para desenvolvedores é exibido (considere usar um polyfill).
66
+ > Se `Intl.DisplayNames` não estiver disponível no ambiente, um único aviso para desenvolvedores é exibido (considere um polyfill).
54
67
 
55
- Exemplo:
68
+ Exemplos:
56
69
 
57
70
  ```ts
58
71
  import { Intl } from "intlayer";
59
72
 
73
+ // Formatação de números
60
74
  const numberFormat = new Intl.NumberFormat("en-GB", {
61
75
  style: "currency",
62
76
  currency: "GBP",
63
77
  });
64
78
  numberFormat.format(1234.5); // "£1,234.50"
79
+
80
+ // Nomes exibidos para idiomas, regiões, etc.
81
+ const displayNames = new Intl.DisplayNames("fr", { type: "language" });
82
+ displayNames.of("en"); // "anglais"
83
+
84
+ // Ordenação para sorting
85
+ const collator = new Intl.Collator("fr", { sensitivity: "base" });
86
+ collator.compare("é", "e"); // 0 (igual)
87
+
88
+ // Regras de plural
89
+ const pluralRules = new Intl.PluralRules("fr");
90
+ pluralRules.select(1); // "one"
91
+ pluralRules.select(2); // "other"
92
+ ```
93
+
94
+ ## Utilitários adicionais do Intl
95
+
96
+ Além dos auxiliares de formatadores, você também pode usar diretamente o wrapper Intl em cache para outros recursos do Intl:
97
+
98
+ ### `Intl.DisplayNames`
99
+
100
+ Para nomes localizados de idiomas, regiões, moedas e scripts:
101
+
102
+ ```ts
103
+ import { Intl } from "intlayer";
104
+
105
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
106
+ languageNames.of("fr"); // "French"
107
+
108
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
109
+ regionNames.of("US"); // "États-Unis"
110
+ ```
111
+
112
+ ### `Intl.Collator`
113
+
114
+ Para comparação e ordenação de strings sensíveis ao local:
115
+
116
+ ```ts
117
+ import { Intl } from "intlayer";
118
+
119
+ const collator = new Intl.Collator("de", {
120
+ sensitivity: "base",
121
+ numeric: true,
122
+ });
123
+
124
+ const words = ["äpfel", "zebra", "100", "20"];
125
+ words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
126
+ ```
127
+
128
+ ### `Intl.PluralRules`
129
+
130
+ Para determinar formas plurais em diferentes locais:
131
+
132
+ ```ts
133
+ import { Intl } from "intlayer";
134
+
135
+ const pluralRules = new Intl.PluralRules("ar");
136
+ pluralRules.select(0); // "zero"
137
+ pluralRules.select(1); // "one"
138
+ pluralRules.select(2); // "two"
139
+ pluralRules.select(3); // "few"
140
+ pluralRules.select(11); // "many"
141
+ ```
142
+
143
+ ## Utilitários de Localidade
144
+
145
+ ### `getLocaleName(displayLocale, targetLocale?)`
146
+
147
+ Obtém o nome localizado de uma localidade em outra localidade:
148
+
149
+ ```ts
150
+ import { getLocaleName } from "intlayer";
151
+
152
+ getLocaleName("fr", "en"); // "French"
153
+ getLocaleName("en", "fr"); // "anglais"
154
+ getLocaleName("de", "es"); // "alemán"
155
+ ```
156
+
157
+ - **displayLocale**: O locale para o qual obter o nome
158
+ - **targetLocale**: O locale para exibir o nome (padrão é displayLocale)
159
+
160
+ ### `getLocaleLang(locale?)`
161
+
162
+ Extrai o código de idioma de uma string de locale:
163
+
164
+ ```ts
165
+ import { getLocaleLang } from "intlayer";
166
+
167
+ getLocaleLang("en-US"); // "en"
168
+ getLocaleLang("fr-CA"); // "fr"
169
+ getLocaleLang("de"); // "de"
170
+ ```
171
+
172
+ - **locale**: O locale do qual extrair o idioma (padrão é o locale atual)
173
+
174
+ ### `getLocaleFromPath(inputUrl)`
175
+
176
+ Extrai o segmento de locale de uma URL ou pathname:
177
+
178
+ ```ts
179
+ import { getLocaleFromPath } from "intlayer";
180
+
181
+ getLocaleFromPath("/en/dashboard"); // "en"
182
+ getLocaleFromPath("/fr/dashboard"); // "fr"
183
+ getLocaleFromPath("/dashboard"); // "en" (locale padrão)
184
+ getLocaleFromPath("https://example.com/es/about"); // "es"
185
+ ```
186
+
187
+ - **inputUrl**: A string completa da URL ou caminho para processar
188
+ - **returns**: O locale detectado ou o locale padrão se nenhum locale for encontrado
189
+
190
+ ### `getPathWithoutLocale(inputUrl, locales?)`
191
+
192
+ Remove o segmento de locale de uma URL ou caminho:
193
+
194
+ ```ts
195
+ import { getPathWithoutLocale } from "intlayer";
196
+
197
+ getPathWithoutLocale("/en/dashboard"); // "/dashboard"
198
+ getPathWithoutLocale("/fr/dashboard"); // "/dashboard"
199
+ getPathWithoutLocale("https://example.com/en/about"); // "https://example.com/about"
200
+ ```
201
+
202
+ - **inputUrl**: A string completa da URL ou caminho para processar
203
+ - **locales**: Array opcional de locales suportados (padrão para os locales configurados)
204
+ - **returns**: A URL sem o segmento de locale
205
+
206
+ ### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
207
+
208
+ Gera uma URL localizada para o locale atual:
209
+
210
+ ```ts
211
+ import { getLocalizedUrl } from "intlayer";
212
+
213
+ getLocalizedUrl("/about", "fr", ["en", "fr"], "en", false); // "/fr/about"
214
+ getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
215
+ getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
216
+ ```
217
+
218
+ - **url**: A URL original para localizar
219
+ - **currentLocale**: O locale atual
220
+ - **locales**: Array opcional de locales suportados (padrão para os locales configurados)
221
+ - **defaultLocale**: Locale padrão opcional (padrão para o locale padrão configurado)
222
+ - **prefixDefault**: Se deve prefixar o locale padrão (padrão para o valor configurado)
223
+
224
+ ### `getHTMLTextDir(locale?)`
225
+
226
+ Retorna a direção do texto para um locale:
227
+
228
+ ```ts
229
+ import { getHTMLTextDir } from "intlayer";
230
+
231
+ getHTMLTextDir("en-US"); // "ltr"
232
+ getHTMLTextDir("ar"); // "rtl"
233
+ getHTMLTextDir("he"); // "rtl"
234
+ ```
235
+
236
+ - **locale**: O locale para obter a direção do texto (padrão para o locale atual)
237
+ - **returns**: `"ltr"`, `"rtl"` ou `"auto"`
238
+
239
+ ## Utilitários para Manipulação de Conteúdo
240
+
241
+ ### `getContent(node, nodeProps, locale?)`
242
+
243
+ Transforma um nó de conteúdo com todos os plugins disponíveis (tradução, enumeração, inserção, etc.):
244
+
245
+ ```ts
246
+ import { getContent } from "intlayer";
247
+
248
+ const content = getContent(
249
+ contentNode,
250
+ { dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
251
+ "fr"
252
+ );
65
253
  ```
66
254
 
255
+ - **node**: O nó de conteúdo a ser transformado
256
+ - **nodeProps**: Propriedades para o contexto da transformação
257
+ - **locale**: Locale opcional (padrão para o locale padrão configurado)
258
+
259
+ ### `getLocalisedContent(node, locale, nodeProps, fallback?)`
260
+
261
+ Transforma um nó de conteúdo usando apenas o plugin de tradução:
262
+
263
+ ```ts
264
+ import { getLocalisedContent } from "intlayer";
265
+
266
+ const content = getLocalisedContent(
267
+ contentNode,
268
+ "fr",
269
+ { dictionaryKey: "common" },
270
+ true // fallback para o locale padrão se a tradução estiver ausente
271
+ );
272
+ ```
273
+
274
+ - **node**: O nó de conteúdo a ser transformado
275
+ - **locale**: O locale a ser usado para tradução
276
+ - **nodeProps**: Propriedades para o contexto da transformação
277
+ - **fallback**: Se deve retornar ao locale padrão (padrão é false)
278
+
279
+ ### `getTranslation(languageContent, locale?, fallback?)`
280
+
281
+ Extrai conteúdo para um locale específico a partir de um objeto de conteúdo multilíngue:
282
+
283
+ ```ts
284
+ import { getTranslation } from "intlayer";
285
+
286
+ const content = getTranslation(
287
+ {
288
+ en: "Hello",
289
+ fr: "Bonjour",
290
+ de: "Hallo",
291
+ },
292
+ "fr",
293
+ true
294
+ ); // "Bonjour"
295
+ ```
296
+
297
+ - **languageContent**: Objeto que mapeia locales para conteúdo
298
+ - **locale**: Locale alvo (padrão para o locale padrão configurado)
299
+ - **fallback**: Se deve retornar ao locale padrão (padrão é true)
300
+
301
+ ### `getIntlayer(dictionaryKey, locale?, plugins?)`
302
+
303
+ Recupera e transforma conteúdo de um dicionário pela chave:
304
+
305
+ ```ts
306
+ import { getIntlayer } from "intlayer";
307
+
308
+ const content = getIntlayer("common", "fr");
309
+ const nestedContent = getIntlayer("common", "fr", customPlugins);
310
+ ```
311
+
312
+ - **dictionaryKey**: A chave do dicionário a ser recuperada
313
+ - **locale**: Locale opcional (padrão para o locale padrão configurado)
314
+ - **plugins**: Array opcional de plugins de transformação personalizados
315
+
316
+ ### `getIntlayerAsync(dictionaryKey, locale?, plugins?)`
317
+
318
+ Recupera conteúdo de um dicionário remoto de forma assíncrona:
319
+
320
+ ```ts
321
+ import { getIntlayerAsync } from "intlayer";
322
+
323
+ const content = await getIntlayerAsync("common", "fr");
324
+ ```
325
+
326
+ - **dictionaryKey**: A chave do dicionário a ser recuperada
327
+ - **locale**: Locale opcional (padrão para o locale padrão configurado)
328
+ - **plugins**: Array opcional de plugins de transformação personalizados
329
+
67
330
  ## Formatadores
68
331
 
69
- Todos os helpers abaixo são exportados do `intlayer`.
332
+ Todos os helpers abaixo são exportados de `intlayer`.
70
333
 
71
334
  ### `number(value, options?)`
72
335
 
73
- Formata um valor numérico usando agrupamento e decimais sensíveis ao local.
336
+ Formata um valor numérico usando agrupamento e decimais sensíveis ao locale.
74
337
 
75
338
  - **value**: `number | string`
76
339
  - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
@@ -81,7 +344,7 @@ Exemplos:
81
344
  import { number } from "intlayer";
82
345
 
83
346
  number(123456.789); // "123,456.789" (em en-US)
84
- number("1000000", { locale: "fr" }); // "1000000"
347
+ number("1000000", { locale: "fr" }); // "1 000 000"
85
348
  number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
86
349
  ```
87
350
 
@@ -89,7 +352,7 @@ number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
89
352
 
90
353
  Formata um número como uma string percentual.
91
354
 
92
- Comportamento: valores maiores que 1 são interpretados como percentagens inteiras e normalizados (por exemplo, `25` → `25%`, `0.25` → `25%`).
355
+ Comportamento: valores maiores que 1 são interpretados como percentuais inteiros e normalizados (ex.: `25` → `25%`, `0.25` → `25%`).
93
356
 
94
357
  - **value**: `number | string`
95
358
  - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
@@ -117,8 +380,8 @@ Exemplos:
117
380
  ```ts
118
381
  import { currency } from "intlayer";
119
382
 
120
- currency(1234.5, { currency: "EUR" }); // "€1.234,50"
121
- currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5000,00 CAD"
383
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
384
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
122
385
  ```
123
386
 
124
387
  ### `date(date, optionsOrPreset?)`
@@ -195,45 +458,168 @@ compact(1200); // "1.2K"
195
458
  compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 milhão"
196
459
  ```
197
460
 
461
+ ### `list(values, options?)`
462
+
463
+ Formata um array de valores em uma string de lista localizada usando `Intl.ListFormat`.
464
+
465
+ - **values**: `(string | number)[]`
466
+ - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
467
+ - Campos comuns: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
468
+ - Padrões: `type: 'conjunction'`, `style: 'long'`
469
+
470
+ Exemplos:
471
+
472
+ ```ts
473
+ import { list } from "intlayer";
474
+
475
+ list(["apple", "banana", "orange"]); // "apple, banana e orange"
476
+ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
477
+ list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
478
+ ```
479
+
198
480
  ## Notas
199
481
 
200
482
  - Todos os helpers aceitam entradas do tipo `string`; elas são internamente convertidas para números ou datas.
201
- - O locale padrão é o configurado em `internationalization.defaultLocale` caso não seja fornecido.
202
- - Essas utilidades são wrappers simples; para formatações avançadas, utilize as opções padrão do `Intl`.
483
+ - O locale padrão é o configurado em `internationalization.defaultLocale`, caso não seja fornecido.
484
+ - Essas utilidades são wrappers simples; para formatações avançadas, utilize diretamente as opções padrão do `Intl`.
203
485
 
204
- ## Pontos de entrada e reexportações (`@index.ts`)
486
+ ## Pontos de entrada e re-exportações (`@index.ts`)
205
487
 
206
- Os formatadores estão no pacote core e são reexportados por pacotes de nível superior para manter os imports ergonômicos em diferentes runtimes:
488
+ Os formatadores estão no pacote core e são re-exportados por pacotes de nível superior para manter as importações ergonômicas em diferentes runtimes:
207
489
 
208
490
  Exemplos:
209
491
 
210
492
  ```ts
211
493
  // Código da aplicação (recomendado)
212
- import { number, currency, date, Intl } from "intlayer";
494
+ import {
495
+ number,
496
+ currency,
497
+ date,
498
+ relativeTime,
499
+ units,
500
+ compact,
501
+ list,
502
+ Intl,
503
+ getLocaleName,
504
+ getLocaleLang,
505
+ getLocaleFromPath,
506
+ getPathWithoutLocale,
507
+ getLocalizedUrl,
508
+ getHTMLTextDir,
509
+ getContent,
510
+ getLocalisedContent,
511
+ getTranslation,
512
+ getIntlayer,
513
+ getIntlayerAsync,
514
+ } from "intlayer";
213
515
  ```
214
516
 
215
517
  ### React
216
518
 
217
519
  Componentes cliente:
218
520
 
219
- ```ts
220
- import { useNumber, useCurrency, useDate } from "react-intlayer/format";
521
+ ```tsx
522
+ import {
523
+ useNumber,
524
+ useCurrency,
525
+ useDate,
526
+ usePercentage,
527
+ useCompact,
528
+ useList,
529
+ useRelativeTime,
530
+ useUnit,
531
+ } from "react-intlayer/format";
221
532
  // ou em apps Next.js
222
- import { useNumber, useCurrency, useDate } from "next-intlayer/client/format";
533
+ import {
534
+ useNumber,
535
+ useCurrency,
536
+ useDate,
537
+ usePercentage,
538
+ useCompact,
539
+ useList,
540
+ useRelativeTime,
541
+ useUnit,
542
+ } from "next-intlayer/client/format";
543
+
544
+ const MyComponent = () => {
545
+ const number = useNumber();
546
+ const currency = useCurrency();
547
+ const date = useDate();
548
+ const percentage = usePercentage();
549
+ const compact = useCompact();
550
+ const list = useList();
551
+ const relativeTime = useRelativeTime();
552
+ const unit = useUnit();
553
+
554
+ return (
555
+ <div>
556
+ <p>{number(123456.789)}</p>
557
+ <p>{currency(1234.5, { currency: "EUR" })}</p>
558
+ <p>{date(new Date(), "short")}</p>
559
+ <p>{percentage(0.25)}</p>
560
+ <p>{compact(1200)}</p>
561
+ <p>{list(["apple", "banana", "orange"])}</p>
562
+ <p>{relativeTime(new Date(), new Date() + 1000)}</p>
563
+ <p>{unit(123456.789, { unit: "kilometer" })}</p>
564
+ </div>
565
+ );
566
+ };
223
567
  ```
224
568
 
225
569
  Componentes servidor (ou runtime React Server):
226
570
 
227
571
  ```ts
228
- import { useNumber, useCurrency, useDate } from "intlayer/server/format";
572
+ import {
573
+ useNumber,
574
+ useCurrency,
575
+ useDate,
576
+ usePercentage,
577
+ useCompact,
578
+ useList,
579
+ useRelativeTime,
580
+ useUnit,
581
+ } from "react-intlayer/server/format";
229
582
  // ou em apps Next.js
230
- import { useNumber, useCurrency, useDate } from "next-intlayer/server/format";
583
+ import {
584
+ useNumber,
585
+ useCurrency,
586
+ useDate,
587
+ usePercentage,
588
+ useCompact,
589
+ useList,
590
+ useRelativeTime,
591
+ useUnit,
592
+ } from "next-intlayer/server/format";
593
+ ```
594
+
595
+ > Esses hooks irão considerar a localidade do `IntlayerProvider` ou `IntlayerServerProvider`
596
+
597
+ ### Vue
598
+
599
+ Componentes cliente:
600
+
601
+ ```ts
602
+ import {
603
+ useNumber,
604
+ useCurrency,
605
+ useDate,
606
+ usePercentage,
607
+ useCompact,
608
+ useList,
609
+ useRelativeTime,
610
+ useUnit,
611
+ } from "vue-intlayer/format";
231
612
  ```
232
613
 
233
- > Esses hooks considerarão o locale do `IntlayerProvider` ou `IntlayerServerProvider`
614
+ > Esses composables irão considerar o locale do `IntlayerProvider` injetado
234
615
 
235
- ## Histórico da documentação
616
+ ## Histórico da Documentação
236
617
 
237
- | Versão | Data | Alterações |
238
- | ------ | ---------- | -------------------------------------- |
239
- | 5.8.0 | 2025-08-18 | Adiciona documentação dos formatadores |
618
+ | Versão | Data | Alterações |
619
+ | ------ | ---------- | -------------------------------------------------------------------------------------------------- |
620
+ | 5.8.0 | 2025-08-20 | Adicionados formatadores para Vue |
621
+ | 5.8.0 | 2025-08-18 | Adicionada documentação dos formatadores |
622
+ | 5.8.0 | 2025-08-20 | Adicionar documentação do formatador de listas |
623
+ | 5.8.0 | 2025-08-20 | Adicionar utilitários adicionais do Intl (DisplayNames, Collator, PluralRules) |
624
+ | 5.8.0 | 2025-08-20 | Adicionar utilitários de locale (getLocaleName, getLocaleLang, getLocaleFromPath, etc.) |
625
+ | 5.8.0 | 2025-08-20 | Adicionar utilitários para manipulação de conteúdo (getContent, getTranslation, getIntlayer, etc.) |
@@ -25,8 +25,8 @@ A ideia principal por trás do Intlayer é adotar um gerenciamento de conteúdo
25
25
  .
26
26
  └── Components
27
27
  └── MyComponent
28
- ├── index.content.cjs
29
- └── index.mjs
28
+ ├── index.content.ts
29
+ └── index.tsx
30
30
  ```
31
31
 
32
32
  Para isso, o papel do Intlayer é encontrar todos os seus `arquivos de declaração de conteúdo`, em todos os formatos diferentes presentes no seu projeto, e então ele gerará os `dicionários` a partir deles.
@@ -45,12 +45,10 @@ A etapa de construção pode ser feita de três maneiras:
45
45
  - usando os plugins de aplicativos, como o pacote [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/vite-intlayer/index.md), ou seus equivalentes para [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/next-intlayer/index.md). Quando você usa um desses plugins, o Intlayer construirá automaticamente seus dicionários ao iniciar (dev) ou construir (prod) sua aplicação.
46
46
 
47
47
  1. Declaração de arquivos de conteúdo
48
-
49
48
  - Os arquivos de conteúdo podem ser definidos em vários formatos, como TypeScript, ECMAScript, CommonJS ou JSON.
50
49
  - Os arquivos de conteúdo podem ser definidos em qualquer lugar do projeto, o que permite uma melhor manutenção e escalabilidade. É importante respeitar as convenções de extensão de arquivo para arquivos de conteúdo. Essa extensão é por padrão `*.content.{js|cjs|mjs|ts|tsx|json}`, mas pode ser modificada no [arquivo de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
51
50
 
52
51
  2. Geração de `dicionários`
53
-
54
52
  - Os dicionários são gerados a partir dos arquivos de conteúdo. Por padrão, os dicionários do Intlayer são gerados no diretório `.intlayer/dictionaries` do projeto.
55
53
  - Esses dicionários são gerados em diferentes formatos para atender a todas as necessidades e otimizar o desempenho da aplicação.
56
54
 
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-08-11
3
3
  updatedAt: 2025-08-11
4
4
  title: Começando com Intlayer no TanStack Start (React)
5
- description: Adicione i18n ao seu app TanStack Start usando Intlayerdicionários a nível de componente, URLs localizadas e metadados otimizados para SEO.
5
+ description: Adicione i18n ao seu app TanStack Start usando Intlayer-dicionários a nível de componente, URLs localizadas e metadados otimizados para SEO.
6
6
  keywords:
7
7
  - Internacionalização
8
8
  - Documentação
@@ -32,8 +32,8 @@ O Intlayer também oferece um editor visual opcional que permite editar e gerenc
32
32
  .
33
33
  └── Components
34
34
  └── MyComponent
35
- ├── index.content.cjs
36
- └── index.mjs
35
+ ├── index.content.ts
36
+ └── index.tsx
37
37
  ```
38
38
 
39
39
  ```tsx fileName="src/components/MyComponent/index.content.ts" contentDeclarationFormat="typescript"