@intlayer/docs 9.3.1 → 9.3.3

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 (151) hide show
  1. package/blog/ar/nextjs-multilingual-seo-comparison.md +10 -10
  2. package/blog/de/nextjs-multilingual-seo-comparison.md +9 -9
  3. package/blog/en/nextjs-multilingual-seo-comparison.md +10 -10
  4. package/blog/en-GB/nextjs-multilingual-seo-comparison.md +10 -10
  5. package/blog/es/nextjs-multilingual-seo-comparison.md +10 -10
  6. package/blog/fr/nextjs-multilingual-seo-comparison.md +10 -10
  7. package/blog/hi/nextjs-multilingual-seo-comparison.md +10 -10
  8. package/blog/id/nextjs-multilingual-seo-comparison.md +10 -10
  9. package/blog/it/nextjs-multilingual-seo-comparison.md +10 -10
  10. package/blog/ja/nextjs-multilingual-seo-comparison.md +9 -9
  11. package/blog/ko/nextjs-multilingual-seo-comparison.md +9 -9
  12. package/blog/pl/nextjs-multilingual-seo-comparison.md +10 -10
  13. package/blog/pt/nextjs-multilingual-seo-comparison.md +9 -9
  14. package/blog/ru/nextjs-multilingual-seo-comparison.md +9 -9
  15. package/blog/tr/nextjs-multilingual-seo-comparison.md +9 -9
  16. package/blog/uk/nextjs-multilingual-seo-comparison.md +10 -10
  17. package/blog/vi/nextjs-multilingual-seo-comparison.md +10 -10
  18. package/blog/zh/nextjs-multilingual-seo-comparison.md +10 -10
  19. package/dist/cjs/generated/docs.entry.cjs +20 -0
  20. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  21. package/dist/esm/generated/docs.entry.mjs +20 -0
  22. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  23. package/dist/types/generated/docs.entry.d.ts +1 -0
  24. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  25. package/docs/ar/bundle_optimization.md +1 -1
  26. package/docs/ar/configuration.md +32 -9
  27. package/docs/ar/dictionary/content_file.md +0 -22
  28. package/docs/ar/dictionary/function_fetching.md +23 -0
  29. package/docs/ar/eslint.md +336 -0
  30. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +1 -1
  31. package/docs/bn/configuration.md +34 -9
  32. package/docs/bn/eslint.md +336 -0
  33. package/docs/cs/bundle_optimization.md +1 -1
  34. package/docs/cs/configuration.md +33 -9
  35. package/docs/cs/eslint.md +336 -0
  36. package/docs/de/bundle_optimization.md +1 -1
  37. package/docs/de/configuration.md +34 -9
  38. package/docs/de/dictionary/content_file.md +0 -22
  39. package/docs/de/dictionary/function_fetching.md +23 -0
  40. package/docs/de/eslint.md +336 -0
  41. package/docs/en/bundle_optimization.md +1 -1
  42. package/docs/en/configuration.md +34 -9
  43. package/docs/en/dictionary/content_file.md +0 -22
  44. package/docs/en/dictionary/function_fetching.md +23 -0
  45. package/docs/en/eslint.md +336 -0
  46. package/docs/en/packages/intlayer/getLocalizedPath.md +70 -19
  47. package/docs/en-GB/configuration.md +33 -9
  48. package/docs/en-GB/dictionary/content_file.md +0 -22
  49. package/docs/en-GB/dictionary/function_fetching.md +23 -0
  50. package/docs/en-GB/eslint.md +336 -0
  51. package/docs/en-GB/intlayer_with_create_react_app.md +32 -35
  52. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +1 -1
  53. package/docs/es/bundle_optimization.md +1 -1
  54. package/docs/es/configuration.md +35 -9
  55. package/docs/es/dictionary/content_file.md +0 -22
  56. package/docs/es/dictionary/function_fetching.md +23 -0
  57. package/docs/es/eslint.md +336 -0
  58. package/docs/fr/bundle_optimization.md +1 -1
  59. package/docs/fr/configuration.md +35 -9
  60. package/docs/fr/dictionary/content_file.md +0 -22
  61. package/docs/fr/dictionary/function_fetching.md +23 -0
  62. package/docs/fr/eslint.md +336 -0
  63. package/docs/hi/configuration.md +35 -9
  64. package/docs/hi/dictionary/content_file.md +0 -22
  65. package/docs/hi/dictionary/function_fetching.md +23 -0
  66. package/docs/hi/eslint.md +336 -0
  67. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +1 -1
  68. package/docs/hi/intlayer_with_vite+svelte.md +2 -2
  69. package/docs/id/configuration.md +35 -9
  70. package/docs/id/dictionary/content_file.md +0 -22
  71. package/docs/id/dictionary/function_fetching.md +23 -0
  72. package/docs/id/eslint.md +336 -0
  73. package/docs/it/bundle_optimization.md +1 -1
  74. package/docs/it/configuration.md +35 -9
  75. package/docs/it/dictionary/content_file.md +0 -22
  76. package/docs/it/dictionary/function_fetching.md +23 -0
  77. package/docs/it/eslint.md +336 -0
  78. package/docs/ja/configuration.md +30 -9
  79. package/docs/ja/dictionary/content_file.md +0 -22
  80. package/docs/ja/dictionary/function_fetching.md +23 -0
  81. package/docs/ja/eslint.md +336 -0
  82. package/docs/ja/intlayer_with_react_router_v7.md +1 -146
  83. package/docs/ja/intlayer_with_vite+react.md +5 -1
  84. package/docs/ko/configuration.md +31 -9
  85. package/docs/ko/dictionary/content_file.md +0 -22
  86. package/docs/ko/dictionary/function_fetching.md +23 -0
  87. package/docs/ko/eslint.md +336 -0
  88. package/docs/ko/intlayer_with_lynx+react.md +4 -0
  89. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +1 -1
  90. package/docs/ko/intlayer_with_storybook.md +5 -5
  91. package/docs/nl/configuration.md +33 -9
  92. package/docs/nl/eslint.md +336 -0
  93. package/docs/pl/bundle_optimization.md +1 -1
  94. package/docs/pl/configuration.md +34 -9
  95. package/docs/pl/dictionary/content_file.md +0 -22
  96. package/docs/pl/dictionary/function_fetching.md +23 -0
  97. package/docs/pl/eslint.md +336 -0
  98. package/docs/pl/intlayer_with_astro.md +1 -114
  99. package/docs/pl/migration_from_i18next_to_intlayer.md +4 -0
  100. package/docs/pl/migration_from_next-i18next_to_intlayer.md +8 -4
  101. package/docs/pl/migration_from_next-intl_to_intlayer.md +11 -5
  102. package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +8 -4
  103. package/docs/pl/migration_from_react-i18next_to_intlayer.md +8 -4
  104. package/docs/pl/migration_from_vue-i18n_to_intlayer.md +4 -0
  105. package/docs/pt/bundle_optimization.md +1 -1
  106. package/docs/pt/configuration.md +34 -9
  107. package/docs/pt/dictionary/content_file.md +0 -22
  108. package/docs/pt/dictionary/function_fetching.md +23 -0
  109. package/docs/pt/eslint.md +336 -0
  110. package/docs/pt/intlayer_with_astro.md +1 -114
  111. package/docs/ru/bundle_optimization.md +1 -1
  112. package/docs/ru/configuration.md +34 -9
  113. package/docs/ru/dictionary/content_file.md +0 -22
  114. package/docs/ru/dictionary/function_fetching.md +23 -0
  115. package/docs/ru/eslint.md +336 -0
  116. package/docs/tr/bundle_optimization.md +1 -1
  117. package/docs/tr/configuration.md +33 -9
  118. package/docs/tr/dictionary/content_file.md +0 -22
  119. package/docs/tr/dictionary/function_fetching.md +23 -0
  120. package/docs/tr/eslint.md +336 -0
  121. package/docs/uk/configuration.md +35 -9
  122. package/docs/uk/dictionary/content_file.md +0 -22
  123. package/docs/uk/dictionary/function_fetching.md +23 -0
  124. package/docs/uk/eslint.md +336 -0
  125. package/docs/uk/packages/angular-intlayer/exports.md +2 -2
  126. package/docs/ur/configuration.md +35 -9
  127. package/docs/ur/eslint.md +336 -0
  128. package/docs/vi/bundle_optimization.md +1 -1
  129. package/docs/vi/configuration.md +33 -9
  130. package/docs/vi/dictionary/content_file.md +0 -22
  131. package/docs/vi/dictionary/function_fetching.md +23 -0
  132. package/docs/vi/eslint.md +336 -0
  133. package/docs/zh/bundle_optimization.md +1 -1
  134. package/docs/zh/configuration.md +29 -9
  135. package/docs/zh/dictionary/content_file.md +0 -22
  136. package/docs/zh/dictionary/function_fetching.md +23 -0
  137. package/docs/zh/eslint.md +336 -0
  138. package/docs/zh/intlayer_with_create_react_app.md +4 -0
  139. package/docs/zh/intlayer_with_lynx+react.md +4 -0
  140. package/docs/zh/intlayer_with_nextjs_14.md +0 -2
  141. package/docs/zh/intlayer_with_nextjs_15.md +0 -2
  142. package/docs/zh/intlayer_with_nextjs_page_router.md +0 -2
  143. package/docs/zh/intlayer_with_nuxt.md +1 -1
  144. package/docs/zh/intlayer_with_react_router_v7.md +4 -0
  145. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +4 -0
  146. package/docs/zh/intlayer_with_solid_start.md +1 -1
  147. package/docs/zh/intlayer_with_vite+vue.md +0 -2
  148. package/docs/zh-TW/bundle_optimization.md +1 -1
  149. package/docs/zh-TW/eslint.md +336 -0
  150. package/package.json +7 -7
  151. package/src/generated/docs.entry.ts +20 -0
