@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
@@ -71,6 +71,7 @@ declare const docsEntry: {
71
71
  readonly './docs/en/dynamic_dictionaries/collections.md': Record<LocalesValues, Promise<string>>;
72
72
  readonly './docs/en/dynamic_dictionaries/index.md': Record<LocalesValues, Promise<string>>;
73
73
  readonly './docs/en/dynamic_dictionaries/variants.md': Record<LocalesValues, Promise<string>>;
74
+ readonly './docs/en/eslint.md': Record<LocalesValues, Promise<string>>;
74
75
  readonly './docs/en/formatters.md': Record<LocalesValues, Promise<string>>;
75
76
  readonly './docs/en/how_works_intlayer.md': Record<LocalesValues, Promise<string>>;
76
77
  readonly './docs/en/interest_of_intlayer.md': Record<LocalesValues, Promise<string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"docs.entry.d.ts","names":[],"sources":["../../../src/generated/docs.entry.ts"],"mappings":"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"}
1
+ {"version":3,"file":"docs.entry.d.ts","names":[],"sources":["../../../src/generated/docs.entry.ts"],"mappings":"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"}
@@ -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 {
@@ -471,6 +471,27 @@ const config: IntlayerConfig = {
471
471
  */
472
472
  prune: true,
473
473
 
474
+ /**
475
+ * تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها، بحيث تجلب
476
+ * الصفحة المحمّلة بتكاسل محتواها في طلب واحد.
477
+ * الافتراضي: true
478
+ *
479
+ * ملاحظة:
480
+ * - ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'`.
481
+ */
482
+ chunkGrouping: true,
483
+
484
+ /**
485
+ * تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء. تُعرض
486
+ * القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء
487
+ * التنقل.
488
+ * الافتراضي: true
489
+ *
490
+ * ملاحظة:
491
+ * - يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.
492
+ */
493
+ dictionariesPreload: true,
494
+
474
495
  /**
475
496
  * صيغة الإخراج لملفات القاموس المولدة.
476
497
  * الافتراضي: ['cjs', 'esm']
@@ -1047,15 +1068,17 @@ dictionary: {
1047
1068
 
1048
1069
  > أثناء التحسين، سيقوم Intlayer باستبدال استدعاءات القواميس لتحسين تقسيم الكود (chunking) بحيث تستورد الحزمة الناتجة القواميس المستخدمة فعلياً فقط.
1049
1070
 
1050
- | الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
1051
- | ----------------- | --------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1052
- | `mode` | يتحكم في وضع البناء. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: يتم تشغيل البناء تلقائياً أثناء بناء التطبيق. <br/> • `'manual'`: يتم تنفيذه فقط عند استدعاء أمر بناء صريح. <br/> • يمكن استخدامه لإيقاف بناء القواميس (مثلاً لتجنب الجري في بيئات Node.js). |
1053
- | `optimize` | يتحكم في ما إذا كان ينبغي إجراء تحسينات البناء. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • إذا لم يتم تعريفه، فسيتم تشغيل التحسين عند بناء إطار العمل (Vite/Next.js). <br/> • `true` يفرض التحسين حتى في وضع التطوير. <br/> • `false` يعطله. <br/> • عند تشغيله، يستبدل استدعاءات القواميس لتحسين الـ chunking. <br/> • يتطلب إضافات `@intlayer/babel` و `@intlayer/swc`. |
1054
- | `minify` | يحدد ما إذا كان ينبغي ضغط القواميس لتقليل حجم الحزمة. | `boolean` | `false` | | • يحدد ما إذا كانت الحزمة يجب أن تكون مضغوطة.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`.<br/>• سيتم تجاهل هذا الخيار إذا كان `editor.enabled` صحيحاً. |
1055
- | `prune` | يحدد ما إذا كان ينبغي حذف المفاتيح غير المستخدمة في القواميس. | `boolean` | `true` | | • يحدد ما إذا كانت الحزمة يجب أن يتم تنظيفها.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`. |
1056
- | `checkTypes` | يشير إلى ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript وتسجيل الأخطاء. | `boolean` | `false` | | قد يبطئ عملية البناء. |
1057
- | `outputFormat` | يتحكم في صيغة إخراج القواميس. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1058
- | `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. |
1071
+ | الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
1072
+ | --------------------- | ----------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1073
+ | `mode` | يتحكم في وضع البناء. | `'auto'` &#124; <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: يتم تشغيل البناء تلقائياً أثناء بناء التطبيق. <br/> • `'manual'`: يتم تنفيذه فقط عند استدعاء أمر بناء صريح. <br/> • يمكن استخدامه لإيقاف بناء القواميس (مثلاً لتجنب الجري في بيئات Node.js). |
1074
+ | `optimize` | يتحكم في ما إذا كان ينبغي إجراء تحسينات البناء. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • إذا لم يتم تعريفه، فسيتم تشغيل التحسين عند بناء إطار العمل (Vite/Next.js). <br/> • `true` يفرض التحسين حتى في وضع التطوير. <br/> • `false` يعطله. <br/> • عند تشغيله، يستبدل استدعاءات القواميس لتحسين الـ chunking. <br/> • يتطلب إضافات `@intlayer/babel` و `@intlayer/swc`. |
1075
+ | `minify` | يحدد ما إذا كان ينبغي ضغط القواميس لتقليل حجم الحزمة. | `boolean` | `false` | | • يحدد ما إذا كانت الحزمة يجب أن تكون مضغوطة.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`.<br/>• سيتم تجاهل هذا الخيار إذا كان `editor.enabled` صحيحاً. |
1076
+ | `prune` | يحدد ما إذا كان ينبغي حذف المفاتيح غير المستخدمة في القواميس. | `boolean` | `true` | | • يحدد ما إذا كانت الحزمة يجب أن يتم تنظيفها.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`. |
1077
+ | `checkTypes` | يشير إلى ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript وتسجيل الأخطاء. | `boolean` | `false` | | قد يبطئ عملية البناء. |
1078
+ | `chunkGrouping` | يحدد ما إذا كان يجب تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها. | `boolean` | `true` | | • بدون التجميع، ترسل الصفحة المكوّنة من مكوّنات عديدة طلباً لكل قاموس.<br/>• القواميس التي يُوصل إليها من عدة حدود تنتقل إلى جزء مشترك، لذا لا تحمل أي صفحة محتوى صفحة أخرى.<br/>• ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'`.<br/>• ينطبق فقط على بناء العميل، وفقط عند التحزيم (ليس في وضع التطوير). |
1079
+ | `dictionariesPreload` | يحدد ما إذا كان يجب تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء. | `boolean` | `true` | | تنتظر نقطة الدخول المولَّدة لغة التصفح في المستوى الأعلى، لذا لا يُعتبر المسار المحمّل بتكاسل محمّلاً حتى يتوفر محتواه.<br/>• تُعرض القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء التنقل.<br/>• يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.<br/>• ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'` في بناء العميل.<br/>• يتطلب أداة تحزيم تدعم top-level await (Vite، esbuild). |
1080
+ | `outputFormat` | يتحكم في صيغة إخراج القواميس. | `('esm' &#124; 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
1081
+ | `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. |
1059
1082
 
1060
1083
  ---
1061
1084
 
@@ -536,28 +536,6 @@ export default aboutPageMetaContent;
536
536
 
537
537
  > انظر [المتغيرات](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dynamic_dictionaries/variants.md) لمزيد من المعلومات.
538
538
 
539
- #### `meta` (`Record<string, string | number | boolean>`)
540
-
541
- يُستخدم بالاقتران مع السجلات الديناميكية (Dynamic Records)، ويسمح هذا الحقل بالإعلان عن السجلات التي يديرها نظام إدارة المحتوى (CMS) أو البيانات التعسفية التي يتم جلبها في وقت التشغيل بواسطة معرف غير شفاف. يتم تحديد هوية القاموس من خلال مجموعة عشوائية من أزواج المفتاح والقيمة المعلنة في حقل `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/ar/dynamic_dictionaries/dynamic_content.md) لمزيد من المعلومات.
560
-
561
539
  ### خصائص نظام إدارة المحتوى
562
540
 
563
541
  ##### `version` (سلسلة نصية)
@@ -89,6 +89,29 @@ export default asyncFunctionContent;
89
89
 
90
90
  في هذه الحالة، تقوم دالة `fakeFetch` بمحاكاة تأخير لتقليد وقت استجابة الخادم. يقوم Intlayer بتنفيذ الدالة غير المتزامنة ويستخدم النتيجة كمحتوى للمفتاح `text`.
91
91
 
92
+ ## جلب المحتوى عن بُعد
93
+
94
+ يمكنك أيضًا إسناد وعد (Promise) مباشرةً إلى حقل محتوى. ينتظر Intlayer نتيجته أثناء بناء القواميس ويُدرج القيمة الناتجة:
95
+
96
+ ```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
97
+ import type { Dictionary } from "intlayer";
98
+
99
+ const remoteContent = {
100
+ key: "remote_content",
101
+ content: {
102
+ externalContent: fetch("https://example.com").then((res) => res.json()),
103
+ },
104
+ } satisfies Dictionary;
105
+
106
+ export default remoteContent;
107
+ ```
108
+
109
+ ```plaintext fileName="**/*.content.json" contentDeclarationFormat="json"
110
+ لا توجد طريقة لجلب المحتوى من ملف JSON، استخدم ملف .ts أو .js بدلاً من ذلك
111
+ ```
112
+
113
+ > يتم تنفيذ الطلب في وقت البناء، لذا فإن البيانات المجلوبة هي لقطة مضمّنة في القاموس. أعد بناء القواميس لتحديثها.
114
+
92
115
  ## استخدام المحتوى المعتمد على الدوال في مكونات React
93
116
 
94
117
  لاستخدام المحتوى المعتمد على الدوال في مكون React، تحتاج إلى استيراد `useIntlayer` من `react-intlayer` واستدعاؤه مع معرف المحتوى لاسترجاع المحتوى. إليك مثالاً:
@@ -0,0 +1,336 @@
1
+ ---
2
+ createdAt: 2026-08-12
3
+ updatedAt: 2026-08-13
4
+ title: إضافة ESLint | قواعد الفحص (Lint) لـ Intlayer
5
+ description: اكتشف النصوص المكتوبة يدويًا (hardcoded)، والاستدعاءات الديناميكية التي لا يمكن لمترجم 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. **النصوص المكتوبة يدويًا (Hardcoded text)** التي لم يتم نقلها إلى القاموس مطلقًا.
36
+ 2. **الاستدعاءات الديناميكية** التي تجتاز فحص الأنواع وتعمل، لكن مترجم Intlayer لا يمكنه تحسينها.
37
+ 3. **المحتوى غير المستخدم (Dead content)** — القواميس والحقول التي لا يقرأها أي شيء في المشروع (اختياري بالطلب).
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
+ تتطلب الإصدار 9 من ESLint أو أحدث (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 تجريبيًا (alpha)، كما أن oxlint لا يدعم المحللات المخصصة (custom parsers) — وبالتالي لا يتم فحص ملفات `.vue` و `.svelte` و `.astro` وقوالب Angular هناك. قم بتشغيل oxlint على ملفات JS/TS/JSX واحتفظ بـ ESLint للباقي.
105
+
106
+ تم استبعاد `no-unused-content` أعلاه عمدًا: فهي تحتاج إلى دليل العمل ومسار الملف المفحوص من سياق القاعدة، وهو ما لا يضمنه جسر إضافات JS التجريبي. قم بتشغيلها تحت ESLint.
107
+
108
+ </Tab>
109
+ </Tabs>
110
+
111
+ ### الإعدادات المسبقة (Configs)
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
+ تتطلب أن يكون مفتاح القاموس سلسلة نصية صريحة (string literal).
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({ ar: "العنوان", en: "Title" }),
237
+
238
+ // ✗ يتم الإبلاغ عنه عندما لا يقرأ أي شيء `hero`
239
+ hero: {
240
+ subtitle: t({ ar: "العنوان الفرعي", 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 في مستودع موحد (monorepo).
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
+ ## أطر العمل (Frameworks)
286
+
287
+ تعمل كل قاعدة عبر جميع تكاملات Intlayer، بما في ذلك داخل قوالب Vue و Svelte و Angular. ما عليك سوى إخبار ESLint بالمحلل الذي يقرأ كل نوع ملف.
288
+
289
+ | إطار العمل | الملفات | المحلل (Parser) |
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`. يتم التقاط القراءات الديناميكية المكتوبة داخل كتلة البرمجة النصية كالمعتاد.
@@ -144,7 +144,7 @@ bun add vite-intlayer --dev
144
144
 
145
145
  </Step>
146
146
 
147
- </Steps>
147
+ <Step number={5} title="إنشاء مكونات التخطيط">
148
148
 
149
149
  #### بنية الملفات
150
150