@intlayer/docs 7.3.14 → 7.3.15
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/ar/intlayer_with_i18next.md +3 -0
- package/blog/ar/intlayer_with_next-i18next.md +3 -0
- package/blog/ar/intlayer_with_next-intl.md +3 -0
- package/blog/ar/intlayer_with_react-i18next.md +3 -0
- package/blog/ar/intlayer_with_react-intl.md +3 -0
- package/blog/ar/intlayer_with_vue-i18n.md +3 -0
- package/blog/de/intlayer_with_i18next.md +3 -0
- package/blog/de/intlayer_with_next-i18next.md +3 -0
- package/blog/de/intlayer_with_next-intl.md +3 -0
- package/blog/de/intlayer_with_react-i18next.md +3 -0
- package/blog/de/intlayer_with_react-intl.md +3 -0
- package/blog/de/intlayer_with_vue-i18n.md +3 -0
- package/blog/en/intlayer_with_i18next.md +7 -0
- package/blog/en/intlayer_with_next-i18next.md +3 -0
- package/blog/en/intlayer_with_next-intl.md +7 -0
- package/blog/en/intlayer_with_react-i18next.md +3 -0
- package/blog/en/intlayer_with_react-intl.md +3 -0
- package/blog/en/intlayer_with_vue-i18n.md +3 -0
- package/blog/en-GB/intlayer_with_i18next.md +3 -0
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -0
- package/blog/en-GB/intlayer_with_next-intl.md +3 -0
- package/blog/en-GB/intlayer_with_react-i18next.md +3 -0
- package/blog/en-GB/intlayer_with_react-intl.md +3 -0
- package/blog/en-GB/intlayer_with_vue-i18n.md +3 -0
- package/blog/es/intlayer_with_i18next.md +3 -0
- package/blog/es/intlayer_with_next-i18next.md +3 -0
- package/blog/es/intlayer_with_next-intl.md +3 -0
- package/blog/es/intlayer_with_react-i18next.md +3 -0
- package/blog/es/intlayer_with_react-intl.md +3 -0
- package/blog/es/intlayer_with_vue-i18n.md +3 -0
- package/blog/fr/intlayer_with_i18next.md +3 -0
- package/blog/fr/intlayer_with_next-i18next.md +3 -0
- package/blog/fr/intlayer_with_next-intl.md +3 -0
- package/blog/fr/intlayer_with_react-i18next.md +3 -0
- package/blog/fr/intlayer_with_react-intl.md +3 -0
- package/blog/fr/intlayer_with_vue-i18n.md +3 -0
- package/blog/hi/intlayer_with_i18next.md +3 -0
- package/blog/hi/intlayer_with_next-i18next.md +3 -0
- package/blog/hi/intlayer_with_next-intl.md +3 -0
- package/blog/hi/intlayer_with_react-i18next.md +3 -0
- package/blog/hi/intlayer_with_react-intl.md +3 -0
- package/blog/hi/intlayer_with_vue-i18n.md +3 -0
- package/blog/id/intlayer_with_i18next.md +3 -0
- package/blog/id/intlayer_with_next-i18next.md +3 -0
- package/blog/id/intlayer_with_next-intl.md +3 -0
- package/blog/id/intlayer_with_react-i18next.md +3 -0
- package/blog/id/intlayer_with_react-intl.md +3 -0
- package/blog/id/intlayer_with_vue-i18n.md +3 -0
- package/blog/it/intlayer_with_i18next.md +3 -0
- package/blog/it/intlayer_with_next-i18next.md +3 -0
- package/blog/it/intlayer_with_next-intl.md +3 -0
- package/blog/it/intlayer_with_react-i18next.md +3 -0
- package/blog/it/intlayer_with_react-intl.md +3 -0
- package/blog/it/intlayer_with_vue-i18n.md +3 -0
- package/blog/ja/intlayer_with_i18next.md +3 -0
- package/blog/ja/intlayer_with_next-i18next.md +3 -0
- package/blog/ja/intlayer_with_next-intl.md +3 -0
- package/blog/ja/intlayer_with_react-i18next.md +3 -0
- package/blog/ja/intlayer_with_react-intl.md +3 -0
- package/blog/ja/intlayer_with_vue-i18n.md +3 -0
- package/blog/ko/intlayer_with_i18next.md +3 -0
- package/blog/ko/intlayer_with_next-i18next.md +3 -0
- package/blog/ko/intlayer_with_next-intl.md +3 -0
- package/blog/ko/intlayer_with_react-i18next.md +3 -0
- package/blog/ko/intlayer_with_react-intl.md +3 -0
- package/blog/ko/intlayer_with_vue-i18n.md +3 -0
- package/blog/pl/intlayer_with_i18next.md +3 -0
- package/blog/pl/intlayer_with_next-i18next.md +3 -0
- package/blog/pl/intlayer_with_next-intl.md +3 -0
- package/blog/pl/intlayer_with_react-i18next.md +3 -0
- package/blog/pl/intlayer_with_react-intl.md +3 -0
- package/blog/pl/intlayer_with_vue-i18n.md +3 -0
- package/blog/pt/intlayer_with_i18next.md +3 -0
- package/blog/pt/intlayer_with_next-i18next.md +3 -0
- package/blog/pt/intlayer_with_next-intl.md +3 -0
- package/blog/pt/intlayer_with_react-i18next.md +3 -0
- package/blog/pt/intlayer_with_react-intl.md +3 -0
- package/blog/pt/intlayer_with_vue-i18n.md +3 -0
- package/blog/ru/intlayer_with_i18next.md +3 -0
- package/blog/ru/intlayer_with_next-i18next.md +3 -0
- package/blog/ru/intlayer_with_next-intl.md +3 -0
- package/blog/ru/intlayer_with_react-i18next.md +3 -0
- package/blog/ru/intlayer_with_react-intl.md +3 -0
- package/blog/ru/intlayer_with_vue-i18n.md +3 -0
- package/blog/tr/intlayer_with_i18next.md +3 -0
- package/blog/tr/intlayer_with_next-i18next.md +3 -0
- package/blog/tr/intlayer_with_next-intl.md +3 -0
- package/blog/tr/intlayer_with_react-i18next.md +3 -0
- package/blog/tr/intlayer_with_vue-i18n.md +3 -0
- package/blog/vi/intlayer_with_i18next.md +3 -0
- package/blog/vi/intlayer_with_next-i18next.md +3 -0
- package/blog/vi/intlayer_with_next-intl.md +3 -0
- package/blog/vi/intlayer_with_react-i18next.md +3 -0
- package/blog/vi/intlayer_with_react-intl.md +3 -0
- package/blog/vi/intlayer_with_vue-i18n.md +3 -0
- package/blog/zh/intlayer_with_i18next.md +3 -0
- package/blog/zh/intlayer_with_next-i18next.md +3 -0
- package/blog/zh/intlayer_with_next-intl.md +3 -0
- package/blog/zh/intlayer_with_react-i18next.md +3 -0
- package/blog/zh/intlayer_with_react-intl.md +3 -0
- package/blog/zh/intlayer_with_vue-i18n.md +3 -0
- package/docs/ar/intlayer_with_lynx+react.md +1 -1
- package/docs/ar/intlayer_with_vite+react.md +99 -331
- package/docs/ar/plugins/sync-json.md +3 -0
- package/docs/de/intlayer_with_lynx+react.md +1 -1
- package/docs/de/intlayer_with_vite+react.md +116 -380
- package/docs/de/plugins/sync-json.md +3 -0
- package/docs/en/intlayer_with_vite+react.md +6 -10
- package/docs/en/plugins/sync-json.md +3 -0
- package/docs/en-GB/intlayer_with_vite+react.md +62 -74
- package/docs/en-GB/plugins/sync-json.md +3 -0
- package/docs/es/intlayer_with_vite+react.md +101 -333
- package/docs/es/plugins/sync-json.md +3 -0
- package/docs/fr/intlayer_with_vite+react.md +101 -357
- package/docs/fr/plugins/sync-json.md +3 -0
- package/docs/hi/intlayer_with_vite+react.md +120 -333
- package/docs/hi/plugins/sync-json.md +3 -0
- package/docs/id/intlayer_with_vite+react.md +7 -13
- package/docs/id/plugins/sync-json.md +3 -0
- package/docs/it/intlayer_with_lynx+react.md +1 -1
- package/docs/it/intlayer_with_vite+react.md +121 -393
- package/docs/it/plugins/sync-json.md +3 -0
- package/docs/ja/intlayer_with_vite+react.md +106 -378
- package/docs/ja/plugins/sync-json.md +3 -0
- package/docs/ko/intlayer_with_lynx+react.md +1 -1
- package/docs/ko/intlayer_with_vite+react.md +90 -322
- package/docs/ko/plugins/sync-json.md +3 -0
- package/docs/pl/intlayer_with_vite+react.md +25 -21
- package/docs/pl/plugins/sync-json.md +3 -0
- package/docs/pt/intlayer_with_vite+react.md +96 -328
- package/docs/pt/plugins/sync-json.md +3 -0
- package/docs/ru/intlayer_with_lynx+react.md +1 -1
- package/docs/ru/intlayer_with_vite+react.md +109 -362
- package/docs/ru/plugins/sync-json.md +3 -0
- package/docs/tr/intlayer_with_vite+react.md +132 -366
- package/docs/tr/plugins/sync-json.md +3 -0
- package/docs/vi/intlayer_with_vite+react.md +16 -19
- package/docs/vi/plugins/sync-json.md +3 -0
- package/docs/zh/intlayer_with_tanstack.md +1 -1
- package/docs/zh/intlayer_with_vite+react.md +91 -374
- package/docs/zh/plugins/sync-json.md +3 -0
- package/frequent_questions/ar/customized_locale_list.md +1 -1
- package/frequent_questions/de/customized_locale_list.md +1 -1
- package/frequent_questions/en/customized_locale_list.md +1 -1
- package/frequent_questions/en-GB/customized_locale_list.md +1 -1
- package/frequent_questions/es/customized_locale_list.md +1 -1
- package/frequent_questions/fr/customized_locale_list.md +1 -1
- package/frequent_questions/hi/customized_locale_list.md +1 -1
- package/frequent_questions/id/customized_locale_list.md +1 -1
- package/frequent_questions/it/customized_locale_list.md +1 -1
- package/frequent_questions/ja/customized_locale_list.md +1 -1
- package/frequent_questions/ko/customized_locale_list.md +1 -1
- package/frequent_questions/pl/customized_locale_list.md +1 -1
- package/frequent_questions/pt/customized_locale_list.md +1 -1
- package/frequent_questions/ru/customized_locale_list.md +1 -1
- package/frequent_questions/tr/customized_locale_list.md +1 -1
- package/frequent_questions/vi/customized_locale_list.md +1 -1
- package/frequent_questions/zh/customized_locale_list.md +1 -1
- package/package.json +6 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Vite
|
|
5
|
-
description: Intlayer kullanarak Vite ve React uygulamanıza i18n eklemeyi öğrenin. Bu kılavuzu takip ederek uygulamanızı çok dilli hale getirin.
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-12-10
|
|
4
|
+
title: Vite ve React uygulamanızı nasıl çevirirsiniz – i18n rehberi 2025
|
|
5
|
+
description: Intlayer kullanarak Vite ve React uygulamanıza uluslararasılaştırma (i18n) eklemeyi öğrenin. Bu kılavuzu takip ederek uygulamanızı çok dilli hale getirin.
|
|
6
6
|
keywords:
|
|
7
7
|
- Uluslararasılaştırma
|
|
8
8
|
- Dokümantasyon
|
|
@@ -23,16 +23,12 @@ history:
|
|
|
23
23
|
changes: Geçmiş başlatıldı
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
# Intlayer ile Vite
|
|
26
|
+
# Intlayer ile Vite ve React sitenizi çevirin | Uluslararasılaştırma (i18n)
|
|
27
27
|
|
|
28
28
|
## İçindekiler
|
|
29
29
|
|
|
30
30
|
<TOC/>
|
|
31
31
|
|
|
32
|
-
<iframe title="Vite ve React için en iyi i18n çözümü? Intlayer'ı keşfedin" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
33
|
-
|
|
34
|
-
GitHub'da [Uygulama Şablonu](https://github.com/aymericzip/intlayer-vite-react-template)'na bakın.
|
|
35
|
-
|
|
36
32
|
## Intlayer Nedir?
|
|
37
33
|
|
|
38
34
|
**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.
|
|
@@ -48,6 +44,27 @@ Intlayer ile şunları yapabilirsiniz:
|
|
|
48
44
|
|
|
49
45
|
## Vite ve React Uygulamasında Intlayer Kurulumu İçin Adım Adım Kılavuz
|
|
50
46
|
|
|
47
|
+
<Tab defaultTab="video">
|
|
48
|
+
<TabItem label="Video" value="video">
|
|
49
|
+
|
|
50
|
+
<iframe title="Vite ve React için en iyi i18n çözümü? Intlayer'ı keşfedin" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
51
|
+
|
|
52
|
+
</TabItem>
|
|
53
|
+
<TabItem label="Code" value="code">
|
|
54
|
+
|
|
55
|
+
<iframe
|
|
56
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
57
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
58
|
+
title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
|
|
59
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
60
|
+
loading="lazy"
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
</TabItem>
|
|
64
|
+
</Tab>
|
|
65
|
+
|
|
66
|
+
GitHub'da [Uygulama Şablonu](https://github.com/aymericzip/intlayer-vite-react-template)'na bakın.
|
|
67
|
+
|
|
51
68
|
### Adım 1: Bağımlılıkları Kurma
|
|
52
69
|
|
|
53
70
|
Gerekli paketleri npm kullanarak kurun:
|
|
@@ -68,14 +85,13 @@ yarn add vite-intlayer --save-dev
|
|
|
68
85
|
```
|
|
69
86
|
|
|
70
87
|
- **intlayer**
|
|
71
|
-
|
|
72
|
-
Yapılandırma yönetimi, çeviri, [içerik bildirimi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md), dönüştürme ve [CLI komutları](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) için uluslararasılaştırma araçları sağlayan çekirdek paket.
|
|
88
|
+
Yapılandırma yönetimi, çeviri, [içerik beyanı](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/content_file.md), transpile etme ve [CLI komutları](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/cli/index.md) için uluslararasılaştırma araçları sağlayan temel paket.
|
|
73
89
|
|
|
74
90
|
- **react-intlayer**
|
|
75
|
-
React uygulamasıyla Intlayer'ı entegre eden paket. React uluslararasılaştırması için bağlam sağlayıcıları ve
|
|
91
|
+
React uygulamasıyla Intlayer'ı entegre eden paket. React uluslararasılaştırması için bağlam sağlayıcıları ve hook'lar sağlar.
|
|
76
92
|
|
|
77
93
|
- **vite-intlayer**
|
|
78
|
-
[Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production) ile Intlayer'ı entegre etmek için Vite eklentisini ve kullanıcının tercih ettiği yerel ayarı algılamak, çerezleri yönetmek ve URL
|
|
94
|
+
[Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production) ile Intlayer'ı entegre etmek için Vite eklentisini ve kullanıcının tercih ettiği yerel ayarı algılamak, çerezleri yönetmek ve URL yönlendirmesini işlemek için middleware'i içerir.
|
|
79
95
|
|
|
80
96
|
### Adım 2: Projenizi Yapılandırma
|
|
81
97
|
|
|
@@ -137,7 +153,7 @@ const config = {
|
|
|
137
153
|
module.exports = config;
|
|
138
154
|
```
|
|
139
155
|
|
|
140
|
-
> Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'leri, middleware yönlendirmesini, çerez adlarını, içerik
|
|
156
|
+
> Bu yapılandırma dosyası aracılığıyla, yerelleştirilmiş URL'leri, middleware yönlendirmesini, çerez adlarını, içerik bildirimlerinizin konumunu ve uzantısını, Intlayer günlüklerini konsolda devre dışı bırakmayı ve daha fazlasını ayarlayabilirsiniz. Kullanılabilir parametrelerin tam listesi için [yapılandırma dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md) bakın.
|
|
141
157
|
|
|
142
158
|
### Adım 3: Intlayer'ı Vite Yapılandırmanıza Entegre Etme
|
|
143
159
|
|
|
@@ -176,7 +192,7 @@ module.exports = defineConfig({
|
|
|
176
192
|
});
|
|
177
193
|
```
|
|
178
194
|
|
|
179
|
-
> `intlayer()` Vite eklentisi, Vite ile
|
|
195
|
+
> `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.
|
|
180
196
|
|
|
181
197
|
### Adım 4: İçeriğinizi Bildirin
|
|
182
198
|
|
|
@@ -412,11 +428,11 @@ module.exports = appContent;
|
|
|
412
428
|
}
|
|
413
429
|
```
|
|
414
430
|
|
|
415
|
-
> İçerik bildiriminiz uygulamanızın herhangi bir
|
|
431
|
+
> İçerik bildiriminiz, uygulamanızın herhangi bir yerinde tanımlanabilir; yeter ki `contentDir` dizinine dahil edilsin (varsayılan olarak `./src`). Ayrıca içerik bildirimi dosya uzantısı ile eşleşmelidir (varsayılan olarak `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
416
432
|
|
|
417
|
-
> Daha fazla ayrıntı için [içerik bildirimi dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/
|
|
433
|
+
> Daha fazla ayrıntı için [içerik bildirimi dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/content_file.md) bakın.
|
|
418
434
|
|
|
419
|
-
> İçerik dosyanız TSX kodu içeriyorsa, `import React from "react";`
|
|
435
|
+
> İçerik dosyanız TSX kodu içeriyorsa, `import React from "react";` ifadesini içerik dosyanıza dahil etmeyi düşünmelisiniz.
|
|
420
436
|
|
|
421
437
|
### Adım 5: Kodunuzda Intlayer'ı Kullanın
|
|
422
438
|
|
|
@@ -563,17 +579,17 @@ const App = () => (
|
|
|
563
579
|
module.exports = App;
|
|
564
580
|
```
|
|
565
581
|
|
|
566
|
-
> İçeriğinizi
|
|
582
|
+
> İçeriğinizi `alt`, `title`, `href`, `aria-label` gibi bir `string` özniteliğinde kullanmak istiyorsanız, fonksiyonun değerini çağırmanız gerekir, örneğin:
|
|
567
583
|
|
|
568
584
|
> ```jsx
|
|
569
585
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
570
586
|
> ```
|
|
571
587
|
|
|
572
|
-
> `useIntlayer` kancası hakkında daha fazla bilgi edinmek için [dokümantasyona](https://github.com/aymericzip/intlayer/blob/main/docs/docs/
|
|
588
|
+
> `useIntlayer` kancası hakkında daha fazla bilgi edinmek için [dokümantasyona](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useIntlayer.md) bakın.
|
|
573
589
|
|
|
574
590
|
### (İsteğe Bağlı) Adım 6: İçeriğinizin Dilini Değiştirin
|
|
575
591
|
|
|
576
|
-
İçeriğinizin dilini değiştirmek için `useLocale` kancasından sağlanan `setLocale`
|
|
592
|
+
İçeriğinizin dilini değiştirmek için `useLocale` kancasından sağlanan `setLocale` fonksiyonunu kullanabilirsiniz. Bu fonksiyon, uygulamanın yerel ayarını belirlemenize ve içeriği buna göre güncellemenize olanak tanır.
|
|
577
593
|
|
|
578
594
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
579
595
|
import type { FC } from "react";
|
|
@@ -621,11 +637,11 @@ const LocaleSwitcher = () => {
|
|
|
621
637
|
};
|
|
622
638
|
```
|
|
623
639
|
|
|
624
|
-
> `useLocale` kancası hakkında daha fazla bilgi edinmek için [dokümantasyona](https://github.com/aymericzip/intlayer/blob/main/docs/docs/
|
|
640
|
+
> `useLocale` kancası hakkında daha fazla bilgi edinmek için [dokümantasyona](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/react-intlayer/useLocale.md) bakın.
|
|
625
641
|
|
|
626
642
|
### (İsteğe Bağlı) Adım 7: Uygulamanıza Yerelleştirilmiş Yönlendirme Ekleyin
|
|
627
643
|
|
|
628
|
-
Bu adımın amacı, her dil için benzersiz rotalar oluşturmaktır. Bu, SEO ve SEO dostu URL'ler için
|
|
644
|
+
Bu adımın amacı, her dil için benzersiz rotalar oluşturmaktır. Bu, SEO ve SEO dostu URL'ler için faydalıdır.
|
|
629
645
|
Örnek:
|
|
630
646
|
|
|
631
647
|
```plaintext
|
|
@@ -639,82 +655,10 @@ Bu adımın amacı, her dil için benzersiz rotalar oluşturmaktır. Bu, SEO ve
|
|
|
639
655
|
Uygulamanıza yerelleştirilmiş yönlendirme eklemek için, uygulamanızın rotalarını saran ve yerel ayar tabanlı yönlendirmeyi yöneten bir `LocaleRouter` bileşeni oluşturabilirsiniz. [React Router](https://reactrouter.com/home) kullanarak bir örnek aşağıda verilmiştir:
|
|
640
656
|
|
|
641
657
|
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
642
|
-
//
|
|
643
|
-
import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Intlayer'dan yardımcı işlevler ve türler
|
|
658
|
+
import { localeMap } from "intlayer"; // Intlayer'dan yardımcı işlevler ve türler
|
|
644
659
|
import type { FC, PropsWithChildren } from "react"; // React türleri işlevsel bileşenler ve props için
|
|
645
660
|
import { IntlayerProvider } from "react-intlayer"; // Uluslararasılaştırma bağlam sağlayıcısı
|
|
646
|
-
import {
|
|
647
|
-
BrowserRouter,
|
|
648
|
-
Routes,
|
|
649
|
-
Route,
|
|
650
|
-
Navigate,
|
|
651
|
-
useLocation,
|
|
652
|
-
} from "react-router-dom"; // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
653
|
-
|
|
654
|
-
// Intlayer'dan yapılandırmayı çıkar
|
|
655
|
-
const { internationalization, middleware } = configuration;
|
|
656
|
-
const { locales, defaultLocale } = internationalization;
|
|
657
|
-
|
|
658
|
-
/**
|
|
659
|
-
* Yerelleştirme ve uygun yerel ayar bağlamıyla çocukları saran bir bileşen.
|
|
660
|
-
* URL tabanlı yerel ayar algılama ve doğrulama yönetir.
|
|
661
|
-
*/
|
|
662
|
-
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
663
|
-
children,
|
|
664
|
-
locale,
|
|
665
|
-
}) => {
|
|
666
|
-
const { pathname, search } = useLocation(); // Geçerli URL yolunu al
|
|
667
|
-
|
|
668
|
-
// Sağlanmadıysa varsayılan yerel ayara geri dön
|
|
669
|
-
const currentLocale = locale ?? defaultLocale;
|
|
670
|
-
|
|
671
|
-
// Temel bir yol oluşturmak için yoldan yerel ayar önekini kaldır
|
|
672
|
-
const pathWithoutLocale = getPathWithoutLocale(
|
|
673
|
-
pathname // Geçerli URL yolu
|
|
674
|
-
);
|
|
675
|
-
|
|
676
|
-
/**
|
|
677
|
-
* middleware.prefixDefault true ise, varsayılan yerel ayar her zaman öneklenmelidir.
|
|
678
|
-
*/
|
|
679
|
-
if (middleware.prefixDefault) {
|
|
680
|
-
// Yerel ayarı doğrula
|
|
681
|
-
if (!locale || !locales.includes(locale)) {
|
|
682
|
-
// Güncellenmiş yol ile varsayılan yerel ayara yönlendir
|
|
683
|
-
return (
|
|
684
|
-
<Navigate
|
|
685
|
-
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
686
|
-
replace // Geçerli geçmiş girişini yenisiyle değiştir
|
|
687
|
-
/>
|
|
688
|
-
);
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
692
|
-
return (
|
|
693
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
694
|
-
);
|
|
695
|
-
} else {
|
|
696
|
-
/**
|
|
697
|
-
* middleware.prefixDefault false olduğunda, varsayılan yerel ayar öneklenmez.
|
|
698
|
-
* Geçerli yerel ayar geçerli olduğundan ve varsayılan yerel ayar olmadığından emin ol.
|
|
699
|
-
*/
|
|
700
|
-
if (
|
|
701
|
-
currentLocale.toString() !== defaultLocale.toString() &&
|
|
702
|
-
!locales
|
|
703
|
-
.filter(
|
|
704
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Varsayılan yerel ayarı hariç tut
|
|
705
|
-
)
|
|
706
|
-
.includes(currentLocale) // Geçerli yerel ayar geçerli yerel ayarlar listesinde mi kontrol et
|
|
707
|
-
) {
|
|
708
|
-
// Yerel ayar öneki olmadan yola yönlendir
|
|
709
|
-
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
713
|
-
return (
|
|
714
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
715
|
-
);
|
|
716
|
-
}
|
|
717
|
-
};
|
|
661
|
+
import { BrowserRouter, Route, Routes } from "react-router-dom"; // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
718
662
|
|
|
719
663
|
/**
|
|
720
664
|
* Yerel ayar özel rotaları ayarlayan bir yönlendirici bileşen.
|
|
@@ -723,256 +667,81 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
723
667
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
724
668
|
<BrowserRouter>
|
|
725
669
|
<Routes>
|
|
726
|
-
{
|
|
727
|
-
|
|
728
|
-
(
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
/>
|
|
737
|
-
))}
|
|
738
|
-
|
|
739
|
-
{
|
|
740
|
-
// Varsayılan yerel ayar öneki devre dışı bırakılmışsa, kök yolda çocukları doğrudan işle
|
|
741
|
-
!middleware.prefixDefault && (
|
|
742
|
-
<Route
|
|
743
|
-
path="*"
|
|
744
|
-
element={
|
|
745
|
-
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
746
|
-
} // Yerel ayar yönetimiyle çocukları sar
|
|
747
|
-
/>
|
|
748
|
-
)
|
|
749
|
-
}
|
|
670
|
+
{localeMap(({ locale, urlPrefix }) => (
|
|
671
|
+
<Route
|
|
672
|
+
// Yerel ayarı yakalayan rota deseni (örneğin, /en/, /fr/) ve sonraki tüm yolları eşleştir
|
|
673
|
+
path={`${urlPrefix}/*`}
|
|
674
|
+
key={locale}
|
|
675
|
+
element={
|
|
676
|
+
<IntlayerProvider locale={locale}>{children}</IntlayerProvider>
|
|
677
|
+
} // Yerel ayar yönetimiyle çocukları sar
|
|
678
|
+
/>
|
|
679
|
+
))}
|
|
750
680
|
</Routes>
|
|
751
681
|
</BrowserRouter>
|
|
752
682
|
);
|
|
753
683
|
```
|
|
754
684
|
|
|
755
685
|
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
756
|
-
//
|
|
757
|
-
import {
|
|
758
|
-
|
|
759
|
-
import {
|
|
760
|
-
import {
|
|
761
|
-
BrowserRouter,
|
|
762
|
-
Routes,
|
|
763
|
-
Route,
|
|
764
|
-
Navigate,
|
|
765
|
-
useLocation,
|
|
766
|
-
} from "react-router-dom"; // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
767
|
-
|
|
768
|
-
// Intlayer'dan yapılandırmayı çıkar
|
|
769
|
-
const { internationalization, middleware } = configuration;
|
|
770
|
-
const { locales, defaultLocale } = internationalization;
|
|
771
|
-
|
|
772
|
-
/**
|
|
773
|
-
* Yerelleştirme ve uygun yerel ayar bağlamıyla çocukları saran bir bileşen.
|
|
774
|
-
* URL tabanlı yerel ayar algılama ve doğrulama yönetir.
|
|
775
|
-
*/
|
|
776
|
-
const AppLocalized = ({ children, locale }) => {
|
|
777
|
-
const { pathname, search } = useLocation(); // Geçerli URL yolunu al
|
|
778
|
-
|
|
779
|
-
// Sağlanmadıysa varsayılan yerel ayara geri dön
|
|
780
|
-
const currentLocale = locale ?? defaultLocale;
|
|
781
|
-
|
|
782
|
-
// Temel bir yol oluşturmak için yoldan yerel ayar önekini kaldır
|
|
783
|
-
const pathWithoutLocale = getPathWithoutLocale(
|
|
784
|
-
pathname // Geçerli URL yolu
|
|
785
|
-
);
|
|
786
|
-
|
|
787
|
-
/**
|
|
788
|
-
* middleware.prefixDefault true ise, varsayılan yerel ayar her zaman öneklenmelidir.
|
|
789
|
-
*/
|
|
790
|
-
if (middleware.prefixDefault) {
|
|
791
|
-
// Yerel ayarı doğrula
|
|
792
|
-
if (!locale || !locales.includes(locale)) {
|
|
793
|
-
// Güncellenmiş yol ile varsayılan yerel ayara yönlendir
|
|
794
|
-
return (
|
|
795
|
-
<Navigate
|
|
796
|
-
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
797
|
-
replace // Geçerli geçmiş girişini yenisiyle değiştir
|
|
798
|
-
/>
|
|
799
|
-
);
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
803
|
-
return (
|
|
804
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
805
|
-
);
|
|
806
|
-
} else {
|
|
807
|
-
/**
|
|
808
|
-
* middleware.prefixDefault false olduğunda, varsayılan yerel ayar öneklenmez.
|
|
809
|
-
* Geçerli yerel ayar geçerli olduğundan ve varsayılan yerel ayar olmadığından emin ol.
|
|
810
|
-
*/
|
|
811
|
-
if (
|
|
812
|
-
currentLocale.toString() !== defaultLocale.toString() &&
|
|
813
|
-
!locales
|
|
814
|
-
.filter(
|
|
815
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Varsayılan yerel ayarı hariç tut
|
|
816
|
-
)
|
|
817
|
-
.includes(currentLocale) // Geçerli yerel ayar geçerli yerel ayarlar listesinde mi kontrol et
|
|
818
|
-
) {
|
|
819
|
-
// Yerel ayar öneki olmadan yola yönlendir
|
|
820
|
-
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
824
|
-
return (
|
|
825
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
826
|
-
);
|
|
827
|
-
}
|
|
828
|
-
};
|
|
686
|
+
import { localeMap } from 'intlayer'; // Intlayer'dan yardımcı işlevler ve türler
|
|
687
|
+
import type { FC, PropsWithChildren } from 'react'; // React türleri işlevsel bileşenler ve props için
|
|
688
|
+
import { IntlayerProvider } from 'react-intlayer'; // Uluslararasılaştırma bağlam sağlayıcısı
|
|
689
|
+
import { BrowserRouter, Route, Routes } from 'react-router-dom'; // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
829
690
|
|
|
830
691
|
/**
|
|
831
692
|
* Yerel ayar özel rotaları ayarlayan bir yönlendirici bileşen.
|
|
832
693
|
* React Router kullanarak navigasyonu yönetir ve yerelleştirilmiş bileşenleri işler.
|
|
833
694
|
*/
|
|
834
|
-
export const LocaleRouter = ({ children }) => (
|
|
695
|
+
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
835
696
|
<BrowserRouter>
|
|
836
697
|
<Routes>
|
|
837
|
-
{
|
|
838
|
-
|
|
839
|
-
(
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
/>
|
|
848
|
-
))}
|
|
849
|
-
|
|
850
|
-
{
|
|
851
|
-
// Varsayılan yerel ayar öneki devre dışı bırakılmışsa, kök yolda çocukları doğrudan işle
|
|
852
|
-
!middleware.prefixDefault && (
|
|
853
|
-
<Route
|
|
854
|
-
path="*"
|
|
855
|
-
element={
|
|
856
|
-
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
857
|
-
} // Yerel ayar yönetimiyle çocukları sar
|
|
858
|
-
/>
|
|
859
|
-
)
|
|
860
|
-
}
|
|
698
|
+
{localeMap(({ locale, urlPrefix }) => (
|
|
699
|
+
<Route
|
|
700
|
+
// Yerel ayarı yakalayan rota deseni (örneğin, /en/, /fr/) ve sonraki tüm yolları eşleştir
|
|
701
|
+
path={`${urlPrefix}/*`}
|
|
702
|
+
key={locale}
|
|
703
|
+
element={
|
|
704
|
+
<IntlayerProvider locale={locale}>{children}</IntlayerProvider>
|
|
705
|
+
} // Yerel ayar yönetimiyle çocukları sar
|
|
706
|
+
/>
|
|
707
|
+
))}
|
|
861
708
|
</Routes>
|
|
862
709
|
</BrowserRouter>
|
|
863
710
|
);
|
|
864
711
|
```
|
|
865
712
|
|
|
866
713
|
```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
|
|
867
|
-
//
|
|
868
|
-
const
|
|
869
|
-
const { IntlayerProvider
|
|
870
|
-
const {
|
|
871
|
-
BrowserRouter,
|
|
872
|
-
Routes,
|
|
873
|
-
Route,
|
|
874
|
-
Navigate,
|
|
875
|
-
useLocation,
|
|
876
|
-
} = require("react-router-dom"); // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
877
|
-
|
|
878
|
-
// Intlayer'dan yapılandırmayı çıkar
|
|
879
|
-
const { internationalization, middleware } = configuration;
|
|
880
|
-
const { locales, defaultLocale } = internationalization;
|
|
881
|
-
|
|
882
|
-
/**
|
|
883
|
-
* Yerelleştirme ve uygun yerel ayar bağlamıyla çocukları saran bir bileşen.
|
|
884
|
-
* URL tabanlı yerel ayar algılama ve doğrulama yönetir.
|
|
885
|
-
*/
|
|
886
|
-
const AppLocalized = ({ children, locale }) => {
|
|
887
|
-
const { pathname, search } = useLocation(); // Geçerli URL yolunu al
|
|
888
|
-
|
|
889
|
-
// Sağlanmadıysa varsayılan yerel ayara geri dön
|
|
890
|
-
const currentLocale = locale ?? defaultLocale;
|
|
891
|
-
|
|
892
|
-
// Temel bir yol oluşturmak için yoldan yerel ayar önekini kaldır
|
|
893
|
-
const pathWithoutLocale = getPathWithoutLocale(
|
|
894
|
-
pathname // Geçerli URL yolu
|
|
895
|
-
);
|
|
896
|
-
|
|
897
|
-
/**
|
|
898
|
-
* middleware.prefixDefault true ise, varsayılan yerel ayar her zaman öneklenmelidir.
|
|
899
|
-
*/
|
|
900
|
-
if (middleware.prefixDefault) {
|
|
901
|
-
// Yerel ayarı doğrula
|
|
902
|
-
if (!locale || !locales.includes(locale)) {
|
|
903
|
-
// Güncellenmiş yol ile varsayılan yerel ayara yönlendir
|
|
904
|
-
return (
|
|
905
|
-
<Navigate
|
|
906
|
-
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
907
|
-
replace // Geçerli geçmiş girişini yenisiyle değiştir
|
|
908
|
-
/>
|
|
909
|
-
);
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
913
|
-
return (
|
|
914
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
915
|
-
);
|
|
916
|
-
} else {
|
|
917
|
-
/**
|
|
918
|
-
* middleware.prefixDefault false olduğunda, varsayılan yerel ayar öneklenmez.
|
|
919
|
-
* Geçerli yerel ayar geçerli olduğundan ve varsayılan yerel ayar olmadığından emin ol.
|
|
920
|
-
*/
|
|
921
|
-
if (
|
|
922
|
-
currentLocale.toString() !== defaultLocale.toString() &&
|
|
923
|
-
!locales
|
|
924
|
-
.filter(
|
|
925
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Varsayılan yerel ayarı hariç tut
|
|
926
|
-
)
|
|
927
|
-
.includes(currentLocale) // Geçerli yerel ayar geçerli yerel ayarlar listesinde mi kontrol et
|
|
928
|
-
) {
|
|
929
|
-
// Yerel ayar öneki olmadan yola yönlendir
|
|
930
|
-
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
// Geçerli yerel ayarı ayarlayarak çocukları IntlayerProvider ile sar
|
|
934
|
-
return (
|
|
935
|
-
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
936
|
-
);
|
|
937
|
-
}
|
|
938
|
-
};
|
|
714
|
+
const { localeMap } = require("intlayer"); // Intlayer'dan yardımcı işlevler ve türler
|
|
715
|
+
const React = require("react"); // React'i içe aktar
|
|
716
|
+
const { IntlayerProvider } = require("react-intlayer"); // Uluslararasılaştırma bağlam sağlayıcısı
|
|
717
|
+
const { BrowserRouter, Route, Routes } = require("react-router-dom"); // Navigasyonu yönetmek için yönlendirici bileşenleri
|
|
939
718
|
|
|
940
719
|
/**
|
|
941
720
|
* Yerel ayar özel rotaları ayarlayan bir yönlendirici bileşen.
|
|
942
721
|
* React Router kullanarak navigasyonu yönetir ve yerelleştirilmiş bileşenleri işler.
|
|
943
722
|
*/
|
|
944
|
-
const LocaleRouter = ({ children }) =>
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
723
|
+
const LocaleRouter = ({ children }) =>
|
|
724
|
+
React.createElement(
|
|
725
|
+
BrowserRouter,
|
|
726
|
+
{},
|
|
727
|
+
React.createElement(
|
|
728
|
+
Routes,
|
|
729
|
+
{},
|
|
730
|
+
localeMap(({ locale, urlPrefix }) =>
|
|
731
|
+
React.createElement(Route, {
|
|
732
|
+
path: `${urlPrefix}/*`,
|
|
733
|
+
key: locale,
|
|
734
|
+
element: React.createElement(IntlayerProvider, { locale }, children),
|
|
735
|
+
})
|
|
736
|
+
)
|
|
737
|
+
)
|
|
738
|
+
);
|
|
959
739
|
|
|
960
|
-
|
|
961
|
-
// Varsayılan yerel ayar öneki devre dışı bırakılmışsa, kök yolda çocukları doğrudan işle
|
|
962
|
-
!middleware.prefixDefault && (
|
|
963
|
-
<Route
|
|
964
|
-
path="*"
|
|
965
|
-
element={
|
|
966
|
-
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
967
|
-
} // Yerel ayar yönetimiyle çocukları sar
|
|
968
|
-
/>
|
|
969
|
-
)
|
|
970
|
-
}
|
|
971
|
-
</Routes>
|
|
972
|
-
</BrowserRouter>
|
|
973
|
-
);
|
|
740
|
+
exports.LocaleRouter = LocaleRouter;
|
|
974
741
|
```
|
|
975
742
|
|
|
743
|
+
> Not: `routing.mode: 'no-prefix' | 'search-params'` kullanıyorsanız, muhtemelen `localeMap` fonksiyonunu kullanmanıza gerek yoktur.
|
|
744
|
+
|
|
976
745
|
Ardından, `LocaleRouter` bileşenini uygulamanızda kullanabilirsiniz:
|
|
977
746
|
|
|
978
747
|
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
@@ -1012,9 +781,9 @@ const App = () => (
|
|
|
1012
781
|
);
|
|
1013
782
|
```
|
|
1014
783
|
|
|
1015
|
-
Paralel olarak, uygulamanıza sunucu tarafı yönlendirme eklemek için `intlayerProxy`'
|
|
784
|
+
Paralel olarak, uygulamanıza sunucu tarafı yönlendirme eklemek için `intlayerProxy`'yi de kullanabilirsiniz. Bu eklenti, URL'ye göre geçerli yerel ayarı otomatik olarak algılar ve uygun yerel ayar çerezini ayarlar. Hiç yerel ayar belirtilmezse, eklenti kullanıcının tarayıcı dil tercihlerine göre en uygun yerel ayarı belirler. Hiç yerel ayar algılanmazsa, varsayılan yerel ayara yönlendirir.
|
|
1016
785
|
|
|
1017
|
-
> Not: Üretimde `intlayerProxy`'i kullanmak için `vite-intlayer` paketini `devDependencies`'den `dependencies`'e
|
|
786
|
+
> Not: Üretimde `intlayerProxy`'i kullanmak için `vite-intlayer` paketini `devDependencies`'den `dependencies`'e taşımanız gerekir.
|
|
1018
787
|
|
|
1019
788
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1020
789
|
import { defineConfig } from "vite";
|
|
@@ -1051,7 +820,7 @@ module.exports = defineConfig({
|
|
|
1051
820
|
|
|
1052
821
|
### (İsteğe Bağlı) Adım 8: Yerel ayar değiştiğinde URL'yi değiştirin
|
|
1053
822
|
|
|
1054
|
-
Yerel ayar değiştiğinde URL'yi değiştirmek için `useLocale` kancasından sağlanan `onLocaleChange` prop'unu kullanabilirsiniz. Paralel olarak, URL yolunu güncellemek için `useLocation` ve `useNavigate` kancalarını
|
|
823
|
+
Yerel ayar değiştiğinde URL'yi değiştirmek için `useLocale` kancasından sağlanan `onLocaleChange` prop'unu kullanabilirsiniz. Paralel olarak, URL yolunu güncellemek için `react-router-dom`'dan `useLocation` ve `useNavigate` kancalarını kullanabilirsiniz.
|
|
1055
824
|
|
|
1056
825
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
1057
826
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -1263,7 +1032,7 @@ Aşağıda **güncellenmiş Adım 9** açıklamalar ve iyileştirilmiş kod örn
|
|
|
1263
1032
|
|
|
1264
1033
|
### (İsteğe Bağlı) Adım 9: HTML Dil ve Yön Niteliklerini Değiştirin
|
|
1265
1034
|
|
|
1266
|
-
Uygulamanız birden fazla dili desteklediğinde, geçerli yerel ayar ile eşleşmesi için `<html>` etiketinin `lang` ve `dir` niteliklerini güncellemek önemlidir. Bunu yapmak şunları sağlar:
|
|
1035
|
+
Uygulamanız birden fazla dili desteklediğinde, geçerli yerel ayar ile eşleşmesi için `<html>` etiketinin `lang` ve `dir` niteliklerini güncellemek çok önemlidir. Bunu yapmak şunları sağlar:
|
|
1267
1036
|
|
|
1268
1037
|
- **Erişilebilirlik**: Ekran okuyucular ve yardımcı teknolojiler, içeriği doğru şekilde telaffuz etmek ve yorumlamak için doğru `lang` niteliğine güvenir.
|
|
1269
1038
|
- **Metin İşleme**: `dir` (yön) niteliği, metnin doğru sırada işlenmesini sağlar (örneğin, İngilizce için soldan sağa, Arapça veya İbranice için sağdan sola), okunabilirlik için gereklidir.
|
|
@@ -1277,13 +1046,13 @@ Geçerli yerel ayara göre HTML niteliklerini yöneten özel bir kanca oluşturu
|
|
|
1277
1046
|
|
|
1278
1047
|
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
1279
1048
|
import { useEffect } from "react";
|
|
1280
|
-
import { useLocale } from "
|
|
1049
|
+
import { useLocale } from "intlayer";
|
|
1281
1050
|
import { getHTMLTextDir } from "intlayer";
|
|
1282
1051
|
|
|
1283
1052
|
/**
|
|
1284
1053
|
* Geçerli yerel ayara göre HTML <html> etiketinin `lang` ve `dir` niteliklerini günceller.
|
|
1285
1054
|
* - `lang`: Tarayıcılara ve arama motorlarına sayfanın dilini bildirir.
|
|
1286
|
-
* - `dir`:
|
|
1055
|
+
* - `dir`: Doğru okuma sırasını sağlar (örneğin, İngilizce için 'ltr', Arapça için 'rtl').
|
|
1287
1056
|
*
|
|
1288
1057
|
* Bu dinamik güncelleme, uygun metin işleme, erişilebilirlik ve SEO için gereklidir.
|
|
1289
1058
|
*/
|
|
@@ -1291,7 +1060,7 @@ export const useI18nHTMLAttributes = () => {
|
|
|
1291
1060
|
const { locale } = useLocale();
|
|
1292
1061
|
|
|
1293
1062
|
useEffect(() => {
|
|
1294
|
-
// Geçerli yerel ayara dil niteliğini
|
|
1063
|
+
// Geçerli yerel ayara dil niteliğini güncelle
|
|
1295
1064
|
document.documentElement.lang = locale;
|
|
1296
1065
|
|
|
1297
1066
|
// Geçerli yerel ayara göre metin yönünü ayarla
|
|
@@ -1308,7 +1077,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1308
1077
|
/**
|
|
1309
1078
|
* Geçerli yerel ayara göre HTML <html> etiketinin `lang` ve `dir` niteliklerini günceller.
|
|
1310
1079
|
* - `lang`: Tarayıcılara ve arama motorlarına sayfanın dilini bildirir.
|
|
1311
|
-
* - `dir`:
|
|
1080
|
+
* - `dir`: Doğru okuma sırasını sağlar (örneğin, İngilizce için 'ltr', Arapça için 'rtl').
|
|
1312
1081
|
*
|
|
1313
1082
|
* Bu dinamik güncelleme, uygun metin işleme, erişilebilirlik ve SEO için gereklidir.
|
|
1314
1083
|
*/
|
|
@@ -1316,10 +1085,10 @@ export const useI18nHTMLAttributes = () => {
|
|
|
1316
1085
|
const { locale } = useLocale();
|
|
1317
1086
|
|
|
1318
1087
|
useEffect(() => {
|
|
1319
|
-
//
|
|
1088
|
+
// Dil niteliğini geçerli yerel ayara güncelle
|
|
1320
1089
|
document.documentElement.lang = locale;
|
|
1321
1090
|
|
|
1322
|
-
//
|
|
1091
|
+
// Metin yönünü geçerli yerel ayara göre ayarla
|
|
1323
1092
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1324
1093
|
}, [locale]);
|
|
1325
1094
|
};
|
|
@@ -1327,13 +1096,13 @@ export const useI18nHTMLAttributes = () => {
|
|
|
1327
1096
|
|
|
1328
1097
|
```jsx fileName="src/hooks/useI18nHTMLAttributes.csx" codeFormat="commonjs"
|
|
1329
1098
|
const { useEffect } = require("react");
|
|
1330
|
-
const { useLocale } = require("react-intlayer";
|
|
1099
|
+
const { useLocale } = require("react-intlayer");
|
|
1331
1100
|
const { getHTMLTextDir } = require("intlayer");
|
|
1332
1101
|
|
|
1333
1102
|
/**
|
|
1334
1103
|
* Geçerli yerel ayara göre HTML <html> etiketinin `lang` ve `dir` niteliklerini günceller.
|
|
1335
1104
|
* - `lang`: Tarayıcılara ve arama motorlarına sayfanın dilini bildirir.
|
|
1336
|
-
* - `dir`:
|
|
1105
|
+
* - `dir`: Doğru okuma sırasını sağlar (örneğin, İngilizce için 'ltr', Arapça için 'rtl').
|
|
1337
1106
|
*
|
|
1338
1107
|
* Bu dinamik güncelleme, uygun metin işleme, erişilebilirlik ve SEO için gereklidir.
|
|
1339
1108
|
*/
|
|
@@ -1341,10 +1110,10 @@ const useI18nHTMLAttributes = () => {
|
|
|
1341
1110
|
const { locale } = useLocale();
|
|
1342
1111
|
|
|
1343
1112
|
useEffect(() => {
|
|
1344
|
-
//
|
|
1113
|
+
// Dil niteliğini geçerli yerel ayara güncelle
|
|
1345
1114
|
document.documentElement.lang = locale;
|
|
1346
1115
|
|
|
1347
|
-
//
|
|
1116
|
+
// Metin yönünü geçerli yerel ayara göre ayarla
|
|
1348
1117
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1349
1118
|
}, [locale]);
|
|
1350
1119
|
};
|
|
@@ -1427,15 +1196,15 @@ Bu değişiklikleri uygulayarak uygulamanız şunları sağlayacak:
|
|
|
1427
1196
|
- **Metin yönü** (`dir`) niteliği, farklı okuma sıralarına sahip diller için okunabilirliği ve kullanılabilirliği geliştirecek.
|
|
1428
1197
|
- Daha **erişilebilir** bir deneyim sağlayacak, çünkü yardımcı teknolojiler bu niteliklere optimum şekilde çalışmak için güvenir.
|
|
1429
1198
|
|
|
1430
|
-
### (İsteğe Bağlı) Adım 10: Yerelleştirilmiş Bağlantı Bileşeni
|
|
1199
|
+
### (İsteğe Bağlı) Adım 10: Yerelleştirilmiş Bağlantı Bileşeni Oluşturma
|
|
1431
1200
|
|
|
1432
|
-
Uygulamanızın
|
|
1201
|
+
Uygulamanızın navigasyonunun geçerli yerel ayara uygun olmasını sağlamak için özel bir `Link` bileşeni oluşturabilirsiniz. Bu bileşen, dahili URL'lerin önüne otomatik olarak geçerli dili ekler. Örneğin, Fransızca konuşan bir kullanıcı "Hakkında" sayfasına giden bir bağlantıya tıkladığında, `/about` yerine `/fr/about` adresine yönlendirilir.
|
|
1433
1202
|
|
|
1434
1203
|
Bu davranış çeşitli nedenlerle kullanışlıdır:
|
|
1435
1204
|
|
|
1436
|
-
- **SEO ve Kullanıcı Deneyimi**: Yerelleştirilmiş URL'ler, arama motorlarının dil
|
|
1437
|
-
- **Tutarlılık**: Uygulamanız boyunca yerelleştirilmiş bir bağlantı kullanarak,
|
|
1438
|
-
- **Bakım Kolaylığı**:
|
|
1205
|
+
- **SEO ve Kullanıcı Deneyimi**: Yerelleştirilmiş URL'ler, arama motorlarının dil özelindeki sayfaları doğru şekilde indekslemesine yardımcı olur ve kullanıcılara tercih ettikleri dilde içerik sunar.
|
|
1206
|
+
- **Tutarlılık**: Uygulamanız boyunca yerelleştirilmiş bir bağlantı kullanarak, gezinmenin mevcut yerel ayar içinde kalmasını garanti eder, beklenmedik dil değişimlerini önlersiniz.
|
|
1207
|
+
- **Bakım Kolaylığı**: Yerelleştirme mantığını tek bir bileşende merkezileştirmek, URL yönetimini basitleştirir ve uygulamanız büyüdükçe kod tabanınızı daha kolay yönetilebilir ve genişletilebilir hale getirir.
|
|
1439
1208
|
|
|
1440
1209
|
Aşağıda TypeScript'te yerelleştirilmiş bir `Link` bileşeninin uygulanması verilmiştir:
|
|
1441
1210
|
|
|
@@ -1448,30 +1217,29 @@ import {
|
|
|
1448
1217
|
} from "react";
|
|
1449
1218
|
import { useLocale } from "react-intlayer";
|
|
1450
1219
|
|
|
1451
|
-
export interface LinkProps
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
> {}
|
|
1220
|
+
export interface LinkProps extends DetailedHTMLProps<
|
|
1221
|
+
AnchorHTMLAttributes<HTMLAnchorElement>,
|
|
1222
|
+
HTMLAnchorElement
|
|
1223
|
+
> {}
|
|
1456
1224
|
|
|
1457
1225
|
/**
|
|
1458
|
-
* Verilen URL'nin harici olup olmadığını
|
|
1459
|
-
* URL http:// veya https:// ile başlıyorsa harici olarak kabul edilir.
|
|
1226
|
+
* Verilen URL'nin harici olup olmadığını kontrol eden yardımcı işlev.
|
|
1227
|
+
* URL http:// veya https:// ile başlıyorsa, harici olarak kabul edilir.
|
|
1460
1228
|
*/
|
|
1461
1229
|
export const checkIsExternalLink = (href?: string): boolean =>
|
|
1462
1230
|
/^https?:\/\//.test(href ?? "");
|
|
1463
1231
|
|
|
1464
1232
|
/**
|
|
1465
|
-
* Geçerli yerel ayara göre href
|
|
1466
|
-
* Dahili bağlantılar için
|
|
1467
|
-
* Bu,
|
|
1233
|
+
* Geçerli yerel ayara göre href özniteliğini uyarlayan özel bir Link bileşeni.
|
|
1234
|
+
* Dahili bağlantılar için, URL'yi yerel ayar ile öneklemek üzere `getLocalizedUrl` kullanır (örneğin, /fr/about).
|
|
1235
|
+
* Bu, gezinmenin aynı yerel bağlamda kalmasını sağlar.
|
|
1468
1236
|
*/
|
|
1469
1237
|
export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
1470
1238
|
({ href, children, ...props }, ref) => {
|
|
1471
1239
|
const { locale } = useLocale();
|
|
1472
1240
|
const isExternalLink = checkIsExternalLink(href);
|
|
1473
1241
|
|
|
1474
|
-
//
|
|
1242
|
+
// Bağlantı dahiliyse ve geçerli bir href sağlanmışsa, yerelleştirilmiş URL'yi al.
|
|
1475
1243
|
const hrefI18n =
|
|
1476
1244
|
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
|
|
1477
1245
|
|
|
@@ -1561,23 +1329,23 @@ Link.displayName = "Link";
|
|
|
1561
1329
|
|
|
1562
1330
|
#### Nasıl Çalışır
|
|
1563
1331
|
|
|
1564
|
-
- **Harici Bağlantıları Algılama**:
|
|
1332
|
+
- **Harici Bağlantıları Algılama**:
|
|
1565
1333
|
Yardımcı işlev `checkIsExternalLink`, bir URL'nin harici olup olmadığını belirler. Harici bağlantılar değişmeden bırakılır çünkü yerelleştirmeye ihtiyaçları yoktur.
|
|
1566
1334
|
|
|
1567
|
-
- **Geçerli Yerel Ayarı Alma**:
|
|
1335
|
+
- **Geçerli Yerel Ayarı Alma**:
|
|
1568
1336
|
`useLocale` kancası geçerli yerel ayarı sağlar (örneğin, `fr` Fransızca için).
|
|
1569
1337
|
|
|
1570
|
-
- **URL'yi Yerelleştirme**:
|
|
1571
|
-
Dahili bağlantılar için (yani harici olmayan), `getLocalizedUrl
|
|
1338
|
+
- **URL'yi Yerelleştirme**:
|
|
1339
|
+
Dahili bağlantılar için (yani harici olmayan), `getLocalizedUrl` URL'yi geçerli yerel ayar ile otomatik olarak önekler. Bu, kullanıcınız Fransızca ise, `href` olarak `/about` geçildiğinde bunun `/fr/about`'a dönüşeceği anlamına gelir.
|
|
1572
1340
|
|
|
1573
|
-
- **Bağlantıyı Döndürme**:
|
|
1341
|
+
- **Bağlantıyı Döndürme**:
|
|
1574
1342
|
Bileşen, yerelleştirilmiş URL ile bir `<a>` etiketi döndürür, böylece navigasyon yerel ayar ile tutarlı kalır.
|
|
1575
1343
|
|
|
1576
|
-
Bu `Link` bileşenini uygulamanız boyunca entegre ederek, dil farkındalığı olan tutarlı bir kullanıcı deneyimi
|
|
1344
|
+
Bu `Link` bileşenini uygulamanız boyunca entegre ederek, dil farkındalığı olan tutarlı bir kullanıcı deneyimi sağlarsınız ve aynı zamanda iyileştirilmiş SEO ve kullanılabilirlik avantajlarından yararlanırsınız.
|
|
1577
1345
|
|
|
1578
1346
|
### TypeScript Yapılandırın
|
|
1579
1347
|
|
|
1580
|
-
Intlayer, modül genişletmesi kullanarak TypeScript avantajlarından yararlanır.
|
|
1348
|
+
Intlayer, modül genişletmesi kullanarak TypeScript avantajlarından yararlanır ve kod tabanınızı daha güçlü hale getirir.
|
|
1581
1349
|
|
|
1582
1350
|

|
|
1583
1351
|
|
|
@@ -1597,9 +1365,9 @@ Otomatik oluşturulan türleri TypeScript yapılandırmanıza dahil edin.
|
|
|
1597
1365
|
|
|
1598
1366
|
### Git Yapılandırması
|
|
1599
1367
|
|
|
1600
|
-
Intlayer tarafından oluşturulan
|
|
1368
|
+
Intlayer tarafından oluşturulan dosyaların yok sayılması önerilir. Bu, bu dosyaların Git deponuza işlenmesini önlemenize olanak tanır.
|
|
1601
1369
|
|
|
1602
|
-
Bunu yapmak için `.gitignore` dosyanıza aşağıdaki talimatları
|
|
1370
|
+
Bunu yapmak için `.gitignore` dosyanıza aşağıdaki talimatları ekleyebilirsiniz:
|
|
1603
1371
|
|
|
1604
1372
|
```plaintext
|
|
1605
1373
|
# Intlayer tarafından oluşturulan dosyaları yok say
|
|
@@ -1608,23 +1376,21 @@ Bunu yapmak için `.gitignore` dosyanıza aşağıdaki talimatları ekleyin:
|
|
|
1608
1376
|
|
|
1609
1377
|
### VS Code Uzantısı
|
|
1610
1378
|
|
|
1611
|
-
Intlayer ile geliştirme deneyiminizi iyileştirmek için resmi **Intlayer VS Code Uzantısı**'nı
|
|
1379
|
+
Intlayer ile geliştirme deneyiminizi iyileştirmek için resmi **Intlayer VS Code Uzantısı**'nı kurabilirsiniz.
|
|
1612
1380
|
|
|
1613
1381
|
[VS Code Marketplace'ten yükleyin](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1614
1382
|
|
|
1615
1383
|
Bu uzantı şunları sağlar:
|
|
1616
1384
|
|
|
1617
1385
|
- **Çeviri anahtarları için otomatik tamamlama**.
|
|
1618
|
-
- **Eksik çeviriler için gerçek zamanlı hata
|
|
1386
|
+
- **Eksik çeviriler için gerçek zamanlı hata tespiti**.
|
|
1619
1387
|
- **Çevrilmiş içeriğin satır içi önizlemeleri**.
|
|
1620
|
-
- **Çevirileri kolayca oluşturmak ve güncellemek için hızlı
|
|
1388
|
+
- **Çevirileri kolayca oluşturmak ve güncellemek için hızlı işlemler**.
|
|
1621
1389
|
|
|
1622
|
-
|
|
1390
|
+
Uzantının nasıl kullanılacağına dair daha fazla ayrıntı için [Intlayer VS Code Uzantısı dokümantasyonuna](https://intlayer.org/doc/vs-code-extension) bakın.
|
|
1623
1391
|
|
|
1624
1392
|
---
|
|
1625
1393
|
|
|
1626
1394
|
### Daha Fazla İlerle
|
|
1627
1395
|
|
|
1628
|
-
Daha
|
|
1629
|
-
|
|
1630
|
-
---
|
|
1396
|
+
Daha ileri gitmek için [görsel düzenleyiciyi](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.
|