@@ -478,6 +478,29 @@ const config: IntlayerConfig = {
478
478
  */
479
479
  purge: true,
480
480
 
481
+ /**
482
+ * Группировать чанки словарей по локали в соответствии с границей разделения
483
+ * кода, которая их использует, чтобы лениво загружаемая страница получала своё
484
+ * содержимое одним запросом.
485
+ * По умолчанию: true
486
+ *
487
+ * Примечание:
488
+ * - Применяется только к словарям с `importMode: 'dynamic'`.
489
+ */
490
+ chunkGrouping: true,
491
+
492
+ /**
493
+ * Загружать словарь вместе с чанком, который его использует, вместо получения
494
+ * после отрисовки этого чанка. Чтения отрисовываются синхронно вместо
495
+ * приостановки, поэтому при навигации больше не мелькает состояние загрузки.
496
+ * По умолчанию: true
497
+ *
498
+ * Примечание:
499
+ * - Ожидается только разрешённая локаль, поэтому страница загружает лишь тот
500
+ * язык, который отображает.
501
+ */
502
+ dictionariesPreload: true,
503
+
481
504
  /**
482
505
  * Формат вывода для сгенерированных файлов словарей.
483
506
  * По умолчанию: ['cjs', 'esm']
@@ -1054,15 +1077,17 @@ Intlayer поддерживает несколько ИИ-провайдеров
1054
1077
 
1055
1078
  > Во время оптимизации Intlayer заменит вызовы словарей для оптимизации чанкинга (chunking), чтобы итоговый бандл импортировал только те словари, которые действительно используются.
1056
1079
 
1057
- | Поле | Описание | Тип | По умолчанию | Пример | Примечание |
1058
- | ----------------- | -------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1059
- | `mode` | Управляет режимом сборки. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: сборка запускается автоматически при сборке приложения.<br/>• `'manual'`: выполняется только при явном вызове команды сборки.<br/>• Можно использовать для отключения сборки словарей (например, чтобы избежать выполнения в средах Node.js). |
1060
- | `optimize` | Управляет тем, должна ли выполняться оптимизация сборки. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • Если не определено, оптимизация запускается при сборке фреймворка (Vite/Next.js).<br/>• `true` форсирует оптимизацию даже в dev режиме.<br/>• `false` отключает ее.<br/>• Если включено, заменяет вызовы словарей для оптимизации чанкинга.<br/>• Требует плагины `@intlayer/babel` и `@intlayer/swc`. |
1061
- | `minify` | Минимизировать словари для уменьшения размера бандла. | `boolean` | `false` | | • Указывает, должен ли бандл быть минифицирован.<br/>• По умолчанию: `true` в продакшене.<br/>• Эта опция будет проигнорирована, если `optimize` отключена.<br/>• Эта опция будет проигнорирована, если `editor.enabled` имеет значение true. |
1062
- | `purge` | Удалить неиспользуемые ключи в словарях. | `boolean` | `false` | | • Указывает, должен ли бандл быть очищен.<br/>• По умолчанию: `true` в продакшене.<br/>• Эта опция будет проигнорирована, если `optimize` отключена. |
1063
- | `checkTypes` | Указывает, должна ли сборка проверять типы TypeScript и логировать ошибки. | `boolean` | `false` | | Может замедлить процесс сборки. |
1064
- | `outputFormat` | Управляет выходным форматом словарей. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1065
- | `traversePattern` | Шаблоны, определяющие, какие файлы сканировать во время оптимизации. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | Ограничьте оптимизацию релевантными файлами для повышения производительности сборки.<br/>• Игнорирует, если `optimize` выключен.<br/>• Использует шаблоны glob. |
1080
+ | Поле | Описание | Тип | По умолчанию | Пример | Примечание |
1081
+ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1082
+ | `mode` | Управляет режимом сборки. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: сборка запускается автоматически при сборке приложения.<br/>• `'manual'`: выполняется только при явном вызове команды сборки.<br/>• Можно использовать для отключения сборки словарей (например, чтобы избежать выполнения в средах Node.js). |
1083
+ | `optimize` | Управляет тем, должна ли выполняться оптимизация сборки. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • Если не определено, оптимизация запускается при сборке фреймворка (Vite/Next.js).<br/>• `true` форсирует оптимизацию даже в dev режиме.<br/>• `false` отключает ее.<br/>• Если включено, заменяет вызовы словарей для оптимизации чанкинга.<br/>• Требует плагины `@intlayer/babel` и `@intlayer/swc`. |
1084
+ | `minify` | Минимизировать словари для уменьшения размера бандла. | `boolean` | `false` | | • Указывает, должен ли бандл быть минифицирован.<br/>• По умолчанию: `true` в продакшене.<br/>• Эта опция будет проигнорирована, если `optimize` отключена.<br/>• Эта опция будет проигнорирована, если `editor.enabled` имеет значение true. |
1085
+ | `purge` | Удалить неиспользуемые ключи в словарях. | `boolean` | `false` | | • Указывает, должен ли бандл быть очищен.<br/>• По умолчанию: `true` в продакшене.<br/>• Эта опция будет проигнорирована, если `optimize` отключена. |
1086
+ | `checkTypes` | Указывает, должна ли сборка проверять типы TypeScript и логировать ошибки. | `boolean` | `false` | | Может замедлить процесс сборки. |
1087
+ | `chunkGrouping` | Определяет, следует ли группировать чанки словарей по локали в соответствии с границей разделения кода, которая их использует. | `boolean` | `true` | | • Без группировки страница, собранная из множества компонентов, отправляет по одному запросу на каждый словарь.<br/>• Словари, достижимые из нескольких границ, переносятся в общий чанк, поэтому ни одна страница не содержит контент другой.<br/>• Применяется только к словарям с `importMode: 'dynamic'`.<br/>• Применяется только к клиентской сборке и только при бандлинге (не в режиме разработки). |
1088
+ | `dictionariesPreload` | Определяет, должен ли словарь загружаться вместе с чанком, который его использует, вместо получения после отрисовки этого чанка. | `boolean` | `true` | | Сгенерированная точка входа ожидает локаль просмотра на верхнем уровне, поэтому лениво загружаемый маршрут не считается загруженным, пока его содержимое не готово.<br/>• Чтения отрисовываются синхронно вместо приостановки, поэтому при навигации больше не мелькает состояние загрузки.<br/>• Ожидается только разрешённая локаль, поэтому страница загружает лишь тот язык, который отображает.<br/>• Применяется только к словарям с `importMode: 'dynamic'` в клиентской сборке.<br/>• Требуется сборщик с поддержкой top-level await (Vite, esbuild). |
1089
+ | `outputFormat` | Управляет выходным форматом словарей. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1090
+ | `traversePattern` | Шаблоны, определяющие, какие файлы сканировать во время оптимизации. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | • Ограничьте оптимизацию релевантными файлами для повышения производительности сборки.<br/>• Игнорирует, если `optimize` выключен.<br/>• Использует шаблоны glob. |
1066
1091
 
1067
1092
  ---
1068
1093
 
@@ -536,28 +536,6 @@ export default aboutPageMetaContent;
536
536
 
537
537
  > См. [Варианты](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/variants.md) для получения дополнительной информации.
538
538
 
539
- #### `meta` (`Record<string, string | number | boolean>`)
540
-
541
- Используемое в сочетании с Динамическими Записями, это поле позволяет объявлять записи, управляемые CMS, или произвольные данные, извлекаемые во время выполнения по непрозрачному ID. Идентификация словаря определяется произвольным набором пар ключ-значение, объявленных в этом поле `meta`.
542
-
543
- **Пример:**
544
-
545
- ```typescript
546
- {
547
- key: "product-copy",
548
- meta: {
549
- id: "prod_abc",
550
- userId: "user_123"
551
- },
552
- content: {
553
- name: "Widget Pro",
554
- description: "The best widget."
555
- }
556
- }
557
- ```
558
-
559
- > См. [Динамические Записи](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/dynamic_content.md) для получения дополнительной информации.
560
-
561
539
  ### Свойства CMS
562
540
 
563
541
  ##### `version` (строка)
@@ -87,6 +87,29 @@ export default asyncFunctionContent;
87
87
 
88
88
  В этом случае функция `fakeFetch` имитирует задержку, чтобы смоделировать время отклика сервера. Intlayer выполняет асинхронную функцию и использует результат в качестве содержимого для ключа `text`.
89
89
 
90
+ ## Получение удалённого контента
91
+
92
+ Вы также можете присвоить промис непосредственно полю контента. Intlayer дождётся его при сборке словарей и подставит полученное значение:
93
+
94
+ ```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
95
+ import type { Dictionary } from "intlayer";
96
+
97
+ const remoteContent = {
98
+ key: "remote_content",
99
+ content: {
100
+ externalContent: fetch("https://example.com").then((res) => res.json()),
101
+ },
102
+ } satisfies Dictionary;
103
+
104
+ export default remoteContent;
105
+ ```
106
+
107
+ ```plaintext fileName="**/*.content.json" contentDeclarationFormat="json"
108
+ Невозможно получить контент из JSON-файла, используйте вместо этого файл .ts или .js
109
+ ```
110
+
111
+ > Запрос выполняется во время сборки, поэтому полученные данные — это снимок, встроенный в словарь. Пересоберите словари, чтобы обновить их.
112
+
90
113
  ## Использование контента на основе функций в React-компонентах
91
114
 
92
115
  Чтобы использовать контент на основе функций в React-компоненте, необходимо импортировать `useIntlayer` из `react-intlayer` и вызвать его с идентификатором контента для получения содержимого. Вот пример:
@@ -0,0 +1,336 @@
1
+ ---
2
+ createdAt: 2026-08-12
3
+ updatedAt: 2026-08-13
4
+ title: Плагин ESLint | Правила линтинга для Intlayer
5
+ description: Находите жестко закодированные строки, динамические вызовы, которые компилятор Intlayer не может оптимизировать, и неиспользуемый контент словарей с помощью eslint-plugin-intlayer. Работает с ESLint и oxlint для React, Vue, Svelte, Angular и Astro.
6
+ keywords:
7
+ - Intlayer
8
+ - ESLint
9
+ - oxlint
10
+ - Линтинг
11
+ - i18n
12
+ - Интернационализация
13
+ - no-raw-text
14
+ - Жестко закодированные строки
15
+ - Неиспользуемые переводы
16
+ - Мертвый контент
17
+ - React
18
+ - Vue
19
+ - Svelte
20
+ - Angular
21
+ slugs:
22
+ - doc
23
+ - eslint
24
+ history:
25
+ - version: 9.3.1
26
+ date: 2026-08-12
27
+ changes: "Начальная история"
28
+ author: aymericzip
29
+ ---
30
+
31
+ # Плагин ESLint x OXLint
32
+
33
+ `eslint-plugin-intlayer` отслеживает типичные ошибки i18n, которые TypeScript не способен обнаружить:
34
+
35
+ 1. **Жестко закодированный текст**, который так и не был вынесен в словарь.
36
+ 2. **Динамические вызовы**, которые проходят проверку типов и выполняются, но не могут быть оптимизированы компилятором Intlayer.
37
+ 3. **Мертвый контент** — словари и поля, которые нигде в проекте не считываются (по желанию).
38
+
39
+ Неизвестные ключи словарей, неизвестные пути к полям и отсутствующие локали уже приводят к ошибкам компиляции, поэтому плагин не дублирует их проверку.
40
+
41
+ ## Установка
42
+
43
+ ```bash packageManager="npm"
44
+ npm install --save-dev eslint-plugin-intlayer
45
+ ```
46
+
47
+ ```bash packageManager="pnpm"
48
+ pnpm add --save-dev eslint-plugin-intlayer
49
+ ```
50
+
51
+ ```bash packageManager="yarn"
52
+ yarn add --dev eslint-plugin-intlayer
53
+ ```
54
+
55
+ Требуется ESLint 9 или новее (flat config). ESLint 10 поддерживается.
56
+
57
+ ## Использование
58
+
59
+ Плагин работает как в ESLint, так и в [oxlint](https://oxc.rs) — одни и те же правила, одни и те же параметры.
60
+
61
+ <Tabs defaultTab="eslint">
62
+ <Tab label="ESLint" value="eslint">
63
+
64
+ ```javascript fileName="eslint.config.mjs"
65
+ import intlayer from "eslint-plugin-intlayer";
66
+
67
+ export default [...intlayer.configs.recommended];
68
+ ```
69
+
70
+ Либо разверните конфигурацию и задайте уровни сами:
71
+
72
+ ```javascript fileName="eslint.config.mjs"
73
+ import intlayer from "eslint-plugin-intlayer";
74
+
75
+ export default [
76
+ ...intlayer.configs.recommended,
77
+ {
78
+ rules: {
79
+ "intlayer/no-raw-text": "warn",
80
+ "intlayer/static-dictionary-key": "error",
81
+ "intlayer/no-dynamic-field-access": "error",
82
+ "intlayer/enforce-adapter-import": "warn",
83
+ "intlayer/no-unused-content": "warn",
84
+ },
85
+ },
86
+ ];
87
+ ```
88
+
89
+ </Tab>
90
+ <Tab label="oxlint" value="oxlint">
91
+
92
+ ```json fileName=".oxlintrc.json"
93
+ {
94
+ "jsPlugins": ["eslint-plugin-intlayer"],
95
+ "rules": {
96
+ "intlayer/no-raw-text": "warn",
97
+ "intlayer/static-dictionary-key": "error",
98
+ "intlayer/no-dynamic-field-access": "error",
99
+ "intlayer/enforce-adapter-import": "warn"
100
+ }
101
+ }
102
+ ```
103
+
104
+ Два нюанса: поддержка JS-плагинов в oxlint все еще находится в альфа-стадии, а oxlint не поддерживает пользовательские парсеры — поэтому файлы `.vue`, `.svelte`, `.astro` и шаблоны Angular там не линтятся. Запускайте oxlint для файлов JS/TS/JSX, а для остальных используйте ESLint.
105
+
106
+ Правило `no-unused-content` намеренно исключено выше: ему требуется рабочий каталог и путь к проверяемому файлу из контекста правила, что альфа-мост для JS-плагинов не гарантирует. Запускайте его в ESLint.
107
+
108
+ </Tab>
109
+ </Tabs>
110
+
111
+ ### Пресеты конфигураций
112
+
113
+ | Конфигурация | `no-raw-text` | `static-dictionary-key` | `no-dynamic-field-access` | `enforce-adapter-import` | `no-unused-content` |
114
+ | --------------- | ------------------------------------ | ----------------------- | ------------------------- | ------------------------ | ------------------- |
115
+ | `recommended` | warn | error | error | off | off |
116
+ | `strict` | error (+ строковые литералы вне JSX) | error | error | error | off |
117
+ | `contract-only` | off | error | error | off | off |
118
+
119
+ Пресет `recommended` намеренно оставляет `no-raw-text` со статусом `warn`: применение правила к существующей кодовой базе покажет сразу все непереведенные строки, что не должно ломать сборку с первого же дня.
120
+
121
+ `enforce-adapter-import` по умолчанию выключено — включите его явно при необходимости.
122
+
123
+ `no-unused-content` выключено во всех пресетах, включая `strict`. Это единственное правило, которое считывает конфигурацию Intlayer и сканирует исходные файлы на диске, поэтому его включение должно быть осознанным выбором, а не автоматическим решением пресета.
124
+
125
+ ## Правила
126
+
127
+ ### `no-raw-text`
128
+
129
+ Сообщает о тексте для пользователя, который не объявлен в словаре. Использует ту же логику обнаружения, что и `intlayer extract`, поэтому названия брендов, CSS-классы и технические идентификаторы игнорируются.
130
+
131
+ ```jsx
132
+ // ✗ Ошибка
133
+ <h1>Welcome to our documentation</h1>
134
+ <input placeholder="Enter your email address" />
135
+
136
+ // ✓ Корректно
137
+ const { title } = useIntlayer("home");
138
+ <h1>{title}</h1>
139
+ ```
140
+
141
+ Файлы объявления контента (`*.content.ts`, …) пропускаются.
142
+
143
+ Чтобы исправить весь файл сразу, выполните `npx intlayer extract`, и компилятор автоматически перенесет строки в словарь.
144
+
145
+ **Параметры**
146
+
147
+ ```javascript fileName="eslint.config.mjs"
148
+ {
149
+ "intlayer/no-raw-text": [
150
+ "warn",
151
+ {
152
+ // Атрибуты, значениями которых является текст для пользователя.
153
+ // По умолчанию: title, placeholder, alt, aria-label, label
154
+ attributes: ["title", "placeholder", "alt", "aria-label", "label"],
155
+
156
+ // Элементы, содержимое которых никогда не является текстом для пользователя.
157
+ // По умолчанию: code, pre, script, style
158
+ ignoreElements: ["code", "pre", "script", "style"],
159
+
160
+ // Регулярные выражения для текста, о котором никогда не нужно сообщать.
161
+ ignorePatterns: ["^Powered by"],
162
+
163
+ // Сообщать ли также о строковых литералах вне разметки. По умолчанию: false
164
+ includeStringLiterals: false,
165
+ },
166
+ ],
167
+ }
168
+ ```
169
+
170
+ ### `static-dictionary-key`
171
+
172
+ Требует, чтобы ключ словаря был строковым литералом.
173
+
174
+ Компилятор может предварительно загрузить словарь только тогда, когда он может прочитать ключ непосредственно в месте вызова. При использовании вычисляемого ключа оптимизация автоматически пропускается, и вместо этого в бандл включаются все словари.
175
+
176
+ ```typescript
177
+ // ✗ Ошибка
178
+ useIntlayer(dictionaryKey);
179
+ useIntlayer(`home-${suffix}`);
180
+ getTranslations({ namespace: page });
181
+
182
+ // ✗ Переменная по-прежнему не является литералом
183
+ const key = "home";
184
+ useIntlayer(key);
185
+
186
+ // ✓ Корректно
187
+ useIntlayer("home");
188
+ getTranslations({ namespace: "home" });
189
+ ```
190
+
191
+ Это относится к `useIntlayer`, `getIntlayer` и всем адаптерам совместимости (`useTranslation`, `useTranslations`, `formatMessage`, `<FormattedMessage id>`, `<Trans i18nKey>`, …).
192
+
193
+ ### `no-dynamic-field-access`
194
+
195
+ Требует, чтобы поле, считываемое из словаря, было статически известно.
196
+
197
+ Компилятор удаляет поля, использование которых он не обнаружил. Динамический доступ для него невидим, поэтому чтение может вернуть `undefined` во время выполнения.
198
+
199
+ ```typescript
200
+ // ✗ Ошибка
201
+ const content = useIntlayer("home");
202
+ content[fieldName];
203
+
204
+ const t = useTranslations("home");
205
+ t(messageKey);
206
+
207
+ // ✓ Корректно
208
+ content.title;
209
+ content["title"];
210
+ content.items[0];
211
+ t("hero.title");
212
+ ```
213
+
214
+ ### `enforce-adapter-import`
215
+
216
+ Отдает предпочтение адаптеру совместимости `@intlayer/*` перед оригинальным пакетом. Оригинальный пакет разрешается в Intlayer только при настроенном псевдониме бандлера, тогда как адаптер работает всегда. Поддерживает автоисправление через `--fix`.
217
+
218
+ ```typescript
219
+ // ✗ Ошибка
220
+ import { useTranslation } from "react-i18next";
221
+ import { getTranslations } from "next-intl/server";
222
+
223
+ // ✓ Корректно
224
+ import { useTranslation } from "@intlayer/react-i18next";
225
+ import { getTranslations } from "@intlayer/next-intl/server";
226
+ ```
227
+
228
+ ### `no-unused-content`
229
+
230
+ **По умолчанию отключено.** Сообщает о контенте, который нигде в проекте не считывается, а также о ключах словарей, объявленных более чем в одном месте.
231
+
232
+ ```typescript fileName="src/home.content.ts"
233
+ export default {
234
+ key: "home", // ✗ Сообщается, если ни одно место в проекте не запрашивает "home"
235
+ content: {
236
+ title: t({ ru: "Заголовок", en: "Title" }),
237
+
238
+ // ✗ Сообщается, если ничто не считывает `hero`
239
+ hero: {
240
+ subtitle: t({ ru: "Подзаголовок", en: "Subtitle" }),
241
+ },
242
+ },
243
+ };
244
+ ```
245
+
246
+ В отличие от других правил, это правило не может принять решение только по проверяемому файлу — неиспользуемость поля определяется относительно всего проекта. При первом объявлении контента во время линтинга оно загружает конфигурацию Intlayer, ищет исходные файлы по путям из конфигурации (`build.traversePattern`, `compiler.transformPattern`) и запускает тот же анализатор использования, который используется в `@intlayer/lsp` и зачеркивании «неиспользуемого» в расширении VS Code. Результат кэшируется на `cacheTtl` миллисекунд, поэтому сканирование выполняется один раз за запуск, а не для каждого файла.
247
+
248
+ **Параметры**
249
+
250
+ ```javascript fileName="eslint.config.mjs"
251
+ {
252
+ "intlayer/no-unused-content": [
253
+ "warn",
254
+ {
255
+ // Сообщать о ключах словарей, на которые ничто не ссылается. По умолчанию: true
256
+ reportUnusedDictionaries: true,
257
+
258
+ // Сообщать о полях контента, которые ничто не считывает. По умолчанию: true
259
+ reportUnusedFields: true,
260
+
261
+ // Сообщать о дублирующихся ключах, объявленных в нескольких местах. По умолчанию: true
262
+ reportDuplicateKeys: true,
263
+
264
+ // Регулярные выражения для путей полей, о которых никогда не нужно сообщать.
265
+ ignoreFields: ["^meta"],
266
+
267
+ // Корень проекта, с которого начинается сканирование. По умолчанию: рабочий каталог ESLint
268
+ baseDir: process.cwd(),
269
+
270
+ // Время повторного использования результатов сканирования проекта (в мс). По умолчанию: 30000
271
+ cacheTtl: 30000,
272
+ },
273
+ ],
274
+ }
275
+ ```
276
+
277
+ Уменьшите `cacheTtl`, если вы линтите из долгоживущего сервера редактора и хотите быстрее видеть изменения; установите `baseDir`, если один запуск линтера охватывает несколько проектов Intlayer в монорепозитории.
278
+
279
+ > **Стремится к минимизации ложных срабатываний.** Ложное срабатывание здесь может привести к удалению нужного перевода, поэтому ничего не сообщается, когда словарь используется способом, который анализ не может отследить: объект контента передан целиком, функция перевода привязана от него (`const t = useTranslations("home")`), объявление получено через прямой импорт (`useDictionary(myDictionary)`), `nest()` из другого словаря или список полей, ставший неполным из-за spread-оператора. Однофайловые компоненты (`.vue`, `.svelte`, `.astro`) считаются использующими все поля упомянутых словарей, поскольку их блоки скриптов здесь не парсятся.
280
+
281
+ `reportDuplicateKeys` считывает необъединенные словари, которые сборка записывает в `.intlayer/`, поэтому оно не срабатывает, пока проект не будет собран хотя бы один раз. Два объявления с одинаковым ключом объединяются, что является допустимым паттерном — отчет формируется потому, что поле, определенное с обеих сторон, без предупреждения сохраняет только одно из двух значений.
282
+
283
+ Анализатор загружается из `@intlayer/lsp`, который поставляется как ESM. Поэтому правилу требуется версия Node, поддерживающая `require()` для ES-модулей — Node 20.19+ или 22.12+. На более старых версиях оно ничего не сообщает, чтобы не прерывать выполнение линтинга.
284
+
285
+ ## Фреймворки
286
+
287
+ Каждое правило работает во всех интеграциях Intlayer, включая шаблоны Vue, Svelte и Angular. Вам нужно лишь указать ESLint, какой парсер использовать для каждого типа файлов.
288
+
289
+ | Фреймворк | Файлы | Парсер |
290
+ | ------------------------- | ----------------- | --------------------------------- |
291
+ | React, Preact, Solid, Lit | `.jsx` `.tsx` | `typescript-eslint` |
292
+ | Next.js | `.jsx` `.tsx` | `typescript-eslint` |
293
+ | Vue, Nuxt | `.vue` | `vue-eslint-parser` |
294
+ | Svelte, SvelteKit | `.svelte` | `svelte-eslint-parser` |
295
+ | Angular | `.ts` | `typescript-eslint` |
296
+ | Шаблоны Angular | `.component.html` | `@angular-eslint/template-parser` |
297
+ | Astro | `.astro` | `astro-eslint-parser` |
298
+
299
+ ```javascript fileName="eslint.config.mjs"
300
+ import intlayer from "eslint-plugin-intlayer";
301
+ import tseslint from "typescript-eslint";
302
+ import vueParser from "vue-eslint-parser";
303
+ import svelteParser from "svelte-eslint-parser";
304
+ import angularTemplateParser from "@angular-eslint/template-parser";
305
+
306
+ export default [
307
+ ...intlayer.configs.recommended,
308
+
309
+ {
310
+ files: ["**/*.{ts,tsx,jsx}"],
311
+ languageOptions: { parser: tseslint.parser },
312
+ },
313
+ {
314
+ files: ["**/*.vue"],
315
+ languageOptions: {
316
+ parser: vueParser,
317
+ parserOptions: { parser: tseslint.parser },
318
+ },
319
+ },
320
+ {
321
+ files: ["**/*.svelte"],
322
+ languageOptions: {
323
+ parser: svelteParser,
324
+ parserOptions: { parser: tseslint.parser },
325
+ },
326
+ },
327
+ {
328
+ files: ["**/*.component.html"],
329
+ languageOptions: { parser: angularTemplateParser },
330
+ },
331
+ ];
332
+ ```
333
+
334
+ Устанавливайте только те парсеры, которые требуются вашему проекту.
335
+
336
+ > **Известное ограничение.** В шаблонах Vue и Angular выражение вида `{{ content[key] }}` не проверяется правилом `no-dynamic-field-access`. Динамическое чтение внутри блока script определяется в штатном режиме.
@@ -159,7 +159,7 @@ pnpm add -D webpack-bundle-analyzer
159
159
  bun add -d webpack-bundle-analyzer
160
160
  ```
