@intlayer/docs 6.1.6-canary.0 → 6.1.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/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_angular.md +2 -2
- package/docs/ar/intlayer_with_astro.md +246 -0
- package/docs/ar/intlayer_with_create_react_app.md +3 -2
- package/docs/ar/intlayer_with_express.md +2 -2
- package/docs/ar/intlayer_with_nestjs.md +2 -2
- package/docs/ar/intlayer_with_nextjs_14.md +2 -2
- package/docs/ar/intlayer_with_nextjs_15.md +2 -2
- package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ar/intlayer_with_nuxt.md +2 -2
- package/docs/ar/intlayer_with_react_native+expo.md +11 -20
- package/docs/ar/intlayer_with_react_router_v7.md +195 -241
- package/docs/ar/intlayer_with_tanstack.md +198 -272
- package/docs/ar/intlayer_with_vite+preact.md +9 -9
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/de/intlayer_with_angular.md +2 -2
- package/docs/de/intlayer_with_astro.md +246 -0
- package/docs/de/intlayer_with_create_react_app.md +2 -2
- package/docs/de/intlayer_with_express.md +2 -2
- package/docs/de/intlayer_with_nestjs.md +2 -2
- package/docs/de/intlayer_with_nextjs_14.md +2 -2
- package/docs/de/intlayer_with_nextjs_15.md +2 -2
- package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/de/intlayer_with_nuxt.md +2 -2
- package/docs/de/intlayer_with_react_native+expo.md +11 -20
- package/docs/de/intlayer_with_react_router_v7.md +193 -242
- package/docs/de/intlayer_with_tanstack.md +194 -266
- package/docs/de/intlayer_with_vite+preact.md +9 -9
- package/docs/de/intlayer_with_vite+react.md +9 -9
- package/docs/de/intlayer_with_vite+vue.md +11 -11
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +1 -1
- package/docs/en/intlayer_cli.md +1 -1
- package/docs/en/intlayer_with_angular.md +4 -4
- package/docs/en/intlayer_with_astro.md +246 -0
- package/docs/en/intlayer_with_create_react_app.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +13 -4
- package/docs/en/intlayer_with_nextjs_15.md +13 -4
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/en/intlayer_with_nuxt.md +4 -4
- package/docs/en/intlayer_with_react_native+expo.md +46 -24
- package/docs/en/intlayer_with_react_router_v7.md +164 -211
- package/docs/en/intlayer_with_tanstack.md +166 -241
- package/docs/en/intlayer_with_vite+preact.md +12 -12
- package/docs/en/intlayer_with_vite+react.md +12 -12
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +12 -12
- package/docs/en/introduction.md +1 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/react-intlayer/useI18n.md +1 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/releases/v6.md +1 -0
- package/docs/en/roadmap.md +1 -1
- package/docs/en-GB/intlayer_with_angular.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +246 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
- package/docs/en-GB/intlayer_with_express.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
- package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/en-GB/intlayer_with_nuxt.md +2 -2
- package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
- package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
- package/docs/en-GB/intlayer_with_tanstack.md +174 -248
- package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
- package/docs/en-GB/intlayer_with_vite+react.md +9 -9
- package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
- package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/es/intlayer_with_angular.md +2 -2
- package/docs/es/intlayer_with_astro.md +246 -0
- package/docs/es/intlayer_with_create_react_app.md +3 -2
- package/docs/es/intlayer_with_express.md +2 -2
- package/docs/es/intlayer_with_nextjs_14.md +2 -2
- package/docs/es/intlayer_with_nextjs_15.md +2 -2
- package/docs/es/intlayer_with_react_native+expo.md +11 -20
- package/docs/es/intlayer_with_react_router_v7.md +188 -232
- package/docs/es/intlayer_with_tanstack.md +203 -273
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/intlayer_with_angular.md +2 -2
- package/docs/fr/intlayer_with_astro.md +246 -0
- package/docs/fr/intlayer_with_create_react_app.md +3 -2
- package/docs/fr/intlayer_with_express.md +2 -2
- package/docs/fr/intlayer_with_nestjs.md +2 -2
- package/docs/fr/intlayer_with_nextjs_14.md +2 -2
- package/docs/fr/intlayer_with_react_native+expo.md +11 -20
- package/docs/fr/intlayer_with_react_router_v7.md +188 -248
- package/docs/fr/intlayer_with_tanstack.md +192 -265
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/intlayer_cli.md +1 -4
- package/docs/hi/intlayer_with_angular.md +2 -2
- package/docs/hi/intlayer_with_astro.md +246 -0
- package/docs/hi/intlayer_with_create_react_app.md +2 -2
- package/docs/hi/intlayer_with_express.md +2 -2
- package/docs/hi/intlayer_with_nestjs.md +2 -2
- package/docs/hi/intlayer_with_nextjs_14.md +2 -2
- package/docs/hi/intlayer_with_nextjs_15.md +2 -2
- package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/hi/intlayer_with_nuxt.md +2 -2
- package/docs/hi/intlayer_with_react_native+expo.md +11 -20
- package/docs/hi/intlayer_with_react_router_v7.md +199 -243
- package/docs/hi/intlayer_with_tanstack.md +210 -285
- package/docs/hi/intlayer_with_vite+preact.md +9 -9
- package/docs/hi/intlayer_with_vite+react.md +9 -9
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +11 -11
- package/docs/it/intlayer_with_angular.md +2 -2
- package/docs/it/intlayer_with_astro.md +246 -0
- package/docs/it/intlayer_with_create_react_app.md +3 -2
- package/docs/it/intlayer_with_express.md +2 -2
- package/docs/it/intlayer_with_nestjs.md +2 -2
- package/docs/it/intlayer_with_nextjs_14.md +2 -2
- package/docs/it/intlayer_with_nextjs_15.md +2 -2
- package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/it/intlayer_with_nuxt.md +2 -2
- package/docs/it/intlayer_with_react_native+expo.md +11 -21
- package/docs/it/intlayer_with_react_router_v7.md +195 -242
- package/docs/it/intlayer_with_tanstack.md +203 -267
- package/docs/it/intlayer_with_vite+preact.md +9 -9
- package/docs/it/intlayer_with_vite+react.md +13 -11
- package/docs/it/intlayer_with_vite+vue.md +11 -11
- package/docs/ja/intlayer_with_angular.md +2 -2
- package/docs/ja/intlayer_with_astro.md +246 -0
- package/docs/ja/intlayer_with_create_react_app.md +3 -2
- package/docs/ja/intlayer_with_express.md +2 -2
- package/docs/ja/intlayer_with_nestjs.md +2 -2
- package/docs/ja/intlayer_with_nextjs_14.md +2 -2
- package/docs/ja/intlayer_with_nextjs_15.md +2 -2
- package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ja/intlayer_with_nuxt.md +2 -2
- package/docs/ja/intlayer_with_react_native+expo.md +18 -29
- package/docs/ja/intlayer_with_react_router_v7.md +204 -250
- package/docs/ja/intlayer_with_tanstack.md +218 -286
- package/docs/ja/intlayer_with_vite+preact.md +9 -9
- package/docs/ja/intlayer_with_vite+react.md +11 -11
- package/docs/ja/intlayer_with_vite+vue.md +11 -11
- package/docs/ko/intlayer_with_angular.md +2 -2
- package/docs/ko/intlayer_with_astro.md +246 -0
- package/docs/ko/intlayer_with_create_react_app.md +3 -2
- package/docs/ko/intlayer_with_express.md +2 -2
- package/docs/ko/intlayer_with_nestjs.md +2 -2
- package/docs/ko/intlayer_with_nextjs_14.md +2 -2
- package/docs/ko/intlayer_with_nextjs_15.md +2 -2
- package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ko/intlayer_with_nuxt.md +2 -2
- package/docs/ko/intlayer_with_react_native+expo.md +19 -28
- package/docs/ko/intlayer_with_react_router_v7.md +190 -244
- package/docs/ko/intlayer_with_tanstack.md +200 -270
- package/docs/ko/intlayer_with_vite+preact.md +9 -9
- package/docs/ko/intlayer_with_vite+react.md +9 -9
- package/docs/ko/intlayer_with_vite+vue.md +11 -11
- package/docs/pt/intlayer_with_angular.md +2 -2
- package/docs/pt/intlayer_with_astro.md +246 -0
- package/docs/pt/intlayer_with_create_react_app.md +3 -2
- package/docs/pt/intlayer_with_express.md +2 -2
- package/docs/pt/intlayer_with_nestjs.md +2 -2
- package/docs/pt/intlayer_with_nextjs_14.md +2 -2
- package/docs/pt/intlayer_with_nextjs_15.md +2 -2
- package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/pt/intlayer_with_nuxt.md +2 -2
- package/docs/pt/intlayer_with_react_native+expo.md +11 -20
- package/docs/pt/intlayer_with_react_router_v7.md +7 -13
- package/docs/pt/intlayer_with_tanstack.md +183 -258
- package/docs/pt/intlayer_with_vite+preact.md +9 -9
- package/docs/pt/intlayer_with_vite+react.md +9 -9
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/intlayer_with_angular.md +2 -2
- package/docs/ru/intlayer_with_astro.md +246 -0
- package/docs/ru/intlayer_with_create_react_app.md +3 -2
- package/docs/ru/intlayer_with_express.md +2 -2
- package/docs/ru/intlayer_with_nestjs.md +2 -2
- package/docs/ru/intlayer_with_nextjs_14.md +2 -2
- package/docs/ru/intlayer_with_nextjs_15.md +2 -2
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +2 -2
- package/docs/ru/intlayer_with_react_native+expo.md +11 -20
- package/docs/ru/intlayer_with_react_router_v7.md +192 -238
- package/docs/ru/intlayer_with_tanstack.md +197 -269
- package/docs/ru/intlayer_with_vite+preact.md +9 -9
- package/docs/ru/intlayer_with_vite+react.md +9 -9
- package/docs/ru/intlayer_with_vite+vue.md +11 -11
- package/docs/tr/how_works_intlayer.md +1 -1
- package/docs/tr/index.md +1 -1
- package/docs/tr/intlayer_cli.md +1 -1
- package/docs/tr/intlayer_with_angular.md +4 -4
- package/docs/tr/intlayer_with_astro.md +246 -0
- package/docs/tr/intlayer_with_create_react_app.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +2 -2
- package/docs/tr/intlayer_with_nextjs_14.md +2 -2
- package/docs/tr/intlayer_with_nextjs_15.md +4 -4
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/tr/intlayer_with_nuxt.md +4 -4
- package/docs/tr/intlayer_with_react_native+expo.md +12 -21
- package/docs/tr/intlayer_with_react_router_v7.md +222 -267
- package/docs/tr/intlayer_with_tanstack.md +400 -303
- package/docs/tr/intlayer_with_vite+preact.md +12 -12
- package/docs/tr/intlayer_with_vite+react.md +12 -12
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +12 -12
- package/docs/tr/introduction.md +1 -1
- package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
- package/docs/tr/roadmap.md +1 -1
- package/docs/zh/intlayer_with_angular.md +2 -2
- package/docs/zh/intlayer_with_astro.md +246 -0
- package/docs/zh/intlayer_with_create_react_app.md +3 -2
- package/docs/zh/intlayer_with_express.md +2 -2
- package/docs/zh/intlayer_with_nestjs.md +2 -2
- package/docs/zh/intlayer_with_nextjs_14.md +2 -2
- package/docs/zh/intlayer_with_nextjs_15.md +2 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/zh/intlayer_with_nuxt.md +2 -2
- package/docs/zh/intlayer_with_react_native+expo.md +19 -28
- package/docs/zh/intlayer_with_react_router_v7.md +200 -248
- package/docs/zh/intlayer_with_tanstack.md +208 -283
- package/docs/zh/intlayer_with_vite+preact.md +9 -9
- package/docs/zh/intlayer_with_vite+react.md +9 -9
- package/docs/zh/intlayer_with_vite+vue.md +9 -9
- package/package.json +11 -11
- package/src/generated/docs.entry.ts +16 -0
|
@@ -1,367 +1,423 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt: 2025-09-
|
|
3
|
-
updatedAt: 2025-09-
|
|
4
|
-
title:
|
|
5
|
-
description: Intlayer kullanarak
|
|
2
|
+
createdAt: 2025-09-09
|
|
3
|
+
updatedAt: 2025-09-09
|
|
4
|
+
title: Tanstack Start'ta Intlayer ile Başlarken
|
|
5
|
+
description: Tanstack Start uygulamanıza Intlayer kullanarak uluslararasılaştırma (i18n) nasıl eklenir öğrenin. Uygulamanızı yerel dil yönlendirmesi ile çok dilli hale getirmek için bu kapsamlı rehberi takip edin.
|
|
6
6
|
keywords:
|
|
7
7
|
- Uluslararasılaştırma
|
|
8
8
|
- Dokümantasyon
|
|
9
9
|
- Intlayer
|
|
10
|
-
-
|
|
11
|
-
- TanStack Router
|
|
10
|
+
- Tanstack Start
|
|
12
11
|
- React
|
|
13
12
|
- i18n
|
|
14
|
-
-
|
|
13
|
+
- TypeScript
|
|
14
|
+
- Yerel Dil Yönlendirmesi
|
|
15
15
|
slugs:
|
|
16
16
|
- doc
|
|
17
17
|
- environment
|
|
18
|
-
- vite-and-react
|
|
19
18
|
- tanstack-start
|
|
20
|
-
applicationTemplate: https://github.com/
|
|
21
|
-
author: AydinTheFirst
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
|
|
22
20
|
---
|
|
23
21
|
|
|
24
|
-
# Intlayer ve
|
|
22
|
+
# Intlayer ve Tanstack Start ile Uluslararasılaştırmaya (i18n) Başlarken
|
|
23
|
+
|
|
24
|
+
Bu rehber, Tanstack Start projelerinde yerel dil yönlendirmesi, TypeScript desteği ve modern geliştirme uygulamalarıyla sorunsuz uluslararasılaştırma için **Intlayer**'ın nasıl entegre edileceğini göstermektedir.
|
|
25
25
|
|
|
26
26
|
## Intlayer Nedir?
|
|
27
27
|
|
|
28
|
-
**Intlayer**,
|
|
28
|
+
**Intlayer**, modern web uygulamalarında çok dilli desteği basitleştirmek için tasarlanmış yenilikçi, açık kaynaklı bir uluslararasılaştırma (i18n) kütüphanesidir.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
- **Dinamik meta veriler ve rotalar** (SEO hazır).
|
|
32
|
-
- **Çalışma zamanı yerel ayar anahtarlaması** (ve yerel ayarları algılamak/kalıcı hale getirmek için yardımcılar).
|
|
33
|
-
- **Yapı zamanı dönüşümleri + dev DX için Vite eklentisi**.
|
|
30
|
+
Intlayer ile şunları yapabilirsiniz:
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
- **Bileşen seviyesinde bildirisel sözlükler kullanarak çevirileri kolayca yönetin.**
|
|
33
|
+
- **Meta verileri, yönlendirmeleri ve içeriği dinamik olarak yerelleştirin.**
|
|
34
|
+
- **Otomatik oluşturulan tiplerle TypeScript desteğini sağlayarak otomatik tamamlama ve hata tespitini geliştirin.**
|
|
35
|
+
- **Dinamik yerel dil algılama ve değiştirme gibi gelişmiş özelliklerden faydalanın.**
|
|
36
|
+
- **Tanstack Start'ın dosya tabanlı yönlendirme sistemi ile yerel dil farkındalıklı yönlendirmeyi etkinleştirin.**
|
|
36
37
|
|
|
37
38
|
---
|
|
38
39
|
|
|
39
|
-
## Adım
|
|
40
|
+
## Tanstack Start Uygulamasında Intlayer Kurulumu için Adım Adım Rehber
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
# npm
|
|
43
|
-
npm i intlayer react-intlayer
|
|
44
|
-
npm i -D vite-intlayer
|
|
42
|
+
### Adım 1: Proje Oluşturma
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
TanStack Start web sitesindeki [Yeni proje başlatma](https://tanstack.com/start/latest/docs/framework/react/quick-start) rehberini takip ederek yeni bir TanStack Start projesi oluşturun.
|
|
45
|
+
|
|
46
|
+
### Adım 2: Intlayer Paketlerini Yükleyin
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
Tercih ettiğiniz paket yöneticisini kullanarak gerekli paketleri yükleyin:
|
|
49
|
+
|
|
50
|
+
```bash packageManager="npm"
|
|
51
|
+
npm install intlayer react-intlayer
|
|
52
|
+
npm install vite-intlayer --save-dev
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
```bash packageManager="pnpm"
|
|
56
|
+
pnpm add intlayer react-intlayer
|
|
57
|
+
pnpm add vite-intlayer --save-dev
|
|
58
|
+
```
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
- **intlayer**
|
|
61
|
+
|
|
62
|
+
- **intlayer**
|
|
63
|
+
|
|
64
|
+
Yapılandırma yönetimi, çeviri, [içerik bildirimi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/get_started.md), dönüştürme ve [CLI komutları](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_cli.md) için uluslararasılaştırma araçları sağlayan temel paket.
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
- **react-intlayer**
|
|
67
|
+
Intlayer'ı React uygulamasıyla entegre eden paket. React uluslararasılaştırması için bağlam sağlayıcıları ve kancalar sunar.
|
|
62
68
|
|
|
63
|
-
|
|
69
|
+
- **vite-intlayer**
|
|
70
|
+
Intlayer'ı [Vite paketleyicisi](https://vite.dev/guide/why.html#why-bundle-for-production) ile entegre etmek için Vite eklentisini içerir; ayrıca kullanıcının tercih ettiği yereli algılayan, çerezleri yöneten ve URL yönlendirmesini ele alan ara yazılımı da kapsar.
|
|
64
71
|
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
### Adım 3: Projenizin Yapılandırılması
|
|
73
|
+
|
|
74
|
+
Uygulamanızın dillerini yapılandırmak için bir yapılandırma dosyası oluşturun:
|
|
75
|
+
|
|
76
|
+
```typescript fileName="intlayer.config.ts"
|
|
77
|
+
import type { IntlayerConfig } from "intlayer";
|
|
78
|
+
|
|
79
|
+
import { Locales } from "intlayer";
|
|
67
80
|
|
|
68
81
|
const config: IntlayerConfig = {
|
|
69
82
|
internationalization: {
|
|
70
|
-
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
71
83
|
defaultLocale: Locales.ENGLISH,
|
|
84
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
72
85
|
},
|
|
73
|
-
// Ayrıca ayarlayabilirsiniz: contentDir, contentFileExtensions, middleware seçenekleri, vb.
|
|
74
86
|
};
|
|
75
87
|
|
|
76
88
|
export default config;
|
|
77
89
|
```
|
|
78
90
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
> Tam yapılandırma referansı: Intlayer'ın yapılandırma dokümantasyonuna bakın.
|
|
82
|
-
|
|
83
|
-
---
|
|
91
|
+
> Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'ler, ara yazılım yönlendirmesi, çerez isimleri, içerik bildirimlerinizin konumu ve uzantısı, Intlayer günlüklerini konsolda devre dışı bırakma ve daha fazlasını ayarlayabilirsiniz. Mevcut parametrelerin tam listesi için [yapılandırma dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md) bakınız.
|
|
84
92
|
|
|
85
|
-
|
|
93
|
+
### Adım 4: Intlayer'ı Vite Yapılandırmanıza Entegre Edin
|
|
86
94
|
|
|
87
|
-
|
|
95
|
+
Yapılandırmanıza intlayer eklentisini ekleyin:
|
|
88
96
|
|
|
89
|
-
```
|
|
97
|
+
```typescript fileName="vite.config.ts"
|
|
98
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
90
99
|
import { defineConfig } from "vite";
|
|
91
|
-
import
|
|
92
|
-
import
|
|
100
|
+
import { intlayer } from "vite-intlayer";
|
|
101
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
93
102
|
|
|
94
103
|
export default defineConfig({
|
|
95
|
-
plugins: [
|
|
96
|
-
react(),
|
|
97
|
-
intlayer(),
|
|
98
|
-
// Yerel ayar algılama, çerezler ve yönlendirmeler için isteğe bağlı ancak önerilen:
|
|
99
|
-
intlayerMiddlewarePlugin(),
|
|
100
|
-
],
|
|
104
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
101
105
|
});
|
|
102
106
|
```
|
|
103
107
|
|
|
104
|
-
>
|
|
108
|
+
> `intlayer()` Vite eklentisi, Intlayer'ı Vite ile entegre etmek için kullanılır. İçerik bildirim dosyalarının oluşturulmasını sağlar ve geliştirme modunda bunları izler. Vite uygulaması içinde Intlayer ortam değişkenlerini tanımlar. Ayrıca performansı optimize etmek için takma adlar sağlar.
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
### Adım 5: Düzen Bileşenleri Oluşturun
|
|
111
|
+
|
|
112
|
+
Kök düzeninizi ve yerel dile özgü düzenlerinizi ayarlayın:
|
|
113
|
+
|
|
114
|
+
#### Kök Düzen
|
|
115
|
+
|
|
116
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
117
|
+
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
118
|
+
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
119
|
+
|
|
120
|
+
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
121
|
+
|
|
122
|
+
export const Route = createFileRoute("/{-$locale}")({
|
|
123
|
+
component: LayoutComponent,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
function LayoutComponent() {
|
|
127
|
+
const { defaultLocale } = useLocale();
|
|
128
|
+
const { locale } = Route.useParams();
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<IntlayerProvider locale={defaultLocale}>
|
|
132
|
+
<Outlet />
|
|
133
|
+
</IntlayerProvider>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
107
137
|
|
|
108
|
-
|
|
138
|
+
### Adım 6: İçeriğinizi Bildirin
|
|
109
139
|
|
|
110
|
-
|
|
140
|
+
Çevirileri depolamak için içerik bildirimlerinizi oluşturun ve yönetin:
|
|
111
141
|
|
|
112
|
-
```tsx fileName="src/
|
|
113
|
-
import {
|
|
114
|
-
|
|
142
|
+
```tsx fileName="src/contents/page.content.ts"
|
|
143
|
+
import type { Dictionary } from "intlayer";
|
|
144
|
+
|
|
145
|
+
import { t } from "intlayer";
|
|
115
146
|
|
|
116
147
|
const appContent = {
|
|
117
|
-
key: "app",
|
|
118
148
|
content: {
|
|
119
|
-
|
|
120
|
-
|
|
149
|
+
links: {
|
|
150
|
+
about: t({
|
|
151
|
+
tr: "Hakkında",
|
|
152
|
+
en: "About",
|
|
153
|
+
es: "Acerca de",
|
|
154
|
+
fr: "À propos",
|
|
155
|
+
}),
|
|
156
|
+
home: t({
|
|
157
|
+
tr: "Ana Sayfa",
|
|
158
|
+
en: "Home",
|
|
159
|
+
es: "Inicio",
|
|
160
|
+
fr: "Accueil",
|
|
161
|
+
}),
|
|
162
|
+
},
|
|
163
|
+
meta: {
|
|
164
|
+
description: t({
|
|
165
|
+
tr: "Bu, Intlayer'ın TanStack Router ile kullanımına bir örnektir",
|
|
166
|
+
en: "This is an example of using Intlayer with TanStack Router",
|
|
167
|
+
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
168
|
+
fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
169
|
+
}),
|
|
170
|
+
},
|
|
121
171
|
title: t({
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
es: "
|
|
125
|
-
|
|
126
|
-
count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
|
|
127
|
-
edit: t<ReactNode>({
|
|
128
|
-
en: (
|
|
129
|
-
<>
|
|
130
|
-
Edit <code>src/routes/index.tsx</code> and save to test HMR
|
|
131
|
-
</>
|
|
132
|
-
),
|
|
133
|
-
fr: (
|
|
134
|
-
<>
|
|
135
|
-
Éditez <code>src/routes/index.tsx</code> et enregistrez pour tester
|
|
136
|
-
HMR
|
|
137
|
-
</>
|
|
138
|
-
),
|
|
139
|
-
es: (
|
|
140
|
-
<>
|
|
141
|
-
Edita <code>src/routes/index.tsx</code> y guarda para probar HMR
|
|
142
|
-
</>
|
|
143
|
-
),
|
|
144
|
-
}),
|
|
145
|
-
readTheDocs: t({
|
|
146
|
-
en: "Click the logos to learn more",
|
|
147
|
-
fr: "Cliquez sur les logos pour en savoir plus",
|
|
148
|
-
es: "Haz clic en los logotipos para saber más",
|
|
172
|
+
tr: "Intlayer + TanStack Router'a Hoş Geldiniz",
|
|
173
|
+
en: "Welcome to Intlayer + TanStack Router",
|
|
174
|
+
es: "Bienvenido a Intlayer + TanStack Router",
|
|
175
|
+
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
149
176
|
}),
|
|
150
177
|
},
|
|
178
|
+
key: "app",
|
|
151
179
|
} satisfies Dictionary;
|
|
152
180
|
|
|
153
181
|
export default appContent;
|
|
154
182
|
```
|
|
155
183
|
|
|
156
|
-
|
|
184
|
+
> İçerik bildirimleriniz, uygulamanızda herhangi bir yerde tanımlanabilir, yeter ki `contentDir` dizinine dahil edilsin (varsayılan olarak, `./app`). Ve içerik bildirim dosya uzantısıyla eşleşmelidir (varsayılan olarak, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
157
185
|
|
|
158
|
-
>
|
|
186
|
+
> Daha fazla ayrıntı için, [içerik bildirim dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/get_started.md) bakınız.
|
|
159
187
|
|
|
160
|
-
|
|
188
|
+
### Adım 7: Yerel Dili Algılayan Bileşenler ve Hook'lar Oluşturun
|
|
161
189
|
|
|
162
|
-
|
|
190
|
+
Yerel dil algılayan gezinme için bir `LocalizedLink` bileşeni oluşturun:
|
|
163
191
|
|
|
164
|
-
|
|
192
|
+
```tsx fileName="src/components/localized-link.tsx"
|
|
193
|
+
import type { FC } from "react";
|
|
165
194
|
|
|
166
|
-
|
|
167
|
-
import {
|
|
168
|
-
Outlet,
|
|
169
|
-
createRootRoute,
|
|
170
|
-
Link as RouterLink,
|
|
171
|
-
} from "@tanstack/react-router";
|
|
172
|
-
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
195
|
+
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
196
|
+
import { useLocale } from "react-intlayer";
|
|
173
197
|
|
|
174
|
-
|
|
175
|
-
// Üst düzeyde bir sözlük kullanma örneği:
|
|
176
|
-
const content = useIntlayer("app");
|
|
198
|
+
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
177
199
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
<RouterLink to="/about">About</RouterLink>
|
|
183
|
-
</nav>
|
|
184
|
-
<main className="p-6">
|
|
185
|
-
<h1>{content.title}</h1>
|
|
186
|
-
<Outlet />
|
|
187
|
-
</main>
|
|
188
|
-
</div>
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
export const Route = createRootRoute({
|
|
193
|
-
component: () => (
|
|
194
|
-
<IntlayerProvider>
|
|
195
|
-
<AppShell />
|
|
196
|
-
</IntlayerProvider>
|
|
197
|
-
),
|
|
198
|
-
});
|
|
199
|
-
```
|
|
200
|
+
// Ana yardımcı
|
|
201
|
+
export type RemoveLocaleParam<T> = T extends string
|
|
202
|
+
? RemoveLocaleFromString<T>
|
|
203
|
+
: T;
|
|
200
204
|
|
|
201
|
-
|
|
205
|
+
export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
|
|
202
206
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
import { useIntlayer } from "react-intlayer";
|
|
206
|
-
import reactLogo from "../assets/react.svg";
|
|
207
|
-
|
|
208
|
-
export const Route = createFileRoute("/")({
|
|
209
|
-
component: () => {
|
|
210
|
-
const content = useIntlayer("app");
|
|
211
|
-
return (
|
|
212
|
-
<>
|
|
213
|
-
<button>{content.count}0</button>
|
|
214
|
-
<p>{content.edit}</p>
|
|
215
|
-
<img
|
|
216
|
-
src={reactLogo}
|
|
217
|
-
alt={content.reactLogo.value}
|
|
218
|
-
width={48}
|
|
219
|
-
height={48}
|
|
220
|
-
/>
|
|
221
|
-
<p className="opacity-70">{content.readTheDocs}</p>
|
|
222
|
-
</>
|
|
223
|
-
);
|
|
224
|
-
},
|
|
225
|
-
});
|
|
226
|
-
```
|
|
207
|
+
type CollapseDoubleSlashes<S extends string> =
|
|
208
|
+
S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
|
|
227
209
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
> <img alt={c.reactLogo.value} />
|
|
232
|
-
> ```
|
|
210
|
+
type LocalizedLinkProps = {
|
|
211
|
+
to?: To;
|
|
212
|
+
} & Omit<LinkComponentProps, "to">;
|
|
233
213
|
|
|
234
|
-
|
|
214
|
+
// Yardımcılar
|
|
215
|
+
type RemoveAll<
|
|
216
|
+
S extends string,
|
|
217
|
+
Sub extends string,
|
|
218
|
+
> = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
|
|
235
219
|
|
|
236
|
-
|
|
220
|
+
type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
221
|
+
RemoveAll<S, typeof LOCALE_ROUTE>
|
|
222
|
+
>;
|
|
237
223
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
import { useLocale } from "react-intlayer";
|
|
224
|
+
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
225
|
+
const { locale } = useLocale();
|
|
241
226
|
|
|
242
|
-
export function LocaleSwitcher() {
|
|
243
|
-
const { setLocale } = useLocale();
|
|
244
227
|
return (
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
228
|
+
<Link
|
|
229
|
+
{...props}
|
|
230
|
+
params={{
|
|
231
|
+
locale,
|
|
232
|
+
...(typeof props?.params === "object" ? props?.params : {}),
|
|
233
|
+
}}
|
|
234
|
+
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
235
|
+
/>
|
|
250
236
|
);
|
|
251
|
-
}
|
|
237
|
+
};
|
|
252
238
|
```
|
|
253
239
|
|
|
254
|
-
|
|
240
|
+
Bu bileşenin iki amacı vardır:
|
|
255
241
|
|
|
256
|
-
|
|
242
|
+
- URL'den gereksiz `{-$locale}` önekini kaldırmak.
|
|
243
|
+
- Kullanıcının doğrudan yerelleştirilmiş rotaya yönlendirilmesini sağlamak için URL'ye locale parametresini enjekte etmek.
|
|
257
244
|
|
|
258
|
-
|
|
245
|
+
Daha sonra programatik gezinme için bir `useLocalizedNavigate` kancası oluşturabiliriz:
|
|
259
246
|
|
|
260
|
-
|
|
247
|
+
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
248
|
+
import { useLocale } from "react-intlayer";
|
|
249
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
250
|
+
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
251
|
+
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
261
252
|
|
|
262
|
-
|
|
253
|
+
export const useLocalizedNavigate = () => {
|
|
254
|
+
const navigate = useNavigate();
|
|
263
255
|
|
|
264
|
-
|
|
256
|
+
const { locale } = useLocale();
|
|
265
257
|
|
|
266
|
-
|
|
258
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
259
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
260
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
261
|
+
? "/"
|
|
262
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
263
|
+
? `/${Rest}`
|
|
264
|
+
: never;
|
|
265
|
+
|
|
266
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
267
|
+
|
|
268
|
+
interface LocalizedNavigate {
|
|
269
|
+
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
270
|
+
(
|
|
271
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
272
|
+
): ReturnType<typeof navigate>;
|
|
273
|
+
}
|
|
267
274
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
275
|
+
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
276
|
+
if (typeof args === "string") {
|
|
277
|
+
return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const { to, ...rest } = args;
|
|
281
|
+
|
|
282
|
+
const localedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
272
283
|
|
|
273
|
-
|
|
274
|
-
const router = useRouter();
|
|
275
|
-
const { locale, setLocale } = useLocale();
|
|
276
|
-
|
|
277
|
-
const change = async (next: Locales) => {
|
|
278
|
-
if (next === locale) return;
|
|
279
|
-
const nextPath = getLocalizedUrl(
|
|
280
|
-
window.location.pathname + window.location.search,
|
|
281
|
-
next
|
|
282
|
-
);
|
|
283
|
-
await router.navigate({ to: nextPath }); // geçmişi korur
|
|
284
|
-
setLocale(next);
|
|
284
|
+
return navigate({ to: localedTo, params: { locale, ...rest } as any });
|
|
285
285
|
};
|
|
286
286
|
|
|
287
|
+
return localizedNavigate;
|
|
288
|
+
};
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Adım 8: Sayfalarınızda Intlayer'ı Kullanın
|
|
292
|
+
|
|
293
|
+
Uygulamanız genelinde içerik sözlüklerinize erişin:
|
|
294
|
+
|
|
295
|
+
#### Yerelleştirilmiş Ana Sayfa
|
|
296
|
+
|
|
297
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
298
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
299
|
+
import { getIntlayer } from "intlayer";
|
|
300
|
+
import { useIntlayer } from "react-intlayer";
|
|
301
|
+
|
|
302
|
+
import LocaleSwitcher from "@/components/locale-switcher";
|
|
303
|
+
import { LocalizedLink } from "@/components/localized-link";
|
|
304
|
+
import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
|
|
305
|
+
|
|
306
|
+
export const Route = createFileRoute("/{-$locale}/")({
|
|
307
|
+
component: RouteComponent,
|
|
308
|
+
head: ({ params }) => {
|
|
309
|
+
const { locale } = params;
|
|
310
|
+
const metaContent = getIntlayer("app", locale);
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
meta: [
|
|
314
|
+
{ title: metaContent.title },
|
|
315
|
+
{ content: metaContent.meta.description, name: "description" },
|
|
316
|
+
],
|
|
317
|
+
};
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
function RouteComponent() {
|
|
322
|
+
const content = useIntlayer("app");
|
|
323
|
+
const navigate = useLocalizedNavigate();
|
|
324
|
+
|
|
287
325
|
return (
|
|
288
|
-
<div
|
|
289
|
-
<
|
|
290
|
-
|
|
291
|
-
|
|
326
|
+
<div>
|
|
327
|
+
<div>
|
|
328
|
+
{content.title}
|
|
329
|
+
<LocaleSwitcher />
|
|
330
|
+
<div>
|
|
331
|
+
<LocalizedLink to="/">{content.links.home}</LocalizedLink>
|
|
332
|
+
<LocalizedLink to="/about">{content.links.about}</LocalizedLink>
|
|
333
|
+
</div>
|
|
334
|
+
<div>
|
|
335
|
+
<button onClick={() => navigate({ to: "/" })}>
|
|
336
|
+
{content.links.home}
|
|
337
|
+
</button>
|
|
338
|
+
<button onClick={() => navigate({ to: "/about" })}>
|
|
339
|
+
{content.links.about}
|
|
340
|
+
</button>
|
|
341
|
+
</div>
|
|
342
|
+
</div>
|
|
292
343
|
</div>
|
|
293
344
|
);
|
|
294
345
|
}
|
|
295
346
|
```
|
|
296
347
|
|
|
297
|
-
|
|
348
|
+
> `useIntlayer` kancasını daha fazla öğrenmek için, [belgelere](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useIntlayer.md) bakınız.
|
|
298
349
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
```tsx fileName="src/
|
|
304
|
-
import {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
import
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
import
|
|
311
|
-
|
|
312
|
-
export const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
name: "viewport",
|
|
320
|
-
content: "width=device-width, initial-scale=1",
|
|
321
|
-
},
|
|
322
|
-
{
|
|
323
|
-
title: "TanStack Start Starter",
|
|
324
|
-
},
|
|
325
|
-
],
|
|
326
|
-
links: [
|
|
327
|
-
{
|
|
328
|
-
rel: "stylesheet",
|
|
329
|
-
href: appCss,
|
|
330
|
-
},
|
|
331
|
-
],
|
|
332
|
-
}),
|
|
333
|
-
|
|
334
|
-
shellComponent: RootDocument,
|
|
335
|
-
});
|
|
350
|
+
### Adım 9: Bir Dil Değiştirici (Locale Switcher) Bileşeni Oluşturun
|
|
351
|
+
|
|
352
|
+
Kullanıcıların dilleri değiştirmesine izin veren bir bileşen oluşturun:
|
|
353
|
+
|
|
354
|
+
```tsx fileName="src/components/locale-switcher.tsx"
|
|
355
|
+
import type { FC } from "react";
|
|
356
|
+
|
|
357
|
+
import { useLocation } from "@tanstack/react-router";
|
|
358
|
+
import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
|
|
359
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
360
|
+
|
|
361
|
+
import { LocalizedLink, To } from "./localized-link";
|
|
362
|
+
|
|
363
|
+
export const LocaleSwitcher: FC = () => {
|
|
364
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
365
|
+
const { pathname } = useLocation();
|
|
366
|
+
|
|
367
|
+
const { availableLocales, locale } = useLocale();
|
|
368
|
+
|
|
369
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
336
370
|
|
|
337
|
-
function RootDocument({ children }: { children: React.ReactNode }) {
|
|
338
371
|
return (
|
|
339
|
-
<
|
|
340
|
-
|
|
341
|
-
<
|
|
342
|
-
<
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
372
|
+
<ol>
|
|
373
|
+
{availableLocales.map((localeEl) => (
|
|
374
|
+
<li key={localeEl}>
|
|
375
|
+
<LocalizedLink
|
|
376
|
+
aria-current={localeEl === locale ? "sayfa" : undefined}
|
|
377
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
378
|
+
onClick={() => setLocaleCookie(localeEl)}
|
|
379
|
+
params={{ locale: localeEl }}
|
|
380
|
+
to={pathWithoutLocale as To}
|
|
381
|
+
>
|
|
382
|
+
<span>
|
|
383
|
+
{/* Dil Kodu - örn. FR */}
|
|
384
|
+
{localeItem}
|
|
385
|
+
</span>
|
|
386
|
+
<span>
|
|
387
|
+
{/* Dil kendi yerelinde - örn. Français */}
|
|
388
|
+
{getLocaleName(localeItem, locale)}
|
|
389
|
+
</span>
|
|
390
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
391
|
+
{/* Dil mevcut yerelde - örn. Francés, mevcut yerel Locales.SPANISH olarak ayarlanmış */}
|
|
392
|
+
{getLocaleName(localeItem)}
|
|
393
|
+
</span>
|
|
394
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
395
|
+
{/* Dil İngilizce olarak - örn. French */}
|
|
396
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
397
|
+
</span>
|
|
398
|
+
</LocalizedLink>
|
|
399
|
+
</li>
|
|
400
|
+
))}
|
|
401
|
+
</ol>
|
|
352
402
|
);
|
|
353
|
-
}
|
|
403
|
+
};
|
|
354
404
|
```
|
|
355
405
|
|
|
356
|
-
|
|
406
|
+
> `useLocale` hook'u hakkında daha fazla bilgi edinmek için [belgelere](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useLocale.md) bakınız.
|
|
357
407
|
|
|
358
|
-
|
|
408
|
+
### Adım 10: HTML Özniteliklerinin Yönetimini Ekleme (İsteğe Bağlı)
|
|
409
|
+
|
|
410
|
+
HTML lang ve dir özniteliklerini yönetmek için bir hook oluşturun:
|
|
411
|
+
|
|
412
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
413
|
+
// src/hooks/useI18nHTMLAttributes.tsx
|
|
414
|
+
import { getHTMLTextDir } from "intlayer";
|
|
359
415
|
import { useEffect } from "react";
|
|
360
416
|
import { useLocale } from "react-intlayer";
|
|
361
|
-
import { getHTMLTextDir } from "intlayer";
|
|
362
417
|
|
|
363
418
|
export const useI18nHTMLAttributes = () => {
|
|
364
419
|
const { locale } = useLocale();
|
|
420
|
+
|
|
365
421
|
useEffect(() => {
|
|
366
422
|
document.documentElement.lang = locale;
|
|
367
423
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
@@ -369,87 +425,128 @@ export const useI18nHTMLAttributes = () => {
|
|
|
369
425
|
};
|
|
370
426
|
```
|
|
371
427
|
|
|
372
|
-
|
|
428
|
+
Sonra bunu kök bileşeninizde kullanın:
|
|
373
429
|
|
|
374
|
-
|
|
430
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
431
|
+
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
432
|
+
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
375
433
|
|
|
376
|
-
|
|
434
|
+
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // hook'u içe aktar
|
|
377
435
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
forwardRef,
|
|
382
|
-
type AnchorHTMLAttributes,
|
|
383
|
-
type DetailedHTMLProps,
|
|
384
|
-
} from "react";
|
|
385
|
-
import { useLocale } from "react-intlayer";
|
|
436
|
+
export const Route = createFileRoute("/{-$locale}")({
|
|
437
|
+
component: LayoutComponent,
|
|
438
|
+
});
|
|
386
439
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
|
|
400
|
-
return (
|
|
401
|
-
<a href={hrefI18n} ref={ref} {...props}>
|
|
402
|
-
{children}
|
|
403
|
-
</a>
|
|
404
|
-
);
|
|
405
|
-
}
|
|
406
|
-
);
|
|
407
|
-
Link.displayName = "Link";
|
|
440
|
+
function LayoutComponent() {
|
|
441
|
+
useI18nHTMLAttributes(); // bu satırı ekle
|
|
442
|
+
|
|
443
|
+
const { defaultLocale } = useLocale();
|
|
444
|
+
const { locale } = Route.useParams();
|
|
445
|
+
|
|
446
|
+
return (
|
|
447
|
+
<IntlayerProvider locale={locale ?? defaultLocale}>
|
|
448
|
+
<Outlet />
|
|
449
|
+
</IntlayerProvider>
|
|
450
|
+
);
|
|
451
|
+
}
|
|
408
452
|
```
|
|
409
453
|
|
|
410
|
-
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
### Adım 11: Middleware Ekleme (İsteğe Bağlı)
|
|
457
|
+
|
|
458
|
+
Uygulamanıza sunucu tarafı yönlendirme eklemek için `intlayerMiddleware`'i de kullanabilirsiniz. Bu eklenti, URL'ye göre mevcut yerel ayarı otomatik olarak algılar ve uygun yerel ayar çerezini ayarlar. Hiçbir yerel ayar belirtilmemişse, eklenti kullanıcının tarayıcı dil tercihlerine göre en uygun yerel ayarı belirler. Hiçbir yerel ayar algılanmazsa, varsayılan yerel ayara yönlendirme yapar.
|
|
459
|
+
|
|
460
|
+
> Üretimde `intlayerMiddleware` kullanmak için, `vite-intlayer` paketini `devDependencies`'den `dependencies`'e geçirmeniz gerektiğini unutmayın.
|
|
461
|
+
|
|
462
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
463
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
464
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
465
|
+
import { defineConfig } from "vite";
|
|
466
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
467
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
468
|
+
|
|
469
|
+
export default defineConfig({
|
|
470
|
+
plugins: [
|
|
471
|
+
tailwindcss(),
|
|
472
|
+
reactRouter(),
|
|
473
|
+
tsconfigPaths(),
|
|
474
|
+
intlayer(),
|
|
475
|
+
intlayerMiddleware(),
|
|
476
|
+
],
|
|
477
|
+
});
|
|
478
|
+
```
|
|
411
479
|
|
|
412
480
|
---
|
|
413
481
|
|
|
414
|
-
|
|
482
|
+
### Adım 12: TypeScript Yapılandırması (İsteğe Bağlı)
|
|
415
483
|
|
|
416
|
-
Intlayer'
|
|
484
|
+
Intlayer, TypeScript'in avantajlarından yararlanmak ve kod tabanınızı daha güçlü hale getirmek için modül genişletme (module augmentation) kullanır.
|
|
485
|
+
|
|
486
|
+
TypeScript yapılandırmanızın otomatik oluşturulan türleri içerdiğinden emin olun:
|
|
417
487
|
|
|
418
488
|
```json5 fileName="tsconfig.json"
|
|
419
489
|
{
|
|
420
|
-
|
|
490
|
+
// ... mevcut yapılandırmalarınız
|
|
491
|
+
include: [
|
|
492
|
+
// ... mevcut dahil ettikleriniz
|
|
493
|
+
".intlayer/**/*.ts", // Otomatik oluşturulan türleri dahil et
|
|
494
|
+
],
|
|
421
495
|
}
|
|
422
496
|
```
|
|
423
497
|
|
|
424
498
|
---
|
|
425
499
|
|
|
426
|
-
|
|
500
|
+
### Git Yapılandırması
|
|
427
501
|
|
|
428
|
-
Intlayer
|
|
502
|
+
Intlayer tarafından oluşturulan dosyaların göz ardı edilmesi önerilir. Bu, bu dosyaların Git deposuna eklenmesini önlemenizi sağlar.
|
|
429
503
|
|
|
430
|
-
|
|
504
|
+
Bunu yapmak için, `.gitignore` dosyanıza aşağıdaki talimatları ekleyebilirsiniz:
|
|
505
|
+
|
|
506
|
+
```plaintext fileName=".gitignore"
|
|
507
|
+
# Intlayer tarafından oluşturulan dosyaları yoksay
|
|
431
508
|
.intlayer
|
|
432
509
|
```
|
|
433
510
|
|
|
434
511
|
---
|
|
435
512
|
|
|
436
|
-
## VS Code
|
|
513
|
+
## VS Code Eklentisi
|
|
514
|
+
|
|
515
|
+
Intlayer ile geliştirme deneyiminizi iyileştirmek için resmi **Intlayer VS Code Eklentisi**ni yükleyebilirsiniz.
|
|
516
|
+
|
|
517
|
+
[VS Code Marketplace'ten Yükleyin](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
518
|
+
|
|
519
|
+
Bu eklenti şunları sağlar:
|
|
437
520
|
|
|
438
|
-
-
|
|
439
|
-
|
|
521
|
+
- Çeviri anahtarları için **Otomatik tamamlama**.
|
|
522
|
+
- Eksik çeviriler için **Gerçek zamanlı hata tespiti**.
|
|
523
|
+
- Çevrilmiş içeriğin **Satır içi önizlemeleri**.
|
|
524
|
+
- Çevirileri kolayca oluşturup güncellemek için **Hızlı işlemler**.
|
|
525
|
+
|
|
526
|
+
Bu eklentinin nasıl kullanılacağı hakkında daha fazla detay için, [Intlayer VS Code Eklentisi dokümantasyonuna](https://intlayer.org/doc/vs-code-extension) bakabilirsiniz.
|
|
440
527
|
|
|
441
528
|
---
|
|
442
529
|
|
|
443
|
-
## Daha
|
|
530
|
+
## Daha İleri Gitmek
|
|
444
531
|
|
|
445
|
-
|
|
446
|
-
- CMS modu
|
|
447
|
-
- Kenarda yerel ayar algılama / adaptörler
|
|
532
|
+
Daha ileri gitmek için, [görsel editörü](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_visual_editor.md) uygulayabilir veya içeriğinizi [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_CMS.md) kullanarak dışa aktarabilirsiniz.
|
|
448
533
|
|
|
449
534
|
---
|
|
450
535
|
|
|
536
|
+
## Dokümantasyon Referansları
|
|
537
|
+
|
|
538
|
+
- [Intlayer Dokümantasyonu](https://intlayer.org)
|
|
539
|
+
- [Tanstack Start Dokümantasyonu](https://reactrouter.com/)
|
|
540
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useIntlayer.md)
|
|
541
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useLocale.md)
|
|
542
|
+
- [İçerik Beyanı](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/get_started.md)
|
|
543
|
+
- [Yapılandırma](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md)
|
|
544
|
+
|
|
545
|
+
Bu kapsamlı rehber, Intlayer'ı Tanstack Start ile tam uluslararasılaştırılmış, yerel farkındalıklı yönlendirme ve TypeScript desteğine sahip bir uygulama için entegre etmeniz gereken her şeyi sağlar.
|
|
546
|
+
|
|
451
547
|
## Dokümantasyon Geçmişi
|
|
452
548
|
|
|
453
|
-
| Sürüm | Tarih | Değişiklikler
|
|
454
|
-
| ----- | ---------- |
|
|
455
|
-
|
|
|
549
|
+
| Sürüm | Tarih | Değişiklikler |
|
|
550
|
+
| ----- | ---------- | --------------------------- |
|
|
551
|
+
| 6.5.2 | 2025-10-03 | Doküman güncellemesi |
|
|
552
|
+
| 5.8.1 | 2025-09-09 | Tanstack Start için eklendi |
|