# Çok Dillilik (Language) Ayarları

TYPO3 v13'te çoklu dil desteği yapılandırmasını ve çeviri yönetimini kapsar.

---

## Site Configuration ile Dil Tanımlama

### config.yaml

`config/sites/main/config.yaml`:

```yaml
base: 'https://example.com/'
rootPageId: 1
languages:
  -
    title: Türkçe
    enabled: true
    languageId: 0
    base: /
    locale: tr_TR.UTF-8
    navigationTitle: TR
    flag: tr
    typo3Language: tr
  -
    title: English
    enabled: true
    languageId: 1
    base: /en/
    locale: en_US.UTF-8
    navigationTitle: EN
    flag: gb
    typo3Language: default
    fallbackType: strict
    fallbacks: '0'
  -
    title: Deutsch
    enabled: true
    languageId: 2
    base: /de/
    locale: de_DE.UTF-8
    navigationTitle: DE
    flag: de
    typo3Language: de
    fallbackType: fallback
    fallbacks: '1,0'
```

### Dil Parametreleri

| Parametre | Açıklama |
|-----------|----------|
| `languageId` | Benzersiz dil kimliği (0 = varsayılan) |
| `base` | Dil için URL ön eki |
| `locale` | PHP locale ayarı |
| `navigationTitle` | Dil seçicide kısa gösterim |
| `flag` | Bayrak ikonu (ISO ülke kodu) |
| `typo3Language` | TYPO3 çeviri anahtarı |
| `fallbackType` | Çeviri bulunamadığında davranış |
| `fallbacks` | Yedek dil sırası (languageId'ler) |

### Fallback Türleri

| Tür | Açıklama |
|-----|----------|
| `strict` | Çeviri yoksa sayfa gösterilmez (404) |
| `fallback` | Belirtilen dil sırasına göre yedek kullanır |
| `free` | İçerik bağımsız, her dilde farklı içerik |

---

## Dil Dosyaları (XLIFF)

### Dizin Yapısı

```
Resources/Private/Language/
├── locallang.xlf            # Varsayılan dil (İngilizce)
├── tr.locallang.xlf         # Türkçe çeviriler
└── de.locallang.xlf         # Almanca çeviriler
```

### locallang.xlf (Varsayılan)

```xml
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" datatype="plaintext" original="messages">
        <header/>
        <body>
            <trans-unit id="header.title">
                <source>Website Title</source>
            </trans-unit>
            <trans-unit id="nav.home">
                <source>Home</source>
            </trans-unit>
            <trans-unit id="nav.about">
                <source>About Us</source>
            </trans-unit>
            <trans-unit id="footer.copyright">
                <source>All rights reserved.</source>
            </trans-unit>
        </body>
    </file>
</xliff>
```

### tr.locallang.xlf (Türkçe)

```xml
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" target-language="tr" datatype="plaintext" original="messages">
        <header/>
        <body>
            <trans-unit id="header.title">
                <source>Website Title</source>
                <target>Web Sitesi Başlığı</target>
            </trans-unit>
            <trans-unit id="nav.home">
                <source>Home</source>
                <target>Ana Sayfa</target>
            </trans-unit>
            <trans-unit id="nav.about">
                <source>About Us</source>
                <target>Hakkımızda</target>
            </trans-unit>
            <trans-unit id="footer.copyright">
                <source>All rights reserved.</source>
                <target>Tüm hakları saklıdır.</target>
            </trans-unit>
        </body>
    </file>
</xliff>
```

---

## Fluid'de Çeviri Kullanımı

```html
<!-- Basit çeviri -->
<f:translate key="LLL:EXT:my_site_package/Resources/Private/Language/locallang.xlf:header.title" />

<!-- Extension adı ile kısa yol -->
<f:translate key="nav.home" extensionName="MySitePackage" />

<!-- Varsayılan değer ile -->
<f:translate key="nav.home" extensionName="MySitePackage" default="Ana Sayfa" />

<!-- Argüman ile -->
<f:translate key="welcome" extensionName="MySitePackage" arguments="{0: userName}" />
```

---

## Dil Seçici Menüsü

### TypoScript

```typoscript
page.10.dataProcessing {
    40 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
    40 {
        languages = auto
        as = languageMenu
    }
}
```

### Fluid Partial

`Resources/Private/Partials/Navigation/LanguageMenu.html`:

```html
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
      data-namespace-typo3-fluid="true">

<f:if condition="{languageMenu}">
    <nav class="language-switcher" aria-label="Dil Seçici">
        <ul class="flex space-x-2">
            <f:for each="{languageMenu}" as="lang">
                <li>
                    <f:if condition="{lang.available}">
                        <f:then>
                            <a href="{lang.link}"
                               hreflang="{lang.hreflang}"
                               class="px-2 py-1 rounded {f:if(condition: lang.active, then: 'bg-primary text-white', else: 'bg-gray-200 text-gray-700 hover:bg-gray-300')}">
                                {lang.navigationTitle}
                            </a>
                        </f:then>
                        <f:else>
                            <span class="px-2 py-1 text-gray-400 cursor-not-allowed">
                                {lang.navigationTitle}
                            </span>
                        </f:else>
                    </f:if>
                </li>
            </f:for>
        </ul>
    </nav>
</f:if>

</html>
```

---

## hreflang Meta Etiketleri

SEO için her sayfada hreflang etiketleri ekleyin:

```html
<f:for each="{languageMenu}" as="lang">
    <f:if condition="{lang.available}">
        <link rel="alternate" hreflang="{lang.hreflang}" href="{lang.link}" />
    </f:if>
</f:for>
```

---

## İçerik Çevirisi (Backend)

### Sayfa Çevirisi

1. **Web > Page** modülüne gidin
2. Üstteki dil seçiciden hedef dili seçin
3. **Translate** butonuna tıklayın
4. "Translate" veya "Copy" seçeneklerinden birini seçin:
   - **Translate**: Bağlı çeviri (connected mode), orijinal ile senkron
   - **Copy**: Bağımsız kopya (free mode)

### İçerik Çevirisi

1. İlgili sayfada dil seçiciden hedef dili seçin
2. İçerik elemanı yanındaki **Translate** butonuna tıklayın
3. Çeviriyi düzenleyin

---

## CLI Dil Komutları

```bash
# Dil paketlerini güncelle
ddev exec vendor/bin/typo3 language:update

# Belirli bir dili güncelle
ddev exec vendor/bin/typo3 language:update tr

# Mevcut dilleri listele
ddev exec vendor/bin/typo3 language:update --list
```

---

## Kaynaklar

- [TYPO3 Site Languages](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/AddLanguages.html)
- [XLIFF Format](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Localization/Xliff.html)
