@intlayer/docs 8.3.0-canary.4 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ar/compiler.md +84 -49
- package/docs/ar/configuration.md +80 -37
- package/docs/ar/intlayer_with_nextjs_16.md +174 -1
- package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ar/intlayer_with_react_router_v7.md +224 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ar/intlayer_with_svelte_kit.md +175 -2
- package/docs/ar/intlayer_with_tanstack.md +176 -1
- package/docs/ar/intlayer_with_vite+preact.md +174 -1
- package/docs/ar/intlayer_with_vite+react.md +174 -1
- package/docs/ar/intlayer_with_vite+solid.md +174 -1
- package/docs/ar/intlayer_with_vite+svelte.md +174 -1
- package/docs/ar/intlayer_with_vite+vue.md +174 -1
- package/docs/de/compiler.md +83 -48
- package/docs/de/configuration.md +434 -212
- package/docs/de/intlayer_with_nextjs_16.md +176 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
- package/docs/de/intlayer_with_react_router_v7.md +225 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
- package/docs/de/intlayer_with_svelte_kit.md +158 -2
- package/docs/de/intlayer_with_tanstack.md +159 -1
- package/docs/de/intlayer_with_vite+preact.md +157 -1
- package/docs/de/intlayer_with_vite+react.md +157 -1
- package/docs/de/intlayer_with_vite+solid.md +159 -3
- package/docs/de/intlayer_with_vite+svelte.md +157 -1
- package/docs/de/intlayer_with_vite+vue.md +157 -1
- package/docs/en/compiler.md +60 -33
- package/docs/en/configuration.md +80 -57
- package/docs/en/intlayer_with_nextjs_16.md +176 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
- package/docs/en/intlayer_with_react_router_v7.md +159 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
- package/docs/en/intlayer_with_svelte_kit.md +159 -0
- package/docs/en/intlayer_with_tanstack.md +160 -1
- package/docs/en/intlayer_with_vite+preact.md +159 -0
- package/docs/en/intlayer_with_vite+react.md +159 -0
- package/docs/en/intlayer_with_vite+solid.md +148 -27
- package/docs/en/intlayer_with_vite+svelte.md +159 -0
- package/docs/en/intlayer_with_vite+vue.md +142 -41
- package/docs/en-GB/compiler.md +66 -34
- package/docs/en-GB/configuration.md +78 -36
- package/docs/es/compiler.md +83 -48
- package/docs/es/configuration.md +429 -206
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +176 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +227 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
- package/docs/es/intlayer_with_svelte_kit.md +158 -2
- package/docs/es/intlayer_with_tanstack.md +160 -2
- package/docs/es/intlayer_with_vite+preact.md +162 -6
- package/docs/es/intlayer_with_vite+react.md +160 -4
- package/docs/es/intlayer_with_vite+solid.md +163 -7
- package/docs/es/intlayer_with_vite+svelte.md +157 -1
- package/docs/es/intlayer_with_vite+vue.md +165 -9
- package/docs/fr/compiler.md +81 -46
- package/docs/fr/configuration.md +355 -134
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +183 -7
- package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
- package/docs/fr/intlayer_with_react_router_v7.md +229 -3
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
- package/docs/fr/intlayer_with_svelte_kit.md +158 -2
- package/docs/fr/intlayer_with_tanstack.md +159 -1
- package/docs/fr/intlayer_with_vite+preact.md +164 -8
- package/docs/fr/intlayer_with_vite+react.md +162 -6
- package/docs/fr/intlayer_with_vite+solid.md +163 -7
- package/docs/fr/intlayer_with_vite+svelte.md +157 -1
- package/docs/fr/intlayer_with_vite+vue.md +164 -8
- package/docs/hi/compiler.md +81 -46
- package/docs/hi/configuration.md +87 -44
- package/docs/hi/intlayer_with_nextjs_16.md +174 -1
- package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/hi/intlayer_with_react_router_v7.md +224 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/hi/intlayer_with_svelte_kit.md +158 -2
- package/docs/hi/intlayer_with_tanstack.md +159 -1
- package/docs/hi/intlayer_with_vite+preact.md +157 -1
- package/docs/hi/intlayer_with_vite+react.md +157 -1
- package/docs/hi/intlayer_with_vite+solid.md +157 -1
- package/docs/hi/intlayer_with_vite+svelte.md +157 -1
- package/docs/hi/intlayer_with_vite+vue.md +157 -1
- package/docs/id/compiler.md +84 -51
- package/docs/id/configuration.md +83 -45
- package/docs/id/intlayer_with_nextjs_16.md +174 -1
- package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/id/intlayer_with_react_router_v7.md +224 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/id/intlayer_with_svelte_kit.md +158 -2
- package/docs/id/intlayer_with_tanstack.md +159 -1
- package/docs/id/intlayer_with_vite+preact.md +157 -1
- package/docs/id/intlayer_with_vite+react.md +157 -1
- package/docs/id/intlayer_with_vite+solid.md +157 -1
- package/docs/id/intlayer_with_vite+svelte.md +157 -1
- package/docs/id/intlayer_with_vite+vue.md +157 -1
- package/docs/it/compiler.md +81 -46
- package/docs/it/configuration.md +426 -204
- package/docs/it/intlayer_with_nextjs_16.md +174 -1
- package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/it/intlayer_with_react_router_v7.md +225 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/it/intlayer_with_svelte_kit.md +158 -2
- package/docs/it/intlayer_with_tanstack.md +159 -1
- package/docs/it/intlayer_with_vite+preact.md +157 -1
- package/docs/it/intlayer_with_vite+react.md +157 -1
- package/docs/it/intlayer_with_vite+solid.md +159 -3
- package/docs/it/intlayer_with_vite+svelte.md +157 -1
- package/docs/it/intlayer_with_vite+vue.md +157 -1
- package/docs/ja/compiler.md +94 -58
- package/docs/ja/configuration.md +88 -45
- package/docs/ja/intlayer_with_nextjs_16.md +174 -1
- package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ja/intlayer_with_react_router_v7.md +184 -394
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ja/intlayer_with_svelte_kit.md +119 -595
- package/docs/ja/intlayer_with_tanstack.md +131 -642
- package/docs/ja/intlayer_with_vite+preact.md +111 -1231
- package/docs/ja/intlayer_with_vite+react.md +129 -1304
- package/docs/ja/intlayer_with_vite+solid.md +159 -3
- package/docs/ja/intlayer_with_vite+svelte.md +157 -1
- package/docs/ja/intlayer_with_vite+vue.md +157 -1
- package/docs/ko/compiler.md +88 -52
- package/docs/ko/configuration.md +87 -44
- package/docs/ko/intlayer_with_nextjs_16.md +174 -1
- package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ko/intlayer_with_react_router_v7.md +225 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ko/intlayer_with_svelte_kit.md +158 -2
- package/docs/ko/intlayer_with_tanstack.md +159 -1
- package/docs/ko/intlayer_with_vite+preact.md +157 -1
- package/docs/ko/intlayer_with_vite+react.md +157 -1
- package/docs/ko/intlayer_with_vite+solid.md +159 -3
- package/docs/ko/intlayer_with_vite+svelte.md +157 -1
- package/docs/ko/intlayer_with_vite+vue.md +157 -1
- package/docs/pl/compiler.md +84 -51
- package/docs/pl/configuration.md +83 -37
- package/docs/pl/intlayer_with_nextjs_16.md +174 -1
- package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pl/intlayer_with_react_router_v7.md +224 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pl/intlayer_with_svelte_kit.md +158 -2
- package/docs/pl/intlayer_with_tanstack.md +159 -1
- package/docs/pl/intlayer_with_vite+preact.md +157 -1
- package/docs/pl/intlayer_with_vite+react.md +157 -1
- package/docs/pl/intlayer_with_vite+solid.md +157 -1
- package/docs/pl/intlayer_with_vite+svelte.md +157 -1
- package/docs/pl/intlayer_with_vite+vue.md +157 -1
- package/docs/pt/compiler.md +81 -46
- package/docs/pt/configuration.md +404 -194
- package/docs/pt/intlayer_with_nextjs_16.md +174 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pt/intlayer_with_react_router_v7.md +224 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pt/intlayer_with_svelte_kit.md +158 -2
- package/docs/pt/intlayer_with_tanstack.md +159 -1
- package/docs/pt/intlayer_with_vite+preact.md +157 -1
- package/docs/pt/intlayer_with_vite+react.md +157 -1
- package/docs/pt/intlayer_with_vite+solid.md +157 -1
- package/docs/pt/intlayer_with_vite+svelte.md +157 -1
- package/docs/pt/intlayer_with_vite+vue.md +157 -1
- package/docs/ru/compiler.md +90 -57
- package/docs/ru/configuration.md +76 -46
- package/docs/ru/intlayer_with_nextjs_16.md +174 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ru/intlayer_with_react_router_v7.md +224 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ru/intlayer_with_svelte_kit.md +158 -2
- package/docs/ru/intlayer_with_tanstack.md +159 -1
- package/docs/ru/intlayer_with_vite+preact.md +157 -1
- package/docs/ru/intlayer_with_vite+react.md +157 -1
- package/docs/ru/intlayer_with_vite+solid.md +157 -1
- package/docs/ru/intlayer_with_vite+svelte.md +157 -1
- package/docs/ru/intlayer_with_vite+vue.md +157 -1
- package/docs/tr/compiler.md +85 -52
- package/docs/tr/configuration.md +83 -40
- package/docs/tr/intlayer_with_nextjs_16.md +174 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/tr/intlayer_with_react_router_v7.md +224 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/tr/intlayer_with_svelte_kit.md +158 -2
- package/docs/tr/intlayer_with_tanstack.md +159 -1
- package/docs/tr/intlayer_with_vite+preact.md +157 -1
- package/docs/tr/intlayer_with_vite+react.md +157 -1
- package/docs/tr/intlayer_with_vite+solid.md +157 -1
- package/docs/tr/intlayer_with_vite+svelte.md +157 -1
- package/docs/tr/intlayer_with_vite+vue.md +157 -1
- package/docs/uk/compiler.md +96 -61
- package/docs/uk/configuration.md +83 -37
- package/docs/uk/intlayer_with_nextjs_16.md +174 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/uk/intlayer_with_react_router_v7.md +224 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/uk/intlayer_with_svelte_kit.md +157 -1
- package/docs/uk/intlayer_with_tanstack.md +159 -1
- package/docs/uk/intlayer_with_vite+preact.md +157 -1
- package/docs/uk/intlayer_with_vite+react.md +157 -1
- package/docs/uk/intlayer_with_vite+solid.md +157 -1
- package/docs/uk/intlayer_with_vite+svelte.md +157 -1
- package/docs/uk/intlayer_with_vite+vue.md +157 -1
- package/docs/vi/compiler.md +85 -50
- package/docs/vi/configuration.md +85 -39
- package/docs/vi/intlayer_with_nextjs_16.md +174 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/vi/intlayer_with_react_router_v7.md +224 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/vi/intlayer_with_svelte_kit.md +158 -2
- package/docs/vi/intlayer_with_tanstack.md +159 -1
- package/docs/vi/intlayer_with_vite+preact.md +157 -1
- package/docs/vi/intlayer_with_vite+react.md +157 -1
- package/docs/vi/intlayer_with_vite+solid.md +157 -1
- package/docs/vi/intlayer_with_vite+svelte.md +157 -1
- package/docs/vi/intlayer_with_vite+vue.md +157 -1
- package/docs/zh/compiler.md +84 -49
- package/docs/zh/configuration.md +80 -37
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +174 -1
- package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/zh/intlayer_with_react_router_v7.md +227 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
- package/docs/zh/intlayer_with_svelte_kit.md +158 -2
- package/docs/zh/intlayer_with_tanstack.md +159 -1
- package/docs/zh/intlayer_with_vite+preact.md +159 -3
- package/docs/zh/intlayer_with_vite+react.md +157 -1
- package/docs/zh/intlayer_with_vite+solid.md +161 -5
- package/docs/zh/intlayer_with_vite+svelte.md +157 -1
- package/docs/zh/intlayer_with_vite+vue.md +158 -2
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-01-10
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: Next.js i18n - تحويل تطبيق Next.js الحالي إلى تطبيق متعدد اللغات في 2026
|
|
5
5
|
description: اكتشف كيف تجعل تطبيق Next.js الحالي الخاص بك متعدد اللغات باستخدام مترجم Intlayer. اتبع التوثيق لتدويل (i18n) وترجمة تطبيقك باستخدام الذكاء الاصطناعي.
|
|
6
6
|
keywords:
|
|
@@ -486,6 +486,179 @@ bun add @intlayer/swc --dev
|
|
|
486
486
|
.intlayer
|
|
487
487
|
```
|
|
488
488
|
|
|
489
|
+
### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
|
|
490
|
+
|
|
491
|
+
إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
|
|
492
|
+
|
|
493
|
+
لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
|
|
494
|
+
|
|
495
|
+
لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
|
|
496
|
+
|
|
497
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
498
|
+
import { type IntlayerConfig } from "intlayer";
|
|
499
|
+
|
|
500
|
+
const config: IntlayerConfig = {
|
|
501
|
+
// ... بقية التكوين الخاص بك
|
|
502
|
+
compiler: {
|
|
503
|
+
/**
|
|
504
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
505
|
+
*/
|
|
506
|
+
enabled: true,
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* يحدد مسار ملفات المخرجات
|
|
510
|
+
*/
|
|
511
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
515
|
+
*/
|
|
516
|
+
saveComponents: false,
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* بادئة مفتاح القاموس
|
|
520
|
+
*/
|
|
521
|
+
dictionaryKeyPrefix: "",
|
|
522
|
+
},
|
|
523
|
+
};
|
|
524
|
+
|
|
525
|
+
export default config;
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
529
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
530
|
+
const config = {
|
|
531
|
+
// ... بقية التكوين الخاص بك
|
|
532
|
+
compiler: {
|
|
533
|
+
/**
|
|
534
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
535
|
+
*/
|
|
536
|
+
enabled: true,
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* يحدد مسار ملفات المخرجات
|
|
540
|
+
*/
|
|
541
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
545
|
+
*/
|
|
546
|
+
saveComponents: false,
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* بادئة مفتاح القاموس
|
|
550
|
+
*/
|
|
551
|
+
dictionaryKeyPrefix: "",
|
|
552
|
+
},
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
export default config;
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
559
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
560
|
+
const config = {
|
|
561
|
+
// ... بقية التكوين الخاص بك
|
|
562
|
+
compiler: {
|
|
563
|
+
/**
|
|
564
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
565
|
+
*/
|
|
566
|
+
enabled: true,
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* يحدد مسار ملفات المخرجات
|
|
570
|
+
*/
|
|
571
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
575
|
+
*/
|
|
576
|
+
saveComponents: false,
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* بادئة مفتاح القاموس
|
|
580
|
+
*/
|
|
581
|
+
dictionaryKeyPrefix: "",
|
|
582
|
+
},
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
module.exports = config;
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
<Tabs>
|
|
589
|
+
<Tab value='أمر الاستخراج'>
|
|
590
|
+
|
|
591
|
+
قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
|
|
592
|
+
|
|
593
|
+
```bash packageManager="npm"
|
|
594
|
+
npx intlayer extract
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
```bash packageManager="pnpm"
|
|
598
|
+
pnpm intlayer extract
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
```bash packageManager="yarn"
|
|
602
|
+
yarn intlayer extract
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
```bash packageManager="bun"
|
|
606
|
+
bunx intlayer extract
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
</Tab>
|
|
610
|
+
<Tab value='مترجم Babel'>
|
|
611
|
+
|
|
612
|
+
```bash packageManager="npm"
|
|
613
|
+
npm install @intlayer/babel --save-dev
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
```bash packageManager="pnpm"
|
|
617
|
+
pnpm add @intlayer/babel --save-dev
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
```bash packageManager="yarn"
|
|
621
|
+
yarn add @intlayer/babel --save-dev
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
```bash packageManager="bun"
|
|
625
|
+
bun add @intlayer/babel --dev
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
```js fileName="babel.config.js"
|
|
629
|
+
const {
|
|
630
|
+
intlayerExtractBabelPlugin,
|
|
631
|
+
getExtractPluginOptions,
|
|
632
|
+
} = require("@intlayer/babel");
|
|
633
|
+
|
|
634
|
+
module.exports = {
|
|
635
|
+
presets: ["next/babel"],
|
|
636
|
+
plugins: [
|
|
637
|
+
// استخراج المحتوى من المكونات إلى القواميس
|
|
638
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
639
|
+
],
|
|
640
|
+
};
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
```bash packageManager="npm"
|
|
644
|
+
npm run build # أو npm run dev
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
```bash packageManager="pnpm"
|
|
648
|
+
pnpm run build # Or pnpm run dev
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
```bash packageManager="yarn"
|
|
652
|
+
yarn build # Or yarn dev
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
```bash packageManager="bun"
|
|
656
|
+
bun run build # Or bun run dev
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
</Tab>
|
|
660
|
+
</Tabs>
|
|
661
|
+
|
|
489
662
|
### ملحق VS Code
|
|
490
663
|
|
|
491
664
|
لتحسين تجربة التطوير الخاصة بك مع Intlayer ، يمكنك تثبيت **ملحق Intlayer الرسمي لـ VS Code**.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: React Router v7 i18n - كيفية ترجمة تطبيق React Router v7 في 2026
|
|
5
5
|
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يدعم اللغة المحلية.
|
|
6
6
|
keywords:
|
|
@@ -506,6 +506,229 @@ export default function RootLayout() {
|
|
|
506
506
|
}
|
|
507
507
|
```
|
|
508
508
|
|
|
509
|
+
### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
|
|
510
|
+
|
|
511
|
+
إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
|
|
512
|
+
|
|
513
|
+
لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
|
|
514
|
+
|
|
515
|
+
لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
|
|
516
|
+
|
|
517
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
518
|
+
import { type IntlayerConfig } from "intlayer";
|
|
519
|
+
|
|
520
|
+
const config: IntlayerConfig = {
|
|
521
|
+
// ... بقية التكوين الخاص بك
|
|
522
|
+
compiler: {
|
|
523
|
+
/**
|
|
524
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
525
|
+
*/
|
|
526
|
+
enabled: true,
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* يحدد مسار ملفات المخرجات
|
|
530
|
+
*/
|
|
531
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
535
|
+
*/
|
|
536
|
+
saveComponents: false,
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* بادئة مفتاح القاموس
|
|
540
|
+
*/
|
|
541
|
+
dictionaryKeyPrefix: "",
|
|
542
|
+
},
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
export default config;
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
549
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
550
|
+
const config = {
|
|
551
|
+
// ... بقية التكوين الخاص بك
|
|
552
|
+
compiler: {
|
|
553
|
+
/**
|
|
554
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
555
|
+
*/
|
|
556
|
+
enabled: true,
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* يحدد مسار ملفات المخرجات
|
|
560
|
+
*/
|
|
561
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
565
|
+
*/
|
|
566
|
+
saveComponents: false,
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* بادئة مفتاح القاموس
|
|
570
|
+
*/
|
|
571
|
+
dictionaryKeyPrefix: "",
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
export default config;
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
579
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
580
|
+
const config = {
|
|
581
|
+
// ... بقية التكوين الخاص بك
|
|
582
|
+
compiler: {
|
|
583
|
+
/**
|
|
584
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
585
|
+
*/
|
|
586
|
+
enabled: true,
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* يحدد مسار ملفات المخرجات
|
|
590
|
+
*/
|
|
591
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
595
|
+
*/
|
|
596
|
+
saveComponents: false,
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* بادئة مفتاح القاموس
|
|
600
|
+
*/
|
|
601
|
+
dictionaryKeyPrefix: "",
|
|
602
|
+
},
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
module.exports = config;
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
<Tabs>
|
|
609
|
+
<Tab value='أمر الاستخراج'>
|
|
610
|
+
|
|
611
|
+
قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
|
|
612
|
+
|
|
613
|
+
```bash packageManager="npm"
|
|
614
|
+
npx intlayer extract
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
```bash packageManager="pnpm"
|
|
618
|
+
pnpm intlayer extract
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
```bash packageManager="yarn"
|
|
622
|
+
yarn intlayer extract
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
```bash packageManager="bun"
|
|
626
|
+
bunx intlayer extract
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
</Tab>
|
|
630
|
+
<Tab value='مترجم Babel'>
|
|
631
|
+
|
|
632
|
+
قم بتحديث `vite.config.ts` لتضمين مكون `intlayerCompiler` الإضافي:
|
|
633
|
+
|
|
634
|
+
```ts fileName="vite.config.ts"
|
|
635
|
+
import { defineConfig } from "vite";
|
|
636
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
637
|
+
|
|
638
|
+
export default defineConfig({
|
|
639
|
+
plugins: [
|
|
640
|
+
intlayer(),
|
|
641
|
+
intlayerCompiler(), // يضيف المكون الإضافي للمترجم
|
|
642
|
+
],
|
|
643
|
+
});
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
```bash packageManager="npm"
|
|
647
|
+
npm run build # أو npm run dev
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
```bash packageManager="pnpm"
|
|
651
|
+
pnpm run build # Or pnpm run dev
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
```bash packageManager="yarn"
|
|
655
|
+
yarn build # Or yarn dev
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
```bash packageManager="bun"
|
|
659
|
+
bun run build # Or bun run dev
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
</Tab>
|
|
663
|
+
</Tabs>
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Configure TypeScript
|
|
668
|
+
|
|
669
|
+
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
|
|
670
|
+
|
|
671
|
+
Ensure your TypeScript configuration includes the autogenerated types:
|
|
672
|
+
|
|
673
|
+
```json5 fileName="tsconfig.json"
|
|
674
|
+
{
|
|
675
|
+
// ... your existing configurations
|
|
676
|
+
include: [
|
|
677
|
+
// ... your existing includes
|
|
678
|
+
".intlayer/**/*.ts", // Include the auto-generated types
|
|
679
|
+
],
|
|
680
|
+
}
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
## Git Configuration
|
|
686
|
+
|
|
687
|
+
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
|
|
688
|
+
|
|
689
|
+
To do this, you can add the following instructions to your `.gitignore` file:
|
|
690
|
+
|
|
691
|
+
```plaintext fileName=".gitignore"
|
|
692
|
+
# Ignore the files generated by Intlayer
|
|
693
|
+
.intlayer
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
## VS Code Extension
|
|
699
|
+
|
|
700
|
+
To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
|
|
701
|
+
|
|
702
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
703
|
+
|
|
704
|
+
This extension provides:
|
|
705
|
+
|
|
706
|
+
- **Autocompletion** for translation keys.
|
|
707
|
+
- **Real-time error detection** for missing translations.
|
|
708
|
+
- **Inline previews** of translated content.
|
|
709
|
+
- **Quick actions** to easily create and update translations.
|
|
710
|
+
|
|
711
|
+
For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Go Further
|
|
716
|
+
|
|
717
|
+
To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|
|
718
|
+
|
|
719
|
+
---
|
|
720
|
+
|
|
721
|
+
## Documentation References
|
|
722
|
+
|
|
723
|
+
- [Intlayer Documentation](https://intlayer.org)
|
|
724
|
+
- [React Router v7 Documentation](https://reactrouter.com/)
|
|
725
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
|
|
726
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
|
|
727
|
+
- [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
|
|
728
|
+
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|
|
729
|
+
|
|
730
|
+
This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 for a fully internationalized application with locale-aware routing and TypeScript support.
|
|
731
|
+
|
|
509
732
|
### الخطوة 11: إضافة الوسيط (اختياري)
|
|
510
733
|
|
|
511
734
|
يمكنك أيضًا استخدام `intlayerProxy` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: React Router v7 i18n - كيفية ترجمة تطبيق React Router v7 في 2026
|
|
5
5
|
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يدعم اللغة المحلية.
|
|
6
6
|
keywords:
|
|
@@ -452,6 +452,230 @@ export default function RootLayout() {
|
|
|
452
452
|
}
|
|
453
453
|
```
|
|
454
454
|
|
|
455
|
+
### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
|
|
456
|
+
|
|
457
|
+
إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
|
|
458
|
+
|
|
459
|
+
لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
|
|
460
|
+
|
|
461
|
+
لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
|
|
462
|
+
|
|
463
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
464
|
+
import { type IntlayerConfig } from "intlayer";
|
|
465
|
+
|
|
466
|
+
const config: IntlayerConfig = {
|
|
467
|
+
// ... بقية التكوين الخاص بك
|
|
468
|
+
compiler: {
|
|
469
|
+
/**
|
|
470
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
471
|
+
*/
|
|
472
|
+
enabled: true,
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* يحدد مسار ملفات المخرجات
|
|
476
|
+
*/
|
|
477
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
481
|
+
*/
|
|
482
|
+
saveComponents: false,
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* بادئة مفتاح القاموس
|
|
486
|
+
*/
|
|
487
|
+
dictionaryKeyPrefix: "",
|
|
488
|
+
},
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
export default config;
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
495
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
496
|
+
const config = {
|
|
497
|
+
// ... بقية التكوين الخاص بك
|
|
498
|
+
compiler: {
|
|
499
|
+
/**
|
|
500
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
501
|
+
*/
|
|
502
|
+
enabled: true,
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* يحدد مسار ملفات المخرجات
|
|
506
|
+
*/
|
|
507
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
511
|
+
*/
|
|
512
|
+
saveComponents: false,
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* بادئة مفتاح القاموس
|
|
516
|
+
*/
|
|
517
|
+
dictionaryKeyPrefix: "",
|
|
518
|
+
},
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
export default config;
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
525
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
526
|
+
const config = {
|
|
527
|
+
// ... بقية التكوين الخاص بك
|
|
528
|
+
compiler: {
|
|
529
|
+
/**
|
|
530
|
+
* يشير إلى ما إذا كان يجب تمكين المترجم.
|
|
531
|
+
*/
|
|
532
|
+
enabled: true,
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* يحدد مسار ملفات المخرجات
|
|
536
|
+
*/
|
|
537
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
541
|
+
*/
|
|
542
|
+
saveComponents: false,
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* بادئة مفتاح القاموس
|
|
546
|
+
*/
|
|
547
|
+
dictionaryKeyPrefix: "",
|
|
548
|
+
},
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
module.exports = config;
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
<Tabs>
|
|
555
|
+
<Tab value='أمر الاستخراج'>
|
|
556
|
+
|
|
557
|
+
قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
|
|
558
|
+
|
|
559
|
+
```bash packageManager="npm"
|
|
560
|
+
npx intlayer extract
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
```bash packageManager="pnpm"
|
|
564
|
+
pnpm intlayer extract
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
```bash packageManager="yarn"
|
|
568
|
+
yarn intlayer extract
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
```bash packageManager="bun"
|
|
572
|
+
bunx intlayer extract
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
</Tab>
|
|
576
|
+
<Tab value='مترجم Babel'>
|
|
577
|
+
|
|
578
|
+
قم بتحديث `vite.config.ts` لتضمين مكون `intlayerCompiler` الإضافي:
|
|
579
|
+
|
|
580
|
+
```ts fileName="vite.config.ts"
|
|
581
|
+
import { defineConfig } from "vite";
|
|
582
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
583
|
+
|
|
584
|
+
export default defineConfig({
|
|
585
|
+
plugins: [
|
|
586
|
+
intlayer(),
|
|
587
|
+
intlayerCompiler(), // يضيف المكون الإضافي للمترجم
|
|
588
|
+
],
|
|
589
|
+
});
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
```bash packageManager="npm"
|
|
593
|
+
npm run build # أو npm run dev
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
```bash packageManager="pnpm"
|
|
597
|
+
pnpm run build # Or pnpm run dev
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
```bash packageManager="yarn"
|
|
601
|
+
yarn build # Or yarn dev
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
```bash packageManager="bun"
|
|
605
|
+
bun run build # Or bun run dev
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
</Tab>
|
|
609
|
+
</Tabs>
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## Configure TypeScript
|
|
614
|
+
|
|
615
|
+
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
|
|
616
|
+
|
|
617
|
+
Ensure your TypeScript configuration includes the autogenerated types:
|
|
618
|
+
|
|
619
|
+
```json5 fileName="tsconfig.json"
|
|
620
|
+
{
|
|
621
|
+
// ... your existing configurations
|
|
622
|
+
include: [
|
|
623
|
+
// ... your existing includes
|
|
624
|
+
".intlayer/**/*.ts", // Include the auto-generated types
|
|
625
|
+
],
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Git Configuration
|
|
632
|
+
|
|
633
|
+
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
|
|
634
|
+
|
|
635
|
+
To do this, you can add the following instructions to your `.gitignore` file:
|
|
636
|
+
|
|
637
|
+
```plaintext fileName=".gitignore"
|
|
638
|
+
# Ignore the files generated by Intlayer
|
|
639
|
+
.intlayer
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## VS Code Extension
|
|
645
|
+
|
|
646
|
+
To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
|
|
647
|
+
|
|
648
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
649
|
+
|
|
650
|
+
This extension provides:
|
|
651
|
+
|
|
652
|
+
- **Autocompletion** for translation keys.
|
|
653
|
+
- **Real-time error detection** for missing translations.
|
|
654
|
+
- **Inline previews** of translated content.
|
|
655
|
+
- **Quick actions** to easily create and update translations.
|
|
656
|
+
|
|
657
|
+
For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
|
|
658
|
+
|
|
659
|
+
---
|
|
660
|
+
|
|
661
|
+
## Go Further
|
|
662
|
+
|
|
663
|
+
To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Documentation References
|
|
668
|
+
|
|
669
|
+
- [Intlayer Documentation](https://intlayer.org)
|
|
670
|
+
- [React Router v7 Documentation](https://reactrouter.com/)
|
|
671
|
+
- [React Router fs-routes Documentation](https://reactrouter.com/how-to/file-route-conventions)
|
|
672
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
|
|
673
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
|
|
674
|
+
- [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
|
|
675
|
+
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|
|
676
|
+
|
|
677
|
+
This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 using file-system based routing for a fully internationalized application with locale-aware routing and TypeScript support.
|
|
678
|
+
|
|
455
679
|
### الخطوة 11: إضافة الوسيط (اختياري)
|
|
456
680
|
|
|
457
681
|
يمكنك أيضًا استخدام `intlayerProxy` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
|