161
161
 
162
- ```typescript fileName="webpack.config.ts
162
+ ```typescript fileName="webpack.config.ts"
163
163
  import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
164
164
 
165
165
  export default {
@@ -478,6 +478,28 @@ const config: IntlayerConfig = {
478
478
  */
479
479
  purge: true,
480
480
 
481
+ /**
482
+ * Yerel ayara özgü sözlük parçalarını, onları kullanan kod bölme sınırına göre
483
+ * grupla; böylece geç yüklenen bir sayfa içeriğini tek istekte alır.
484
+ * Varsayılan: true
485
+ *
486
+ * Not:
487
+ * - Yalnızca `importMode: 'dynamic'` kullanan sözlükler için geçerlidir.
488
+ */
489
+ chunkGrouping: true,
490
+
491
+ /**
492
+ * Bir sözlüğü, onu kullanan parça render edildikten sonra getirmek yerine o
493
+ * parçayla birlikte yükle. Okumalar askıya alınmak yerine eşzamanlı render
494
+ * edilir, böylece gezinme sırasında artık yükleme durumu görünmez.
495
+ * Varsayılan: true
496
+ *
497
+ * Not:
498
+ * - Yalnızca çözümlenen yerel ayar beklenir, bu nedenle sayfa yalnızca
499
+ * gösterdiği dili indirir.
500
+ */
501
+ dictionariesPreload: true,
502
+
481
503
  /**
482
504
  * Oluşturulan sözlük dosyaları için çıktı formatı.
483
505
  * Varsayılan: ['cjs', 'esm']
@@ -1054,15 +1076,17 @@ Derleme seçenekleri `@intlayer/babel` ve `@intlayer/swc` eklentileri için geç
1054
1076
 
1055
1077
  > Optimizasyon sırasında Intlayer, yığınlamayı (chunking) optimize etmek için sözlük çağrılarını değiştirecektir, böylece final paketi yalnızca gerçekte kullanılan sözlükleri içe aktaracaktır.
1056
1078
 
1057
- | Alan | Açıklama | Tür | Varsayılan | Örnek | Not |
1058
- | ----------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1059
- | `mode` | Derleme modunu kontrol eder. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: uygulama derlemesi sırasında derleme otomatik olarak tetiklenir.<br/>• `'manual'`: yalnızca derleme komutu açıkça çağrıldığında yürütülür.<br/>• Sözlük derlemelerini devre dışı bırakmak için kullanılabilir (örneğin Node.js ortamlarında yürütmeyi durdurmak için). |
1060
- | `optimize` | Derlemenin optimize edilip edilmeyeceğini kontrol eder. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • Tanımlanmazsa, optimizasyon framework derlemesinde (Vite/Next.js) tetiklenir.<br/>• `true` ise geliştirme modunda bile optimizasyonu zorlar.<br/>• `false` ise devre dışı bırakır.<br/>• Etkinse, yığınlamayı optimize etmek için sözlük çağrılarını yer değiştirir.<br/>• `@intlayer/babel` ve `@intlayer/swc` eklentilerini gerektirir. |
1061
- | `minify` | Demet boyutunu azaltmak için sözlükleri küçültün (Minify). | `boolean` | `false` | | • Paketin küçültülüp küçültülmeyeceğini belirtir.<br/>• Varsayılan: Üretimde `true`.<br/>• `optimize` devre dışı bırakılırsa bu seçenek yoksayılır.<br/>• `editor.enabled` true ise bu seçenek yoksayılır. |
1062
- | `purge` | Sözlüklerdeki kullanılmayan anahtarları temizleyin (Purge). | `boolean` | `false` | | • Paketin temizlenip temizlenmeyeceğini belirtir.<br/>• Varsayılan: Üretimde `true`.<br/>• `optimize` devre dışı bırakılırsa bu seçenek yoksayılır. |
1063
- | `checkTypes` | Derlemenin TypeScript türlerini kontrol edip etmeyeceğini ve hataları günlüğe kaydedip kaydetmeyeceğini belirtir. | `boolean` | `false` | | Derleme sürecini yavaşlatabilir. |
1064
- | `outputFormat` | Sözlüklerin çıktı formatını kontrol eder. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1065
- | `traversePattern` | Optimizasyon sırasında hangi dosyaların taranacağını tanımlayan kalıplar. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | Derleme performansını artırmak için optimizasyonu ilgili dosyalarla sınırlayın.<br/>• `optimize` kapalıysa yok sayılır.<br/>• Glob kalıplarını kullanır. |
1079
+ | Alan | Açıklama | Tür | Varsayılan | Örnek | Not |
1080
+ | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1081
+ | `mode` | Derleme modunu kontrol eder. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: uygulama derlemesi sırasında derleme otomatik olarak tetiklenir.<br/>• `'manual'`: yalnızca derleme komutu açıkça çağrıldığında yürütülür.<br/>• Sözlük derlemelerini devre dışı bırakmak için kullanılabilir (örneğin Node.js ortamlarında yürütmeyi durdurmak için). |
1082
+ | `optimize` | Derlemenin optimize edilip edilmeyeceğini kontrol eder. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • Tanımlanmazsa, optimizasyon framework derlemesinde (Vite/Next.js) tetiklenir.<br/>• `true` ise geliştirme modunda bile optimizasyonu zorlar.<br/>• `false` ise devre dışı bırakır.<br/>• Etkinse, yığınlamayı optimize etmek için sözlük çağrılarını yer değiştirir.<br/>• `@intlayer/babel` ve `@intlayer/swc` eklentilerini gerektirir. |
1083
+ | `minify` | Demet boyutunu azaltmak için sözlükleri küçültün (Minify). | `boolean` | `false` | | • Paketin küçültülüp küçültülmeyeceğini belirtir.<br/>• Varsayılan: Üretimde `true`.<br/>• `optimize` devre dışı bırakılırsa bu seçenek yoksayılır.<br/>• `editor.enabled` true ise bu seçenek yoksayılır. |
1084
+ | `purge` | Sözlüklerdeki kullanılmayan anahtarları temizleyin (Purge). | `boolean` | `false` | | • Paketin temizlenip temizlenmeyeceğini belirtir.<br/>• Varsayılan: Üretimde `true`.<br/>• `optimize` devre dışı bırakılırsa bu seçenek yoksayılır. |
1085
+ | `checkTypes` | Derlemenin TypeScript türlerini kontrol edip etmeyeceğini ve hataları günlüğe kaydedip kaydetmeyeceğini belirtir. | `boolean` | `false` | | Derleme sürecini yavaşlatabilir. |
1086
+ | `chunkGrouping` | Yerel ayara özgü sözlük parçalarının, onları kullanan kod bölme sınırına göre gruplanıp gruplanmayacağını belirtir. | `boolean` | `true` | | • Gruplama olmadan, çok sayıda bileşenden oluşan bir sayfa sözlük başına bir istek gönderir.<br/>• Birden fazla sınırdan erişilen sözlükler paylaşılan bir parçaya taşınır, böylece hiçbir sayfa başka bir sayfanın içeriğini taşımaz.<br/>• Yalnızca `importMode: 'dynamic'` kullanan sözlükler için geçerlidir.<br/>• Yalnızca istemci derlemesi için ve yalnızca paketleme sırasında geçerlidir (geliştirme modunda değil). |
1087
+ | `dictionariesPreload` | Bir sözlüğün, onu kullanan parça render edildikten sonra getirilmek yerine o parçayla birlikte yüklenip yüklenmeyeceğini belirtir. | `boolean` | `true` | | Oluşturulan giriş noktası gezinme yerel ayarını en üst düzeyde bekler, bu nedenle geç yüklenen bir rota, içeriği hazır olana kadar yüklenmiş sayılmaz.<br/>• Okumalar askıya alınmak yerine eşzamanlı render edilir, böylece gezinme sırasında artık yükleme durumu görünmez.<br/>• Yalnızca çözümlenen yerel ayar beklenir, bu nedenle sayfa yalnızca gösterdiği dili indirir.<br/>• Yalnızca istemci derlemesinde `importMode: 'dynamic'` kullanan sözlükler için geçerlidir.<br/>• Top-level await destekleyen bir paketleyici gerektirir (Vite, esbuild). |
1088
+ | `outputFormat` | Sözlüklerin çıktı formatını kontrol eder. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1089
+ | `traversePattern` | Optimizasyon sırasında hangi dosyaların taranacağını tanımlayan kalıplar. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | • Derleme performansını artırmak için optimizasyonu ilgili dosyalarla sınırlayın.<br/>• `optimize` kapalıysa yok sayılır.<br/>• Glob kalıplarını kullanır. |
1066
1090
 
1067
1091
  ---
1068
1092
 
@@ -532,28 +532,6 @@ Varyantlar (Variants) ile birlikte kullanılan bu alan, adlandırılmış içeri
532
532
 
533
533
  > Daha fazla bilgi için [Varyantlar](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dynamic_dictionaries/variants.md) sayfasına bakın.
534
534
 
535
- #### `meta` (`Record<string, string | number | boolean>`)
536
-
537
- Dinamik Kayıtlar (Dynamic Records) ile birlikte kullanılan bu alan, CMS tarafından yönetilen kayıtları veya çalışma zamanında opak bir kimlik (ID) ile getirilen rastgele verileri bildirmeyi sağlar. Sözlük kimliği, bu `meta` alanında bildirilen rastgele anahtar-değer çiftleri kümesiyle tanımlanır.
538
-
539
- **Örnek:**
540
-
541
- ```typescript
542
- {
543
- key: "product-copy",
544
- meta: {
545
- id: "prod_abc",
546
- userId: "user_123"
547
- },
548
- content: {
549
- name: "Widget Pro",
550
- description: "The best widget."
551
- }
552
- }
553
- ```
554
-
555
- > Daha fazla bilgi için [Dinamik Kayıtlar](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dynamic_dictionaries/dynamic_content.md) sayfasına bakın.
556
-
557
535
  ### CMS Özellikleri
558
536
 
559
537
  ##### `version` (string)