@intlayer/docs 7.3.4 → 7.3.6
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/blog/en/compiler_vs_declarative_i18n.md +2 -0
- package/docs/ar/intlayer_with_tanstack.md +39 -40
- package/docs/de/intlayer_with_tanstack.md +39 -40
- package/docs/en/intlayer_with_tanstack.md +43 -43
- package/docs/en-GB/intlayer_with_tanstack.md +39 -40
- package/docs/es/intlayer_with_tanstack.md +39 -40
- package/docs/fr/intlayer_with_tanstack.md +39 -40
- package/docs/hi/intlayer_with_tanstack.md +39 -40
- package/docs/id/intlayer_with_tanstack.md +39 -40
- package/docs/it/intlayer_with_tanstack.md +39 -40
- package/docs/ja/intlayer_with_tanstack.md +39 -40
- package/docs/ko/intlayer_with_tanstack.md +39 -40
- package/docs/pl/intlayer_with_tanstack.md +39 -40
- package/docs/pt/intlayer_with_tanstack.md +39 -40
- package/docs/ru/intlayer_with_tanstack.md +39 -40
- package/docs/tr/intlayer_with_tanstack.md +40 -41
- package/docs/vi/intlayer_with_tanstack.md +39 -40
- package/docs/zh/intlayer_with_tanstack.md +42 -43
- package/package.json +6 -6
|
@@ -134,7 +134,7 @@ Configura tu diseño raíz y los diseños específicos por localización:
|
|
|
134
134
|
#### Diseño Raíz
|
|
135
135
|
|
|
136
136
|
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
137
|
-
import { createFileRoute,
|
|
137
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
138
138
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
139
139
|
|
|
140
140
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -384,16 +384,16 @@ import {
|
|
|
384
384
|
getLocaleName,
|
|
385
385
|
getPathWithoutLocale,
|
|
386
386
|
getPrefix,
|
|
387
|
+
Locales,
|
|
387
388
|
} from "intlayer";
|
|
388
|
-
import {
|
|
389
|
+
import { useLocale } from "react-intlayer";
|
|
389
390
|
|
|
390
391
|
import { LocalizedLink, To } from "./localized-link";
|
|
391
392
|
|
|
392
393
|
export const LocaleSwitcher: FC = () => {
|
|
393
|
-
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
394
394
|
const { pathname } = useLocation();
|
|
395
395
|
|
|
396
|
-
const { availableLocales, locale } = useLocale();
|
|
396
|
+
const { availableLocales, locale, setLocale } = useLocale();
|
|
397
397
|
|
|
398
398
|
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
399
399
|
|
|
@@ -403,25 +403,24 @@ export const LocaleSwitcher: FC = () => {
|
|
|
403
403
|
<li key={localeEl}>
|
|
404
404
|
<LocalizedLink
|
|
405
405
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
406
|
-
|
|
407
|
-
onClick={() => setLocaleInStorage(localeEl)}
|
|
406
|
+
onClick={() => setLocale(localeEl)}
|
|
408
407
|
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
409
408
|
>
|
|
410
409
|
<span>
|
|
411
410
|
{/* Localización - por ejemplo FR */}
|
|
412
|
-
{
|
|
411
|
+
{localeEl}
|
|
413
412
|
</span>
|
|
414
413
|
<span>
|
|
415
414
|
{/* Idioma en su propia localización - por ejemplo Français */}
|
|
416
|
-
{getLocaleName(
|
|
415
|
+
{getLocaleName(localeEl, locale)}
|
|
417
416
|
</span>
|
|
418
|
-
<span dir={getHTMLTextDir(
|
|
417
|
+
<span dir={getHTMLTextDir(localeEl)} lang={localeEl}>
|
|
419
418
|
{/* Idioma en la localización actual - por ejemplo Francés con la localización actual configurada en Locales.SPANISH */}
|
|
420
|
-
{getLocaleName(
|
|
419
|
+
{getLocaleName(localeEl)}
|
|
421
420
|
</span>
|
|
422
421
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
423
422
|
{/* Idioma en inglés - por ejemplo French */}
|
|
424
|
-
{getLocaleName(
|
|
423
|
+
{getLocaleName(localeEl, Locales.ENGLISH)}
|
|
425
424
|
</span>
|
|
426
425
|
</LocalizedLink>
|
|
427
426
|
</li>
|
|
@@ -456,7 +455,7 @@ export const useI18nHTMLAttributes = () => {
|
|
|
456
455
|
Luego úsalo en tu componente raíz:
|
|
457
456
|
|
|
458
457
|
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
459
|
-
import { createFileRoute,
|
|
458
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
460
459
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
461
460
|
|
|
462
461
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importar el hook
|
|
@@ -496,18 +495,44 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
|
|
496
495
|
|
|
497
496
|
export default defineConfig({
|
|
498
497
|
plugins: [
|
|
498
|
+
intlayerProxy(), // El proxy debe colocarse antes del servidor si usas Nitro
|
|
499
499
|
tailwindcss(),
|
|
500
500
|
reactRouter(),
|
|
501
501
|
tsconfigPaths(),
|
|
502
502
|
intlayer(),
|
|
503
|
-
intlayerProxy(),
|
|
504
503
|
],
|
|
505
504
|
});
|
|
506
505
|
```
|
|
507
506
|
|
|
508
507
|
---
|
|
509
508
|
|
|
510
|
-
### Paso 12:
|
|
509
|
+
### Paso 12: Internacionalizar tus Metadatos (Opcional)
|
|
510
|
+
|
|
511
|
+
También puedes usar el hook `getIntlayer` para acceder a tus diccionarios de contenido en toda tu aplicación:
|
|
512
|
+
|
|
513
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
514
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
515
|
+
import { getIntlayer } from "intlayer";
|
|
516
|
+
|
|
517
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
518
|
+
component: RouteComponent,
|
|
519
|
+
head: ({ params }) => {
|
|
520
|
+
const { locale } = params;
|
|
521
|
+
const metaContent = getIntlayer("page-metadata", locale);
|
|
522
|
+
|
|
523
|
+
return {
|
|
524
|
+
meta: [
|
|
525
|
+
{ title: metaContent.title },
|
|
526
|
+
{ content: metaContent.description, name: "description" },
|
|
527
|
+
],
|
|
528
|
+
};
|
|
529
|
+
},
|
|
530
|
+
});
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
### Paso 13: Configurar TypeScript (Opcional)
|
|
511
536
|
|
|
512
537
|
Intlayer utiliza la ampliación de módulos para aprovechar las ventajas de TypeScript y fortalecer tu base de código.
|
|
513
538
|
|
|
@@ -525,32 +550,6 @@ Asegúrate de que tu configuración de TypeScript incluya los tipos autogenerado
|
|
|
525
550
|
|
|
526
551
|
---
|
|
527
552
|
|
|
528
|
-
### Paso 13: Adaptar Nitro (Opcional)
|
|
529
|
-
|
|
530
|
-
Si estás utilizando Nitro para tu salida de producción, nitro no incluirá el directorio `.intlayer` en el directorio de salida. Necesitas copiarlo manualmente.
|
|
531
|
-
|
|
532
|
-
Ejemplo usando script de build:
|
|
533
|
-
|
|
534
|
-
```json5 fileName="package.json"
|
|
535
|
-
{
|
|
536
|
-
"scripts": {
|
|
537
|
-
"dev": "vite dev --port 3000",
|
|
538
|
-
"build": "vite build && cpr .intlayer .output/.intlayer", // Copiar carpeta .intlayer
|
|
539
|
-
"serve": "vite preview",
|
|
540
|
-
},
|
|
541
|
-
}
|
|
542
|
-
```
|
|
543
|
-
|
|
544
|
-
> cpr se utiliza para adaptar el comando y hacer que funcione en Windows.
|
|
545
|
-
> Tendrás que instalar la utilidad `cpr` para usar este comando.
|
|
546
|
-
>
|
|
547
|
-
> - `npm install --save-dev cpr`
|
|
548
|
-
> - `yarn add --dev cpr`
|
|
549
|
-
> - `pnpm add --save-dev cpr`
|
|
550
|
-
> - `bun add --save-dev cpr`
|
|
551
|
-
|
|
552
|
-
---
|
|
553
|
-
|
|
554
553
|
### Configuración de Git
|
|
555
554
|
|
|
556
555
|
Se recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.
|
|
@@ -134,7 +134,7 @@ Configurez votre mise en page racine et les mises en page spécifiques aux local
|
|
|
134
134
|
#### Mise en page racine
|
|
135
135
|
|
|
136
136
|
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
137
|
-
import { createFileRoute,
|
|
137
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
138
138
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
139
139
|
|
|
140
140
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -388,16 +388,16 @@ import {
|
|
|
388
388
|
getLocaleName,
|
|
389
389
|
getPathWithoutLocale,
|
|
390
390
|
getPrefix,
|
|
391
|
+
Locales,
|
|
391
392
|
} from "intlayer";
|
|
392
|
-
import {
|
|
393
|
+
import { useLocale } from "react-intlayer";
|
|
393
394
|
|
|
394
395
|
import { LocalizedLink, To } from "./localized-link";
|
|
395
396
|
|
|
396
397
|
export const LocaleSwitcher: FC = () => {
|
|
397
|
-
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
398
398
|
const { pathname } = useLocation();
|
|
399
399
|
|
|
400
|
-
const { availableLocales, locale } = useLocale();
|
|
400
|
+
const { availableLocales, locale, setLocale } = useLocale();
|
|
401
401
|
|
|
402
402
|
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
403
403
|
|
|
@@ -407,25 +407,24 @@ export const LocaleSwitcher: FC = () => {
|
|
|
407
407
|
<li key={localeEl}>
|
|
408
408
|
<LocalizedLink
|
|
409
409
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
410
|
-
|
|
411
|
-
onClick={() => setLocaleInStorage(localeEl)}
|
|
410
|
+
onClick={() => setLocale(localeEl)}
|
|
412
411
|
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
413
412
|
>
|
|
414
413
|
<span>
|
|
415
414
|
{/* Locale - ex. FR */}
|
|
416
|
-
{
|
|
415
|
+
{localeEl}
|
|
417
416
|
</span>
|
|
418
417
|
<span>
|
|
419
418
|
{/* Langue dans sa propre locale - ex. Français */}
|
|
420
|
-
{getLocaleName(
|
|
419
|
+
{getLocaleName(localeEl, locale)}
|
|
421
420
|
</span>
|
|
422
|
-
<span dir={getHTMLTextDir(
|
|
421
|
+
<span dir={getHTMLTextDir(localeEl)} lang={localeEl}>
|
|
423
422
|
{/* Langue dans la locale courante - ex. Francés avec la locale courante définie sur Locales.SPANISH */}
|
|
424
|
-
{getLocaleName(
|
|
423
|
+
{getLocaleName(localeEl)}
|
|
425
424
|
</span>
|
|
426
425
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
427
426
|
{/* Langue en anglais - ex. French */}
|
|
428
|
-
{getLocaleName(
|
|
427
|
+
{getLocaleName(localeEl, Locales.ENGLISH)}
|
|
429
428
|
</span>
|
|
430
429
|
</LocalizedLink>
|
|
431
430
|
</li>
|
|
@@ -460,7 +459,7 @@ export const useI18nHTMLAttributes = () => {
|
|
|
460
459
|
Ensuite, utilisez-le dans votre composant racine :
|
|
461
460
|
|
|
462
461
|
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
463
|
-
import { createFileRoute,
|
|
462
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
464
463
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
465
464
|
|
|
466
465
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importer le hook
|
|
@@ -500,18 +499,44 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
|
|
500
499
|
|
|
501
500
|
export default defineConfig({
|
|
502
501
|
plugins: [
|
|
502
|
+
intlayerProxy(), // Le proxy doit être placé avant le serveur si vous utilisez Nitro
|
|
503
503
|
tailwindcss(),
|
|
504
504
|
reactRouter(),
|
|
505
505
|
tsconfigPaths(),
|
|
506
506
|
intlayer(),
|
|
507
|
-
intlayerProxy(),
|
|
508
507
|
],
|
|
509
508
|
});
|
|
510
509
|
```
|
|
511
510
|
|
|
512
511
|
---
|
|
513
512
|
|
|
514
|
-
### Étape 12 :
|
|
513
|
+
### Étape 12 : Internationaliser vos métadonnées (Optionnel)
|
|
514
|
+
|
|
515
|
+
Vous pouvez également utiliser le hook `getIntlayer` pour accéder à vos dictionnaires de contenu dans toute votre application :
|
|
516
|
+
|
|
517
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
518
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
519
|
+
import { getIntlayer } from "intlayer";
|
|
520
|
+
|
|
521
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
522
|
+
component: RouteComponent,
|
|
523
|
+
head: ({ params }) => {
|
|
524
|
+
const { locale } = params;
|
|
525
|
+
const metaContent = getIntlayer("page-metadata", locale);
|
|
526
|
+
|
|
527
|
+
return {
|
|
528
|
+
meta: [
|
|
529
|
+
{ title: metaContent.title },
|
|
530
|
+
{ content: metaContent.description, name: "description" },
|
|
531
|
+
],
|
|
532
|
+
};
|
|
533
|
+
},
|
|
534
|
+
});
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
### Étape 13 : Configurer TypeScript (Optionnel)
|
|
515
540
|
|
|
516
541
|
Intlayer utilise l'augmentation de module pour bénéficier de TypeScript et renforcer votre base de code.
|
|
517
542
|
|
|
@@ -529,32 +554,6 @@ Assurez-vous que votre configuration TypeScript inclut les types générés auto
|
|
|
529
554
|
|
|
530
555
|
---
|
|
531
556
|
|
|
532
|
-
### Étape 13 : Adapter Nitro (Optionnel)
|
|
533
|
-
|
|
534
|
-
Si vous utilisez Nitro pour votre sortie de production, nitro n'inclura pas le répertoire `.intlayer` dans le répertoire de sortie. Vous devez le copier manuellement.
|
|
535
|
-
|
|
536
|
-
Exemple utilisant le script de build :
|
|
537
|
-
|
|
538
|
-
```json5 fileName="package.json"
|
|
539
|
-
{
|
|
540
|
-
"scripts": {
|
|
541
|
-
"dev": "vite dev --port 3000",
|
|
542
|
-
"build": "vite build && cpr .intlayer .output/.intlayer", // Copier le dossier .intlayer
|
|
543
|
-
"serve": "vite preview",
|
|
544
|
-
},
|
|
545
|
-
}
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
> cpr est utilisé pour adapter la commande afin qu'elle fonctionne sur Windows.
|
|
549
|
-
> Vous devrez installer l'utilitaire `cpr` pour utiliser cette commande.
|
|
550
|
-
>
|
|
551
|
-
> - `npm install --save-dev cpr`
|
|
552
|
-
> - `yarn add --dev cpr`
|
|
553
|
-
> - `pnpm add --save-dev cpr`
|
|
554
|
-
> - `bun add --save-dev cpr`
|
|
555
|
-
|
|
556
|
-
---
|
|
557
|
-
|
|
558
557
|
### Configuration Git
|
|
559
558
|
|
|
560
559
|
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les committer dans votre dépôt Git.
|
|
@@ -137,7 +137,7 @@ export default config;
|
|
|
137
137
|
#### रूट लेआउट
|
|
138
138
|
|
|
139
139
|
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
140
|
-
import { createFileRoute,
|
|
140
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
141
141
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
142
142
|
|
|
143
143
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -380,16 +380,16 @@ import {
|
|
|
380
380
|
getLocaleName,
|
|
381
381
|
getPathWithoutLocale,
|
|
382
382
|
getPrefix,
|
|
383
|
+
Locales,
|
|
383
384
|
} from "intlayer";
|
|
384
|
-
import {
|
|
385
|
+
import { useLocale } from "react-intlayer";
|
|
385
386
|
|
|
386
387
|
import { LocalizedLink, To } from "./localized-link";
|
|
387
388
|
|
|
388
389
|
export const LocaleSwitcher: FC = () => {
|
|
389
|
-
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
390
390
|
const { pathname } = useLocation();
|
|
391
391
|
|
|
392
|
-
const { availableLocales, locale } = useLocale();
|
|
392
|
+
const { availableLocales, locale, setLocale } = useLocale();
|
|
393
393
|
|
|
394
394
|
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
395
395
|
|
|
@@ -399,25 +399,24 @@ export const LocaleSwitcher: FC = () => {
|
|
|
399
399
|
<li key={localeEl}>
|
|
400
400
|
<LocalizedLink
|
|
401
401
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
402
|
-
|
|
403
|
-
onClick={() => setLocaleInStorage(localeEl)}
|
|
402
|
+
onClick={() => setLocale(localeEl)}
|
|
404
403
|
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
405
404
|
>
|
|
406
405
|
<span>
|
|
407
406
|
{/* लोकल - उदाहरण के लिए FR */}
|
|
408
|
-
{
|
|
407
|
+
{localeEl}
|
|
409
408
|
</span>
|
|
410
409
|
<span>
|
|
411
410
|
{/* अपनी लोकल में भाषा - उदाहरण के लिए Français */}
|
|
412
|
-
{getLocaleName(
|
|
411
|
+
{getLocaleName(localeEl, locale)}
|
|
413
412
|
</span>
|
|
414
|
-
<span dir={getHTMLTextDir(
|
|
413
|
+
<span dir={getHTMLTextDir(localeEl)} lang={localeEl}>
|
|
415
414
|
{/* वर्तमान लोकल में भाषा - उदाहरण के लिए Francés जब वर्तमान लोकल Locales.SPANISH सेट हो */}
|
|
416
|
-
{getLocaleName(
|
|
415
|
+
{getLocaleName(localeEl)}
|
|
417
416
|
</span>
|
|
418
417
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
419
418
|
{/* अंग्रेज़ी में भाषा - उदाहरण के लिए French */}
|
|
420
|
-
{getLocaleName(
|
|
419
|
+
{getLocaleName(localeEl, Locales.ENGLISH)}
|
|
421
420
|
</span>
|
|
422
421
|
</LocalizedLink>
|
|
423
422
|
</li>
|
|
@@ -452,7 +451,7 @@ export const useI18nHTMLAttributes = () => {
|
|
|
452
451
|
फिर इसे अपने रूट कॉम्पोनेंट में उपयोग करें:
|
|
453
452
|
|
|
454
453
|
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
455
|
-
import { createFileRoute,
|
|
454
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
456
455
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
457
456
|
|
|
458
457
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // हुक को इम्पोर्ट करें
|
|
@@ -492,18 +491,44 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
|
|
492
491
|
|
|
493
492
|
export default defineConfig({
|
|
494
493
|
plugins: [
|
|
494
|
+
intlayerProxy(), // यदि आप Nitro का उपयोग करते हैं, तो प्रॉक्सी को सर्वर से पहले रखा जाना चाहिए
|
|
495
495
|
tailwindcss(),
|
|
496
496
|
reactRouter(),
|
|
497
497
|
tsconfigPaths(),
|
|
498
498
|
intlayer(),
|
|
499
|
-
intlayerProxy(),
|
|
500
499
|
],
|
|
501
500
|
});
|
|
502
501
|
```
|
|
503
502
|
|
|
504
503
|
---
|
|
505
504
|
|
|
506
|
-
### चरण 12:
|
|
505
|
+
### चरण 12: अपने मेटाडेटा को अंतर्राष्ट्रीयकृत करें (वैकल्पिक)
|
|
506
|
+
|
|
507
|
+
आप अपने एप्लिकेशन में अपनी सामग्री शब्दकोशों तक पहुंचने के लिए `getIntlayer` हुक का भी उपयोग कर सकते हैं:
|
|
508
|
+
|
|
509
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
510
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
511
|
+
import { getIntlayer } from "intlayer";
|
|
512
|
+
|
|
513
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
514
|
+
component: RouteComponent,
|
|
515
|
+
head: ({ params }) => {
|
|
516
|
+
const { locale } = params;
|
|
517
|
+
const metaContent = getIntlayer("page-metadata", locale);
|
|
518
|
+
|
|
519
|
+
return {
|
|
520
|
+
meta: [
|
|
521
|
+
{ title: metaContent.title },
|
|
522
|
+
{ content: metaContent.description, name: "description" },
|
|
523
|
+
],
|
|
524
|
+
};
|
|
525
|
+
},
|
|
526
|
+
});
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
### चरण 13: टाइपस्क्रिप्ट कॉन्फ़िगर करें (वैकल्पिक)
|
|
507
532
|
|
|
508
533
|
Intlayer टाइपस्क्रिप्ट के लाभ प्राप्त करने और आपके कोडबेस को मजबूत बनाने के लिए मॉड्यूल ऑगमेंटेशन का उपयोग करता है।
|
|
509
534
|
|
|
@@ -521,32 +546,6 @@ Intlayer टाइपस्क्रिप्ट के लाभ प्रा
|
|
|
521
546
|
|
|
522
547
|
---
|
|
523
548
|
|
|
524
|
-
### चरण 13: Nitro को अनुकूलित करें (वैकल्पिक)
|
|
525
|
-
|
|
526
|
-
यदि आप अपने उत्पादन आउटपुट के लिए Nitro का उपयोग कर रहे हैं, तो nitro आउटपुट डायरेक्टरी में `.intlayer` डायरेक्टरी को शामिल नहीं करेगा। आपको इसे मैन्युअल रूप से कॉपी करना होगा।
|
|
527
|
-
|
|
528
|
-
बिल्ड स्क्रिप्ट का उपयोग करते हुए उदाहरण:
|
|
529
|
-
|
|
530
|
-
```json5 fileName="package.json"
|
|
531
|
-
{
|
|
532
|
-
"scripts": {
|
|
533
|
-
"dev": "vite dev --port 3000",
|
|
534
|
-
"build": "vite build && cpr .intlayer .output/.intlayer", // .intlayer फ़ोल्डर कॉपी करें
|
|
535
|
-
"serve": "vite preview",
|
|
536
|
-
},
|
|
537
|
-
}
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
> cpr का उपयोग कमांड को Windows पर काम करने के लिए अनुकूलित करने के लिए किया जाता है।
|
|
541
|
-
> इस कमांड का उपयोग करने के लिए आपको `cpr` उपयोगिता इंस्टॉल करनी होगी।
|
|
542
|
-
>
|
|
543
|
-
> - `npm install --save-dev cpr`
|
|
544
|
-
> - `yarn add --dev cpr`
|
|
545
|
-
> - `pnpm add --save-dev cpr`
|
|
546
|
-
> - `bun add --save-dev cpr`
|
|
547
|
-
|
|
548
|
-
---
|
|
549
|
-
|
|
550
549
|
### गिट कॉन्फ़िगरेशन
|
|
551
550
|
|
|
552
551
|
यह अनुशंसित है कि Intlayer द्वारा जनरेट की गई फाइलों को अनदेखा किया जाए। इससे आप उन्हें अपनी गिट रिपॉजिटरी में कमिट करने से बच सकते हैं।
|
|
@@ -145,7 +145,7 @@ Atur layout root Anda dan layout khusus locale:
|
|
|
145
145
|
#### Layout Root
|
|
146
146
|
|
|
147
147
|
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
148
|
-
import { createFileRoute,
|
|
148
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
149
149
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
150
150
|
|
|
151
151
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -392,16 +392,16 @@ import {
|
|
|
392
392
|
getLocaleName,
|
|
393
393
|
getPathWithoutLocale,
|
|
394
394
|
getPrefix,
|
|
395
|
+
Locales,
|
|
395
396
|
} from "intlayer";
|
|
396
|
-
import {
|
|
397
|
+
import { useLocale } from "react-intlayer";
|
|
397
398
|
|
|
398
399
|
import { LocalizedLink, To } from "./localized-link";
|
|
399
400
|
|
|
400
401
|
export const LocaleSwitcher: FC = () => {
|
|
401
|
-
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
402
402
|
const { pathname } = useLocation();
|
|
403
403
|
|
|
404
|
-
const { availableLocales, locale } = useLocale();
|
|
404
|
+
const { availableLocales, locale, setLocale } = useLocale();
|
|
405
405
|
|
|
406
406
|
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
407
407
|
|
|
@@ -411,25 +411,24 @@ export const LocaleSwitcher: FC = () => {
|
|
|
411
411
|
<li key={localeEl}>
|
|
412
412
|
<LocalizedLink
|
|
413
413
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
414
|
-
|
|
415
|
-
onClick={() => setLocaleInStorage(localeEl)}
|
|
414
|
+
onClick={() => setLocale(localeEl)}
|
|
416
415
|
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
417
416
|
>
|
|
418
417
|
<span>
|
|
419
418
|
{/* Locale - misalnya FR */}
|
|
420
|
-
{
|
|
419
|
+
{localeEl}
|
|
421
420
|
</span>
|
|
422
421
|
<span>
|
|
423
422
|
{/* Bahasa dalam Locale-nya sendiri - misalnya Français */}
|
|
424
|
-
{getLocaleName(
|
|
423
|
+
{getLocaleName(localeEl, locale)}
|
|
425
424
|
</span>
|
|
426
|
-
<span dir={getHTMLTextDir(
|
|
425
|
+
<span dir={getHTMLTextDir(localeEl)} lang={localeEl}>
|
|
427
426
|
{/* Bahasa dalam Locale saat ini - misalnya Francés dengan locale saat ini disetel ke Locales.SPANISH */}
|
|
428
|
-
{getLocaleName(
|
|
427
|
+
{getLocaleName(localeEl)}
|
|
429
428
|
</span>
|
|
430
429
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
431
430
|
{/* Bahasa dalam bahasa Inggris - misalnya French */}
|
|
432
|
-
{getLocaleName(
|
|
431
|
+
{getLocaleName(localeEl, Locales.ENGLISH)}
|
|
433
432
|
</span>
|
|
434
433
|
</LocalizedLink>
|
|
435
434
|
</li>
|
|
@@ -464,7 +463,7 @@ export const useI18nHTMLAttributes = () => {
|
|
|
464
463
|
Kemudian gunakan di komponen root Anda:
|
|
465
464
|
|
|
466
465
|
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
467
|
-
import { createFileRoute,
|
|
466
|
+
import { createFileRoute, Outlet } from "@tanstack/react-router";
|
|
468
467
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
469
468
|
|
|
470
469
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // impor hook
|
|
@@ -504,18 +503,44 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
|
|
504
503
|
|
|
505
504
|
export default defineConfig({
|
|
506
505
|
plugins: [
|
|
506
|
+
intlayerProxy(), // Proxy harus ditempatkan sebelum server jika Anda menggunakan Nitro
|
|
507
507
|
tailwindcss(),
|
|
508
508
|
reactRouter(),
|
|
509
509
|
tsconfigPaths(),
|
|
510
510
|
intlayer(),
|
|
511
|
-
intlayerProxy(),
|
|
512
511
|
],
|
|
513
512
|
});
|
|
514
513
|
```
|
|
515
514
|
|
|
516
515
|
---
|
|
517
516
|
|
|
518
|
-
### Langkah 12:
|
|
517
|
+
### Langkah 12: Internasionalisasi Metadata Anda (Opsional)
|
|
518
|
+
|
|
519
|
+
Anda juga dapat menggunakan hook `getIntlayer` untuk mengakses kamus konten Anda di seluruh aplikasi:
|
|
520
|
+
|
|
521
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
522
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
523
|
+
import { getIntlayer } from "intlayer";
|
|
524
|
+
|
|
525
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
526
|
+
component: RouteComponent,
|
|
527
|
+
head: ({ params }) => {
|
|
528
|
+
const { locale } = params;
|
|
529
|
+
const metaContent = getIntlayer("page-metadata", locale);
|
|
530
|
+
|
|
531
|
+
return {
|
|
532
|
+
meta: [
|
|
533
|
+
{ title: metaContent.title },
|
|
534
|
+
{ content: metaContent.description, name: "description" },
|
|
535
|
+
],
|
|
536
|
+
};
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
### Langkah 13: Konfigurasi TypeScript (Opsional)
|
|
519
544
|
|
|
520
545
|
Intlayer menggunakan module augmentation untuk mendapatkan manfaat dari TypeScript dan membuat codebase Anda lebih kuat.
|
|
521
546
|
|
|
@@ -533,32 +558,6 @@ Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dihasilkan secara oto
|
|
|
533
558
|
|
|
534
559
|
---
|
|
535
560
|
|
|
536
|
-
### Langkah 13: Menyesuaikan Nitro (Opsional)
|
|
537
|
-
|
|
538
|
-
Jika Anda menggunakan Nitro untuk output produksi Anda, nitro tidak akan menyertakan direktori `.intlayer` dalam direktori output. Anda perlu menyalinnya secara manual.
|
|
539
|
-
|
|
540
|
-
Contoh menggunakan script build:
|
|
541
|
-
|
|
542
|
-
```json5 fileName="package.json"
|
|
543
|
-
{
|
|
544
|
-
"scripts": {
|
|
545
|
-
"dev": "vite dev --port 3000",
|
|
546
|
-
"build": "vite build && cpr -r .intlayer .output/.intlayer", // Salin folder .intlayer
|
|
547
|
-
"serve": "vite preview",
|
|
548
|
-
},
|
|
549
|
-
}
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
> cpr digunakan untuk mengadaptasi perintah agar berfungsi di Windows.
|
|
553
|
-
> Anda harus menginstal utilitas `cpr` untuk menggunakan perintah ini.
|
|
554
|
-
>
|
|
555
|
-
> - `npm install --save-dev cpr`
|
|
556
|
-
> - `yarn add --dev cpr`
|
|
557
|
-
> - `pnpm add --save-dev cpr`
|
|
558
|
-
> - `bun add --save-dev cpr`
|
|
559
|
-
|
|
560
|
-
---
|
|
561
|
-
|
|
562
561
|
### Konfigurasi Git
|
|
563
562
|
|
|
564
563
|
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari meng-commit file tersebut ke repositori Git Anda.
|